Sensor de umidade de solo anticorrosivo

Sensor de umidade de solo é um negócio complicado. Esses com o cobre exposto corroem rapidamente, daí se coloca em um projeto em campo e logo o cliente reclama de mal funcionamento. Aí vai lá o desenvolvedor trocar o sensor e passa mais um tempo, o mesmo problema. Mas tem uma solução bacana! O sensor de umidade de solo anticorrosivo da CurtoCircuito!

Se está procurando por um sensor de umidade ambiente, sugiro esse artigo do DHT22 ou esse outro do HTU21D.

Características do sensor de umidade de solo anticorrosivo

Esse sensor parece um plug de tomada (não conecte na tomada), mas é bem pequeno (é, acho que nem dá pra colocar na tomada). Ele é um sensor que se deve alimentar em 3V3 e tem uma saída digital e uma analógica. o gatilho pode ser ajustado através de seu potenciômetro. Quando atingir o limite, o pino vai pro nível lógico 0.

Código para leitura

Fiz a leitura desse sensor de umidade de solo anticorrosivo com ESP32, aproveitando que ele é 3V3 e seu analógico tem 12 bits, o que dá uma amostragem de 4096 valores possíveis. Coloquei um gatilho no pino 18 para que a amostragem fosse tirada apenas no caso de atingir o limite. Na função que tira a amostragem, faço 10 leituras do AD (conectado ao pino 4), divido as amostras por 10 e uso a função map para tirar o percentual de umidade. O valor inicial é 4095 e vai caindo conforme a umidade aumenta, então fiz o mapeamento invertido.

Para exibir na serial, utilizei a função printf, que infelizmente não está disponível para Arduino, então nesse caso será necessário trocar por printprintln, exceto se criar uma string para compor a mensagem seguida do valor.

O código ficou assim:

uint8_t trigger = 0;
int humidity    = 0;

void setup() {
Serial.begin(9600);
  pinMode(18,INPUT);
}

void humidityPercent(){
    int fromSensor = 0;
    for (uint8_t i=0; i<10;i++){
        fromSensor += analogRead(4);
    }
    fromSensor /= 10;
    int percent = map(fromSensor,0,4095,100,0);
    Serial.printf("Umidade: %d porcento\n", percent); //12 bits
}

void loop() {
  trigger  = digitalRead(18);
  if (trigger == 0){
      Serial.printf("Gatilhos: %d\n", trigger);
      humidityPercent();
  }
  
  vTaskDelay(pdMS_TO_TICKS(1000));
}

Fácil demais essa leitura, hum? Mas claro que a mensagem na serial não importa, o que quereremos na verdade é o acionamento de um relé, uma mensagem via rádio ou algo do tipo. Mais pra frente escreverei outro artigo com esse sensor, regando uma planta ou algo do tipo.

A leitura de teste feita com uma flanela umedecida ficou assim:

Sensor de umidade de solo anticorrosivo - leitura do gatilho

Onde comprar o sensor de umidade de solo anticorrosivo?

Esse sensor é vendido na CurtoCircuito, podendo ser adquirido através desse link. Custa mais que o outro, mas não vai se desmanchar igual uma bolacha de Maizena no leite.

Até a próxima!

Revisão: Ricardo Amaral de Andrade