Detectando Luz usando um LDR com Arduino

Detectando Luz usando um LDR com Arduino

Olá pessoal! Neste projeto simples vamos utilizar um sensor para detecção de  luz com o Arduino, enviando os niveis de sinal detectados para visualização no Monitor Serial.

O sensor de luz utilizado será um LDR (Light Dependent Resistor), o qual será conectado em série com um resistor de 10kΩ, formando um divisor de tensão que enviará os valores de tensão obtidos com a variação de luminosidade no ambiente para leitura em uma porta de entrada analógica do Arduino.

Usamos o resistor de 10kΩ para formar o divisor de tensão e proteger o Arduino contra uma sobrecorrente que poderia danificá-lo. Valores diferentes de resistência também devem funcionar sem problemas, desde que não se afastem muito dos 10 kΩ originais.

Os valores lidos serão apresentados no monitor serial, mas antes de enviá-los para apresentação os mapearemos usando a função map(), para que apresentem valores numa escala entre 0 e 100, de modo a visualizarmos com mais facilidade as variações obtidas.

Circuito Esquemático

A figura a seguir mostra o diagrama esquemático de nosso sketch. Usaremos um LDR, um resistor de 10 kΩ e um Arduino Uno (funciona em outras placas também). Tanto o LDR quanto o resistor serão conectados à entrada analógica A0; caso queira utilizar outra entrada analógica, basta alterar seu valor no código do sketch (apresentado mais adiante):

Detectando Luz com Arduino e um LDR

Circuito:

A figura a seguir mostra o circuito montado em uma matriz de contatos (breadboard):

Arduino com LDR na Breadboard

Código do Sketch

const int sensorLuz = 0; // pino de entrada do LDR
int valor = 0;
int valorLido = 0;
void setup() {
 Serial.begin(9600);
 Serial.println("Lendo valores a partir de um LDR");
}
void loop() {
 valorLido = analogRead(sensorLuz);
 valor = map(valorLido,0,1023,0,100);
 Serial.println(valor);
 delay(100);
}

Entendendo o código

No código utilizado neste sketch, começamos declarando duas variáveis: valor e valorLido, que irão armazenar o valor final a ser exibido no monitor serial após o mapeamento, e o valor lido diretamente do LDR, respectivamente. Também declaramos uma constante, sensorLuz, que define o número do pino analógico a ser utilizado (pino A0).

Na função Setup() inicializamos o monitor serial e escrevemos uma mensagem que aparecerá na primeira linha da saída ("Lendo valores a partir de um LDR").

Na função principal do programa, efetuamos a leitura do valor presente na entrada analógica A0 do Arduino, advindo do divisor de tensão formado pelo LDR e pelo resistor de 10 kΩ, a qual depende da variação de luminosidade que incide sobre o sensor de luz. Esse valor lido é armazenado na variável valorLido e então mapeado para valores no intervalo entre 0 e 100, e o valor mapeado é armazenado na variável valor.

Finalmente, o valor é apresentado no monitor serial por meio do método Serial.println(), e ajustamos um delay (intervalo) de 100 ms entre as leituras, para que seja mais fácil visualizá-las.

Saída

Na figura a seguir podemos ver os valores de tensão lidos na entrada analógica A) do Arduino, mapeados para valores entre 0 e 100. A variação numérica apresentada se deu devido à movimentação de minha mão sobre o LDR, aproximando-a e afastando-a, o que acarretou na variação de luminosidade do ambiente que incidia sobre o componente. Quanto menor a luminosidade sobre o LDR, maior o valor apresentado (indicando que mais corrente o atravessava).

Monitor Serial mostrando dados do Arduino

 

É isso aí pessoal! No próximo tutorial vamos mostrar como conectar um sensor de movimento do tipo PIR (Passive Infrared) ao Arduino. Até lá!

Sobre Fábio dos Reis (1193 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Astronomia, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*