INEMA.SOLUÇÕES
Solução 2 · Irrigação

Irrigação que rega só quando a terra pede

Um sensor mede a umidade da terra, o ESP32 decide e liga uma mini bomba por alguns segundos. O painel mostra no celular a umidade, a luz e a temperatura. Serve para a horta da escola, a varanda do vizinho e o pequeno produtor.

Kit R$ 100–160Dificuldade: fácilTudo em 3,3 V e 5 V

Como funciona

Mede, decide, rega, mostra

Sensores medem ESP32 decide Terra seca Terra úmida Painel no celular umidade da terra, luz, ar umidade abaixo de 35%? regou há mais de 30 min? bomba liga 5 s não faz nada números e quantas regas
Os limites (35%, 5 s, 30 min) são pontos de partida. Você ajusta para cada planta depois dos testes.

O sensor capacitivo devolve um número que cai quando a terra fica molhada. O ESP32 lê esse número a cada 2 segundos e transforma em porcentagem. Se a terra estiver seca e a última rega já tiver acontecido há mais de 30 minutos, ele liga o relé, que liga a bomba. A espera entre regas dá tempo para a água descer até o sensor, senão a bomba encharca o vaso.

Peças

Lista de compras

PeçaPara que servePreço aprox.
ESP32 DevKit V1 (30 pinos)O cérebro, com Wi-FiR$ 30–45
Sensor de umidade de solo capacitivo v1.2Mede a umidade sem enferrujar (o resistivo, de garfo, corrói em semanas)R$ 7–12
DHT22 (AM2302)Temperatura e umidade do arR$ 18–28
BH1750 (módulo GY-302)Quantidade de luz, em luxR$ 8–14
Módulo relé 1 canal 5 V com optoacopladorLiga a bomba. Compre um que aceite sinal de 3,3 VR$ 6–10
Mini bomba submersa 5 V + 1 m de mangueiraLeva a água do pote para o vasoR$ 12–20
Fonte 5 V 2 A (carregador de celular serve)Alimenta a bombaR$ 0–20
Protoboard, jumpers, resistor 10 kΩLigações sem soldaR$ 12–20
TotalR$ 100–160

Preços aproximados de loja online brasileira em outubro de 2026, a conferir antes de comprar. Não inclui vaso, pote de água nem caixa de acabamento.

Ligação

O circuito, pino por pino

ESP32 3V3 GND VIN 5V GPIO 34 GPIO 4 GPIO 21 GPIO 22 GPIO 26 Solo · AOUT DHT22 · DATA BH1750 · SDA SCL Relé · IN VCC 3V3 · GND 3V3 · GND · 10k VCC 3V3 · GND VCC no VIN · GND Lado da bomba (contato do relé) Fonte 5 V+ e − ReléCOM · NO Bomba+ e −
Fio de cima: + da fonte → COM do relé; NO do relé → + da bomba. Fio de baixo: − da bomba → − da fonte. A bomba não passa pelo ESP32.
ComponentePino do componenteLiga no ESP32
Sensor de soloVCC · GND · AOUT3V3 · GND · GPIO 34
DHT22VCC · GND · DATA3V3 · GND · GPIO 4 (resistor 10 kΩ entre DATA e 3V3; módulo com placa já traz)
BH1750VCC · GND · SDA · SCL · ADDR3V3 · GND · GPIO 21 · GPIO 22 · ADDR solto (endereço 0x23)
ReléVCC · GND · INVIN (5 V do USB) · GND · GPIO 26
Por que GPIO 34 no sensor de solo? Com o Wi-Fi ligado, só os pinos 32 a 39 leem sinal analógico direito no ESP32. O 34 é só de entrada, perfeito para sensor.

Passo a passo

Do pacote ao primeiro gole d'água

  1. Prepare a Arduino IDE. Instale a Arduino IDE 2, depois em Gerenciador de Placas instale "esp32" (Espressif). Em Bibliotecas, instale "DHT sensor library" e "Adafruit Unified Sensor" (Adafruit) e "BH1750" (Christopher Laws).
  2. Teste a placa sozinha. Ligue o ESP32 no USB, escolha a placa "ESP32 Dev Module" e a porta, e grave o exemplo Blink. Se não gravar, segure o botão BOOT quando aparecer "Connecting...".
  3. Ligue os sensores, sem a bomba. Siga a tabela acima. Confira duas vezes: 3V3 nos sensores, nunca o VIN.
  4. Calibre o sensor de solo. Grave o código, abra o Monitor Serial (115200) e anote o valor "bruto" com o sensor no ar (seco) e dentro de um copo d'água até a linha marcada (molhado). Troque os números de SECO e MOLHADO.
  5. Ligue o relé e teste com um LED no lugar da bomba. Quando a terra estiver seca, o relé tem que clicar por 5 segundos.
  6. Coloque a bomba. Bomba dentro de um pote com água, mangueira no vaso, fonte de 5 V pelo contato do relé. Deixe o ESP32 e a protoboard numa caixa, acima da água.
  7. Abra o painel. O Monitor Serial mostra o IP (ex.: 192.168.0.50). Digite esse IP no navegador do celular, na mesma rede Wi-Fi.

Código

Arduino IDE para ESP32

Troque o nome e a senha da rede, calibre SECO e MOLHADO e grave. O painel atualiza sozinho a cada 5 segundos.

// Irrigação inteligente — ESP32, Arduino IDE
// Bibliotecas: "DHT sensor library" e
// "Adafruit Unified Sensor" (Adafruit),
// "BH1750" (Christopher Laws)
#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <DHT.h>
#include <BH1750.h>

const char* REDE  = "NOME_DA_REDE";
const char* SENHA = "SENHA_DA_REDE";

// GPIO 34: sensor de solo (AOUT)
const int PINO_SOLO = 34;
// GPIO 4: DHT22 (DATA)
const int PINO_DHT = 4;
// GPIO 26: relé da bomba (IN)
const int PINO_RELE = 26;
// BH1750: SDA no GPIO 21, SCL no GPIO 22

// A maioria dos relés liga com LOW.
// Se o seu ligar com HIGH, troque os dois.
const int LIGA = LOW, DESLIGA = HIGH;

// Calibre: sensor no ar (SECO) e na água
int SECO = 3300, MOLHADO = 1400;
// % de umidade que dispara a rega
const int REGAR_ABAIXO = 35;
// bomba ligada 5 s; espera 30 min
const unsigned long REGA_MS = 5000;
const unsigned long ESPERA_MS = 30UL * 60 * 1000;

DHT dht(PINO_DHT, DHT22);
BH1750 luz;
WebServer servidor(80);
int umidade = 0, regas = 0;
float tempAr = NAN, umAr = NAN, lux = 0;
unsigned long ultimaRega = 0, ultimaLeitura = 0;
bool jaRegou = false;

void ler() {
  int bruto = analogRead(PINO_SOLO);
  int pct = map(bruto, SECO, MOLHADO, 0, 100);
  umidade = constrain(pct, 0, 100);
  tempAr = dht.readTemperature();
  umAr = dht.readHumidity();
  lux = luz.readLightLevel();
  Serial.printf("bruto=%d umidade=%d%%\n",
                bruto, umidade);
}

void regar() {
  digitalWrite(PINO_RELE, LIGA);
  // versão 1: trava 5 s enquanto rega
  delay(REGA_MS);
  digitalWrite(PINO_RELE, DESLIGA);
  ultimaRega = millis();
  jaRegou = true;
  regas++;
}

// /dados: JSON para o painel e para a IA
void dados() {
  String j = "{\"umidade\":" + String(umidade);
  j += ",\"temp\":" + String(tempAr, 1);
  j += ",\"umidade_ar\":" + String(umAr, 0);
  j += ",\"lux\":" + String(lux, 0);
  j += ",\"regas\":" + String(regas) + "}";
  servidor.send(200, "application/json", j);
}

// /: página que abre no celular (5 em 5 s)
void painel() {
  String h = "<meta name=viewport "
    "content='width=device-width'>"
    "<meta http-equiv=refresh content=5>";
  h += "<h2>Horta</h2><p>Terra: " + String(umidade);
  h += "%<br>Ar: " + String(tempAr, 1) + " C";
  h += "<br>Luz: " + String(lux, 0) + " lux";
  h += "<br>Regas: " + String(regas) + "</p>";
  servidor.send(200, "text/html", h);
}

void setup() {
  Serial.begin(115200);
  // bomba desligada antes de virar saída
  digitalWrite(PINO_RELE, DESLIGA);
  pinMode(PINO_RELE, OUTPUT);
  dht.begin();
  Wire.begin(21, 22);
  luz.begin();
  WiFi.begin(REDE, SENHA);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.print("\nPainel em http://");
  Serial.println(WiFi.localIP());
  servidor.on("/", painel);
  servidor.on("/dados", dados);
  servidor.begin();
}

void loop() {
  servidor.handleClient();
  if (millis() - ultimaLeitura < 2000) return;
  ultimaLeitura = millis();
  ler();
  bool passou = millis() - ultimaRega > ESPERA_MS;
  bool podeRegar = !jaRegou || passou;
  if (umidade < REGAR_ABAIXO && podeRegar) regar();
}

A camada de IA

O que a IA faz neste projeto

Não regar antes da chuva

O Open-Meteo dá a previsão de graça, sem cadastro. Na versão 2, o ESP32 consulta a chance de chuva das próximas horas e pula a rega se passar de 70%.

Pergunte à horta

Um script no seu computador lê os dados do ESP32 e manda para um modelo de IA com a sua pergunta: "a planta está recebendo luz suficiente?".

Foto da folha

Tire uma foto e mande a um modelo que entende imagem. Ele sugere "parece falta de água" ou "parece fungo". É um palpite: confirme com o professor de biologia.

Previsão para Novo Hamburgo (troque latitude e longitude pela sua cidade):

https://api.open-meteo.com/v1/forecast?latitude=-29.68&longitude=-51.13&hourly=precipitation_probability&forecast_days=1

Script de pergunta, em Python, rodando no computador na mesma rede:

# pergunta.py — roda no computador,
# na mesma rede do ESP32
import json, urllib.request

# troque pelo IP do seu ESP32
URL = "http://192.168.0.50/dados"
dados = json.load(urllib.request.urlopen(URL))
pergunta = input("Pergunta: ")
prompt = (
    "Você ajuda a cuidar de uma horta escolar. "
    "Leitura dos sensores agora: "
    + json.dumps(dados) + ". "
    "umidade = % da terra, temp = °C, "
    "lux = luz. Responda em português, "
    "em até 3 frases: " + pergunta
)
print(prompt)
# Mande o prompt ao modelo que você usa:
# - cole no chat do serviço de IA; ou
# - use a biblioteca oficial do serviço,
#   com a SUA chave numa variável de
#   ambiente (nunca escrita no código); ou
# - rode um modelo local no PC, sem chave.
Chave de IA é como senha. Nunca escreva a chave dentro do código do ESP32 nem em arquivo que vai para o GitHub. Guarde numa variável de ambiente do computador e siga a documentação do serviço que você escolheu.

Teste e melhore

Confira antes de mostrar para alguém

Checklist
  • No ar, a umidade marca perto de 0%; no copo d'água, perto de 100%.
  • O relé clica e desliga sozinho depois de 5 s.
  • Depois de regar, a bomba espera 30 min mesmo com a terra ainda seca.
  • O painel abre no celular e os números mudam quando você sopra no DHT22.
  • Fio da bomba molhado não encosta em nada do ESP32.
Erro comumCausa provávelComo resolver
Umidade sempre 0% ou 100%SECO e MOLHADO trocados ou sem calibrarRefaça a calibração e confira se o seco é o número maior
Leitura do solo pula muitoSensor no pino errado (ADC2) ou fio soltoUse o GPIO 34; faça a média de 10 leituras na versão 2
DHT22 dá "nan"Falta o resistor de 10 kΩ ou leitura rápida demaisColoque o resistor; o DHT22 só lê a cada 2 s
ESP32 reinicia quando a bomba ligaBomba puxando energia da placaBomba sempre na fonte separada, pelo contato do relé
Relé fica ligado diretoRelé liga com HIGH, não com LOWTroque LIGA e DESLIGA no código

Caderno de testes. Cada vez que mudar alguma coisa, anote numa linha. Depois de uma semana você sabe o limite certo para aquela planta, e isso vira argumento de venda.

DataVersãoO que mudouResultado
20/10v1Limite 35%, rega 5 sVaso encharcou: regou 3 vezes seguidas
21/10v2Espera de 30 min entre regasUma rega por dia, terra entre 40% e 60%
…v3Pula a rega se a chance de chuva passar de 70%Anote aqui

Segurança

Água e eletrônica

Use só bomba de 5 V. Bomba de tomada (127/220 V) ou relé ligado em aparelho de tomada: só um adulto ou professor faz, com a energia desligada e caixa fechada. Mantenha o ESP32 e a protoboard numa caixa, acima e longe da água, e desligue a fonte antes de mexer na mangueira.

Ficha de negócio

Como vender a irrigação

Quem compraHorta escolar (rega nas férias e nos fins de semana), quem tem varanda com vasos, pequeno produtor de hortaliça e floricultura
Custo do kitR$ 100–160 (lista acima, a conferir)
Preço sugeridoR$ 250–400 o aparelho montado, testado, em caixa (sugestão)
Mão de obra1 a 2 horas para instalar, calibrar com a terra do cliente e ensinar a ler o painel
Assinatura opcionalR$ 15–30 por mês: ajuste dos limites, previsão do tempo e relatório da semana (sugestão)
Argumento de economiaMeça: litros por rega = vazão da bomba (L/min) × minutos ligada. Compare uma semana de rega fixa com uma semana de rega pelo sensor e mostre a diferença ao cliente
Mais de um vaso? Um ESP32 lê vários sensores (GPIO 32, 33, 35, 36, 39) e comanda vários relés. Para uma horta escolar inteira, venda por canteiro.

Para ir além

Próximos passos

Para entender o que o modelo de IA faz com os dados, comece pelo curso IA do zero. Para controlar motores e sensores com mais precisão, siga para Robótica. Todos os cursos são abertos e gratuitos no INEMA.CLUB.