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.
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.
- 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
- 1 x Arduino UNO Atmega328;
- 1 x Cabo USB Tipo A-B compatível com Arduino Uno;
- 1 x Sensor de umidade do solo;
- 1 x Protoboard;
- 2 x LEDs difusos;
- 2 x Resistores de 220Ω;
- Jumpers fêmea-fêmea;
- Jumpers macho-fêmea;
- Jumpers macho-macho.
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.
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.
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.