Sensor de Luz – Aprendendo a usar o LDR com Arduino

Que tal construir um dispositivo que seja capaz de detectar luz? Você pode, por exemplo, fazer uma lâmpada que ligue sozinha durante a noite. Nesse tutorial, iremos aprender a usar um componente simples e barato que pode ser usado em diversos projetos, o LDR, montando um sensor de luz com uma placa Arduino.

 

Relembrar é viver

Quem nunca se perguntou como as lâmpadas dos postes ligam sozinhas de noite? Quantas vezes, quando éramos crianças, tentamos apagar as lâmpadas deles usando um laser? Possivelmente, muitos de nós já sabíamos qual era o dispositivo que acionava as lâmpadas.

O nome do dispositivo responsável por saber a hora certa de iluminar é conhecido como fotocélula ou relé fotocélula que nada mais é que um sensor de luz. Ele recebe a luz através dessa parte transparente. Como é possível ver na imagem abaixo, a fotocélula possui um LDR que irá medir a luminosidade.

Sensor de luz com ldr Fotocélula
Exemplo de fotocélula 

Nessa fotocélula, quando o valor de luminosidade é menor do que o valor desejável, ele comuta uma chave que poderá ligar uma lâmpada, por exemplo.

LDR

O LDR, sigla em inglês de Light-Dependent Resistor, que significa resistor dependente de luz, nada mais é do que o que o próprio nome diz. Tipicamente, quanto maior a luz incidente nesse componente, menor será sua resistência.

LDR sensor de luminosidade
LDR – sensor de luminosidade

O LDR é constituído de um semicondutor de alta resistência, que ao receber uma grande quantidade de fótons oriundos da luz incidente, ele absorve elétrons que melhoram sua condutibilidade, reduzindo assim sua resistência.

Dessa forma, esse semicondutor pode assumir resistências na ordem de mega Ohm no escuro e resistência na ordem de poucas centenas quando exposto a luz.

 


Mãos à obra – Fazendo um sensor de luz com LDR

Componentes necessários:

Montando o projeto

Agora vamos conectar os componentes do projeto na protoboard. Para isso, desligue o cabo USB de seu Arduino e monte seu circuito conforme a figura a seguir.

Veja como ficou o nosso:

Arduino uno com sensor de luminosidade LDR
Esquema de montagem

Conectando o Arduino ao computador

Conecte seu Arduino ao computador e abra a IDE Arduino.

Antes de carregar um programa, você precisa selecionar qual porta você deseja usar para fazer carregar o programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

Você também precisa garantir que o tipo de placa apropriado está selecionado em Ferramentas(Tools) no submenu Placa (Board).

Programando

Crie um programa (sketch) e salve com o nome de “programa_sensor_de_luz”.

Com o seu programa salvo, escreva nele o código conforme escrito abaixo.

//Sensor de luz com LDR
 
int ledPin = 7; //Led no pino 7
int ldrPin = 0; //LDR no pino analígico 8
int ldrValor = 0; //Valor lido do LDR
 
void setup() {
 pinMode(ledPin,OUTPUT); //define a porta 7 como saída
 Serial.begin(9600); //Inicia a comunicação serial
}
 
void loop() {
 ///ler o valor do LDR
 ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023
 
 //se o valor lido for maior que 500, liga o led
 if (ldrValor>= 800) digitalWrite(ledPin,HIGH);
 // senão, apaga o led
 else digitalWrite(ledPin,LOW);
 
 //imprime o valor lido do LDR no monitor serial
 Serial.println(ldrValor);
 delay(100);
}

Após escrever o código, clique em Carregar (Upload) para que o programa seja transferido para seu Arduino.

Colocando para funcionar

Caso tenha ocorrido tudo como esperado, ao cobrir o LDR, o LED irá acender. Abra o monitor serial para verificar o que está sendo lido na entrada A0.

Sensor de luminosidade com LDR - Arduino Uno
Funcionamento do projeto


Entendendo a fundo

Entendendo o Hardware

– Resistência

Imagine que a tubulação que une os dois reservatórios tenha uma espessura menor em uma situação A que em outra em uma situação B, como na figura abaixo.

Por intuição, sabemos que, na situação A, a vazão entre os dois reservatórios será menor que na situação B.

O mesmo acontece com a corrente elétrica, existe uma propriedade chamada resistência quem tem como unidade o Ohm representado pelo símbolo grego ômega ().

O nome da unidade da resistência faz homenagem a Ohm que criou as duas leis de Ohm. Uma delas diz que:

“A corrente que flui por um circuito é diretamente proporcional à tensão e inversamente proporcional à resistência.”

Traduzindo,  a resistência limita a corrente de forma proporcional, visto que para um tensão V fixa teremos um corrente cada vez menor para uma resistência cada vez maior.

V = R * I

Sabemos que energia não se perde ou se cria, ela se transforma. A energia perdida na desaceleração dos elétrons é convertida em calor.

– Divisor de tensão

Quando temos duas resistências associadas em série temos a seguinte situação:

Vin= (R1 + R2)*Ia

Se nossa tensão é fixa (Vin = 5V), temos:

Ia =  5V / (R1 + R2)

Ou seja, a corrente é o resultado da divisão da tensão 5V pela soma da resistências.

Nesse circuitos temos um efeito interessante: temos as mesma corrente para os dois resistores mas temos uma tensão diferente em cada um.

Vr1 = Ia * R1   e   Vr2 = Ia * R2

Ou seja, a queda de tensão será maior no resistor maior.

Esse circuito é chamado de divisor de tensão. Como a corrente do circuito é calculada pela divisão da tensão total pela soma dos resistores, teremos a tensão em cima de um resistor igual a resistência desse resistor vezes a tensão total dividida pela soma dos resistores.

Ia =  5V / (R1 + R2)    e     Vr2 = Ia * R2

Vr2 = (5V / (R1 + R2)) * R2

O exemplo a seguir mostra como funciona o cálculo o para dois resistores.

Quando usamos um LDR, que é uma resistência foto-variável, podemos usar da propriedade do divisor de tensão para medir a variação da queda de tensão em cima do mesmo. Sabemos que a tensão total e a resistência total são fixas. Dessa forma, o divisor de tensão vai variar com a resistência entre A0 e GND.

Leitura do LDR

Levando em conta que quanto menos luz incidir sobre o LDR maior será sua resistência, teremos a tensão sobre o LDR e por conseguinte o valor de A0 maior com um índice de luminosidade incidente menor, isto é, num local mais escuro.

VA0 = (5V / (1K + LDR)) * LDR

  • Quanto menor luminosidade maior a resistência do LDR;
  • Quanto maior a resistência do LDR, maior a tensão em A0;
  • Então: quanto menor a luminosidade maior é a tensão em A0.

Entendendo o Software

– Lendo da entrada analógica

A leitura da entrada analógica é feita com a função analogRead, que recebe como parâmetro o pino analógico a ser lido e retorna o valor digital que representa a tensão no pino. Como o conversor analógico-digital do Arduino possui uma resolução de 10 bits, o intervalo de tensão de referência, que no nosso caso é 5 V, será dividido em 1024 pedaços (2^10) e o valor retornado pela função será o valor discreto mais próximo da tensão no pino.

ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023

O código acima lê o valor analógico de tensão no pino A0 e guarda o valor digital na variável valorLido. Supondo que o pino está com uma tensão de 2V, o valor retornado pela conversão será:

2 x 1024 / 5 = 409,6

O resultado deve ser inteiro para que nosso conversor consiga representá-lo, logo, o valor 410 será escolhido por ser o degrau mais próximo. Esse valor representa a tensão 2,001953125, inserindo um erro de 0,001953125 em nossa medida devido à limitação de nossa resolução.

Você pode ler mais sobre sinal analógico no tutorial Entradas e Saídas Analógicas.

– Lógica do programa

Em resumo, nosso programa lerá qual é o valor do sinal em A0 com o auxílio do comando analogRead(), que retornará um valor entre 0 a 1023, e o comparará com um valor de referência que em nosso caso é 800. Tendo em vista que, quanto mais escuro, maior será o valor de A0, caso A0 seja maior que o valor de referência o programa liga o LED conectado ao pino 7. Do contrário, ele apaga o LED. O programa também imprime o valor de A0 para que possamos verificar a faixa de valores e até mesmo calibrar nosso sensor.

Tente mudar o valor de referência e veja que, quanto maior esse valor, menor será sua sensibilidade.


Desafios

  1. Crie um alarme usando um buzzer e um LDR, explicado em nosso ultimo tutorial Usando buzzer com Arduino, Quando houver pouca luz, o alarme deve disparar.
  2. Usando 3 ou mais LED’s e um LDR, faça um programa que aumente o numero de LED’s acesos conforme a intensidade de luz seja menor.

Fechamento

Esperamos que tenham gostado, deixe seu comentário com duvidas, sugestões ou com a foto ou vídeo de seu projeto!! Compartilhe à vontade.

 

Apostila Arduino Básico

 

Privacy Preference Center