Como utilizar o sensor de chuva com Arduino
O sensor de chuva é um componente eletrônico que, como o próprio nome diz, é capaz de detectar a presença de chuva ou água. Ele geralmente é usado em aplicações de automação residencial, sistemas de irrigação automática, sistemas de alerta de chuva para fechamento automático de janelas ou teto solar em veículos, e em sistemas de segurança contra inundação.
O sensor de chuva é formado por duas partes: um módulo eletrônico (à esquerda) e a placa metálica coletora (à direita), conforme a Figura 1.

O funcionamento do sensor de chuva é bem simples. A placa metálica coletora possui uma série de trilhas de cobre expostas que atuam como pontos de detecção. Quando a chuva ou respingos de água caem sobre essas trilhas, a água cria uma conexão elétrica entre elas.
O princípio por trás disso é que a água é um bom condutor de eletricidade, e quando ela está presente entre as trilhas de cobre, ela permite que a corrente elétrica flua através do circuito formado pelas trilhas. Essa corrente pode então ser detectada pela placa eletrônica conectada ao sensor.
A placa metálica coletora atua como um resistor variável, cuja resistência varia de acordo com a quantidade de água presente em sua superfície. Essa resistência é inversamente proporcional à quantidade de água. Desse modo:
- Quanto mais água na superfície da placa coletora, melhor será sua condutividade e sua resistência será menor. Consequentemente, uma corrente elétrica mais alta fluirá pelo circuito;
- Por outro lado, quando há menos água na superfície da placa coletora, sua condutividade será mais baixa e sua resistência elétrica será maior, resultando em uma corrente elétrica menor no circuito.

Essa mudança na corrente elétrica que circula pode ser medida e interpretada pelo módulo eletrônico associado ao sensor de chuva. Esse módulo produz uma tensão de saída de acordo com a resistência da placa metálica, que é disponibilizada no pino analógico (A0). Essa tensão também alimenta um comparador LM393, que o digitaliza e o disponibiliza no pino de saída digital (D0).
O módulo eletrônico conta com 4 pinos: VCC, GND, A0 e D0, conforme detalha a Figura 3.

- VCC: Pino de alimentação do módulo. Recomenda-se a utilização de uma fonte de alimentação entre 3,3V e 5V. A saída analógica irá variar dependendo da tensão fornecida;
- GND: Pino de aterramento (GND);
- D0: Pino de saída digital do módulo. É possível conectá-lo aos pinos digitais do microcontrolador para leitura dos dados ou diretamente a um relé de 5V ou dispositivo similar;
- A0: Pino de saída analógica. É possível ler os dados analógicos do sensor conectando este pino a uma das entradas analógicas do microcontrolador.
O módulo conta também com um potenciômetro de ajuste de sensibilidade da saída digital (D0). Ao girar o potenciômetro no sentido horário a sensibilidade do sensor aumenta. Por sua vez, a sensibilidade diminui girando o potenciômetro no sentido anti-horário.
O módulo eletrônico conta com dois LEDs. O LED de alimentação acenderá quando o módulo for energizado. O LED da saída digital acenderá quando o sensor detectar chuva (nível lógico baixo).
Neste tutorial, exploraremos como utilizar o sensor de chuva com o Arduino. Vamos desenvolver um sistema que realizará leituras tanto analógicas quanto digitais do sensor, exibindo os dados resultantes no monitor serial. Além disso, vamos implementar indicadores visuais para informar quando o sensor detecta a presença de chuva ou não.
MATERIAIS NECESSÁRIOS
- 1x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
- 1 x Cabo USB Tipo A-B compatível com Arduino UNO;
- 1 x Sensor de chuva;
- 1 x Protoboard;
- 2 x LEDs difusos 5mm;
- 2 x Resistores 220Ω;
- Jumpers macho-macho.
ESQUEMÁTICO DE LIGAÇÃO
Monte o circuito conforme a Figura 4 utilizando o Arduino, o sensor de chuva, a protoboard, os LEDs, os resistores e os jumpers.

Ao montar seu circuito, observe os seguintes pontos:
- O pino VCC do sensor deve ser alimentado com o 5V do Arduino;
- O pino GND do sensor deve ser conectado ao pino GND do Arduino;
- Conecte o pino analógico A0 do sensor à entrada analógica A5 do Arduino;
- Conecte o pino digital D0 do sensor à porta digital 8 do Arduino;
- Os polos negativos dos LEDs devem ser conectados ao GND do Arduino;
- Para limitar a corrente dos LEDs utilize os resistores de 220 Ω;
- O LED verde deve ser conectado à porta digital 4 do Arduino;
- O LED vermelho deve ser conectado à porta digital 3 do Arduino.
ELABORANDO O CÓDIGO
Com o circuito montado, podemos proceder a programação do projeto que monitora a presença de chuva usando um sensor de chuva e indica o status através de LEDs verde e vermelho. Acompanhe os passos a seguir para melhor compreensão da lógica de programação:
1.Declarar as constantes atribuídas aos pinos de entrada e saída
Por meio da diretiva “#define” foi definido os pinos de entrada e saída do Arduino que serão utilizados na programação, sendo:
- A porta analógica A0 atribuída à constante leituraAnalogica;
- A porta digital 8 atribuída à constante leituraDigital;
- A porta digital 3 atribuída à constante LedVermelho;
- A porta digital 4 atribuída à constante LedVerde.
2. Declarar as variáveis
Serão utilizadas as variáveis valorAnalogico e valorDigital, que serão responsáveis por armazenar os dados de leitura do sensor.
3.Inicializar a comunicação serial e configurar as portas de entrada e saída
Na função setup(), inicializamos a comunicação serial por meio da instrução Serial.begin(9600);
Logo após, definimos as constantes atribuídas às portas do sensor de chuva como entrada e as constantes atribuídas às portas conectadas aos LEDs como saída.
4. Leitura analógica do sensor e exibição do valor lido
Na função loop(), realizamos a leitura analógica do sensor de chuva e armazenando o valor na variável valorAnalogico. Em seguida, a leitura será exibido no monitor serial, permitindo monitorar a intensidade percebida de chuva.
5. Leitura digital do sensor e indicador de chuva
Logo após, realizamos a leitura digital do sensor de chuva. O sensor retornará 0 (nível lógico baixo) quando o sensor detectar chuva e 1 (nível lógico alto) quando o sensor não estiver detectando chuva.
Sabendo disto, utilizamos a estrutura condicional if-else (se-senão) para verificar e exibir se está chovendo ou não, da seguinte maneira:
- Se a leitura do sensor for igual a 0 (nível lógico baixo), a mensagem “Status: Chuva não detectada” será impressa no monitor serial e o LED indicador verde acenderá;
- Senão (leitura do sensor igual a 1), a mensagem “Status: Chuva não detectada” será exibida no monitor serial e o LED indicador Vermelho será ligado.
Ao final, o código do monitor de chuva ficará da seguinte maneira:
/* == MONITOR DE CHUVA == =============================================== == 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 =============================================== */ #define leituraAnalogica A5 //Atribui o pino A5 a variável leituraAnalogica #define leituraDigital 8 //Atribui o pino 8 a variável leituraDigital #define LedVermelho 3 //Atribui o pino 3 a variável LedVermelho #define LedVerde 4 //Atribui o pino 4 a variável LedVerde int valorAnalogico; //Declaração da variável que armazenará o valor analógico do sensor de chuva int valorDigital; //Declaração da variável que armazenara a saída digital do sensor de chuva void setup() { Serial.begin(9600); //Incia a comunicação serial pinMode(leituraAnalogica, INPUT); //Define leituraAnalogica como entrada pinMode(leituraDigital, INPUT); //Define leituraDigital como entrada pinMode(LedVermelho, OUTPUT); //Define LedVermelho como saída pinMode(LedVerde, OUTPUT); //Define LedVerde como saída } void loop() { valorAnalogico = analogRead(leituraAnalogica); //Realiza a leitura analógica do sensor e armazena em valorAnalogico Serial.print("Valor analógico do sensor: "); //Imprime mensagem Serial.println(valorAnalogico); //Imprime no monitor serial o valor da saída analógica do sensor de chuva valorDigital = digitalRead(leituraDigital); //Realiza a leitura digital do sensor e armazena em valorDigital if (valorDigital == 0) { //Se esse valor for igual a 0, será mostrado no monitor serial que a chuva foi detectada e o led verde se acende Serial.println("Status: Chuva detectada"); digitalWrite(LedVermelho, LOW); digitalWrite(LedVerde, HIGH); } else { // se esse valor for igual a 1, será mostrado no monitor serial que o solo está seco e o led vermelho se acende Serial.println("Status: Chuva não detectada"); digitalWrite(LedVermelho, HIGH); digitalWrite(LedVerde, LOW); } delay(500); //Atraso de 500ms }
O modo funcionamento deste projeto pode ser visualizado no Vídeo 1.
Espero ter ajudado,
Obrigada a todos e em caso de dúvidas deixe seu comentário abaixo!
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.