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:
- Interrupção e timer com Arduino
- Interrupções com Raspberry
- Timer com ESP8266 na IDE do Arduino
- Interrupções (PIC)
- Interrupções com PIC16F877A
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.
Table of Contents
Lista de materiais
Você precisará de apenas 5 ítens:
- 1 Sensor de nível tipo cachimbo
- 1 ESP8266 ou um Digispark (não compre o Digispark ainda!)
- 1 resistor de 220ohms
- 1 LED de 3mm
- 1 mini protoboard
Claro, acredito que alguma coisa você já tenha, no caso, fios jumpers. Não tem? Então você pode adquirí-lo aqui.
Wiring
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 funciona o circuito
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.
Código
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 newsletter, alí em cima à direita e receba novos posts por email.
Siga-nos no Do bit Ao Byte no Facebook.
Prefere twitter? @DobitAoByte.
Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.
Nossos grupos:
Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/
Projetos Arduino e Eletrônica – https://www.facebook.com/groups/projetosarduinoeletronica/
ESP8266 BR – https://www.facebook.com/groups/ESP8266BR/
Próximo post a caminho!
4 thoughts on “Sensor de nível de água para Arduino, ESP8266, Raspberry…”