Controle de luz com LDR e Arduino
Utilize LDR e Arduino para montar um sistema que acende as luzes ao escurecer. Esse é um circuito bem simples de montar e que utiliza pouquíssimos componentes. Entre eles, um componente barato e fácil de encontrar: o LDR (Light Dependent Resistor, ou Resistor Dependente de Luz).
O LDR, como o próprio nome diz, é um resistor cuja resistência varia em função da luminosidade que incide sobre ele, devido ao material fotossensível que cobre o componente.
Como funciona o LDR
Ao iluminarmos um LDR, a sua resistência apresenta valores muito baixos. Ao cortarmos a iluminação, a resistência sobe. Observe isso na prática nas fotos abaixo:
Com incidência de luz no LDR (imagem da esquerda), a resistência medida é baixa. Cobrindo parcialmente o LDR (imagem da direita) ocorre o efeito contrário, ou seja, o aumento da resistência.
Conectando o LDR no Arduino
Conhecendo os princípios básicos do componente, podemos montar um circuito com LDR e Arduino, onde o led vai acender em um ambiente escuro, e apagar em um ambiente claro. Conectamos o led na porta digital 10 e o LDR na porta analógica A5:
O programa para este circuito lê o valor da porta analógica (que deve estar na faixa de 0 a 1024), verificando se o valor é maior do que 500 (LDR encoberto) e consequentemente acendendo o led.
Usei no meu circuito um resistor de 330 ohms para o led e de 10K para o LDR. Caso o seu circuito não funcione adequadamente, ajuste esses valores:
//Programa: LDR - Sensor de Iluminação //Autor: Arduino e Cia int portaLed = 10; //Porta a ser utilizada para ligar o led int portaLDR = A5; //Porta analógica utilizada pelo LDR void setup() { pinMode(portaLed, OUTPUT); //Define a porta do Led como saída } void loop() { int estado = analogRead(portaLDR); //Lê o valor fornecido pelo LDR //Caso o valor lido na porta analógica seja maior do que //800, acende o LED //Ajuste o valor abaixo de acordo com o seu circuito if (estado > 500) { digitalWrite(portaLed, HIGH); } else //Caso contrário, apaga o led { digitalWrite(portaLed, LOW); } }
E você lembra deste post sobre dimmer usando potenciômetro? Pois bem, podemos utilizar o circuito acima para obter o mesmo efeito de dimmer: quanto mais encoberto estiver o LDR, maior será a luz emitida pelo LED:
//Projeto: Controle de luminosidade de led com LDR //Autor: Arduino e Cia int pinoled = 10; //Pino ligado ao anodo do led int pinopot = 5; //Pino ligado ao LDR int valorpot = 0; //Armazena valor lido do LDR, entre 0 e 1023 float luminosidade = 0; //Valor de luminosidade do led void setup() { Serial.begin(9600); //Inicializa a serial pinMode(pinoled, OUTPUT); //Define o pino do led como saída pinMode(pinopot, INPUT); //Define o pino do LDR como entrada } void loop() { //Le o valor - analogico - do LDR valorpot = analogRead(pinopot); //Converte o valor lido do LDR luminosidade = map(valorpot, 0, 1023, 0, 255); Serial.print("Valor lido do LDR : "); //Mostra o valor lido do LDR no monitor serial Serial.print(valorpot); Serial.print(" = Luminosidade : "); //Mostra o valor da luminosidade no monitor serial Serial.println(luminosidade); //Acende o led com luminosidade variável analogWrite(pinoled, luminosidade); }
Estes são dois exemplos simples de utilização do LDR com Arduino, mas que você pode usar para acionar outros dispositivos. Experimente colocar no lugar do LED um módulo relé para acionar, por exemplo, uma lâmpada comum ao anoitecer.
Nao funciona, qualidade pessima, com sensibilidade minima! Nao façam
Boa tarde,
Todos os circuitos apresentados aqui no Arduino e Cia foram testados exatamente do jeito que foram publicados. Erros podem aparecer dependendo do material utilizado, diferença em especificações, etc.
Lembramos que os circuitos são muito utilizados para conhecimentos de componentes do Arduino e fins didáticos.
Abraço e obrigado pela sua contribuição !
Tem como implementar um sensor pir para detectar presença e um controle ir para ligar e desligar o led tambem
Bom dia,
Tem sim, você pode juntar as informações sobre esse artigo do sensor de presença :
http://www.arduinoecia.com.br/2014/06/sensor-presenca-modulo-pir-dyp-me003.html
E esse que eu utilizo um sensor IR TCRT5000 :
http://www.arduinoecia.com.br/2013/10/sensor-optico-reflexivo-tcrt5000.html
Abraço !
montei como apresentado aqui e funcionou muito bem. legal
Montei, funcionou legal!!! todos os projetos com Arduíno requerem conhecimento básico em eletrônica, porém para aplicações específicas com precisão e sensibilidade o conhecimentos de sistemas de controle é fundamental.
Também montei e funcionou muito bem. Está inclusive servindo de base para um estudo;
funcionou super bem!!
Gostaria de saber se alguem tem esquema de algum circuito com ldr que possa ler a turbides da agua, ou seja, se ela estiver suja não aciona uma bomba por exemplo e se tiver limpa sim,aciona a bomba.
grato.
Boa tarde Marcelo,
Interessante esse projeto. Não tenho nada pronto com relação à isso, mas eu acho que nesse caso você poderia construir alguma solução com um ldr no fundo do tanque/caixa, e uma luz direcionada (sugiro um módulo laser) para verificar se a água está suja ou não.
Essa solução depende de vários testes e ajustes, mas a idéia do laser pode ser um ponto de partida.
Abraço !
Boa noite! Nesse caso um sensor infravermelho não seria o mais ideal não??
Gostei da ideia do colega e quero aprimorar.
Boa tarde amigos,
Desculpe duplicar o post, mas o anterior não ficou adequado. na verdade, gostaria de saber se tem como controlar a rotação de um ventilador AC 127V para uma faixa de luminosidades lidas de um LDR e não um liga/desliga como o descrito neste tópico (http://blog.filipeflop.com/modulos/controle-modulo-rele-arduino.html#comment-14520). Trata-se da aplicação do Arduino como PID, para adequar o comportamento de acordo com a variação do Set-point.
Desde já grato pela atenção e parabéns pelo site!
Quais os ajustes devo fazer nesse circuito para controlar o brilho de uma lâmpada de 24V por exemplo? O LDR varia gradativamente a sua resistência de acordo com a luminosidade? Quero transformar essa variação gradativa numa variação proporcional na lâmpada.
Boa tarde Pedro,
Exato, esse é o princípio do LDR, variar a resistência de acordo com a luminosidade. Dependendo do tipo de lâmpada que vc for utilizar, vai precisar de um circuito auxiliar.
Abraço !
Olá, estou com uma duvida, gostaria de por varios LEDs tentei por ' int Led = 8; 9; 10; ' e ' int Led = 8, 9, 10; ' mas nada disso funcionou,
Agradeco desde ja.
Oi Victor,
Coloque assim:
int led1 = 8;
int led2 = 9;
int led3 =10;
E assim por diante.
Abraço!
Ola amigo bom dia, sou curioso em eletronica e a pouco tempo começei a adquirir algumas placas e sensores Arduino.
Gostaria de saber se é possivel me ajudar estou querendo fazer um circuito que possa estar controlando um refletor de led que tenho aqui no meu quintal, a idéia é o seguinte:
Tenho uma pequena placa Solar que carrega uma bateria e me fornece 12V ok, o que pretendo fazer é um circuito usando um LDR para ligar o circuito ao escurecer e assim que ligar uma saida PWM do Arduino no valor maximo e depois de algum tempo ele diminua os pulsos pela metade e depois de mais um certo tempo ele desliga, fazendo assim eu ter um melhor aproveitamento da carga da bateria. Se puder me ajudar ou indicar alguma coisa neste sentido que possa estar usando ficarei muito Grato. Obrigado
Abraço HENRIQUE
Bom dia,
Você pode utilizar essa mesma solução do "dimmer", só precisa ver como integrar isso ao refletor de led que vc tem.
Abraço!
Boa noite! Belo tutorial! Como eu consigo achar a função transferência deste modelo? Obrigado!
Bom dia,
Não entendi a pergunta, o que é função transferência ? :/
Abraço!
Boa noite amigo, esse primeiro esquema junto a um relé srd 5v, no caso pra acionar lampadas de 127, daria certo?
Boa tarde,
Daria sim, sem problemas.
Abraço!
Olá, o valor da luminosidade é em que unidade?
Boa tarde,
O LDR apenas varia a resistência de acordo com a luz, creio que com ele você não vai ter muita precisão em valores de luminosidade. Para esse tipo de medição, utiliza um sensor de luz como esse:
http://www.filipeflop.com/pd-152bd1-sensor-de-luz-tsl2561-lux-luminosidade.html
Abraço!
Saudações,
gostaria de fazer um disparador de câmera DSLR, para captar raios. A ideia é colocar um LDR na ocular do obturador da câmera, e quando houver um clarão do raio, o arduino dispare o clique. Pôrem estou em duvida se um LDR é a melhor opção de sensor para essa aplicação.
Abraços
Bom dia,
Acho que vai depender da intensidade do raio, e o local onde você vai colocar a câmera. talvez se você "direcionar" o LDR para o céu, utilizando um tubo, ajude. Não entendo muito dessa parte de fotografia, mas é uma ideia.
Existe também esse sensor de luz aqui, que eu pretendo fazer um post em breve. É mais preciso que um LDR:
http://www.filipeflop.com/pd-152bd1-sensor-de-luz-tsl2561-lux-luminosidade.html
Se puder depois me falar qual solução funcionou pra vc, seria legal para compartilhar com os outros leitores do blog. 🙂
Abraço!
Bom dia, gostaria de saber como poderia fazer um carrinho seguidor de linha preta
Boa noite, estou com um problema na programação. Não sei como comparar duas variáveis "char".Eu tentei comparar assim:
Considerando que as variáveis letra e resposta sejam char.
if(letra == resposta){
resultado++;
}
Mas n dá certo, msm q as variáveis sejam diferentes o contador aumenta.
Boa noite.Parabéns pelo post,me ajudou muito.Obrigado
Opa. Valeu. Abraço! 🙂
Olá. Boa tarde. Será que pode me dar uma dica? Estou tentando montar um circuito simples com o LDR e arduino com a finalidade apenas de determinar o horário da aurora e do ocaso, ou seja quando o Sol nasceu e quando se pôs. Para tanto estou registrando os valores de tensão obtidos a partir do fotoresistor. Aqui é que está o problema. Meu código só tem dado dois valores de tensão (mínima e máxima) 0,16V e 5,00V, ou seja é tudo ou nada, parece não haver para ele valores intermediários de iluminação. Será que você teria uma dica que eu pudesse testar? (obs.: estou usando o módulo pronto do LDR que vem com o potenciômetro exatamente o deste endereço http://www.filipeflop.com/pd-10fd75-sensor-de-luz-ldr.html?ct=41d97&p=3&s=1, o arduino é o mega 2560 e tudo rodando no Linux Ubuntu). O código que estou usando é bem simples. Segue abaixo o código. Desde já agradeço. Att, Luiz.
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
float sensorValue = 0.000; // value read from the pot
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
}
void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin)*0.0048875;
// print the results to the serial monitor:
Serial.print("Tensao = " );
Serial.println(sensorValue,2);
delay(1000);
}
Quero ligar esse LDR num raspberry, o esquema seria o mesmo, apenas mudando a porta A5 por uma GPIO? E sobre a entrada, posso usar uma de 3.3v ou é necessário 5v para usar o LDR?
Boa noite Caio,
Você vai precisar de um conversor analógico digital.. o RPi não tem porta analógica…
Dê uma olhada nesse artigo aqui, por favor: https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/overview
Abraço!
Bom dia, queria saber se da para aumentar o brilho do LED gradativamente conforme fica mais escuro utilizando o LDR como sensor de brilho.
Se for possível, posso fazer isso como?
Oi Lucas,
Dê uma olhada nesse artigo aqui, que usa o potenciômetro.. Troque o potenciômetro pelo LDR e faça um teste.. talvez precisa de alguns ajustes na faixa de leitura, mas o principio de funcionamento é o mesmo.
http://www.arduinoecia.com.br/2013/07/dimmer-usando-portas-analogicas-para.html
Abraço!
Obg pela atenção, vou dar uma olhada, enooois
Boa noite.
Por favor, estou precisando de uma orientação para controlar a velocidade de um servo motor. É um sensor de luminosidade, e está funcionando corretamente, em 3 ângulos. Apenas quero que ele se desloque mais lentamente de um angulo a outro.
O código é o seguinte:
#include
int pinS1dir = 1; // Entrada analogica A1
float S1dir = 0; // Recebe o valor do sensor da direita
int pinS2esq = 0; // Entrada analogica A0
float S2esq = 0; // Recebe o valor do sensor da esquerda
Servo motor;
int pos = 0;
void setup()
{
motor.attach(9);
motor.write(pos);
}
void loop()
{
S1dir = analogRead(pinS1dir); // Le valores de 0 a 1023
S2esq = analogRead(pinS2esq); // Le valores de 0 a 1023
if(S2esq*0.80 >= S1dir)
{
pos = 0;
}
else if(S1dir*0.80 >= S2esq)
{
pos = 110;
}
else
{
pos = 55;
}
motor.write(pos);
delay(5000);
}
Muito Obrigado
Ola meu amigo fez com arduino um sistema de liga e deliga luz pelo computador agora ta passando pro celular so que tem uma linha de comando que um amigo dele passou e ele não me passa vcs tem essa linha de comando feito para me arrumar
Muito bom o blog !
Queria fazer uma pergunta urgente !!!
Se eu quisesse registrar o TEMPO(DATA E HORA) que o Led apaga e mandar printar na tela, como ficaria a programação ? URGENTE!!
Ola.
Implementei o acionamento deste sensor LDR no meu projeto.
Funcionou perfeito….
Mas estou tentando acionar o mesmo led que é ligado quando o ldr fica sem luminosidade também de forma remota(pagina web ethernet).
O problema que quando envio o comando pela pagina web para ligar o led que é acionado pelo ldr, o mesmo liga e desliga, não se mantém ligado. Acho que o codigo que detecta se esta claro ou escuro deliga o led pois no momento do teste esta claro .
Meu objetivo é ligar o led tanto pela variacao do ldr quanto pelo comando enviado pela pagina web.
Alguém tem alguma dica para resolver esse problema?
Senhores, bom dia. Montei esse circuito do LDR exatamente como está, mas há um problema quanto ao controle do fechamento de rele, pois ele fecha e abre inúmeras vezes quando a luminosidade transita de claro pra escuro e vice versa de forma lenta. O que posso fazer pra resolver esse "flicker"???
Desculpem-me, eu usei esse esquema e Sketch para ligar um relê em vez de um led. E está ocorrendo inúmeros fechamentos e aberturas do relê quando a luminosidade vai de claro para escuro de forma lenta, tipo quando está escurecendo. Alguém pode ajudar, obrigado.
Bom dia Marinaldo,
Você pode limitar a faixa em que o LDR vai acionar o relé usando comandos IF. Exemplo:
IF (luminosidade >0 e luminosidade <300)
{
//liga rele
//
IF (luminosidade >800 e luminosidade <1000)
{
//desliga rele
//
Nesse caso, você pode colocar algum comando entre a luminosidade de 300 e 800 para que o relé não seja acionado.
Abraço!
Adilson
Ola Gostaria de Saber como faço para quando eu passar o dedo no sensor ele mudara de cor e se eu voltar novamento ele acende outra cor e assim adiante!
Como Fose um botão aperta uma vez ele acender uma cor aperta de novo acende outra, Eu queria Fazer assim com Sensor Ldr. Poderia me ajudar queria ver a programação, e no modo ArduinoBlock
Boa tarde, gostaria de saber quais mudanças poderia fazer na programação do arduino para ao invés do led ligar e desligar com o sensor ldr ele variar entre luz forte e luz fraca sem desligar.
Bom dia!
Tente usar controle por PWM, nesse post aqui tem o que você precisa:
https://www.arduinoecia.com.br/2013/07/dimmer-com-arduino-portas-analogicas.html
Abraço!
Adilson
Olá, boa noite! Quero muito montar esse circuito aqui, mas não tenho o resistor de 10k – só um potenciômetro de eixo giratório de 10k e eu sei que eles são um tipo de resistor com resistência variável. Gostaria de saber como utilizar esse potenciômetro no circuito e se ocorre alguma mudança na programação.
Sou iniciante em eletrônica, engatinhando mesmo.