SUPORTE TÉCNICO
De segunda à sexta pelo e-mail:
suporte@robocore.net
CENTRAL DE ATENDIMENTO
De segunda à sexta das 8:00 às 17:30
(11) 3522-7626 / vendas@robocore.net
Retornar
ao topo

Programação do Dispenser de Líquidos com Arduino



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

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.

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.

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.

Resultado Final

Conclusão

Neste tutorial conhecemos e entendemos o código do Kit Faça-Você-Mesmo: Dispenser Automático de Líquidos.

Avatar


Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


pedrorigoletto1
date Enviado: 2021-05-10 16:29:24
Boa tarde. Teria como alterar a programação para a bomba ficar ligada enquanto a mão estiver embaixo?

Giovanni5
date Enviado: 2021-05-10 16:49:41
pedrorigoletto1
Sim, é possível alterar a programação para isso, porém será necessário modificar um pouco a lógica do código. Uma solução mais simples, é apenas aumentar o tempo de "delay" de acionamento da bomba no código, assim a bomba continuará ligada por um tempo maior.

edinavarro
date Enviado: 2021-03-01 17:22:56
Boa tarde, Ultrasonic e Ultrasonic-marter é a mesma coisa? Eu baixei e adicionei na biblioteca e somente aparece no exemplo o Ultrasonic sensor?  O que será que fiz errado?

Giovanni5
date Enviado: 2021-03-01 18:10:21
edinavarro
Sim, a biblioteca "Ultrasonic" está contida no arquivo "Ultrasonic-master", e essa biblioteca só acompanha um exemplo simples mesmo. Para o dispenser de líquidos, carregue o código desta página para a placa.