WaterPi: Rega e Monitoramento Inteligente Remoto para Plantas Domésticas
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Raspberry Pi 1 Model B | 1 |
| Arduino UNO | 1 |
| Sensor de Temperatura e Umidade DHT11 (4 pinos) | 1 |
| Sensor de Umidade do Solo YL-69 | 1 |
| Sensor de Nível de Água | 1 |
| Display LCD 16x2 Padrão | 1 |
| Bomba de Água (Motor) | 1 |
| Relé 5V | 1 |
| Suporte para 4 Pilhas AA | 1 |
Software e Serviços Online
- Amazon Web Services AWS IoT
- Amazon Web Services AWS DynamoDB
- Johnny-Five (framework JavaScript para robótica/IoT)
Sobre o Projeto
Introdução
O sistema é uma solução adequada para pessoas que amam e querem cuidar de plantas em casa, mas são muito ocupadas no trabalho diário para fazer isso. Cultivar plantas requer tempo e esforço para ser bem-sucedido, porque há coisas regulares a fazer, como regá-las todos os dias. Às vezes as pessoas esquecem de cuidar de suas plantas. Além disso, algumas pessoas viajam muito e passam menos tempo em casa. Nesse contexto, elas geralmente pedem ajuda para cuidar de suas plantas domésticas ou simplesmente desistem de tê-las. O WaterPi pode ajudar essas pessoas fazendo as coisas regulares para as plantas. Também, como pode ser controlado remotamente, os donos de plantas podem interferir no processo de rega facilmente quando necessário.
O sistema monitora a temperatura e umidade do ambiente, a umidade do solo, rega a planta remotamente e então salva todos os dados no DynamoDB através do AWS IoT. Os dados coletados são visualizados por diferentes gráficos e figuras para dar melhor entendimento das condições onde a planta prospera.
O Raspberry Pi roda uma aplicação Node.js para controlar todos os sensores e a bomba de água. Para esse propósito, preferi usar a biblioteca Johnny-Five. Para comunicar com a AWS, usei o AWS IoT SDK para JavaScript.
Passo 1: Configurar DynamoDB
O DynamoDB é usado para salvar dados coletados pelos sensores. Vá à página do DynamoDB e crie uma nova tabela com os seguintes atributos:
- Nome da Tabela: waterpi_sensor_data
- Chave de Partição: key
- Clique em "Add Sort key" e adicione timestamp
O importante é que key e timestamp devem ser do tipo String.

Passo 2: Configurar AWS IoT
Vá ao Console AWS IoT e faça o seguinte:
- Crie um "thing" com o nome raspi-water-pump
- Crie uma nova policy. Nome: pump-policy, Ação: iot:*, Recurso: *, selecione Allow, clique em "Add statement" e "Create".
- Crie um certificado com 1-Click certificate create. Baixe a chave pública, chave privada e certificado.
- Selecione o certificado criado e faça:
- Clique Actions > Activate para ativar o certificado
- Clique Actions > Attach a policy, digite o nome da policy criada e clique Attach
- Clique Actions > Attach a thing, digite raspi-water-pump e clique Attach
- Crie uma rule com:
- Nome: saveToDynamoDB
- Atributo: *
- Filtro de Tópico: sensor/data
- Ação: Insert message into a database table
- Nome da tabela: waterpi_sensor_data
- Valor da Hash Key: ${topic()}
- Valor da Range Key: ${timestamp()}
- Role Name: Clique create a new role e Allow, depois selecione no dropdown

Passo 3: Preparando o Arduino
As saídas dos sensores de nível de água e umidade do solo são analógicas. Em vez de ligá-los diretamente ao Raspberry Pi, prefiro usar o Arduino para ler esses valores analógicos e enviá-los ao Pi via USB como valores digitais. O código do Arduino é atualizado pelo Pi, então a única coisa a fazer neste passo é conectar o Arduino ao computador e carregar o StandardFirmata nele.
- Arduino IDE
- Arquivo > Exemplos > Firmata > StandardFirmata
- Carregar sketch no Arduino

Ligação do Sensor de Umidade do Solo ao Arduino:
- VCC → PINO 7
- GND → GND
- AO (saída analógica) → A1
Ligação do Sensor de Nível de Água ao Arduino:
- (+) → PINO 4
- (-) → GND
- S → A0

Depois disso, conecte seu Arduino ao Raspberry Pi via cabo USB. Não se esqueça de colocar o sensor de umidade do solo no vaso de flores e o sensor de nível de água no seu tanque de água.
Passo 4: Preparando o Raspberry Pi
Conecte a tela LCD, DHT11, bomba de água através do relé com o Raspberry Pi.

Ligação do DHT11 ao Pi:
- S → GPIO4 (pino 7)
- (+) → 3V3 (pino 1)
- (-) → GND (pino 25)
Ligação da Tela LCD (I2C):
- VCC → 5V (pino 2)
- GND → GND (pino 6)
- SDA → GPIO2 (pino 3)
- SCL → GPIO3 (pino 5)
Ligação do Relé para Bomba de Água:
- S → GPIO18 (pino 12)
- (+) → 5V (pino 4)
- (-) → GND (pino 20)
Ligação da bomba de água com relé e pack de baterias:
- A bomba tem dois cabos. Um deve ser conectado ao relé, o outro deve ser ligado com o cabo do pack de baterias.
- O outro cabo do pack de baterias deve ser conectado ao relé. Veja o diagrama acima para aprender como conectá-los.
Passo 5: Rodando a Aplicação Node.js no Pi
Nesta parte, vamos rodar a aplicação Node.js no Pi para coletar dados dos sensores e controlar a bomba de água. O Raspberry Pi deve estar conectado à Internet (via ethernet ou WiFi).
O Node.js deve estar instalado no Pi antes de prosseguir. Se não instalou antes, siga o tutorial aqui.
Conecte seu Raspberry Pi e execute:
git clone git@github.com:demirhanaydin/waterpi-node.git
cd waterpi-node
npm install
Coloque seus arquivos de chave pública, chave privada e certificado (baixados da página AWS IoT) na pasta certs. Baixe também o certificado raiz CA de root certificate. Salve como rootCA.pem e coloque na pasta certs.
Edite o arquivo device.js com seu editor de texto favorito e atualize estas linhas com seus caminhos de arquivo. Obtenha seu IOT_DEVICE_URL na plataforma AWS IoT clicando no seu "thing". Deve ser como https://XXXXXXXXX.iot.us-east-1.amazonaws.com.
Então execute:
sudo node index.js
Se tudo estiver correto, você deverá ver os valores dos sensores impressos na tela LCD.

Também deve ver os valores na sua tabela DynamoDB. A aplicação envia dados dos sensores para a plataforma IoT a cada 20 segundos.

Passo 6: Rodando a Aplicação Web
Uma aplicação Sinatra básica visualiza os dados que estão na tabela DynamoDB usando Highcharts. Também pode controlar a bomba de água remotamente. O que faz é: sempre que o usuário clica no botão iniciar/parar, publica um evento na plataforma AWS IoT. O Raspberry Pi recebe este evento e processa se deve iniciar ou parar a bomba.
Ruby deve estar instalado no seu computador para continuar. Se não estiver, veja esta página.
No Terminal, execute:
git clone git@github.com:demirhanaydin/waterpi-web.git
cd waterpi-web
bundle install
Coloque seus arquivos de chave pública, chave privada, certificado e rootCA na pasta certs. Edite boot.rb e atualize as linhas com os valores adequados. Obtenha sua chave de acesso AWS e segredo na página Security Credentials do AWS Management Console.
Se terminou, execute o projeto como:
ruby app.rb
Abra o navegador e digite https://localhost:4567/. Você deverá ver os dados dos sensores coletados do DynamoDB nos gráficos.

Quando você clica em iniciar, a bomba começará a regar a planta.
Aqui estão algumas fotos que tirei durante o desenvolvimento do projeto:





Parabéns!
Código
Código Fonte Node.js do Raspberry Pi
Clone o código fonte para o Raspberry Pi e adicione seus arquivos de certificado AWS IoT na pasta certs. Atualize também device.js com a URL do seu thing AWS IoT.
github.com/demirhanaydin/waterpi-node
Cliente Web WaterPi
Não se esqueça de atualizar boot.rb com suas credenciais.
github.com/demirhanaydin/waterpi-web
Esquemáticos
pi-wout-camera.fzz
arduino.fzz
Processo de manufatura
- ADLINK Lança Solução MCM Avançada para Monitoramento Remoto de Instalações e Manutenção Preditiva
- Sistema de Aquaponia Controlado por Raspberry Pi: Guia de Construção e Código
- Home Energy Centre: Monitoramento Solar PV, Painéis Térmicos e Temperaturas de Ambientes com Raspberry Pi e Moteino
- Monitoramento Remoto do Tempo com Raspberry Pi 3 e PubNub
- Construa um Sistema de Monitoramento de Temperatura e Luz Multi-Sensor com Raspberry Pi e DS18B20
- Dominando Controle de Sensores e Atuadores no Raspberry Pi: Acelerômetro, Servo e Streaming de Dados
- Sistema de Segurança Residencial com Raspberry Pi: Detecção PIR + Alertas de Câmera por Email
- GE Conclui Aquisição da SmartSignal, Fortalecendo Monitoramento Remoto e Diagnóstico Preditivo
- Cisco Lança Monitoramento IoT Gerenciado na Nuvem para Ambientes TI e OT
- Sistema de Monitoramento Remoto IoT para Tanques de Óleo e Diesel