ESP32 - Sensor de Água

Este tutorial ensina você a usar o ESP32 e o sensor de água para detectar chuva, vazamento de água, transbordamento de reservatório e medir o nível de água.

Sobre o Sensor de Nível de Água

Pinagem do Sensor de Nível de Água

O sensor de nível de água tem 3 pinos:

  • Pino S (Signal): este pino fornece uma tensão analógica proporcional ao nível de água. Ele deve ser conectado a um pino de entrada analógica do ESP32.
  • Pino + (VCC): conecte este pino a 3.3V ou 5V.
  • Pino - (GND): conecte este pino ao GND.
water sensor pinout

Como o Sensor de Nível de Água Funciona

De forma simples, quanto mais o sensor é mergulhado na água, maior é a tensão de saída no pino S. Medindo a tensão, podemos saber o nível de água.

Diagrama de Ligação

Em teoria, podemos alimentar o sensor de água conectando os pinos VCC e GND do sensor aos pinos 3.3V e GND do ESP32, respectivamente.

Porém, na prática isso não é recomendado. Se alimentarmos o sensor de água o tempo todo, ele sofre corrosão eletroquímica mais rápido por causa do ambiente úmido ⇒ É melhor alimentar o sensor de água somente no momento de ler o valor do sensor. Para isso, podemos conectar o pino VCC do sensor a um pino digital do ESP32 e programar esse pino em HIGH antes da leitura e em LOW depois da leitura.

  • Como conectar o ESP32 e o sensor de água usando protoboard
The wiring diagram between ESP32 Water Sensor

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

How to connect ESP32 and water sensor

Código ESP32 - Lendo o Valor do Sensor de Água

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-water-sensor */ #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(POWER_PIN, OUTPUT); // configure pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF Serial.print("The water sensor value: "); Serial.println(value); delay(1000); }

Passos Rápidos

  • Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente do ESP32 na Arduino IDE.
  • Copie o código acima e cole na Arduino IDE.
  • Compile e faça o upload do código para a placa ESP32 clicando no botão Upload da Arduino IDE
  • Mergulhe o sensor devagar na água (um copo de água).
  • Veja o resultado no Serial Monitor. Ele fica parecido com o abaixo. O valor é 0 quando o sensor não está tocando em nada.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
The water sensor value: 0 The water sensor value: 0 The water sensor value: 0 The water sensor value: 25 The water sensor value: 196 The water sensor value: 587 The water sensor value: 625 The water sensor value: 1434 The water sensor value: 1449 The water sensor value: 1454 The water sensor value: 1469 The water sensor value: 2525 The water sensor value: 2526 The water sensor value: 2558
Ln 11, Col 1
ESP32 Dev Module on COM15
2

※ Nota:

O sensor de água não foi feito para ser totalmente submerso. Somente as trilhas expostas da placa podem ficar dentro da água. Tenha cuidado ao instalá-lo.

Como Detectar Vazamento de Água

Para detectar vazamento de água, chuva e transbordamento de reservatório, basta comparar o valor do sensor com um limite. O limite é determinado na parte de calibração deste tutorial.

Vamos fazer o ESP32 acender um LED se um vazamento de água for detectado.

Diagrama de Ligação

The wiring diagram between ESP32 Water Sensor LED

This image is created using Fritzing. Click to enlarge image

Código ESP32 - Detectando Vazamento de Água

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-water-sensor */ #define LED_PIN 21 // ESP32 pin GPIO21 connected to LED pin #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin #define THRESHOLD 1000 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(LED_PIN, OUTPUT); // configure pin as an OUTPUT pinMode(POWER_PIN, OUTPUT); // configure pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF digitalWrite(LED_PIN, LOW); // turn LED OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF if (value > THRESHOLD) { Serial.print("The water is detected"); digitalWrite(LED_PIN, HIGH); // turn LED ON } else { digitalWrite(LED_PIN, LOW); // turn LED OFF } }

Como Medir o Nível de Água

O código abaixo divide o nível de água em 4 níveis.

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-water-sensor */ #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin #define SENSOR_MIN 0 #define SENSOR_MAX 521 int value = 0; // variable to store the sensor value int level = 0; // variable to store the water level void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(POWER_PIN, OUTPUT); // configure D7 pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF level = map(value, SENSOR_MIN, SENSOR_MAX, 0, 4); // 4 levels Serial.print("Water level: "); Serial.println(level); delay(1000); }

※ Nota:

  • SENSOR_MIN e SENSOR_MAX são determinados pelo processo de calibração.
  • O método de mapeamento acima não é preciso. Porém, é aceitável em muitas aplicações.

Calibração do Sensor de Nível de Água

Veja como calibrar o sensor de nível de água

※ Nota:

Este tutorial usa a função analogRead() para ler valores de um ADC (Conversor Analógico-Digital) conectado a um sensor de água. O ADC do ESP32 é bom para projetos que NÃO precisam de alta precisão. Porém, para projetos que precisam de medições precisas, observe:

  • O ADC do ESP32 não é perfeitamente preciso e pode precisar de calibração para dar resultados corretos. Cada placa ESP32 pode ser um pouco diferente, então você precisa calibrar o ADC de cada placa individualmente.
  • A calibração pode ser difícil, principalmente para iniciantes, e nem sempre dá o resultado exato que você quer.

Para projetos que precisam de alta precisão, considere usar um ADC externo (por exemplo, o ADS1115) com o ESP32, ou usar um Arduino, que tem um ADC mais confiável. Se mesmo assim você quiser calibrar o ADC do ESP32, consulte o ESP32 ADC Calibration Driver

Vídeo

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!