Programação do Dispenser de Líquidos com Arduino
This tutorial is not available in English
Introdução
A movimentação de líquidos é algo essencial para alguns projetos, mas pode ser difícil de integrar essa funcionalidade com microcontroladores e alguns modelos de bombas. As bombas peristálticas, por sua vez, são bem simples e fáceis de serem integradas em projetos, já que são compostas de um motor DC.
Este tutorial é um complemento do tutorial Montagem do Dispenser Automático de Líquidos, onde aprendemos a montar o Kit Faça-Você-Mesmo: Dispenser Automático de Líquidos. A seguir você conhecerá melhor o programa que é usado no dispenser.
Lista de Materiais
Lista completa de produtos
comprarKit Faça-Você-Mesmo: Dispenser Automático para Líquidos
Programação
Se você adquiriu o Kit Faça-Você-Mesmo: Dispenser Automático de Líquidos, a BlackBoard que você recebeu no kit está pronta para uso, pois ela foi previamente programada com o código deste tutorial. No entanto, se você quer entender como o seu dispenser automático funciona ou quer adicionar as suas melhorias no projeto, siga adiante para ver o código que está por trás do kit.
Biblioteca
Para o código deste projeto, é necessário instalar a biblioteca "Ultrasonic", que pode ser baixada através do botão abaixo. Caso não saiba como instalar bibliotecas na Arduino IDE, siga este tutorial.
Download da Biblioteca "Ultrasonic"Código
Agora que o circuito está montado e a biblioteca instalada, carregue o código a seguir para sua placa.
Entendendo o Código
O código inicia com a adição da biblioteca "Ultrasonic", que foi instalada anteriormente na Arduino IDE. Em seguida, temos a declaração das variáveis constantes PINO_ECHO
, PINO_TRIGGER
e PINO_VCC
, que armazenam os pinos conectados aos terminais "echo", "trigger" e "VCC", respectivamente, do sensor ultrassônico. Com isso, criamos o objeto sensor
para a instância "HC_SR04" (modelo do sensor ultrassônico) da biblioteca, de acordo com os pinos configurados nas variáveis PINO_TRIGGER
e PINO_ECHO
.
Feito isso, declaramos a variável que armazena o pino conectado ao relé (PINO_RELE
), juntamente com a variável mao
, que é uma variável auxiliar para o acionamento da bomba. A variável distancia
também é declarada no início do código, e irá receber as leituras de distância do sensor. Para finalizar as declarações globais do código, temos as declarações das variáveis constantes DISTANCIA_MIN_ACIONAR
, DISTANCIA_MAX
e TEMPO_ACIONAMENTO
, que definem a distância mínima que a sua mão deve ter do sensor para o acionamento da bomba, a distância máxima que o sensor poderá considerar, e o tempo de acionamento da bomba, respectivamente.
Já na configuração do código, iniciamos o monitor serial e configuramos os pinos conectados ao relé e ao terminal "VCC" do sensor ultrassônico como saídas do sistema ("OUTPUT"). Entretanto, o pino conectado ao relé é iniciado com um nível lógico baixo ("LOW"), enquanto o pino conectado ao "VCC" do sensor é iniciado com um nível lógico alto ("HIGH"), para ligar o sensor. Vale lembrar que só podemos alimentar o sensor diretamente pelo pino digital da placa porque ele possui um consumo de corrente menor do que a corrente máxima que o pino digital da placa é capaz de fornecer.
Na repetição do código, verificamos através da condição if (checaDistancia() <= DISTANCIA_MIN_ACIONAR && mao == false)
se a distância retornada pela função checaDistancia()
, que será explicada posteriormente, é menor ou igual ao valor configurado na variável DISTANCIA_MIN_ACIONAR
, e se a variável mao
é falsa ("false"). Se essa condição for verdadeira, verificamos novamente se o valor retornado pela função checaDistancia()
é menor que o valor configurado na variável DISTANCIA_MIN_ACIONAR
, após um "debounce" (delay(200)
). Isso é necessário para evitar acionamentos indesejados da bomba. Se essa condição for verdadeira mesmo após o "debounce", é sinal que há uma mão, ou objeto, presente embaixo do sensor, portanto a variável mao
tem seu estado invertido (de "false" para "true"), e o relé é então acionado durante o tempo configurado na variável TEMPO_ACIONAMENTO
. A condição while()
do bloco é usada para manter a bomba acionada enquanto a mão estiver sob o sensor e o tempo de acionamento for menor do que o tempo limite (armazenado na variável timeout
).
Caso a condição anterior seja falsa, é verificado através da condição else if (checaDistancia() > DISTANCIA_MIN_ACIONAR && mao == true)
se o valor retornado pela função checaDistancia()
é maior que o valor configurado na variável DISTANCIA_MIN_ACIONAR
, e se a variável mao
é verdadeira ("true"). Se essa condição for verdadeira, é verificado novamente se a distância retornada pela função checaDistancia()
é maior que o valor configurado na variável DISTANCIA_MIN_ACIONAR
, após um "debounce" (delay(500)
). Se essa condição for verdadeira mesmo após o "debounce", é sinal que não há mais uma mão, ou objeto, embaixo do sensor, portanto a variável mao
inverte de estado novamente (de "true" para "false"). Para finalizar, temos uma pausa no código de 100 milissegundos antes de realizar uma nova leitura.
Ao final do código, temos a função checaDistancia()
, que é iniciada com a atribuição da leitura feita pelo sensor à variável distancia
através do comando distancia = sensor.distance()
. Em seguida, é verificado pela condição while(distancia > DISTANCIA_MAX)
se a distância recebida na variável distancia
é maior que o valor configurado na variável DISTANCIA_MAX
. Enquanto essa condição for verdadeira, o valor da variável distancia
é atualizado (distancia = sensor.distance()
) a cada 200 milissegundos. Assim que a distância armazenada na variável distancia
for válida, ou seja, menor que o valor configurado na variável DISTANCIA_MAX
, esse valor é retornado para o código através do comando return distancia
após uma breve espera de 100 milissegundos.
O Que Deve Acontecer
Assim que o código estiver carregado para a sua placa, alimente-a com a fonte de 12 V e 5 A do kit. Então basta aproximar sua mão, ou um objeto, embaixo do sensor ultrassônico para que o dispenser despeje um pouco do liquído desejado sobre a sua mão, ou objeto, como no GIF a seguir.
Conclusão
Neste tutorial conhecemos e entendemos o código do Kit Faça-Você-Mesmo: Dispenser Automático de Líquidos.