Sistema de Jardim Automatizado Inteligente com Arduino UNO e Raspberry Pi
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino UNO | 1 | |
| Raspberry Pi 2 Model B | 1 | Qualquer modelo serve |
| Módulo Câmera Raspberry Pi | 1 | Para timelapse |
| Arduino Ethernet Shield 2 | 1 | Conectividade rede |
| Relé (genérico) | 1 | Módulo 4 canais recomendado |
| Cabo (por metro) | 1 | Fiação |
| Fotorresistor (LDR) | 1 | Sensor de luz |
| Bomba d'água (genérica) | 1 | Irrigação |
| Ventoinha (genérica) | 1 | Usei de PC antigo |
| Transistor NPN Uso Geral | 1 | Drive ventoinha |
| Cartão MicroSD (Genérico) | 1 | 16 GB para timelapse |
Aplicativos e Serviços
- Arduino IDE
- Raspberry Pi OS (Raspbian)
- Win32DiskImager (gravar imagem no SD)
- PuTTY (SSH remoto)
- myDevices Cayenne (plataforma IoT)
Sobre o Projeto
Segundo projeto usando meu jardim automatizado, agora controlado via Cayenne (muito mais fácil). Adicionei Raspberry Pi para timelapse do crescimento das plantas.
Configurando o Arduino
Para monitorar o jardim, usei vários sensores/atuadores. Lembre-se: conecte o Ethernet Shield ao Arduino antes de começar.
Conexões
| Dispositivo | Conexões |
|---|---|
| Umidade do Solo (Verifica necessidade de água) |
VCC: 5V GND: GND A0: A1 |
| Ventoinha (Resfriamento/ar fresco) |
Resistor → pino 3 GND ventoinha → pino central transistor + ventoinha → relé (pino central) Último pino transistor → GND Diodo → pino central transistor + GND |
| Bomba d'água (Ativada por umidade solo) |
+ → relé (pino central) GND → GND fonte externa |
| Fotorresistor (opcional) (Mede luminosidade) |
Um lado → A0 + resistor → GND Outro lado → 5V |
| Luz | Anodo (+) → relé Outro → GND fonte externa |
| Sensor Umidade/Temperatura (DHT22) (Requer código específico para Cayenne) |
VCC: 3.3V GND: GND DAT: Pino digital 8 |
| Sensor Nível d'Água | VCC: 5V GND: GND SIG: A2 |
Montagem Final
Usei 2 relés no diagrama (Fritzing não tinha relé 4 canais). Na prática, uso um relé 4 canais com uma fonte 12V. Separei fios + e -, soldei 3 fios do positivo para cada atuador no relé. Um basta pois não ligam simultaneamente.
Fonte 5V para Arduino. Relé:
- VCC: 5V
- GND: GND
- IN1: Pino 2 → Luz
- IN2: Pino 5 → Bomba d'água
- IN3: (livre)
- IN4: Pino 4 → Ventoinha
Configuração Cayenne
Fácil configuração:
- Crie conta no Cayenne
- Conecte Ethernet Shield com cabo RJ45
- Use código abaixo (para shield W5100; outros shields têm código no Cayenne). Não esqueça seu token (obtido no dashboard).
#include "DHT.h"
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTEthernet.h>
#define DHTPIN 8
#define DHTTYPE DHT22
#define VIRT_TEMP V1
#define VIRT_HUM V2
char token[] = "seu_token_aqui";
DHT dht(DHTPIN, DHTTYPE);
unsigned long prev_DHT_refresh, interval_DHT_refresh = 1000;
void setup() {
Serial.begin(9600);
Cayenne.begin(token);
dht.begin();
}
void loop() {
Cayenne.run();
getDhtValues();
}
void getDhtValues() {
unsigned long now = millis();
if (now - prev_DHT_refresh > interval_DHT_refresh) {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (!isnan(h) && !isnan(t)) {
Cayenne.virtualWrite(VIRT_HUM, h);
Cayenne.celsiusWrite(VIRT_TEMP, t);
}
prev_DHT_refresh = now;
}
}
Dispositivos no Cayenne
Agora adicione todos os dispositivos no Cayenne.
Adicionar Dispositivo → Widget Personalizado
Escolha tipo de widget: usei gráfico para umidade e nível d'água, valor para demais. Sensor DHT usa pinos virtuais:
- Temperatura: Vpin1
- Umidade: VPin2
Outros dispositivos: pino analógico correspondente. Atuadores (luz, ventoinha, bomba): tipo "actuator", pino do Arduino conectado ao relé.
Eventos e Gatilhos (Triggers)
Configuração dos gatilhos:
- Bomba d'água: Liga quando solo muito seco. Dois gatilhos: um liga, outro desliga.
- Nível d'água: Valor alto = falta água → envia e-mail de alerta.
- Eventos agendados: 4 eventos: luz ligada manhã, luz desligada noite, ventoinha ligada/desligada em horários definidos.
Configurando o Raspberry Pi
Timelapse do crescimento das plantas.
3 Softwares:
- Raspbian
- Win32DiskImager (gravar imagem no SD)
- PuTTY (SSH remoto)
Win32DiskImager:
- Selecione dispositivo (padrão OK se só SD conectado)
- Clique pasta azul → selecione imagem Raspbian Jessie baixada
- Write → pronto. Insira cartão no Raspberry.
PuTTY: SSH remoto. Abra PuTTY (sem instalação).
- Cabo rede no Raspberry
- Descubra IP: acesse interface do roteador ou conecte monitor/teclado → terminal →
ifconfig - No PuTTY: IP (ex: 192.168.0.3) → Enter → trust → yes
- Login:
pi, Senha:raspberry
Atualizações necessárias (no PuTTY):
sudo apt-get update
sudo apt-get upgrade
VNC (controle remoto gráfico):
sudo apt-get install tightvncserver
vncserver :1
Baixe VNC Viewer no PC → conecte IP:1 (ex: 192.168.0.3:1)
Cayenne no Raspberry: Controle remoto via Cayenne:
wget https://cayenne.mydevices.com/dl/rpi_03wl1tt4nt.sh
sudo bash rpi_03wl1tt4nt.sh -v
Timelapse
Habilite câmera:
sudo raspi-config
→ Enable Camera.
Crie pasta para fotos:
cd /home/pi/Desktop
mkdir timelapse
Script para foto a cada hora:
cd /home/pi/Desktop
nano timelapse.sh
Cole:
SAVEDIR=/home/pi/Desktop/timelapse/
while [ true ]; do
filename=-$(date -u +"%d%m%Y_%H%M-%S").jpg
/opt/vc/bin/raspistill -o $SAVEDIR/$filename
sleep 3600;
done
Torne executável:
chmod +x timelapse.sh
Conclusão
Tutorial longo mas fácil: poucos dispositivos para conectar e configurar plataforma. Foto mostra bagunça de fios longos — vou postar resultado do timelapse quando plantas crescerem.
Dica: Ethernet Shield pode dar erro "DHCP fail". Solução do fórum Arduino: solde dois resistores 100Ω em locais aleatórios para "irritar seus leitores" (brincadeira do autor — na verdade é fixar terminação de barramento).
Código
Trecho #1 (Arduino)
#include "DHT.h"
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTEthernet.h>
#define DHTPIN 8
#define DHTTYPE DHT22
#define VIRT_TEMP V1
#define VIRT_HUM V2
char token[] = "seu_token_aqui";
DHT dht(DHTPIN, DHTTYPE);
unsigned long prev_DHT_refresh, interval_DHT_refresh = 1000;
void setup() {
Serial.begin(9600);
Cayenne.begin(token);
dht.begin();
}
void loop() {
Cayenne.run();
getDhtValues();
}
void getDhtValues() {
unsigned long now = millis();
if (now - prev_DHT_refresh > interval_DHT_refresh) {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (!isnan(h) && !isnan(t)) {
Cayenne.virtualWrite(VIRT_HUM, h);
Cayenne.celsiusWrite(VIRT_TEMP, t);
}
prev_DHT_refresh = now;
}
}
Trecho #9 (Shell - Timelapse)
SAVEDIR=/home/pi/Desktop/timelapse/
while [ true ]; do
filename=-$(date -u +"%d%m%Y_%H%M-%S").jpg
/opt/vc/bin/raspistill -o $SAVEDIR/$filename
sleep 3600;
done
Processo de manufatura
- Construa um Controle Remoto Universal Profissional para Raspberry Pi com LIRC
- Convertendo RF em DC com Raspberry Pi: Construindo e Solucionando Problemas de um Detector de Envelope
- Cycle Chaser: Transforme Sua Bicicleta em um Show de Luzes Noturno com Raspberry Pi
- Construa um Detetor de Ladrão Baseado em Raspberry Pi – Guia Passo a Passo
- Construa Monitor de Temperatura Doméstico com Raspberry Pi, MCP9808, InfluxDB e Grafana
- Construa Sistema de Automação Residencial com Raspberry Pi para Controle Remoto
- Sistema Automatizado de Rega de Plantas com Raspberry Pi e Dashboard Web
- MrRobot: Robô Rapiro Controlado por Ubuntu Mobile com Voz, Toque e Interação por Movimento
- Robô DIY Inspirado no Wall‑E com Caixa de CD e Raspberry Pi
- Construa um Robô Raspberry Pi Controlado por Bluetooth com Feedback de Áudio