ESP32 - Sensor de Chuva

O sensor de chuva é capaz de detectar e medir o nível de chuva/neve. O sensor de chuva tem duas saídas: uma saída digital (LOW/HIGH) e uma saída analógica.

Neste tutorial, vamos aprender a usar um ESP32 e um sensor de chuva para detectar e medir a chuva. Especificamente, vamos ver:

esp32 rain sensor

Depois, você pode modificar o código para acionar um motor ou um alerta quando ele detectar chuva/neve

Sobre o Sensor de Chuva

O sensor de chuva pode ser usado para detectar a presença de chuva ou medir o nível de água que cai da chuva. O sensor de chuva oferece duas opções, por meio de um pino de saída digital e um pino de saída analógica.

O sensor de chuva tem duas partes:

  • A placa sensora
  • O módulo eletrônico
Rain Sensor Pinout
image source: diyables.io

A placa sensora

A placa sensora é instalada do lado de fora, onde pode receber chuva/neve (por exemplo, no telhado). Ela tem uma série de trilhas de cobre expostas, divididas em dois grupos: trilhas de alimentação e trilhas de sensoriamento. Essas trilhas de alimentação e de sensoriamento não estão conectadas, a menos que sejam ligadas por água ou neve. Não há diferença entre a trilha de alimentação e a trilha de sensoriamento. Você pode escolher uma como trilha de alimentação e a outra será a trilha de sensoriamento

O módulo eletrônico

O módulo eletrônico do sensor de chuva converte o sinal da placa sensora em um valor analógico ou digital que pode ser lido pelo ESP32. Ele tem quatro pinos:

  • Pino VCC: deve ser conectado ao VCC (3.3V a 5V).
  • Pino GND: deve ser conectado ao GND (0V).
  • Pino DO: é um pino de saída digital. Fica em HIGH se a chuva não for detectada e em LOW se for detectada. O valor limite para a detecção de chuva pode ser ajustado com um potenciômetro embutido.
  • Pino AO: é um pino de saída analógica. O valor de saída diminui quando a quantidade de água na placa sensora aumenta, e aumenta quando a quantidade de água na placa sensora diminui.

Além disso, ele tem dois LEDs indicadores:

  • Um LED PWR para a alimentação.
  • Um LED DO para o estado da chuva no pino DO: fica aceso quando há chuva.

Como Funciona

Para o pino DO:

  • O módulo tem um potenciômetro embutido para ajustar o limite (sensibilidade).
  • Quando a intensidade está acima do valor limite, a chuva é detectada, o pino de saída do sensor fica em LOW e o LED DO acende.
  • Quando a intensidade está abaixo do valor limite, a chuva NÃO é detectada, o pino de saída do sensor fica em HIGH e o LED DO apaga.

Para o pino AO:

  • Quanto mais água na placa sensora, menor o valor lido no pino AO.
  • Quanto menos água na placa sensora, maior o valor lido no pino AO.

Observe que o potenciômetro não afeta o valor no pino AO.

Diagrama de Ligação

Como dito acima, o pino VCC do sensor deve ser conectado a 3.3V ou 5V. Se conectarmos esse pino direto ao pino 3.3V ou 5V do ESP32, a vida útil do sensor diminui por causa da corrosão eletroquímica. O melhor jeito é conectar o pino VCC do sensor de chuva a um pino de saída do ESP32. Podemos programar esse pino para alimentar o sensor de chuva somente na hora da leitura. Isso minimiza o impacto da corrosão eletroquímica.

Como o módulo do sensor de chuva tem duas saídas, você pode usar uma delas ou as duas, conforme a sua necessidade.

  • Como conectar o ESP32 e o sensor de chuva usando protoboard

O módulo do sensor de chuva oferece duas saídas. Você pode usar uma delas ou as duas, conforme necessário.

The wiring diagram between ESP32 rain 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 rain sensor

Código ESP32 - Lendo o valor do pino DO

/* * 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-rain-sensor */ #define POWER_PIN 19 // ESP32's pin GPIO19 that provides the power to the rain sensor #define DO_PIN 21 // ESP32's pin GPIO21 connected to DO pin of the rain sensor void setup() { // initialize serial communication Serial.begin(9600); // initialize the Arduino's pin as an input pinMode(POWER_PIN, OUTPUT); // configure the power pin pin as an OUTPUT pinMode(DO_PIN, INPUT); } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the rain sensor's power ON delay(10); // wait 10 milliseconds int rain_state = digitalRead(DO_PIN); digitalWrite(POWER_PIN, LOW); // turn the rain sensor's power OFF if (rain_state == HIGH) Serial.println("The rain is NOT detected"); else Serial.println("The rain is detected"); delay(1000); // pause for 1 sec to avoid reading sensors frequently to prolong the sensor lifetime }

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 abra na Arduino IDE
  • Clique no botão Upload da Arduino IDE para fazer o upload do código para o ESP32
  • Pingue um pouco de água no sensor de chuva
  • Veja o resultado no Serial Monitor.
∞
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 rain is NOT detected The rain is NOT detected The rain is NOT detected The rain is detected The rain is detected The rain is detected The rain is detected The rain is detected The rain is NOT detected The rain is NOT detected The rain is NOT detected
Ln 11, Col 1
ESP32 Dev Module on COM15
2

Lembre-se: se o LED ficar sempre aceso ou sempre apagado mesmo quando o sensor está na chuva, você pode ajustar o potenciômetro para regular a sensibilidade do sensor.

Código ESP32 - Lendo o valor do pino AO

/* * 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-rain-sensor */ #define POWER_PIN 19 // ESP32's pin GPIO19 that provides the power to the rain sensor #define AO_PIN 36 // ESP32's pin GPIO36 connected to AO pin of the rain sensor void setup() { // initialize serial communication Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(POWER_PIN, OUTPUT); // configure the power pin pin as an OUTPUT } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the rain sensor's power ON delay(10); // wait 10 milliseconds int rain_value = analogRead(AO_PIN); digitalWrite(POWER_PIN, LOW); // turn the rain sensor's power OFF Serial.println(rain_value); // print out the analog value delay(1000); // pause for 1 sec to avoid reading sensors frequently to prolong the sensor lifetime }

Passos Rápidos

  • Copie o código acima e abra na Arduino IDE
  • Clique no botão Upload da Arduino IDE para fazer o upload do código para o ESP32
  • Pingue um pouco de água no sensor de chuva
  • Veja o resultado no Serial Monitor.
∞
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
225 2426 236 563 687 959 975 1009 1017 1053 1078 841 743 440 279
Ln 11, Col 1
ESP32 Dev Module on COM15
2

※ Nota:

Este tutorial usa a função analogRead() para ler valores de um ADC (Conversor Analógico-Digital) conectado a um sensor de chuva. 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!