Projeto Nivel de Caixa 1
Projeto Nivel de Caixa 1
Projeto Nivel de Caixa 1
Escolhi usar os sensores de nível d’água (chave boia) pois eles têm boa
durabilidade, fácil uso e são à prova d’água. O ambiente interno de uma caixa
d’água, além da água e da umidade, pode ser quente e pode provocar a breve
destruição de outros tipos de sensores.
Essas imagens abaixo são dos sensores de nível d’água. Dentro da boia (parte
móvel) tem um pequeno imã. Dentro do pino frontal do sensor, tem uma chave
(reed switch) que é sensível ao magnetismo. Veja que quando a boia está para
baixo, o contato fica aberto.
Quando a boia sobe com a presença da água e fica próxima do pino frontal, o
contato é fechado.
Montagem (Sensores)
O sistema de monitoramento utiliza dois Arduinos UNO. Um dos Arduinos ficará
junto da caixa d’água e será usado para monitorar os sensores (chaves boias).
Conectado à esse Arduino fica o módulo transmissor RF433. Ele transmite as
informações sobre os sensores. Para simplificar a manutenção, com esse Arduino
existem 4 leds, um para cada sensor. Se o led acender é porque o sensor está
fechado (com o nível d’água). Se o led estiver apagado é porque a boia está para
baixo (sem água) e com a chave aberta.
Para permitir um maior alcance do sinal de rádiofrequência usei uma fonte de 9
Volts (poderá usar uma fonte de até 12 V) para alimentar o módulo transmissor
RF433. Para alimentar o Arduino conecte essa fonte no plug de energia do mesmo.
O regulador interno do Arduino reduz a tensão para 5 Volts. Os sensores e os leds
deverão usar somente o 5 V do Arduino.
Material necessário para o projeto Sensor de Nível de Caixa D’água sem Fio!
– Arduino TX:
Arduino Uno
Módulo RF433 Transmissor
4 sensores de nível d’água
4 Led difuso amarelo 5 mm
resistores – 4 x 2,2K ohms e 4 x 10 K ohms
Fonte 9 V
Protoboard
Jumpers
Biblioteca RC switch
Esse é o Sketch desenvolvido por mim para ser gravado no primeiro Arduino TX.
Os sensores de nível d’água são monitorados. Quando o Arduino detecta que a
boia fechou o contato do sensor, o Led respectivo ao sensor acende. Isso é
importante para a avaliação do funcionamento dos sensores, durante uma
manutenção.
https://github.com/sui77/rc-switch/
*/
int nivel_75;
int nivel_50;
int nivel_25;
void setup()
void loop()
digitalWrite(led_100,nivel_100);
digitalWrite(led_75,nivel_75);
digitalWrite(led_50,nivel_50);
digitalWrite(led_25,nivel_25);
if ((nivel_100 == HIGH) && (nivel_75 == HIGH) && (nivel_50 == HIGH) && (nivel_25 ==
HIGH))
if ((nivel_100 == HIGH) && (nivel_75 == HIGH) && (nivel_50 == HIGH) && (nivel_25 ==
LOW))
if ((nivel_100 == HIGH) && (nivel_75 == HIGH) && (nivel_50 == LOW) && (nivel_25 ==
LOW))
if ((nivel_100 == HIGH) && (nivel_75 == LOW) && (nivel_50 == LOW) && (nivel_25 ==
LOW))
if ((nivel_100 == LOW) && (nivel_75 == LOW) && (nivel_50 == LOW) && (nivel_25 ==
LOW))
{
transmissor.send(1525, 24); // caixa dagua 100% cheia
Nesse Guia básico sobre os módulos RF433, eu explico como são montadas as
antenas, usando fios rígidos de 17,3 cm:
https://blog.eletrogate.com/guia-basico-dos-modulos-tx-rx-rf-433mhz/
Para aumentar o alcance das antenas, fiz algumas experiências. Um dos testes que
deu um bom resultado, foi usando um fio rígido de 34,6 cm (1/2 comprimento de
onda) todo enrolado em um lápis. Depois da antena todo enrolada, eu removi o
lápis e fui espichando a antena enrolada. Com um comprimento de
aproximadamente 14 cm, os resultados foram melhores. Lembrando que as duas
antenas precisam ser aproximadamente iguais em comprimento e precisam ser
soldadas nos módulos RF433.
Para alimentar o Arduino Uno, poderá usar uma fonte externa entre 6,5 V e 12 V.
Ou se preferir, use um carregador de celular (5V) e o cabo USB para energizá-lo.
Material necessário para o projeto Sensor de Nível de Caixa D’água sem Fio!
– Arduino RX:
Arduino UNO
Módulo RF433 Receptor
Display OLED 128×64 – I2C
Fonte 9 V
Buzzer ativo (para testes)
Protoboard ou placa PCI
fios para ligações
Uma coisa bem pensada no sistema, foi a indicação de alerta mostrada no display,
quando algum sensor da caixa d’água falhar ou quando o módulo receptor não
receber a transmissão. O tempo de espera do sinal de RF poderá ser alterado no
sketch, se achar necessário. Se os dados dos sensores não forem recebidos dentro
desse tempo (timeout), a indicação de falha será mostrada no display.
Para o uso do display OLED, duas bibliotecas precisam ser instaladas na Arduino
IDE – a Adafruit_SSD1306 e a Adafruit-GFX. Use o mesmo procedimento
usado para a instalação da biblioteca RC-switch.
Esse é o Sketch para ser gravado no segundo Arduino com o módulo receptor e o
display OLED. A cada três segundos, o Arduino recebe os dados do transmissor. E
as indicações de níveis de água são mostradas no display OLED. Se ocorrer
alguma falha na recepção, a indicação de Falha de sinal será mostrada. Nesse
caso, certifique-se que o módulo transmissor está ligado e transmitindo o sinal
adequado. Para ajudar nos testes, sugiro que monte um Buzzer ativo (campainha
sonora), conectando o pino positivo do Buzzer no pino D13 do Arduino. O outro
pino negativo do Buzzer, conecte-o no pino terra (GND). Sempre que o sinal com
os dados corretos for recebido, o led da placa Arduino piscará e um apito será
emitido.
/* Blog Eletrogate - Monitor de Nível de Caixa Dagua - Receptor + display Oled
https://github.com/sui77/rc-switch/
https://github.com/adafruit/Adafruit_SSD1306
https://github.com/adafruit/Adafruit-GFX-Library
drawRoundRect(x,y,w,h,r,color)
w largura em pixels
h altura em pixels
r raio da borda
color cor
*/
int valor;
void setup()
pinMode(13, OUTPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
if (cheia == true)
display.setTextColor(BLACK);
else
display.setTextColor(WHITE);
display.setCursor(4, 25);
display.println("25");
display.display();
if (cheia == true)
display.setTextColor(BLACK);
else
{
display.fillRoundRect(31, 0, 30, 40, 2, BLACK); // apague o retangulo
display.setTextColor(WHITE);
display.setCursor(35, 25);
display.println("50");
display.display();
if (cheia == true)
display.setTextColor(BLACK);
else
display.setTextColor(WHITE);
display.setCursor(66, 25);
display.println("75");
display.display();
else // senão
{
display.fillRoundRect(93, 0, 31, 40, 2, BLACK); // apague o retangulo
void displayMessage ()
void displayFalha ()
void loop()
valor = 0;
finalTimer = millis();
if (receptor.available())
valor = receptor.getReceivedValue();
receptor.resetAvailable();
inicialTimer = millis();
}
displayFalha ();
inicialTimer = finalTimer;
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
digitalWrite(13, HIGH);
Sugestões
Para testes iniciais do sistema, sugiro que faça as montagens em Protoboards. Mas
para um funcionamento definitivo, sugiro que monte tudo em placas de circuito
impresso pré-fabricadas. Soldes os componentes e os fios de ligações nas placas e
nos Arduinos. Confira todas as montagens, antes de energizar os circuitos! Se tiver
conhecimento e experiência, poderá projetar placas de circuito impresso dedicadas
para o sistema.
Esse sistema foi desenvolvido para o monitoramento do nível da caixa d’água. Mas
poderá ser usado também para acionamento de uma bomba d’água quando o nível
da caixa estiver baixo. Dessa forma, é só acrescentar um módulo de relé para
controlar a bomba e fazer as alterações no sketch.
Use o display OLED para mostrar mais outras mensagens. Esse display é bem
versátil e poderá acrescentar mais funcionalidades ao seu projeto!
Se você necessitar do registro dos níveis de água durante um certo período, por
exemplo durante dias ou semanas, sugiro que acrescente um relógio RTC DS3231
e um módulo de cartão SD.