Monitor de nível de água usando o sensor de nível de água e chuva e Arduino
O sensor de nível de água e chuva é usado para detectar chuva, vazamento e transbordo em tanques ou para medir o nível de água. Este componente é formado basicamente por três partes: um conector, um resistor de 1MΩ e traços de cobre expostos, conforme Figura 1.
O sensor de nível de água e chuva possui uma série de dez traços de cobre expostos, sendo 5 de alimentação e 5 de detecção. Estes traços são entrelaçados em paralelo e não são conectados entre si. Quando o sensor é submerso, a água interliga os traços que atuam como um resistor variável, cuja resistência varia de acordo com o nível de água. Deste modo:
- A mudança na resistência corresponde à distância do topo do sensor à superfície da água;
- Quanto mais imerso o sensor estiver, maior será a condutividade e menor a resistência;
- Quanto menos imerso o sensor estiver, menor será a condutividade e maior a resistência;
- A tensão de saída do sensor varia de acordo com a resistência e a partir da medição da tensão podemos determinar o nível da água.
A proposta deste projeto é o desenvolvimento de um sistema de monitoramento do nível de água de um recipiente. Usaremos LEDs para indicar os níveis: o LED verde representa que o nível da água do recipiente está alto, o LED amarelo indica o nível médio e o vermelho sinaliza o nível baixo.
MATERIAIS NECESSÁRIOS
- 1 x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
- 1 x Cabo USB;
- 1 x Sensor de nível de água e chuva;
- 1 x Protoboard;
- 1 x Led difuso de 5 mm – verde;
- 1 x Led difuso de 5 mm – amarelo;
- 1 x Led difuso de 5 mm – vermelho;
- 3 x Resistores de 220 Ω;
- Fios de jumper macho-macho;
- Fios de jumper macho-fêmea.
ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES
Inicialmente, certifique-se que a sua placa Arduino esteja desligada. Em seguida, monte o circuito da Figura 2 utilizando o sensor de nível de água e chuva, os LEDs e os resistores.
Ao montar seu circuito na protoboard preste atenção nos seguintes pontos:
- Conecte o LED verde ao pino digital 12, o LED amarelo ao pino digital 11 e o LED vermelho ao pino digital 10 da placa UNO;
- O sensor de nível possui três pinos representados por S, + e -. O pino S é a saída analógica do sensor e deve ser conectada ao pino analógico A0. O terminal representado por + é a alimentação e deve ser ligado ao 5V. Por fim, o pino – é a conexão de aterramento do sensor e precisamos conectá-lo ao GND da placa UNO.
ELABORANDO O CÓDIGO
Com o circuito montado, vamos a programação. Para que nosso sistema de monitoramento de nível de água obtenha leituras precisas, precisamos inicialmente calibrar o sensor.
A água pura não é condutora de eletricidade, mas os metais e as impurezas presentes na água a torna condutora. Portanto, o sensor de nível de água e chuva pode ser mais ou menos sensível dependendo da água utilizada. Desta forma, realizaremos a leitura analógica do sensor em 4 situações:
- Sem imergir na água;
- Colocando o sensor em um recipiente com água em nível baixo;
- Colocando o sensor em um recipiente de água em nível médio;
- Colocando o sensor em um o recipiente de água em nível alto.
Para tal, utilize o seguinte código e anote os valores lidos em cada situação.
void setup() { Serial.begin(9600); //Inicializa a comunicação serial } void loop() { int sensorValue = analogRead(A0); //Realiza a leitura do sensor Serial.print("Leitura do sensor de nível: "); Serial.println(sensorValue); //Imprime no monitor serial o valor lido delay(100); //Intervalo de 100 milissegundos }
O resultado que obtivemos em nosso teste pode ser observado na Figura 3.
De posse destes resultados, podemos desenvolver a programação para o sistema de monitoramento do nível de água de um recipiente. Vamos entender a lógica de programação deste projeto a partir dos seguintes passos:
1. Declarar as variáveis:
Iniciamos o código declarando as variáveis verde, amarelo e vermelho, correspondentes aos pinos digitais em que os LEDs se encontram conectados. Em seguida, atribuímos o pino analógico A0 à variável sensorPin. Declaramos também a variável leitura, que será responsável por armazenar a leitura do sensor de nível.
2. Inicializar a comunicação serial, definir portas de saída e configurações iniciais:
A comunicação serial foi inicializada por meio da instrução: Serial.begin(9600);.
As variáveis verde, amarelo e vermelho foram definidas como saída (OUTPUT). Para que os LEDs iniciem desligados, inicializamos estas variáveis em nível lógico baixo (LOW).
3. Realizar a leitura do sensor de nível e imprimir no monitor serial:
Iniciamos o loop() realizando a leitura da porta analógica A0 (sensorPin), para isso utilizaremos a função analogRead(sensorPin), e armazenaremos este valor na variável leitura. Em seguida, imprimiremos o valor no monitor serial por meio da instrução Serial.println(leitura);.
4. Realizar a comparação:
Utilizaremos a lógica do if…else para comparar a leitura do sensor de nível com a leitura obtida na calibração, de modo que:
- Quando a leitura for menor ou igual a 500, o monitor serial exibirá a mensagem “Nível de água: Baixo” e o LED vermelho será ligado;
- Quando a leitura estiver entre 500 e 700, o monitor serial exibirá “Nível de água: Médio” e o LED amarelo será acionado;
- Quando a leitura for maior que 700, o monitor serial mostrará a mensagem “Nível de água: baixo” e o LED verde será ligado.
Ao final, o Sketch deste projeto ficará da seguinte maneira:
/* = MONITOR DE NÍVEL DE ÁGUA USANDO ARDUINO = =============================================== == BLOG DA ROBOTICA - www.blogdarobotica.com == =============================================== Autor: Carol Correia Viana E-mail: contato@blogdarobotica.com Facebook: facebook.com/blogdarobotica Instagram:@blogdarobotica YouTube: youtube.com/user/blogdarobotica =============================================== == CASA DA ROBOTICA - www.casadarobotica.com == =============================================== Facebook: facebook.com/casadaroboticaoficial Instagram:@casadarobotica =============================================== */ // Declaração dos pinos em que os LEDs estão conectados #define vermelho 10 #define amarelo 11 #define verde 12 #define sensorPin A0 // Pino de leitura do sensor int leitura; // Variável para armazenar a leitura do sensor void setup() { Serial.begin(9600); // Inicialização da comunicação serial // Seta os LEDs como saída pinMode(vermelho, OUTPUT); pinMode(amarelo, OUTPUT); pinMode(verde, OUTPUT); // Inicializa com os LEDs desligados digitalWrite(vermelho, LOW); digitalWrite(amarelo, LOW); digitalWrite(verde, LOW); Serial.println("----- MONITORAMENTO DO NÍVEL DE ÁGUA ----"); } void loop() { Serial.print("Leitura do Sensor de Nível: "); leitura = analogRead(sensorPin); //Realiza a leitura do sensor Serial.println(leitura); //Imprime a leitura //Nível baixo - leitura menor que 500 if (leitura <= 500) { Serial.println("Nível de água: Baixo"); digitalWrite(vermelho, HIGH); digitalWrite(amarelo, LOW); digitalWrite(verde, LOW); } //Nível médio - leitura entre 501 e 700 else if (leitura > 500 && leitura <= 700) { Serial.println("Nível de água: Médio"); digitalWrite(vermelho, LOW); digitalWrite(amarelo, HIGH); digitalWrite(verde, LOW); } //Nível alto - leitura maior que 700 else if (leitura > 700) { Serial.println("Nível de água: Alto"); digitalWrite(vermelho, LOW); digitalWrite(amarelo, LOW); digitalWrite(verde, HIGH); } delay(1000); }
Espero ter ajudado,
Obrigada a todos e em caso de dúvidas deixe seu comentário abaixo!
Att. Carol Correia Viana
Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.