Manual
do
Maker
.
com
É incrível o mundo do cinema. Descer por uma corda para roubar uma jóia protegida por uma caixa de vidro a prova de balas, com toda a sala cercada por alarmes de interrupção laser. Não podemos reproduzir todo esse universo em casa, mas que tal fazer um desses alarmes laser? É fácil!
Para esse projeto vamos utilizar alguns ítens simples:
O objetivo é bastante simples. Apontaremos o laser para o LDR a uma certa distância. O laser irá saturar o LDR e então disparará o buzzer, que tocará o som de uma sirene. Sobre o som da sirene, escrevi um artigo explicando em detalhes como é feito com o buzzer, basta clicar nesse link.
O laser não ficará conectado à microcontroladora dessa vez. Na verdade, deixaremos o laser ligado continuamente e focaremos no LDR.
Primeiramente, LDR é o acrônimo de "Light Dependent Resistor" ou, "Resistor dependente de luz", também conhecido como fotoresistência. A leitura é analógica e será executada no pino A0 do Arduino. Tiraremos 3 amostragens e se o valor estiver saturado, disparamos o buzzer.
A leitura do pino analógico do Arduino tem 10bits, que dá um total de 1024 valores (entre 0 e 1023). O resistor de 10K será utilizado para ajudar amenizar ruídos.
Nesse outro artigo escrevi sobre o laser, acionado digitalmente por um Arduino. Dessa vez, para facilitar, o acionamento será feito diretamente por 5V fora da MCU pois o laser será passivo nesse projeto. Isto é, ele apenas se manterá aceso e depois será necessário alinhá-lo com o LDR - este, já conectado ao Arduino e devidamente funcional.
O wiring é bastante simples. Como não encontrei uma imagem ideal no google images, tive que fazer no Fritzing:
O código para esse projeto também é curto, mas interessante. Primeiro testei a lógica inversa, que é tocar a sirene somente com alta incidência de luz. Depois basta mudar o threshould para algo acima de 500. Vejamos:
float sinVal = 0;
int toneVal = 0;
int buzzerPin = 8;
int counter = 0;
int toneAdjustment = 2000;
int LDRread = 0;
int LDRpin = A0;
int threshould = 30;
void sirene(){
//tocar 5 ciclos
for (int j=0; j<5; j++){
//1 ciclo = seno de 0 a 180
for (int x=0;x<180;x++){
//converte graus em radianos
sinVal = (sin(x*(3.1412/180)));
//agora gera uma frequencia
toneVal = toneAdjustment+(int(sinVal*100));
//toca o valor no buzzer
tone(buzzerPin,toneVal);
//atraso de 2ms e gera novo tom
delay(2);
}
}
}
void setup(){
pinMode(buzzerPin,OUTPUT);
Serial.begin(9600);
}
void loop(){
LDRread += analogRead(LDRpin);
if (counter > 3){
LDRread = LDRread/4;
Serial.println(LDRread);
if (LDRread < threshould){
pinMode(buzzerPin,OUTPUT);
sirene();
}
digitalWrite(buzzerPin,LOW);
pinMode(buzzerPin,INPUT);
}
counter = counter >3 ? 0 : counter+1;
}
Então fiz um teste com uma lanterna, como você pode ver no video.
Agora com o conceito provado, resta a última fase, que é saber o quanto de influência o laser tem sobre o LDR para então definir o threshould e inverter a lógica. Esse processo é simples. Como esse código imprime o valor da média, basta abrir o terminal serial, fazer a leitura e definir o threshould, simples assim! Código completo para o laser:
float sinVal = 0;
int toneVal = 0;
int buzzerPin = 8;
int counter = 0;
int toneAdjustment = 2000;
int LDRread = 0;
int LDRpin = A0;
int threshould = 350;
void sirene(){
//tocar 5 ciclos
for (int j=0; j<5; j++){
//1 ciclo = seno de 0 a 180
for (int x=0;x<180;x++){
//converte graus em radianos
sinVal = (sin(x*(3.1412/180)));
//agora gera uma frequencia
toneVal = toneAdjustment+(int(sinVal*100));
//toca o valor no buzzer
tone(buzzerPin,toneVal);
//atraso de 2ms e gera novo tom
delay(2);
}
}
}
void setup(){
pinMode(buzzerPin,OUTPUT);
Serial.begin(9600);
}
void loop(){
LDRread += analogRead(LDRpin);
if (counter > 3){
LDRread = LDRread/4;
Serial.println(LDRread);
if (LDRread > threshould){
pinMode(buzzerPin,OUTPUT);
sirene();
}
digitalWrite(buzzerPin,LOW);
pinMode(buzzerPin,INPUT);
}
counter = counter >3 ? 0 : counter+1;
}
Hoje fiz o video com o áudio original, sem nenhum tratamento, nem introdução. Desculpem a preguiça, mas estamos por terminar o ano e preguiça não está me faltando.
E eis aí seu alarme com interrupção laser!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.