Automação para plantas: sistema de rega inteligente com sensor de pH - Parte 1

Monte o hardware e configure os sensores para monitoramento científico das suas plantas

Intermediário/Avançado
Sofia Andrade

Sofia Andrade

Especialista em IA

Você já perdeu plantas por esquecer de regar ou por regar demais? Ou sempre quis cultivar plantas mais exigentes mas não tem tempo para monitorar constantemente? Esta série em duas partes vai transformar você em um jardineiro high-tech, criando um sistema que cuida das suas plantas 24/7 com precisão científica.

Na Parte 1 (este artigo): Montagem do hardware, sensores e calibração Na Parte 2: Interface web, conectividade WiFi e automações avançadas

Por que automatizar a rega com monitoramento de pH?

A maioria dos sistemas de rega automática apenas controla a umidade do solo. Mas plantas saudáveis precisam de muito mais:

  • pH correto: Cada planta tem uma faixa ideal de pH para absorver nutrientes
  • Rega inteligente: Não apenas quando o solo está seco, mas na quantidade certa
  • Monitoramento contínuo: Dados históricos para otimizar o crescimento
  • Proteção: Sistema não rega se condições estão inadequadas

Resultado: Plantas mais saudáveis, menos trabalho, crescimento otimizado e dados para melhorar continuamente.

Material necessário

Componentes eletrônicos:

  • Arduino Uno R3 - R$ 35-80
  • Sensor de umidade do solo - R$ 8-15
  • Sensor de pH para Arduino - R$ 120-180
  • Módulo relé 5V 1 canal - R$ 12-25
  • Bomba d'água submersível 5V - R$ 15-35
  • Display LCD 16x2 com I2C - R$ 18-30
  • Sensor de temperatura DS18B20 - R$ 12-20
  • Protoboard e jumpers - R$ 15-25
  • Fonte 9V 2A - R$ 25-40

Materiais para montagem:

  • Recipiente para solução de calibração pH - R$ 5-10
  • Solução tampão pH 4.0 e 7.0 - R$ 30-50
  • Água destilada - R$ 5-10
  • Mangueira silicone 6mm - R$ 8-15 (metro)
  • Reservatório de água - R$ 15-30

Custo total Parte 1: R$ 320-560

⚠️ Importante: As marcas mencionadas neste tutorial são citadas apenas para fins educativos e informativos. Não possuímos qualquer parceria, vínculo comercial ou patrocínio com essas empresas. As recomendações são baseadas em funcionalidade técnica e disponibilidade no mercado brasileiro.

Como funciona o sistema

Este sistema integrado monitora múltiplas variáveis e toma decisões inteligentes:

  • Monitoramento contínuo: Sensores leem umidade do solo, pH da água e temperatura
  • Análise inteligente: Arduino processa dados e determina se precisa regar
  • Rega com proteção: Bomba é acionada apenas se pH estiver adequado
  • Display local: Informações em tempo real no LCD
  • Alertas de segurança: Sistema bloqueia rega se condições inadequadas

Preparando o ambiente de desenvolvimento

1. Instalar Arduino IDE

Baixe em: https://www.arduino.cc/en/software

2. Instalar bibliotecas necessárias

No Arduino IDE: Sketch > Incluir Biblioteca > Gerenciar Bibliotecas

Instale:

  • LiquidCrystal_I2C por Frank de Brabander
  • OneWire por Jim Studt
  • DallasTemperature por Miles Burton

Montagem do circuito

Conexões Arduino Uno:

Arduino        Componente
A0        →    Sensor umidade solo (Analog)
A1        →    Sensor pH (Analog)
D2        →    Sensor temperatura DS18B20
D3        →    Relé bomba d'água
SDA       →    LCD I2C (SDA)
SCL       →    LCD I2C (SCL)
5V        →    Alimentação sensores
GND       →    Terra comum
⚠️

Importante - Cuidados:

  • Sensor pH é sensível - mantenha eletrodo sempre úmido
  • Bomba d'água - verifique voltagem (5V ou 12V)
  • Calibração pH - essencial para medições precisas

Código principal do Arduino

Aqui está o código essencial para o funcionamento básico do sistema:

Ver código completo
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Configurações de pinos
#define SOIL_SENSOR_PIN A0
#define PH_SENSOR_PIN A1
#define TEMP_SENSOR_PIN 2
#define RELAY_PUMP_PIN 3

// Configurações dos sensores
#define SOIL_DRY_THRESHOLD 300
#define PH_MIN_IDEAL 6.0
#define PH_MAX_IDEAL 7.5
#define PUMP_TIME_MS 5000

// Inicialização dos componentes
LiquidCrystal_I2C lcd(0x27, 16, 2);
OneWire oneWire(TEMP_SENSOR_PIN);
DallasTemperature tempSensor(&oneWire);

// Variáveis globais
float phValue = 7.0;
float temperature = 25.0;
int soilMoisture = 0;
unsigned long lastWatering = 0;

// Calibração do sensor pH (ajustar conforme sua calibração)
float ph4_voltage = 3.2;
float ph7_voltage = 2.5;

void setup() {
  Serial.begin(9600);
  
  // Inicializar LCD e sensores
  lcd.init();
  lcd.backlight();
  tempSensor.begin();
  
  pinMode(RELAY_PUMP_PIN, OUTPUT);
  digitalWrite(RELAY_PUMP_PIN, LOW);
  
  lcd.setCursor(0, 0);
  lcd.print("Sistema de Rega");
  lcd.setCursor(0, 1);
  lcd.print("Inicializando...");
  
  delay(2000);
  lcd.clear();
  Serial.println("Sistema inicializado!"
    </>);
}

void loop() {
  readSensors();
  updateDisplay();
  
  if (needsWatering()) {
    startWatering();
  }
  
  delay(30000); // Verificar a cada 30 segundos
}

void readSensors() {
  soilMoisture = analogRead(SOIL_SENSOR_PIN);
  tempSensor.requestTemperatures();
  temperature = tempSensor.getTempCByIndex(0);
  
  float voltage = analogRead(PH_SENSOR_PIN) * (5.0 / 1024.0);
  phValue = calculatePH(voltage);
  
  // Debug no serial
  Serial.println("=== Leituras dos Sensores ===");
  Serial.print("Umidade do solo: ");
  Serial.println(soilMoisture);
  Serial.print("Temperatura: ");
  Serial.print(temperature);
  Serial.println("°C");
  Serial.print("pH: ");
  Serial.println(phValue, 2);
  Serial.println();
}

float calculatePH(float voltage) {
  // Compensação de temperatura (pH varia ~0.03 unidades por °C)
  float tempCompensation = (temperature - 25.0) * 0.03;
  
  // Calibração linear baseada em soluções padrão
  float slope = (7.0 - 4.0) / (ph7_voltage - ph4_voltage);
  float intercept = 7.0 - slope * ph7_voltage;
  
  float rawPH = slope * voltage + intercept;
  return rawPH - tempCompensation; // Aplicar compensação
}

bool needsWatering() {
  bool soilDry = soilMoisture < SOIL_DRY_THRESHOLD;
  bool phOK = (phValue >= PH_MIN_IDEAL && phValue <= PH_MAX_IDEAL);
  bool timeOK = (millis() - lastWatering) > 3600000; // 1 hora
  bool tempOK = (temperature > 5.0 && temperature < 45.0);
  
  // Lógica de falha: se pH ruim, registrar e alertar mas não regar
  if (soilDry && !phOK) {
    Serial.println("ALERTA: Solo seco mas pH inadequado!");
    Serial.print("pH atual: ");
    Serial.print(phValue);
    Serial.print(" | Ideal: ");
    Serial.print(PH_MIN_IDEAL);
    Serial.print("-");
    Serial.println(PH_MAX_IDEAL);
    // Enviar notificação de emergência aqui
    return false; // NÃO regar com pH errado
  }
  
  return soilDry && phOK && timeOK && tempOK;
}

void startWatering() {
  Serial.println("Iniciando rega automática...");
  
  digitalWrite(RELAY_PUMP_PIN, HIGH);
  updateDisplay(); // Mostrar "REGANDO" no LCD
  delay(PUMP_TIME_MS);
  digitalWrite(RELAY_PUMP_PIN, LOW);
  
  lastWatering = millis();
  Serial.println("Rega concluída!");
  
  // Aguardar solo absorver água
  delay(30000);
}

void updateDisplay() {
  lcd.clear();
  
  // Primeira linha: Umidade e temperatura
  lcd.setCursor(0, 0);
  lcd.print("U:");
  lcd.print(map(soilMoisture, 0, 1023, 0, 100));
  lcd.print("% T:");
  lcd.print(temperature, 1);
  lcd.print("C");
  
  // Segunda linha: pH e status
  lcd.setCursor(0, 1);
  lcd.print("pH:");
  lcd.print(phValue, 1);
  
  if (needsWatering()) {
    lcd.setCursor(8, 1);
    lcd.print(" PRECISA");
  } else {
    lcd.setCursor(8, 1);
    lcd.print(" OK");
  }
}

Calibração do sensor de pH

1. Preparação das soluções

  • Solução tampão pH 4.0: Disponível em lojas de aquarismo
  • Solução tampão pH 7.0: Mais comum, encontrada facilmente
  • Água destilada: Para limpeza entre medições

2. Processo de calibração

Ver código completo
void calibratePH() {
  Serial.println("=== CALIBRAÇÃO pH ===");
  Serial.println("Mergulhe em pH 7.0 e pressione ENTER");
  
  while (!Serial.available()) {
    float voltage = analogRead(PH_SENSOR_PIN) * (5.0 / 1024.0);
    Serial.print("Tensão: ");
    Serial.println(voltage, 3);
    delay(1000);
  }
  ph7_voltage = analogRead(PH_SENSOR_PIN) * (5.0 / 1024.0);
  Serial.read();
  
  Serial.println("Mergulhe em pH 4.0 e pressione ENTER");
  while (!Serial.available()) {
    float voltage = analogRead(PH_SENSOR_PIN) * (5.0 / 1024.0);
    Serial.print("Tensão: ");
    Serial.println(voltage, 3);
    delay(1000);
  }
  ph4_voltage = analogRead(PH_SENSOR_PIN) * (5.0 / 1024.0);
  
  Serial.println("Calibração concluída!");
  Serial.println("pH 7.0: " + String(ph7_voltage, 3) + "V");
  Serial.println("pH 4.0: " + String(ph4_voltage, 3) + "V");
}

3. Cuidados importantes

  • Sensor sempre úmido: Mantenha eletrodo em solução KCl
  • Limpeza regular: Água destilada entre medições
  • Recalibração: A cada 1-2 meses ou se leituras estranhas
  • Temperatura: pH varia com temperatura, usamos compensação no código

Instalação física

1. Montagem da caixa eletrônica

  • Caixa vedada IP65 para proteger eletrônica
  • Furos para sensores: Use vedantes apropriados
  • Ventilação: Evite condensação interna
  • Acesso fácil: Para manutenção e calibração

2. Sistema de distribuição de água

  • Reservatório elevado: Facilita distribuição por gravidade
  • Mangueira de silicone: Resistente e atóxica
  • Gotejadores: Para distribuição uniforme
  • Válvula de alívio: Evita pressão excessiva

3. Posicionamento dos sensores

  • Umidade do solo: No centro da área de irrigação, 5-10cm de profundidade
  • pH: No reservatório de água, sempre submerso
  • Temperatura: Protegido do sol direto, na sombra das plantas

Configuração para diferentes plantas

Plantas ácidas (pH 5.5-6.5):

Azaleias, hortênsias, mirtilo

Ajustar: PH_MIN_IDEAL = 5.5 e PH_MAX_IDEAL = 6.5

Plantas neutras (pH 6.0-7.5):

Maioria das hortaliças, rosas

Configuração padrão do código

Plantas alcalinas (pH 7.0-8.0):

Lavanda, alecrim, cactos

Ajustar: PH_MIN_IDEAL = 7.0 e PH_MAX_IDEAL = 8.0

Umidade personalizada:

// Para suculentas (menos água)
#define SOIL_DRY_THRESHOLD 200

// Para tropicais (mais água)  
#define SOIL_DRY_THRESHOLD 400

Solução de problemas comuns

Problema: Leituras de pH instáveis/incorretas

Causas e soluções:

  • Temperatura não compensada: Implementar correção térmica (já no código)
  • Eletrodo seco: Manter sempre em solução KCl
  • Calibração antiga: Recalibrar mensalmente
  • Interferência elétrica: Cabo blindado para sensor

Problema: Sistema não rega mesmo com solo seco

Verificar lógica de falha:

Ver código completo
// Debug no monitor serial:
Serial.print("Solo seco: "); Serial.println(soilDry);
Serial.print("pH OK: "); Serial.println(phOK);
Serial.print("Tempo OK: "); Serial.println(timeOK);
Serial.print("Temp OK: "); Serial.println(tempOK);

Causa comum: pH fora da faixa ideal bloqueia rega (proteção)

Problema: Sensor umidade sempre seco/úmido

Soluções:

  • Ajustar SOIL_DRY_THRESHOLD no código
  • Verificar se sensor está bem enterrado
  • Calibrar com solo conhecido (seco vs úmido)
  • Trocar sensor se oxidado

Manutenção preventiva

Semanal:

  • Verificar nível do reservatório
  • Limpar sensor pH com água destilada
  • Checar obstruções na mangueira

Mensal:

  • Calibrar sensor pH
  • Limpar filtros do sistema
  • Verificar conexões elétricas

Trimestral:

  • Trocar água do reservatório
  • Verificar desgaste da bomba
  • Atualizar código se necessário

Teste e validação

1. Primeiro teste

  • Conecte tudo conforme esquema
  • Carregue o código no Arduino
  • Abra monitor serial (115200 baud)
  • Verifique leituras dos sensores
  • Teste rega manual alterando threshold temporariamente

2. Calibração completa

  • Execute função calibratePH() no setup
  • Use soluções tampão pH 4.0 e 7.0
  • Anote valores exibidos
  • Atualize constantes no código

3. Teste de proteção

  • Simule pH ruim (desconectar sensor)
  • Solo seco simulado (sensor umidade no ar)
  • Verificar se NÃO rega - proteção funcionando

Análise de custos Parte 1

Investimento: R$ 320-560

Comparação com sistemas básicos:

  • Timer simples: R$ 50-100 (sem sensores)
  • Sensor umidade apenas: R$ 150-300 (sem pH)
  • Sistema comercial com pH: R$ 1500-3000+

ROI: Este sistema oferece funcionalidades profissionais por 1/5 do preço comercial

Próximos passos - Parte 2

Na Parte 2 desta série, vamos implementar:

  • Conectividade WiFi com ESP8266
  • Interface web completa e responsiva
  • Monitoramento remoto via celular
  • Histórico de dados e gráficos
  • Notificações push para emergências
  • Integração com APIs de clima
  • Múltiplas zonas de irrigação

Conclusão da Parte 1

Nesta primeira parte, construímos a base sólida do nosso sistema de rega inteligente. Temos agora um sistema funcional que:

  • Monitora pH, umidade e temperatura com precisão
  • Protege as plantas contra rega com pH inadequado
  • Exibe informações em tempo real no LCD
  • Registra todos os eventos no monitor serial
  • Funciona de forma autônoma e segura

Principais conquistas:

  • ✅ Hardware montado e testado
  • ✅ Sensores calibrados corretamente
  • ✅ Lógica de proteção implementada
  • ✅ Compensação de temperatura ativa
  • ✅ Sistema robusto e confiável

Teste seu sistema por alguns dias nesta configuração para garantir estabilidade antes de partir para a Parte 2, onde adicionaremos conectividade e recursos avançados.

💡 Dica: Documente as leituras dos seus sensores por uma semana. Esses dados serão valiosos para otimizar o sistema na Parte 2!

Continue acompanhando a série para transformar este sistema local em uma solução IoT completa! 🌱🤖

🚀 Continue na Parte 2

Pronto para elevar seu sistema ao próximo nível? Na Parte 2, você adicionará conectividade WiFi, interface web profissional, múltiplas zonas e recursos IoT avançados.

Continuar na Parte 2: Conectividade WiFi e Interface Web →