Dimmer com o módulo sensor de luz LDR - Arduino e Cia
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.
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.
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 :
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 :
// Projeto : Modulo sensor de luz LDR
//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
//Define os pinos dos leds como saida
pinMode(pinoled2, OUTPUT);
//Define os pinos do modulo como entrada
pinMode(pino_analogico_A0, INPUT);
pinMode(pino_digital_D0, INPUT);
//Le o valor da porta digital do modulo
valord0 = digitalRead(2);
switch(valord0)
//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);
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.
Postado por Arduino e Cia às 07:12
Marcadores: componentes, modulo
a função map( ) retorna valores inteiros, logo luminosidade n precisa ser declarado como float, o mais óbvio é declarar como int.
Anônimo 15 de outubro de 2014 19:34
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
Arduino e Cia 16 de outubro de 2014 12:33
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.
Antônio Lacerda 28 de julho de 2016 15:41
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?
Arduino e Cia 28 de julho de 2016 22:47
Você tem o link de onde comprou esse sensor ?
Wesley Amaro 2 de setembro de 2017 16:19
Oi, gostaria de saber se o nesse circuito apresentado o led apenas ascende e apaga, ou existe a variação da luminosidade emitida pelo LED. ?