Manual
do
Maker
.
com
Tanta coisa que podemos automatizar que algumas vezes nos perdemos diante tantos brinquedos. No caso desse sensor de nível, o propósito mais cabível para ele é interromper o fluxo de água que esteja vindo de algum lugar. Espero que o parceiro AutoCore envie uma solenóide para abrir e fechar a passagem de água, mas enquanto isso, vamos ver um tutorial que simplesmente gerará a interrupção no ESP8266. Poderia ser também no Arduino, Raspberry etc, afinal o procedimento é basicamente o mesmo. Os conceitos necessários para cada plataforma que desejar está descrito nos posts a seguir:
E há uma razão, um "porquê" de utilizarmos interrupção. Se você escrever todo o código no loop para ficar executando uma sequência de comandos, isso aumenta o consumo da MCU e ainda por cima pode não atender no momento preciso. Isto é, o nível de água pode facilmente passar do limite se a MCU não conseguir atender a tempo, mas com uma interrupção a MCU para tudo o que estiver fazendo para atendê-la. Essa é uma das grandes vantagens em se utilizar interrupções.
A experiência será o mais artesanal possível, já que não tenho uma aplicação real para o momento; ou tenho, mas não estou com vontade de furar meu filtro de barro agora. Também, o código será o mais simplório possível e a MCU também. Nesse caso, utilizarei a Attiny85 Digispark, onde descrevi os primeiros passos para utilizá-la na IDE do Arduino nesse outro artigo.
Você precisará de apenas 5 ítens:
Claro, acredito que alguma coisa você já tenha, no caso, fios jumpers. Não tem? Então você pode adquirí-lo aqui.
Cortei um cabo jumper e os soldei às pontas dos fios do sensor de nível d'água, de modo que pude conectar o sensor diretamente ao Digispark. O Wiring mais simples possível, sem filtragem de ruído nem nada, é a conexão de um dos fios do sensor ao 5V e o outro fio ao P2. Só isso.
A conexão aqui no mundo real ficou desse jeito:
Como você pode ver, não tem nada entre o Digispark e o sensor. Ambos os fios do sensor estão conectados aos pinos do Digispark, P2 e P3 respectivamente. O sensor somente fecha o circuito quando a bóia tocar o topo, daí a tensão seguirá em sentido ao outro pino que periodicamente está fazendo leitura digital em busca da mudança de estado. Como citado ao início, a melhor opção é utilizar um dispositivo que ofereça a capacidade de lidar com interrupções e de preferência, de uma maneira fácil. Mas para a prova de conceito está perfeita a utilização de um Digispark.
Na hora de escrever o código, lembre-se de que os pino P3 e P4 estão dedicados à USB. No caso, conectei um fio do sensor ao 5V e o outro fio ao pino P2, que fará leituras periódicas (a cada loop) em busca da mudança de estado com o circuito fechado pelo sensor, indicando assim que o recipiente atingiu o limite.
O código é tão pequeno quanto o próprio Digispark. Vamos utilizar o mesmo LED da board utilizado também para exemplo nesse primeiro artigo sobre o Digispark.
int sensor = 0;
int counter = 0;
int alarm = 0;
void setup(){
pinMode(1,OUTPUT); //modelo b
pinMode(0,OUTPUT); //modelo a
pinMode(2,INPUT);
}
void loop(){
sensor += digitalRead(2);
if (sensor > 2){
if (counter > 2){
digitalWrite(1,HIGH);
digitalWrite(0,HIGH);
alarm = 1;
sensor = 0;
}
}
else{
alarm = 0;
}
if (alarm == 0){
counter = 0;
sensor = 0;
digitalWrite(0,LOW);
digitalWrite(1,LOW);
}
delay(10);
}
E um pequeno video, apenas para mostrar o LED acender quando chegar no limítrofe.
Por fim, não é necessário nenhum tipo de controlador para fazer um exemplo simples assim, mas se você estiver utilizando um controle de fluxo de água, certamente o ideal é utilizar PI, PD ou PID e nesse caso uma MCU realmente é necessária.
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.