Sensor de chuva YL-83 40

Se você já montou ou vai montar uma estação de monitoração climática, usando sensores de temperatura, umidade e pressão, precisa conhecer todo o potencial  dSensor de chuva YL-83. Este conjunto é formado por uma placa que forma o sensor propriamente dito, com várias trilhas nos dois lados e material resistente à oxidação , que se encarrega de detectar o nível de chuva/umidade do ambiente. Esta placa, por sua vez, é ligada por meio de 2 fios ao módulo principal, que contém o circuito de controle que vai se comunicar com o microcontrolador. No caso deste post, o Arduino.
Sensor de chuva YL-83

O módulo de controle, como podemos ver acima, tem 2 pinos que vão se comunicar com a placa do sensor, e na outra extremidade, 4 pinos de sinal e alimentação : A0 (sinal analógico), D0 (sinal digital), GND e Vcc. A alimentação vai de 3.3 à 5 volts.

A placa também possui, logo acima dos pinos, 2 leds. O da esquerda (verde) permanece apagado quando não há sinal no sensor, e começa a piscar ou permanece aceso quando o sensor é acionado. O led da direita (vermelho), indica que o módulo está ligado :

Detalhe modulo de controle

Existem 2 formas bem simples de se trabalhar com esse sensor de chuva. Uma delas é utilizando a saída digital, que simplesmente informa se foi detectada chuva/líquido (saída em nível baixo / low) ou se o sensor está seco (saída em nível alto / high).

Outra maneira, que permite maiores variações, é utilizar a saída analógica, cujo valor vai de 0 a 1023, e dessa maneira dimensionar o que você quer fazer com esse valor, indicando em um painel, por exemplo, se não há chuva, ou se ela está fraca, forte, moderada, etc.

Mas chega de teoria e vamos à prática, mostrando a ligação do sensor de chuva e do módulo de controle ao Arduino, juntamente com um display LCD 16×2 :

Circuito sensor de chuva e display LCD 16x2

O programa abaixo lê as informações tanto da saída digital D0 do módulo, ligada ao pino 7 do Arduino, como da saída analógica A0 , ligada ao pino A5 :

//Programa : Teste sensor de chuva YL-83
//Autor : MakerHero

#include <LiquidCrystal.h> //Carrega a biblioteca LiquidCrystal  

int pino_d = 7; //Pino ligado ao D0 do sensor
int pino_a = A5; //Pino ligado ao A0 do sensor
int val_d = 0; //Armazena o valor lido do pino digital
int val_a = 0; //Armazena o valor lido do pino analogico

//Define os pinos que serão utilizados para ligação ao display  
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  

void setup()
{
  lcd.begin(16, 2); 
  pinMode(pino_d, INPUT);
  pinMode(pino_a, INPUT);
  Serial.begin(9600);
  lcd.setCursor(0,0);
  lcd.print("Chuva  : ");
  lcd.setCursor(0,1);
  lcd.print("Intens.: ");
}

void loop()
{
  //Le e arnazena o valor do pino digital
  val_d = digitalRead(pino_d);
  //Le e armazena o valor do pino analogico
  val_a = analogRead(pino_a);
  //Envia as informacoes para o serial monitor
  Serial.print("Valor digital : ");
  Serial.print(val_d);
  Serial.print(" - Valor analogico : ");
  Serial.println(val_a);
  //Mostra no display se ha chuva ou nao
  if (val_d == 1)
  {
    lcd.setCursor(10,0);
    lcd.print("Nao");
  }
  else
  {
    lcd.setCursor(10,0);
    lcd.print("Sim");
  }

  //Mostra no display o nivel de intensidade
  //da chuva
  if (val_a >900 && val_a <1023)
  {
    lcd.setCursor(10,1);
    lcd.print("      ");
    lcd.setCursor(10,1);
    lcd.print("----");
  }
  else if (val_a >600 && val_a <900)
  {
    lcd.setCursor(10,1);
    lcd.print("      ");
    lcd.setCursor(10,1);
    lcd.print("Fraca");
  }
  else if (val_a >400 && val_a <600)
  {
    lcd.setCursor(10,1);
    lcd.print("      ");
    lcd.setCursor(10,1);
    lcd.print("Moder.");
  }
  else if (val_a <400)
  {
    lcd.setCursor(10,1);
    lcd.print("      ");
    lcd.setCursor(10,1);
    lcd.print("Forte");
  }    
  delay(1000);
}

No display, é mostrada a indicação de chuva, e se a mesma é fraca, moderada ou intensa :

Sensor chuva e display LCD

As informações sobre o sensor também são enviadas para o serial monitor, caso você não tenha um display à disposição.

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

40 Comentários

  1. Olá Prof. Eu montei este projeto, e gostaria de acionar o buzzer quando a chuva estiver forte. Você pode me ajudar na lógica? Obrigado.

    1. Olá Sílvio,

      Para isso basta você escolher um pino livre para o buzzer, configure ele como saída e onde tem lcd.print(“Forte”); no código, coloque logo abaixo digitalWrite(“Pino buzzer”, HIGH);
      e abaixo dos demais prints de intensidade coloque digitalWrite(“Pino buzzer”, LOW);
      Substituindo o “Pino buzzer” pelo número do pino que você escolheu para o buzzer.

      Abraços!
      Vinícius – Equipe MakerHero

    2. Opa main, queria saber por onde você fez o esquema?

  2. Olá Adilson, estou aprendendo arduino, e testanto este programa desenvolvido por você com sensor de chuva, mas, estou enfrentando problemas, pois, estou usando o LCD I2C, e não há meio de eu coneguir resolver o problema. Já baixei um monete de versões da biblioteca, mas, continua dando os mesmos erros.
    Arduino: 1.8.15 (Windows 10), Placa:”Arduino Nano, ATmega328P”

    Projeto_leitura_de_sensor_de_chuva_notas:26:35: error: no matching function for call to ‘LiquidCrystal_I2C::LiquidCrystal_I2C(int, int)’

    LiquidCrystal_I2C lcd(0x3F, D5_pin);

    ^

    In file included from C:\Arduino\Projeto_leitura_de_sensor_de_chuva_notas\Projeto_leitura_de_sensor_de_chuva_notas.ino:4:0:

    C:\Users\silvi\OneDrive\Documentos\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:71:2: note: candidate: LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t)

    LiquidCrystal_I2C(uint8_t lcd_addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t charsize = LCD_5x8DOTS);

    ^~~~~~~~~~~~~~~~~

    C:\Users\silvi\OneDrive\Documentos\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:71:2: note: candidate expects 4 arguments, 2 provided

    C:\Users\silvi\OneDrive\Documentos\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:60:7: note: candidate: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)

    class LiquidCrystal_I2C : public Print {

    ^~~~~~~~~~~~~~~~~

    C:\Users\silvi\OneDrive\Documentos\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:60:7: note: candidate expects 1 argument, 2 provided

    C:\Users\silvi\OneDrive\Documentos\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:60:7: note: candidate: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(LiquidCrystal_I2C&&)

    C:\Users\silvi\OneDrive\Documentos\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:60:7: note: candidate expects 1 argument, 2 provided

    C:\Arduino\Projeto_leitura_de_sensor_de_chuva_notas\Projeto_leitura_de_sensor_de_chuva_notas.ino: In function ‘void setup()’:

    Projeto_leitura_de_sensor_de_chuva_notas:31:17: error: no matching function for call to ‘LiquidCrystal_I2C::begin(int, int)’

    lcd.begin(16,2);

    ^

    In file included from C:\Arduino\Projeto_leitura_de_sensor_de_chuva_notas\Projeto_leitura_de_sensor_de_chuva_notas.ino:4:0:

    C:\Users\silvi\OneDrive\Documentos\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:76:7: note: candidate: void LiquidCrystal_I2C::begin()

    void begin();

    ^~~~~

    C:\Users\silvi\OneDrive\Documentos\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:76:7: note: candidate expects 0 arguments, 2 provided

    C:\Arduino\Projeto_leitura_de_sensor_de_chuva_notas\Projeto_leitura_de_sensor_de_chuva_notas.ino: At global scope:

    Projeto_leitura_de_sensor_de_chuva_notas:48:3: error: ‘val_d’ does not name a type

    val_d = digitalRead(pino_d);

    ^~~~~

    Projeto_leitura_de_sensor_de_chuva_notas:50:3: error: ‘val_a’ does not name a type

    val_a = analogRead(pino_a);

    ^~~~~

    Projeto_leitura_de_sensor_de_chuva_notas:52:3: error: ‘Serial’ does not name a type

    Serial.print(“Valor digital : “);

    ^~~~~~

    Projeto_leitura_de_sensor_de_chuva_notas:53:3: error: ‘Serial’ does not name a type

    Serial.print(val_d);

    ^~~~~~

    Projeto_leitura_de_sensor_de_chuva_notas:54:3: error: ‘Serial’ does not name a type

    Serial.print(” – Valor analogico : “);

    ^~~~~~

    Projeto_leitura_de_sensor_de_chuva_notas:55:3: error: ‘Serial’ does not name a type

    Serial.println(val_a);

    ^~~~~~

    Projeto_leitura_de_sensor_de_chuva_notas:57:3: error: expected unqualified-id before ‘if’

    if (val_d == 1)

    ^~

    Projeto_leitura_de_sensor_de_chuva_notas:62:3: error: expected unqualified-id before ‘else’

    else

    ^~~~

    Projeto_leitura_de_sensor_de_chuva_notas:70:3: error: expected unqualified-id before ‘if’

    if (val_a >900 && val_a 600 && val_a 400 && val_a <600)

    ^~~~

    Projeto_leitura_de_sensor_de_chuva_notas:91:3: error: expected unqualified-id before 'else'

    else if (val_a Preferências”

    Pelo que eu percebi, eu teho mais campos que o fornecido pela biblioteca.

    Você poderia me ajudar com isto?

    Obrigado.

    1. Olá Sílvio,

      A chamada para o display I2C deve ser assim: LiquidCrystal_I2C lcd(0x27,16,2);

      Onde 0x27 é o endereço, e 16 e 2 são as dimensões do display.

      Tente se assim dá certo.

      Abraços!
      Vinícius – Equipe MakerHero

  3. Existe algum sensor de chuva que não oxide em alguns dias exposto ao tempo?

    1. Olá Paulo, tudo bem?

      Qual parte do sensor oxida em alguns dias?

      Os terminais dele precisam ser protegidos de alguma forma, apenas a parte da placa em que fica o sensor em si é projetada para ficar exposta ao tempo.

      Abraços!
      Vinícius – Equipe MakerHero

  4. Boa noite,
    Qual o valor do potenciómetro?

    Obrigada

    1. Olá Daniela,

      O potenciômetro utilizado na montagem foi de 50k.

      Abraços!
      Vinícius – Equipe MakerHero

  5. Nesse projeto como faço para acionar uma saida no caso de. Chuva moderada ou forte?

    1. Olá Audrei,

      Você pode acrescentar a linha digitalWrite(pino_x, HIGH); após as linhas que falam “Moder.” e “Forte” e digitalWrite(pino_x, LOW); após as linhas falam “—-” e “Fraca”

      Abraços!
      Vinícius – Equipe MakerHero

  6. Boa tarde!
    Ótimo site e ótimos artigos. Gostaria de usar este sensor de chuva para ligar um motor de uma persiana, onde ao detectar a chuva, a persiana fecharia automaticamente. Sabe me dizer se isso é possível e fácil de se fazer? O motor seria um da marca Udinese. Grato!

    1. Olá Marcelo,

      Acredito que seja possível sim 😀
      Boa sorte no seu projeto!

      Abraço,
      Rosana – Equipe MakerHero

  7. Boa Noite

    Seria possível conectar toda a tecnologia de chuva a um 3G?
    Teria um dispositivo que medisse o volume de chuva?

    Obrigado!

    1. Olá Gabriel!

      É possível sim, dê uma olhada neste produto aqui:
      https://www.makerhero.com/produto/modulo-gsm-gprs-sim800l-antena/

      Abraços!

      André – Equipe MakerHero

  8. O meu apresentou o seguinte erro….. “expected unqualified-id before numeric constant” .

    poderia me ajudar ?

  9. Gostaria de saber se esse circuito funcionária com Óleo automotivo? No caso se eu conseguiria medir a porcentagem de água presente no óleo.

    1. Olá Sandro!

      Nunca testamos isso aqui. Acho que até pode funcionar, mas depende da resistividade do óleo puro, não seria simples de fazer.

      Abraços!

      André – Equipe MakerHero

  10. Como posso fazer para acrescentar um buzzer e um relé

  11. GOSTEI MUITO, MAS GOSTARIA DE COLOCAR UM BUZZER OU UM RELE
    PODERIA ME DAR UMA AJUDA PARA INCLUIR OS DOIS
    ABRAÇO DORIVAL BONINI

  12. Tem como fazer com esse sensor de chuva um sensor de molhamento foliar

  13. Ola amigo, estou precisando de uma solução dessa para acionar um motor de bomba, é o seguinte preciso que esse sensor de chuva desligue a bomba assim que começar a chover, isso sera usado em um climatizador de ambiente, pois qdo estiver chovendo a bomba que desligar, seria possivel tao solução?

    meu tel (16) 99344-3604 claro e whatzap.

  14. Boa tarde. Queria saber como faço pra quando detectar chuva o arduino liguei motor de 5v e qual código usar

  15. Olá amigo! Como ficaria o código/esquemático para se ligar um motor de passo para, por exemplo, chovendo, o motor rode até um fim-de-curso e, parando a chuva, o motor retorne a sua posição original? Grato

  16. Você precisa usar >= ou <= nos seus IFs, senão quando o sensor der alguns dos valores limites exatos não entrará em nenhum IF, por exemplo se val_a = 900, não entrará em IF.

  17. Onde encontro o sensor para adicionar no fritzing?

  18. Olá Felipe, muito bom o projeto, gostaria de saber como seria o desenho esquemático para ligar um motor dc no lugar do buzzer, teria como fazer essa ligação?
    Abraço!

    1. Boa tarde Ariane,

      Obrigado. Dê uma olhada nesse post do sensor infravermelho, que usa um buzzer e você pode usar como base para o seu projeto: https://www.makerhero.com/sensor-infravermelho-arduino/

      Abraço

      Adilson – Equipe MakerHero

  19. Prezado Adilson,

    Gostaria de saber se o seu sensor de chuva funciona no equipamento que tenho, fabricante DENKOVI, modelo SNMP 8 Relay Module for Temperature Measurement LM35DZ antes de eu comprar.

    Abraço.

    1. Boa tarde Luciano,

      Não conheço o equipamento, mas pelas informações do site do fabricante o módulo SNMP tem portas analógicas e digitais, e o sensor de chuva tem uma saída digital e uma saída analógica, logo deve funcionar sem problemas.

      De qualquer forma, recomendo dar uma olhada no manual do produto neste link: https://denkovi.com/snmp-eight-relay-board-for-temperature-measurement-lm35dz

      Abraço

      Adilson – Equipe MakerHero

      1. Prezado Adilson,

        Vou estudar melhor o equipamento deles.
        Mas obrigado pela agilidade e pelo retorno.

        Abraço.

  20. Gostaria de saber qual o melhor sensor de chuva para fazer um Varal Autônomo??

  21. Boa Noite,
    Gostaria de saber se posso conectar o Sensor de chuva a algum que componente de módulo Bluetooth, para ai sim trocar informações com o Arduino, e se sim, como.

    1. Boa tarde Suellen,

      É possível sim. Utilize as informações desse post para iniciar : https://www.makerhero.com/blog/tutorial-arduino-bluetooth-hc-05-mestre/

      Abraço.

      Adilson – Equipe MakerHero

  22. Boa tarde. Funcionou em parte. Com o sensor molhado ou não continua mostrando Chuva: Sim.

    1. Boa tarde Ricardo,

      Tente ajustar a sensibilidade do sensor por meio do potenciômetro na placa.

      Grato.

      Adilson – Equipe MakerHero

      1. Para conseguir uma leitura precisa é necessário usar o potenciômetro para regular a sensibilidade?

        Essa placa pode ficar a céu aberto, sem problemas?

        Obrigado!

  23. Hi nice work!
    I am working with the yl-83 too. And i use the fritzing Software.
    Can someone send me the custom Part for fritzing?
    Thx my mail is [email protected]

  24. Boa tarde Wenderson,

    Legal, obrigado pela sugestão.

    Dependendo do seu projeto, você pode utilizar a própria seção Loop do Arduino :

    void loop()
    {
    if (comando_1 = 1)
    {
    lcd.print(“Canal 1 Ativado”);
    }
    if (comando_2 = 1)
    {
    lcd.print(“Canal 2 Ativado”);
    }

    Abraço.

    Adilson – Equipe MakerHero

  25. Bom dia amigo!!

    Interessante esse código.
    Você já pensou em implementá-lo do jeito que toda vez que o sensor acusar chuva, ele dê um sinal por exemplo, para acionar um motor e fechar uma janela!?
    Outra ideia, como fazer um loop infinito mostrando no LCD quais portas do Arduíno estão com comando? Por exemplo, canal 1 ATIVADO(pode ser uma lâmpada que recebeu o comando para acender), canal 2 DESATIVADO (motor do sensor de chuva desligado, janela aberta) e por aí vai…
    Abraços,
    Wenderson