Nesse post vamos ver como acender luzes automaticamente e regular a luminosidade de um led utilizando o módulo sensor de luz, criando um dimmer com LDR.

Módulo sensor de luz LDR

O módulo funciona com alimentação de 3.3 à 5v e tem um CI comparador de tensão LM393, além de um potenciômetro para ajuste de sensibilidade.

Possui duas saídas : uma analógica (A0), que nesse post vamos utilizar para ajustar o brilho de um led, e uma digital (D0), que gera o valor 0 ou 1 na saída, e que vamos utilizar para acionar um segundo led.

Módulo LDR - Detalhes

No lado direito um led vermelho indica quando o módulo está energizado, e no lado esquerdo um led verde indica a alteração do estado da saída digital D0. Essa alteração da porta D0 pode ser regulada por meio do potenciômetro existente na placa : você determina em qual nível de luminosidade a saída D0 será acionada.

Você pode usar esse tipo de informação para controlar o acionamento de um relé que acende uma lâmpada caso escureça, ou então algum tipo de alarme que, digamos, você queira que funcione apenas durante a noite (ou durante o dia, por que não ?).

Vamos montar um circuito que vai utilizar as duas portas do módulo, sendo que a analógica vai controlar o brilho do led vermelho (será um dimmer), e a outra vai acender ou apagar um led verde conforme a regulagem feita no potenciômetro:

Circuito Arduino módulo LDR

O led vermelho está ligado à porta digital 6, que possui a função PWM (Pulse Width Modulation – Modulação por largura de pulso), e com isso podemos controlar a luminosidade do led de acordo com o valor que vamos enviar para essa porta (0 à 255).

Já o led verde vai simplesmente acender ou apagar conforme o estado da porta D0 do módulo.

Programa dimmer com módulo sensor de luz LDR

O programa lê o valor da entrada analógica A3, converte o valor lido (de 0 a 1023),para um valor de 0 a 255 e envia esse valor para a porta digital 6 (led vermelho). 

Ao ler o valor da porta digital 2, ele acende ou apaga o led verde:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Projeto : Modulo sensor de luz LDR
// Autor : Arduino e Cia
//Led vermelho ligado a porta 6 - PWM
int pinoled = 6;
//Led vermelho ligado a porta 7
int pinoled2 = 7;
//Pino ligado a porta A0 do modulo LDR
int pino_analogico_A0 = A3;
//Pino ligado a porta D0 do modulo LDR
int pino_digital_D0 = 2;
//Armazena o valor lido da porta D0
int valord0 = 0;
//Armazena valor lido da porta A0, entre 0 e 1023
int valora0 = 0;
float luminosidade = 0; //Valor de luminosidade do led
void setup()
{
//Define os pinos dos leds como saida
pinMode(pinoled, OUTPUT);
pinMode(pinoled2, OUTPUT);
//Define os pinos do modulo como entrada
pinMode(pino_analogico_A0, INPUT);
pinMode(pino_digital_D0, INPUT);
Serial.begin(9600);
}
void loop()
{
//Le o valor da porta digital do modulo
valord0 = digitalRead(2);
switch(valord0)
{
case 0:
digitalWrite(pinoled2, LOW);
break;
case 1:
digitalWrite(pinoled2, HIGH);
break;
}
//Le o valor da porta analogica do modulo
valora0 = analogRead(pino_analogico_A0);
//Converte e atribui para a variavel "luminosidade" o
//valor lido da porta analogica
luminosidade = map(valora0, 0, 1023, 0, 255);
//Mostra o valor lido do potenciometro e a luminosidade
//no Serial Monitor
Serial.print("Valor da porta analogica : ");
Serial.print(valora0);
Serial.print(" = Luminosidade : ");
Serial.println(luminosidade);
//Envia sinal analogico para a saída do led, com luminosidade variavel
analogWrite(pinoled, luminosidade);
delay(100);
}
// Projeto : Modulo sensor de luz LDR // Autor : Arduino e Cia //Led vermelho ligado a porta 6 - PWM int pinoled = 6; //Led vermelho ligado a porta 7 int pinoled2 = 7; //Pino ligado a porta A0 do modulo LDR int pino_analogico_A0 = A3; //Pino ligado a porta D0 do modulo LDR int pino_digital_D0 = 2; //Armazena o valor lido da porta D0 int valord0 = 0; //Armazena valor lido da porta A0, entre 0 e 1023 int valora0 = 0; float luminosidade = 0; //Valor de luminosidade do led void setup() { //Define os pinos dos leds como saida pinMode(pinoled, OUTPUT); pinMode(pinoled2, OUTPUT); //Define os pinos do modulo como entrada pinMode(pino_analogico_A0, INPUT); pinMode(pino_digital_D0, INPUT); Serial.begin(9600); } void loop() { //Le o valor da porta digital do modulo valord0 = digitalRead(2); switch(valord0) { case 0: digitalWrite(pinoled2, LOW); break; case 1: digitalWrite(pinoled2, HIGH); break; } //Le o valor da porta analogica do modulo valora0 = analogRead(pino_analogico_A0); //Converte e atribui para a variavel "luminosidade" o //valor lido da porta analogica luminosidade = map(valora0, 0, 1023, 0, 255); //Mostra o valor lido do potenciometro e a luminosidade //no Serial Monitor Serial.print("Valor da porta analogica : "); Serial.print(valora0); Serial.print(" = Luminosidade : "); Serial.println(luminosidade); //Envia sinal analogico para a saída do led, com luminosidade variavel analogWrite(pinoled, luminosidade); delay(100); }
// Projeto : Modulo sensor de luz LDR
// Autor : Arduino e Cia

//Led vermelho ligado a porta 6 - PWM
int pinoled = 6;  
//Led vermelho ligado a porta 7
int pinoled2 = 7;
//Pino ligado a porta A0 do modulo LDR
int pino_analogico_A0 = A3; 
//Pino ligado a porta D0 do modulo LDR
int pino_digital_D0 = 2;

//Armazena o valor lido da porta D0
int valord0 = 0;
//Armazena valor lido da porta A0, entre 0 e 1023
int valora0 = 0;  

float luminosidade = 0; //Valor de luminosidade do led

void setup()
{
   //Define os pinos dos leds como saida
   pinMode(pinoled, OUTPUT);  
   pinMode(pinoled2, OUTPUT); 
   //Define os pinos do modulo como entrada
   pinMode(pino_analogico_A0, INPUT); 
   pinMode(pino_digital_D0, INPUT);
   Serial.begin(9600);        
}

void loop()
{
  //Le o valor da porta digital do modulo
  valord0 = digitalRead(2);
  switch(valord0)
  {
    case 0:
    digitalWrite(pinoled2, LOW);
    break;
    case 1:
    digitalWrite(pinoled2, HIGH);
    break;
  }
  
  //Le o valor da porta analogica do modulo
  valora0 = analogRead(pino_analogico_A0);
  
  //Converte e atribui para a variavel "luminosidade" o
  //valor lido da porta analogica
  luminosidade = map(valora0, 0, 1023, 0, 255);  

  //Mostra o valor lido do potenciometro e a luminosidade
  //no Serial Monitor
  Serial.print("Valor da porta analogica : "); 
  Serial.print(valora0);   
  Serial.print(" = Luminosidade : ");
  Serial.println(luminosidade);  

  //Envia sinal analogico para a saída do led, com luminosidade variavel
  analogWrite(pinoled, luminosidade);  
  delay(100);
}

Carregue o programa no Arduino e teste o módulo cobrindo o LDR ou direcionando uma lanterna para o sensor, e observe a variação no acionamento dos leds.

Gostou? Confira outros posts com Arduino aqui mesmo no Arduino e Cia!

Avalie este post!