Custom Search

terça-feira, 10 de abril de 2012

Arduino + LDR (Light Dependent Resistor)



Olá povo, hoje vou fazer um pequeno exemplo de como usar um LDR (Light Dependent Resistor, ou em português Resistor Dependente de Luz).

Um LDR é um tipo de resistor cuja resistência varia conforme a intensidade de luz que incide sobre sua superfície. Portanto o LDR "transforma luz em valores de resistência".

A idéia é poder controlar a intensidade de um LED de acordo com a intensidade de luz que incide sobre o LDR, ou seja, quanto mais luz tivermos no local, menor será o brilho do LED e quanto mais escuro, maior será o brilho do LED.

Bom... então segue a lista de componentes:

1 - Arduino Duemilanove
2 - LDR 5mm
3 - LED
4 - Resistor de 10K
5 - Resistor 220
6 - Fios

O primeiro passo é fazer as devidas ligações como no circuito abaixo:




em seguida o código:

/*
***Arduino + LDR***
José Maria DVD
*/
int pinoLED = 9; // pino digital 9
int pinoLDR = 5; // pino analógico 5
int LDR = 0; // receberá o valor do LDR
int LED = 0; // valor do LED
void setup() {
Serial.begin(9600);
}
void loop(){
//O valor lido da porta será no intervalo (0 a 1023)
LDR = analogRead(pinoLDR);
//Mostra na serial
Serial.print("LDR = ");
Serial.println(LDR);
//Ajuste de valores para um melhor filtro
if(LDR > 600) LDR = 600;
else if(LDR < 100) LDR = 100;
//Tranforma uma escala de valores em outra (255 a 0).
LED = map(LDR, 100, 600, 255, 0);
analogWrite(pinoLED, LED);
delay(50);
}
Resultado final:





Veja o vídeo do funcionamento.




Observações e Comentários: 


1 - Você deverá fazer alguns ajustes dependendo da intensidade de luz no ambiente. No meu caso precisei ajustar a seguinte linha de código:


 //Ajuste de valores para um melhor filtro
  if(LDR > 600) LDR = 600;
  else if(LDR < 100) LDR = 100;
  //Tranforma uma escala de valores em outra (255 a 0).
  LED = map(LDR, 100, 600, 255, 0);
Normalmente o valor do LDR é de 0 a 1023 no entanto com os testes feito no ambiente, observei que o valor variava de 50 a 700. Portanto optei por diminuir o intervalo (100 a 600) e com isso obtive um resultado final mais concreto(o LED chegava a apagar totalmente).

 2 - Aconselho estudar um pouco sobre a função map, com ela boa parte de seus problemas serão resolvidos.

3 - O resistor de 10k é para o LDR e o de 220 é para o LED. Aconselho também estudar um pouco sobre Divisor de Tensão.

Até a próxima.



7 comentários:

Bruno de Oliveira Abinader disse...

Gostei bastante do projeto José :) Tenho um notebook Sony Vaio com sensor de luz (provavelmente usando a mesma tecnologia), porém com um conceito reverso: quanto maior a intensidade de luz do ambiente, maior será o brilho do monitor, e vice-versa. Para quem não tem um sensor de luz embutido no laptop, seria então interessante saber sobre um projeto com o Arduino como um "plugin" para o computador saber quando aumentar ou diminuir o brilho da tela (através de comandos ACPI). Bom trabalho!

José Maria DVD Filho disse...

Ótima ideia bruno. Eu fiz o inverso pois queria testar a possibilidade de fazer algo parecido com os postes de rua. Ficou um pouco parecido mas o meu foco é um robô seguidor de luz. Estou quase finalizando e com isso estou fazendo pequenos tutoriais, como o do sensor de luz, o do servo motor. em breve postarei o robô. :D

Raulzinho disse...

Pow, gostei demais dos seus usos com arduino, não conhecia o que era só ouvia falarem, depois do Encosis da Fucapi e de seu Blog, pode ter certeza que vou agora me aprofundar bastante no assunto que envolva arduino, e seu blog será minha referencia. Brigadu.!!!

José Maria DVD Filho disse...

Obrigado Raulzinho...
Com o arduino temos inúmeras possibilidades de projetos, e sempre que possível irei postar vários tutoriais. Estarei sempre a disposição para ajudar e tirar dúvidas. Obrigado pela referência e se quiser pode compartilhar o blog com seus amigos. abraço

Anônimo disse...

Sem querer "noobear" mas estou fazendo um projeto pra feira de ciencias da escola, qual o nome dessa peça branca cheia de furinhos? o código é colocado por usb? -Grato ^^

Anônimo disse...

Sem querer "noobear" mas estou fazendo um projeto pra feira de ciencias da escola, qual o nome dessa peça branca cheia de furinhos? o código é colocado por usb? -Grato ^^

José Maria DVD Filho disse...

O nome é Protoboard. Você pode comprar em qualquer loja de eletrônicos.

o código é enviado pela USB.

se precisar de ajuda, manda um e-mail josemdvdf@gmail.com