WaterPi: Intelligente Remote Bewatering & Monitoring voor Kamerplanten
Onderdelen en Benodigdheden
| Onderdeel | Aantal |
|---|---|
| Raspberry Pi 1 Model B | 1 |
| Arduino UNO | 1 |
| DHT11 Temperatuur & Vochtigheid Sensor (4 pinnen) | 1 |
| YL-69 Grondvochtigheidssensor | 1 |
| Waterpeil Sensor | 1 |
| Standaard LCD 16x2 | 1 |
| Waterpomp Motor | 1 |
| 5V Relais | 1 |
| 4xAA Batterijhouder | 1 |
Apps en Online Services
- Amazon Web Services AWS IoT
- Amazon Web Services AWS DynamoDB
- Johnny-Five
Over dit Project
Inleiding
Dit systeem is een geschikte oplossing voor mensen die van planten houden en ze willen verzorgen, maar te druk zijn met hun dagelijkse werk. Planten kweken kost tijd en inspanning omdat er regelmatig taken zijn zoals dagelijks water geven. Mensen vergeten soms hun planten te verzorgen. Sommige reizen veel en zijn minder thuis. In die context vragen ze om hulp of geven ze planten op. WaterPi helpt die mensen met de regelmatige taken voor planten. Omdat het remote bestuurbaar is, kunnen planteneigenaren gemakkelijk ingrijpen in het bewateringsproces wanneer nodig.
Het systeem meet temperatuur en vochtigheid van de omgeving, en grondvochtigheid, bewaert de plant op afstand, en slaat alle data op in DynamoDB via AWS IoT. Verzamelde data wordt gevisualiseerd met verschillende grafieken en figuren voor een beter begrip van de omstandigheden waarin de plant groeit.
De Raspberry Pi draait een Node.js applicatie om alle sensoren en de waterpomp te besturen. Hiervoor gebruik ik de Johnny-Five bibliotheek. Voor communicatie met AWS gebruik ik de AWS IoT SDK voor JavaScript.
Stap 1: DynamoDB Opzetten
DynamoDB wordt gebruikt om sensor data op te slaan. Ga naar de DynamoDB pagina en maak een nieuwe tabel met:
- Tabelnaam: waterpi_sensor_data
- Partition Key: key (type String)
- Klik "Add Sort key" en voeg timestamp toe (type String)
Stap 2: AWS IoT Opzetten
Ga naar de AWS IoT Console en doe het volgende:
- Maak een "thing" met de naam raspi-water-pump.
- Maak een nieuw beleid: naam pump-policy, Actie iot:*, Resource *, selecteer Allow, klik "Add statement" en "Create".
- Maak een certificaat met 1-Click certificate create. Download publieke sleutel, private sleutel en certificaat.
- Selecteer het certificaat en:
- Klik Actions > Activate.
- Klik Actions > Attach a policy, vul beleidsnaam in, klik Attach.
- Klik Actions > Attach a thing, vul raspi-water-pump in, klik Attach.
- Maak een regel:
- Naam: saveToDynamoDB
- Attribuut: *
- Topic Filter: sensor/data
- Actie: insert message into a database table
- Tabelnaam: waterpi_sensor_data
- Hash key value: ${topic()}
- Range key value: ${timestamp()}
- Role Name: Klik create a new role, klik Allow, selecteer uit dropdown.
Stap 3: Arduino Voorbereiden
Waterpeil- en grondvochtigheidssensoren geven analoge output. In plaats van ze direct op de Raspberry Pi aan te sluiten, gebruik ik de Arduino om die analoge waarden te lezen en digitaal naar de Pi te sturen. De Arduino-code wordt door de Pi geüpdatet, dus we hoeven nu alleen de Arduino aan de computer te koppelen en StandardFirmata te uploaden.
- Open Arduino IDE.
- Open File > Examples > Firmata > StandardFirmata.
- Upload de sketch naar Arduino.
Bedrading Grondvochtigheidssensor naar Arduino:
- VCC → PIN 7
- GND → GND
- AO (analoge output) → A1
Bedrading Waterpeilsensor naar Arduino:
- (+) → PIN 4
- (-) → GND
- S → A0
Sluit daarna je Arduino via USB aan op de Raspberry Pi. Vergeet niet de grondvochtigheidssensor in de pot te steken en de waterpeilsensor in je watertank.
Stap 4: Raspberry Pi Voorbereiden
Bedraad het LCD-scherm, DHT11, waterpomp via relais met de Raspberry Pi.
DHT11 naar Pi:
- S → GPIO4 (pin 7)
- (+) → 3V3 (pin 1)
- (-) → GND (pin 25)
LCD Scherm:
- VCC → 5V (pin 2)
- GND → GND (pin 6)
- SDA → GPIO2 (pin 3)
- SCL → GPIO3 (pin 5)
Relais voor Waterpomp:
- S → GPIO18 (pin 12)
- (+) → 5V (pin 4)
- (-) → GND (pin 20)
Waterpomp met Relais en Batterijpakket:
- Waterpomp heeft twee kabels. Één naar het relais, de andere bedraad met het batterijpakket.
- De andere batterijpakket-kabel naar het relais. Check het schema hierboven.
Stap 5: Node.js App Draaien op de Pi
We draaien de Node.js applicatie op de Pi om sensordata te verzamelen en de waterpomp te besturen. De Pi moet met internet verbonden zijn (ethernet of wifi).
Node moet op de Pi geïnstalleerd zijn. Als niet, volg deze tutorial.
git clone git@github.com:demirhanaydin/waterpi-node.git
cd waterpi-node
npm install
Plaats je publieke sleutel, private sleutel en certificaat (gedownload van AWS IoT) in de map certs. Download ook het root CA certificaat, bewaar als rootCA.pem in certs.
Open device.js en update de regels met je bestandspaden. Haal je IOT_DEVICE_URL op van AWS IoT (klik op je thing), formaat: https://XXXXXXXXX.iot.us-east-1.amazonaws.com.
Start dan:
sudo node index.js
Als alles klopt, zie je sensorwaarden op het LCD-scherm. De applicatie stuurt elke 20 seconden sensordata naar het IoT-platform. Je ziet de waarden ook in je DynamoDB-tabel.
Stap 6: Webapplicatie Draaien
Een basis Sinatra-applicatie visualiseert de data uit DynamoDB met Highcharts. Het kan ook de waterpomp op afstand besturen. Wanneer de gebruiker op start/stop klikt, publiceert het een event naar AWS IoT. De Raspberry Pi ontvangt dit en verwerkt of de pomp moet starten of stoppen.
Ruby moet op je computer geïnstalleerd zijn. Zo niet, check deze pagina.
git clone git@github.com:demirhanaydin/waterpi-web.git
cd waterpi-web
bundle install
Plaats je publieke sleutel, private sleutel, certificaat en rootCA in certs. Open boot.rb en update met juiste waarden. Haal je AWS access key en secret op van de Security Credentials pagina in AWS Management Console.
Start het project:
ruby app.rb
Open je browser op https://localhost:4567/. Je ziet de verzamelde sensordata uit DynamoDB in grafieken. Klik op start om de pomp te activeren.
Hier zijn foto's van tijdens de ontwikkeling:
Gefeliciteerd!
Code
Raspberry Pi Node.js Broncode
Kloon de broncode naar de Raspberry Pi en voeg je AWS IoT certificaatbestanden toe in de map certs. Update ook device.js met je AWS IoT thing URL.
github.com/demirhanaydin/waterpi-node
WaterPi Web Client
Vergeet niet boot.rb bij te werken met je credentials.
github.com/demirhanaydin/waterpi-web
Schema's
- Schema voor Raspberry Pi zonder camera
- Schema voor Arduino
Productieproces
- GE voltooit overname van SmartSignal, versterkt remote monitoring & voorspellende diagnostiek
- Raspberry Pi-gestuurd Aquaponica Systeem: Bouwgids & Code
- Home Energy Centre: Zonnepanelen, thermische panelen en kamertemperaturen monitoren met Raspberry Pi en Moteino
- Externe weerbewaking met Raspberry Pi 3 en PubNub
- Een Multi-sensor Temperatuur- & Lichtmonitoringssysteem Bouwen met Raspberry Pi & DS18B20
- Raspberry Pi-sensor- en actuatorbeheersing onder de knie: versnellingsmeter, servo en datastreaming
- Raspberry Pi Thuisbeveiligingssysteem: PIR-bewegingsdetectie + Camera E-mailwaarschuwingen
- Cloud Monitoring: Extern controlsysteem voor real-time activabeheer
- ADLINK lanceert geavanceerde MCM‑oplossing voor remote faciliteitsmonitoring & predictief onderhoud
- Cisco Lanceert Cloud-Beheerde IoT Monitoring voor IT & OT Omgevingen
- IoT-ingeschakeld Remote Monitoring Systeem voor Olie- & Dieseltanks