19 agosto 2014

Dimmer com o módulo sensor de luz LDR

Nesse post vamos ver como acender luzes automaticamente e regular a luminosidade de um led utilizando o módulo sensor de luz 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 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// 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.

5 comentários:

  1. a função map( ) retorna valores inteiros, logo luminosidade n precisa ser declarado como float, o mais óbvio é declarar como int.

    ResponderExcluir
  2. Amigo, estou ligando o modulo rele (arduino nano)ao inves de ligar os leds. Gostaria que você me desse uma dica pois ao acionar o LDR o rele é acionado e já configurei para delay(1) acionou rá pido mas, gostaria de mais velocidade .. Teria algum projeto especifico.. Obrigado

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Eu precisaria dar uma olhada no circuito que você está usando. tem como me enviar por email ? se puder, utilize o formulário de contato ao lado da página.

      Abraço !

      Excluir
  3. Saudações.
    Tenho aqui um sensor destes, mas com apenas três pinos: VCC, GND e OUT. Até o presente momento funcionou apenas como saída digital. Ou seja, com o meu sensor consigo ligar ou desligar alguma coisa, mas não consigo controlar o brilho de um LED ou ângulo de um servo motor. Estou correto? É apenas digital mesmo?

    ResponderExcluir
    Respostas
    1. Oi Antônio,

      Você tem o link de onde comprou esse sensor ?

      Abraço!

      Excluir