No artigo anterior apresentamos como ligar uma lâmpada AC utilizando um relê. Dando continuidade a esse assunto, agora vamos explicar como acionar automaticamente uma lâmpada conforme a luminosidade ambiente, utilizando como sensor o LDR.
O LDR é um resistor sensível à luz que varia sua resistência conforme é alterada a intensidade luminosa que incide sobre ele. À medida que a intensidade luminosa aumenta (o ambiente fica mais claro) a sua resistência diminui para algumas dezenas de Ohms, e quando a intensidade luminosa diminui (o ambiente fica mais escuro) a sua resistência aumenta para alguns mega Ohms.
Através dessa característica pode-se utilizar esse sensor para detectar a luminosidade do ambiente, para tomar uma decisão como, por exemplo, ligar uma lâmpada, como ocorre nas fotocélulas.
Ele é um sensor de baixo custo e está presente em muitos circuitos eletrônicos que necessitam monitorar a luz ambiente. O seu uso é bem simples, onde através de um circuito divisor resistivo a variação de resistência é convertida em tensão e usada pelo circuito de controle.
Para fazer a leitura da variação de luminosidade, ou seja, a variação de resistência do LDR, é necessário montar um divisor de tensão, conforme o esquema abaixo:
Você pode montar esse circuito facilmente em um protoboard:
Através do circuito apresentado pode-se calcular o valor da tensão de saída para uma determinada resistência do LDR, através da seguinte fórmula:
Por exemplo, em uma ambiente quase escuro o LDR apresenta resistência de aproximadamente 500 KOhm, e o valor de tensão de saída será:
E em uma ambiente claro a resistência do LDR cai para aproximadamente 300 Ohm. Assim, a tensão de saída será:
Nota-se através dos cálculos que a tensão de saída do conversor aumenta quando a intensidade luminosa aumenta e diminui quando ambiente vai ficando escuro.
Para verificar o valor de conversão AD do Arduino, para a variação de temperatura podemos usar o seguinte sketch:
/* * Entrada analógica * le o valor do sensor de luminosidade e envia valor para o computador */ int sensorPin = 0; // selecione o pino de entrada ao potenciômetro int val; void setup() { Serial.begin(9600); } void loop() { val = analogRead(sensorPin); // ler o valor do potenciômetro Serial.println(val); //emvia valor para o pc delay(1000); //aguarda 1 segundo }
* le o valor do sensor de luminosidade e envia valor para o computador
int sensorPin = 0; // selecione o pino de entrada ao potenciômetro
val = analogRead(sensorPin); // ler o valor do potenciômetro
Serial.println(val); //emvia valor para o pc
Abrindo o monitor serial pode verificar a variação do valor de conversão AD.
Montagem do Circuito para Acionamento de lampada com Arduino e LDR
Agora vamos à montagem do circuito completo para controle da lâmpada com Arduino e LDR.
O sketch a seguir fará com que a lâmpada acenda quando estiver escuro, e apague quando estiver claro:
#define VALOR_ESCURO 400 // valor para ligar rele #define VALOR_CLARO 600 //valor para desligar rele const byte rele = 8; //pino do rele const byte sensorPin = 0; // selecione o pino de entrada ao potenciômetro int val; //variável auxiliar para leitura de valor void setup() { Serial.begin(9600); //inicia comunicação serial pinMode(rele,OUTPUT); //configura pino do rele como saída } void loop() { val = analogRead(sensorPin); // ler o valor do potenciômetro Serial.println(val); //envia valor para o computador if(val<VALOR_ESCURO) //se menor que valor definido { digitalWrite(rele,HIGH); //liga rele } else if(val >=VALOR_CLARO) { digitalWrite(rele,LOW); //desliga rele } delay(500); //delay de 0,5 seg }
#define VALOR_ESCURO 400 // valor para ligar rele
#define VALOR_CLARO 600 //valor para desligar rele
const byte rele = 8; //pino do rele
const byte sensorPin = 0; // selecione o pino de entrada ao potenciômetro
int val; //variável auxiliar para leitura de valor
pinMode(rele,OUTPUT); //configura pino do rele como saída
Serial.println(val); //envia valor para o computador
if(val<VALOR_ESCURO) //se menor que valor definido
digitalWrite(rele,HIGH); //liga rele
else if(val >=VALOR_CLARO)
digitalWrite(rele,LOW); //desliga rele
delay(500); //delay de 0,5 seg
Funcionamento do Arduino LDR
Inicialmente foram definidas duas constantes para o relê e para a entrada do sensor. Na função Setup o pino do relê foi configurado como saída digital. Na função loop, inicialmente é lido o valor da conversão AD no pino A0, e existe uma estrutura de decisão baseada nesse valor. Caso ele esteja abaixo do valor determinado como parâmetro para ambiente escuro (note que este valor pode ser alterado facilmente no #define), o relê é ligado. O rele só será desligado quando o valor lido for maior ou igual ao valor determinado como ambiente claro. Esse valores limites podem ser determinados através do sketch que faz a leitura do LDR, e através de alguns testes pode-se verificar os valores para as condições ambientes submetidas. Pode-se variar os valores limites para adequar a outros ambientes ou determinadas necessidades.
A leitura do LDR é bem tranquila, necessitando apenas da montagem de um divisor de tensão e a correta leitura do canal analógico. O exemplo apresentado pode ser utilizado para automação residencial para verificar a luminosidade do ambiente onde você poderá ligar uma lâmpada, ou outro dispositivo. Pode ser interessante adicionar outros recursos, como temporização, por exemplo, e as lâmpadas só poderão ficar ligadas de segunda a sexta, da hora que acenderem até as 00:00. Para isso basta acrescentar um relógio de tempo real e verificar o horário de desligar. Você pode também utilizar o LDR em conjunto com um sensor de presença em uma garagem, por exemplo, e só acender a lâmpada apenas quando tiver movimento e estiver escuro.
Existem diversas aplicações para o uso do LDR, espero que você possa aplicar em outros circuitos. Conte suas experiências e em qual aplicação pretende usar o LDR.
Wikpedia – LDR
Tutorial Arduino – FBS Eletrônica
<< Acionamento de uma lâmpada com Arduino
AnteriorAnteriorEmbarcados interview: Clive Max Maxfield
PróximoConfiguration Bits do PIC16F877APróximo
Como posso saber a unidade de medida que o programa do Arduino esta me indicando no monitor serial ?
Reply to João Antonio
Vai depender da escala de conversão que você utilizar. No caso desse artigo ele está apenas enviando o valor da conversão analógica para digital com um conversor de 10 bits.
Caros colegas! Primeiramente desculpe-me a ignorância, mas, utilizando o mesmo esquema acima, teria como alterar a luminosidade da Lâmpada de acordo com a variação da luminosidade do ambiente (um FADE com uma lâmpada ao invés de LEDs como exemplos comumente encontrados)? Grato!
Reply to André Barcelos
Olá André, com o exemplo acima só é possivel ligar e desligar a lampada. Para controlar a intensidade luminosa você precisa de um circuito com triac. Da uma olhada nesses exemplos: http://playground.arduino.cc/Main/ACPhaseControl
https://www.youtube.com/watch?v=CmU2u2kHH1U
Marcel Panzera
Eu poderia utilizar o LDR no sinal analógico para determinar a turbidez da água? Visto que a turbidez é medida em relação à quantidade de luz que ultrapassa uma quantidade de águaá
Reply to Marcel Panzera
Sim, porém você deverá ter um ambiente controlado com uma fonte de luz também controlada, além de um circuito de condicionamento de sinal para o sensor.
Da uma olhada nesses videos:
https://www.youtube.com/watch?v=IV_esqVmYGk
https://www.youtube.com/watch?v=tTkK3uVHPJc
Show Fábio!!! Muito obrigado
Eu queria saber é possível ligar um led ou motor com o ldr sendo quando tem luminosidade no lugar. ou seja acionar quando ligar a lanterna
Parabéns Pelo post, E muito bom, quando não tem onde comprar, assim distribuidores, revendedores, e outros podem compartilhar a informação. Muito bom.
Olá Fábio. Será que pode me dar uma dica? Estou tentando montar um circuito simples com o LDR e arduino com a finalidade apenas de 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… Leia mais »
Reply to Luiz C
Acredito que o ganho do operacional está muito alto. Tente calibra o potenciômetro para uma faixa maior de leitura. Você pode simular diferentes ambientes de iluminação e calibrar o circuito.