Dispensador Automático De Desinfetante
by GuilhermeB66 in Circuits > Arduino
210 Views, 1 Favorites, 0 Comments
Dispensador Automático De Desinfetante

Chamo-me Guilherme Bruno, sou aluno da Escola Secundária da Boa Nova e fiz este projeto para a minha PAP.
Porque Escolhi Este Tema/Para Que Serve Esta PAP/A Quem Se Destina
Escolhi este tema devido à pandemia que estamos a passar.
Este projeto serve para deitar desinfetante nas mãos das pessoas sem que elas sejam obrigadas a tocar no dispensador.
O projeto destina-se, por exemplo, aos Centros Comerciais, Restaurantes, Escolas e a quem quiser ter um dispensador autônomo.
Material Utilizado











- Arduino UNO R3 Keyestudio
- Servo Motor MG995
- Sensor Ultrasónico HC-SR04
- Push Button
- Condensador Cerãmico de 100nF
- Led alto brilho 5mm azul
- Resistência de 220R / 1/4W
- Cabos Jumper
- Breadboard
- Madeira
- Velcro
Montagem Do Circuito No Thinkercad

Montagem Do Protótipo


Codificação
//=== Inclusão de bibliotecas ===//
#include "Ultrasonic.h"
#include
//=== Mapemamento de Hardware===//
#define pinButton 3
#define pinEcho 4
#define pinTrigger 5
#define pinServo 6
#define pinLED 7
//Instanciando objetos
Servo servo;
Ultrasonic ultrasonic(pinTrigger, pinEcho);
/=== Variáveis globais ===//
boolean aux1 = 0;
volatile uint16_t aux2 = 0;
volatile byte cicles;
volatile byte i;
//=== Protótipo das funções ===//
uint16_t readSensorandCompare();
void alcoolTrigger(byte maxAgle, byte minAngle);
void interface();
void setup() {
Serial.begin(9600);
servo.attach(pinServo);
servo.write(100);//Posição inicial do Servo de 100°
//Entradas/Saídas digitais
pinMode(pinLED, OUTPUT);
pinMode(pinButton, INPUT_PULLUP);
//===Inicial interrupção externa no pino 3 e chama a função ISR0 ===//
attachInterrupt(digitalPinToInterrupt(pinButton), ISR0, FALLING);
}//endsetup
//Interrupt Service Rotine ISR
void ISR0() {
aux2++;
if ( aux2 > 2)aux2 = 0;
if (aux2 == 0)cicles = 1;
if (aux2 == 1)cicles = 2;
if (aux2 == 2)cicles = 3;
i = 0;
}//endISR
void loop()
{
readSensorandCompare();
interface();
delay(300); // Evita mais de um disparo por vez pois limita as leituras do sensor ultrassônico
}//endloop
//== Função que obtem a distância do sensor ultrassônico e compara valores para chamar outras funções ==//
uint16_t readSensorandCompare()
{
uint16_t distanceCM = ultrasonic.convert(ultrasonic.timing(), Ultrasonic::CM);
Serial.print("aux2: ");
Serial.print(aux2);
Serial.print(" Cicles: ");
Serial.print(cicles);
Serial.print(" distanceCM: ");
Serial.println(distanceCM);
//Se mínimo está selecionado
if (distanceCM < 10 && aux1 == 0 && aux2 == 0)
{
alcoolTrigger(100, 80);
}
//Se médio está selecionado
if (distanceCM < 10 && aux1 == 0 && aux2 == 1)
{
alcoolTrigger(100, 70);
}
//Se máximo está selecionado
if (distanceCM < 10 && aux1 == 0 && aux2 == 2)
{
alcoolTrigger(100, 60);
}
//Permite o servo motor atuar outra vez somente quando tirar a mão da frente do sensor
if (distanceCM > 16 )
{
aux1 = 0;
}
return distanceCM;
}
//== Função aciona o servo motor de acordo com o angulo fornecido, também aciona o LED ==//
void alcoolTrigger(byte maxAgle, byte minAngle)
{
digitalWrite(pinLED, HIGH);
servo.write(maxAgle);
delay(300);
servo.write(minAngle);
delay(300);
servo.write(maxAgle);
digitalWrite(pinLED, LOW);
aux1 = 1;
}
//=== Função que pisca o LED de acordo com a configuração feita pelo utilizador: minimo, médio, máximo ===//
void interface()
{
if ( i < cicles)
{
digitalWrite(pinLED, HIGH);
delay(200);
digitalWrite(pinLED, LOW);
delay(100);
i++;
}
}
Como Funciona O Protótipo
O protótipo funciona através de um sensor ultrasónico, que quando é acionado ativa o servo motor, fazendo com que caia uma quantidade de gel desinfetante. O dispensador possui um botão para regular a quantidade de gel desinfetante a fornecer.
Sugestões De Melhoria
- Uma maquete mais compacta e feita com outro tipo de material.
- Tornar o dispensador portátil através de uma bateria.