Entrar em casa com as mãos desinfectadas reduz consideravelmente o risco de se auto-infectar e infectar parentes ou amigos com o novo coronavírus. Vendo essa situação, nós da Eletrogate iremos te ajudar a sempre lembrar de chegar em casa e lavar as mãos. Nosso projeto de hoje usará componentes simples e baratos, e qualquer um poderá fazer ele, para criar um protótipo:
A ideia do projeto é colocar um sensor no bico do álcool em gel, para saber se ele foi pressionado ou não. Para isso, iremos colocar uma chave de fim de curso para desempenhar essa função, mas se quiser, você pode adaptar outras coisas, como um sensor óptico reflexivo (link para o blog). Você pode instalar o sensor aqui:
Logo abaixo do bico do álcool em gel.
Com o sensor instalado, nós iremos agora fazer um feixe de laser localizado no LDR, se você não conhece o funcionamento de um LDR, ele basicamente é um resistor cujo sua resistência varia inversamente proporcional ao aumento da luminosidade. Logo, se há muito luz sobre o LDR, a resistência dele é baixa (Até 300 ohms), e com pouca luz a resistência dele é alta (No escuro pode chegar a casa de mega ohms).
Este comportamento do LDR permite que um sinal seja enviado ao Arduino quando o feixe for interrompido. Por isso, faremos 2 feixes com dois sensores para poder mensurar em qual sentido a pessoa está entrando na porta, se está entrando ou saindo, já que essa informação será bastante importante para nós.
O principio explicado, é o mesmo de alarmes a laser que são comuns em filmes.
Imagem retirada da steamcommunity
Para fazer um protótipo, faça essa montagem na Protoboard:
Lembrando que o sensor instalado no álcool em gel, nessa montagem, está sendo representado pela chave pushbutton, mas o sensor real pode ser tanto a chave de fim de curso ou o sensor óptico reflexivo.
Obs: Perceba também que no caso do sensor que vá no lugar do pushbutton, ele deverá ser usado usado sem resistores externos de pull up ou pull down, porque no código já está sendo usado um resistor de pull up interno.
Ao ligar o feixe do laser, o LDR será sensibilizado e na porta A0 veremos um valor baixo (no meu caso foi de 35), quando o laser for interrompido, veremos um valor mais alto (No meu caso, foi de 440). Esses valores citados de baixo e alto podem variar de ambiente para ambiente , logo, um valor diferente do citado é normal.
Tendo a montagem feita, você pode observar no monitor serial os valores lidos quando o Laser está incidindo no LDR e os valores sem estar incidindo. O código é este:
#define Sensor1 A0 #define Sensor2 A1 #define Laser1 2 #define Laser2 3 void setup() { Serial.begin(9600); pinMode(Laser1, OUTPUT); pinMode(Laser2, OUTPUT); digitalWrite(Laser1, HIGH); digitalWrite(Laser2, HIGH); pinMode(Sensor1, INPUT); pinMode(Sensor2, INPUT); } void loop() { Serial.print("LDR 1: ");Serial.println(analogRead(Sensor1); Serial.print("LDR 2: ");Serial.println(analogRead(Sensor2); }
Anote os valores quando você coloca a mão na frente, e anote o valor sem a mão na frente, esse valor será importante no próximo código.
O código final do projeto é este:
/* Sensor para auxiliar no uso do Alcool em Gel Autor: Gustavo - Eletrogate */ #define TimeSensores 500 // Tempo limite em ms para passar entre os dois sensores #define TimeLavar 10000 // Tempo limite (em ms) entre as mãos e passar nos sensores #define SensibilidadeLDR 120 // É o nivel onde o sensor entenderá que passou alguem //----- Declaração dos pinos que usaremos -------// #define Sensor1 A0 #define Sensor2 A1 #define FimDeCurso 7 #define Laser1 2 #define Laser2 3 #define PinBuzzer 8 #define PinLED 9 //-----------------------------------------------// byte ReconhecerSentido(); void setup() { Serial.begin(9600); pinMode(Laser1, OUTPUT); pinMode(Laser2, OUTPUT); digitalWrite(Laser1, HIGH); digitalWrite(Laser2, HIGH); pinMode(FimDeCurso, INPUT_PULLUP); pinMode(Sensor1, INPUT); pinMode(Sensor2, INPUT); pinMode(PinBuzzer, OUTPUT); pinMode(PinLED, OUTPUT); } void loop() { long time1 = -10000; // Faz o tempo ser -10s para simpliciar a lógica, onde, já inicia com o tempo que lavou a mão pela ultima vez excedido while (1) { if (!digitalRead(FimDeCurso)) { // Se caso a pessoa usou o alcool em gel, salva em qual tempo foi time1 = millis(); } if (ReconhecerSentido() == 2) { // Verifica se a pessoa está no sentido 2, que é saindo de casa if ((millis() - time1) > TimeLavar) { // Ele confere se lavou a mão nos ultimos 10 segundos, se não, faz o alerta sonoro e visual. Serial.println("ESQUECEU DE LAVAR A MÃO!"); digitalWrite(PinLED, HIGH); digitalWrite(PinBuzzer, HIGH); delay(1000); digitalWrite(PinLED, LOW); digitalWrite(PinBuzzer, LOW); } else { Serial.println("LAVOU AS MÃOS!"); // faz i time1 ser negativo para que garanta que na proxima pessoa que passar sem lavar as mãos, apite. time1 = -10000; } } } } byte ReconhecerSentido() { // Esse algoritmo reconhece qual sentido a pessoa passou. Se retornar 0 é porque não passou ninguem. O sentido 2 é porque a pessoa entrou em casa. byte sentido; unsigned long time1, tempototal = 0; sentido = 0; if (analogRead(Sensor1) > SensibilidadeLDR) { while (analogRead(Sensor1) > SensibilidadeLDR) {} tempototal = 0; time1 = millis(); while ((analogRead(Sensor2) < SensibilidadeLDR) and (tempototal < TimeSensores)) { tempototal = millis() - time1; } if (tempototal < TimeSensores) { sentido = 2; return (sentido); } } if (analogRead(Sensor2) > SensibilidadeLDR) { while (analogRead(Sensor2) > SensibilidadeLDR) {} tempototal = 0; time1 = millis(); while ((analogRead(Sensor1) < SensibilidadeLDR) and (tempototal < TimeSensores)) { tempototal = millis() - time1; } if (tempototal < TimeSensores) { sentido = 1; return (sentido); } } return (sentido); }
Na constantante SensibilidadeLDR, nas primeiras linhas do código, coloque um valor intermediário entre as medidas com o laser atingindo o LDR e sem. É importante que esse valor tenha uma margem de segurança, isso é, nas condições do laser operando nele nunca chegue a esse valor declarado.
É importante outras duas contantes declaradas, como o TimeLavar, que é o tempo que a pessoa tem entre passar o alcool em gel e atravessar o sensor. Eu coloquei 10 segundos, mas você pode adaptar segundo o seu projeto. E o outro time, que é o TimeSensores, basicamente serve para definir o tempo máximo para atravessar os dois sensores, para se caso não atravessar nesse tempo, reseta. É um mecanismo para evitar bugs.
O funcionamento do sensor de sentido pode ser testado funcionando assim:
Em um sentido -que é o da pessoa saindo- o sensor não emite alertas, e com a pessoa entrando e sem acionar o álcool em gel, há o alerta sonoro e visual.
No monitor serial também temos a informação se a pessoa lavou a mão ou não.
Montando este projeto na prática, você terá uma ferramenta e tanto para superar essa crise de Coronavírus sem se esquecer de lavar as mãos ao chegar em casa, por qualquer motivo. Você pode aproveitar este projeto para fazer o sensor do alcool em gel sem fio, fazer melhorias, desenvolver um novo com algum conhecimento aprendido e muito mais! Dê asas a sua imaginação.
Lembrando que nesta época de pandemia, cuide da sua saúde e fique em casa, e deixe que a gente entrega todos os seus produtos em casa, com bastante confiabilidade.
Gostou do projeto e montou na prática? Curta o post e marque a gente no instagram @eletrogate
Dúvidas, sugestões ou elogios? Deixe um comentário para a gente! 🙂
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!