fbpx
ArduinoNovidade

Como utilizar o Sensor de Umidade do Solo com o Arduino

O sensor de umidade do solo é um dispositivo eletrônico capaz de detectar ou determinar variações de umidade presente no solo. Existem, basicamente, dois tipos de sensores de umidade de solo: os capacitivos e os resistivos. Neste tutorial, iremos tratar apenas do sensor de umidade de solo resistivo, que pode ser observado na Figura 1.

A figura mostra uma foto do sensor de umidade do solo em sua forma real
Figura 1: Sensor de umidade do solo resistivo.

O sensor de umidade do solo é muito utilizado em projetos envolvendo agricultura, jardins inteligentes e irrigação automática de plantas, uma vez que consegue detectar níveis de umidade do solo e enviar estes dados para microcontroladores.

O sensor de umidade do solo é composto por duas partes: Uma sonda condutora (em forma de garfo) e um módulo eletrônico comparador contendo o chip LM393. Seu modo de funcionamento é bastante simples. A sonda condutora atua como um resistor variável (potenciômetro) cuja resistência varia de acordo com a quantidade de água presente no solo.

Como sabemos que água afeta a resistência no solo, quando o sensor entra em contato com a terra seca ele terá mais resistência em conduzir corrente elétrica. No entanto, quando colocado em terra molhada o sensor terá menos resistência em conduzir corrente elétrica.

O módulo eletrônico comparador produz uma tensão de saída de acordo com a resistência obtida e a disponibiliza por meio da sua saída analógica (A0). O mesmo sinal é enviado para o comparador de tensão LM393 que o digitaliza e o disponibiliza na saída digital (D0).

O módulo conta com 4 pinos: GND, VCC, A0 e D0, conforme detalha a Figura 2.

A imagem ilustra os 6 pinos responsáveis pelo funcionamento do módulo de umidade do solo, localizando onde cada um se encontra
Figura 2: Pinos do sensor de umidade do solo.

  • 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.

Além disto, 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.

Neste tutorial, aprenderemos como criar um monitor de umidade do solo, utilizando um sensor de umidade com o Arduino. Este monitor deve realizar a leitura analógica do sensor e exibir no monitor serial o valor da umidade em porcentagem, bem como indicar quando a terra está seca ou molhada a partir dos dados da saída digital do sensor.


MATERIAIS NECESSÁRIOS


ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

Monte o circuito conforme a Figura 3 utilizando o Arduino, o sensor de umidade do solo, a protoboard, os LEDs, os resistores e os jumpers.

A imagem ilustra o esquemático de ligação para  funcionamento do circuito para funcionamento do sensor de umidade do solo com Arduino.
Figura 3: Circuito do monitor de umidade do solo com sensor de umidade do solo.

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 A0 do Arduino;
  • Conecte o pino digital D0 do sensor à porta digital 7 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 6 do Arduino;
  • O LED vermelho deve ser conectado à porta digital 5 do Arduino.


ELABORANDO O CÓDIGO

Após a montagem do circuito, vamos a programação do Sketch. 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 umidadeAnalogica;
  • A porta digital 7 atribuída à constante umidadeDigital;
  • A porta digital 6 atribuída à constante LedVermelho;
  • A porta digital 5 atribuída à constante LedVerde.

2.Declarar as variáveis

Serão utilizadas as variáveis valorumidade e valorumidadeDigital, 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 umidade do solo 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 em porcentagem

Na função loop(), realizamos a leitura analógica do sensor de umidade do solo e armazenando o valor na variável valorumidade.

A leitura analógica do sensor poderá variar entre 0 e 1023. Para converter este valor para uma escala de 0 a 100 utilizaremos a função map().

Observação: Os valores dos limites atribuídos na função map() pode variar de sensor para sensor. Desta forma, será necessário verificar quais os valores lidos quando o sensor se encontra em solo totalmente úmido (primeiro parâmetro – 1023) e totalmente seco (segundo parâmetro – 315).

Em seguida, o valor mapeado entre 0 e 100 serão impressos no monitor serial.

5 – Leitura digital do sensor e indicador de solo seco ou úmido

Logo após, realizamos a leitura digital do sensor de umidade de solo. O sensor retornará 0 (nível lógico baixo) quando o solo estiver úmido e 1 (nível lógico alto) quando o solo estiver seco.

Sabendo disto, utilizamos a estrutura condicional if-else (se-senão) para realizar a verificação do solo, da seguinte maneira:

  • Se a leitura do sensor for igual a 0 (nível lógico baixo), a mensagem “Status: Solo úmido” será impressa no monitor serial e o LED indicador verde acenderá;
  • Senão (leitura do sensor igual a 1), a mensagem “Status: Solo seco” será exibida no monitor serial e o LED indicador Vermelho será ligado.

Ao final, o Sketch do monitor de umidade do solo ficará da seguinte maneira:

/*
  ==         MONITOR DE UMIDADE DO SOLO        ==
  ===============================================
  == BLOG DA ROBOTICA - www.blogdarobotica.com ==
  ===============================================
  Autor: Carol Correia
  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 umidadeAnalogica A0 //Atribui o pino A0 a variável umidade - leitura analógica do sensor
#define umidadeDigital 7 //Atribui o pino 7 a variável umidadeDigital - leitura digital do sensor
#define LedVermelho 5 //Atribui o pino 7 a variável LedVermelho
#define LedVerde 6 //Atribui o pino 6 a variável LedVerde

int valorumidade; //Declaração da variável que armazenará o valor da umidade lida - saída analogica
int valorumidadeDigital; //Declaração da variável que armazenara a saída digital do sensor de umidade do solo

void setup() {
  Serial.begin(9600); //Incia a comunicação serial
  pinMode(umidadeAnalogica, INPUT); //Define umidadeAnalogica como entrada
  pinMode(umidadeDigital, INPUT); //Define umidadeDigital como entrada
  pinMode(LedVermelho, OUTPUT); //Define LedVermelho como saída
  pinMode(LedVerde, OUTPUT); //Define LedVerde como saída
}

void loop() {
  valorumidade = analogRead(umidadeAnalogica); //Realiza a leitura analógica do sensor e armazena em valorumidade
  valorumidade = map(valorumidade, 1023, 315, 0, 100); //Transforma os valores analógicos em uma escala de 0 a 100
  Serial.print("Umidade encontrada: "); //Imprime mensagem
  Serial.print(valorumidade); //Imprime no monitor serial o valor de umidade em porcentagem
  Serial.println(" % " );

  valorumidadeDigital = digitalRead(umidadeDigital); //Realiza a leitura digital do sensor e armazena em valorumidadeDigital
  if (valorumidadeDigital == 0) { //Se esse valor for igual a 0, será mostrado no monitor serial que o solo está úmido e o led verde se acende
    Serial.println("Status: Solo úmido");
    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: Solo seco");
    digitalWrite(LedVermelho, HIGH);
    digitalWrite(LedVerde, LOW);
  }
  delay(500); //Atraso de 500ms
}


O modo funcionamento deste projeto pode ser visualizado no Vídeo 1.

Vídeo 1: Sensor de umidade do solo em funcionamento.

Espero ter ajudado,

Obrigada a todos e em caso de dúvidas deixe seu comentário abaixo!

Carol Correia Viana

Dúvidas? Deixe seu comentário

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.

Deixe uma pergunta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.