Earth Analyzer: Geavanceerde IoT Sensor Kit voor Milieumonitoring
Onderdelen en Benodigdheden
| Onderdeel | Aantal |
|---|---|
| Bolt IoT WiFi Module | 1 |
| Arduino UNO | 1 |
| Arduino Nano R3 | 1 |
| nRF24L01+ radio modules | 2 |
| DC Motor 12V | 2 |
| DFRobot Solar Power Manager (12V loodzuur) | 1 |
| L298 Dual H-brug motordriver | 1 |
| Jumper wires | 1 set |
| LM35 Temperatuursensor | 1 |
| DFRobot Capacitatieve Bodemvochtsensor (corrosievast) | 1 |
| SG90 Micro-servo | 1 |
| Joystick 10kΩ | 1 |
Benodigde Gereedschappen
- Soldeerbout, soldeer, flux
- Multitool/schroevendraaier
Apps & Online Diensten
- Arduino IDE
- Bolt IoT Cloud & App (Android/iOS)
- Integromat (nu Make)
- Twilio SMS API
- Mailgun E-mail API
- Telegram Bot API
Over dit Project
De Earth Analyzer is een rover voor landbouwkundige monitoring. Het project bestaat uit drie modules:
Module 1: Rover Besturing & Sensoren (Bolt IoT + Arduino)
- Twee 12V DC motoren aangestuurd via L298 driver.
- Motor driver inputs (EN1, EN2, IN1-IN4) aangesloten op Bolt WiFi module (digitale pinnen 0-3) én Arduino.
- Bodemvochtsensor → Bolt digitale pin 4.
- LM35 temperatuursensor → Bolt analoog pin A0.
- Alle GND en VCC (5V) gemeenschappelijk afkomstig van Arduino/voeding.
- Zonne-energiemanager laadt 12V accu voor continue werking.
Module 2: Lokale Besturing via nRF24L01 (Radio)
- Twee nRF24L01 modules voor korte-afstand besturing (bijv. in de buurt van het huis).
- Zender (handheld): Arduino Nano + nRF24L01 + 2 joysticks (één voor rijden, één voor servo).
- Ontvanger (op rover): Arduino UNO + nRF24L01 + L298 driver + servo.
- Joystick waarden (0-1023) worden gemapt op commando-codes (100-700) en via radio verzonden.
Module 3: Cloud Monitoring & Alerting (Bolt Cloud, Integromat, Telegram, Twilio, Mailgun)
De Bolt module leest sensoren (temperatuur, vochtigheid) en stuurt data naar Bolt Cloud. Een server-side script (Python op bv. Replit) pollt de Bolt Cloud en stuurt alerts via Telegram wanneer drempels worden overschreden. Integromat (Make) koppelt Google Assistant → HTTP request → Bolt Cloud → Mailgun/Twilio voor e-mail/SMS notificaties.
Code: nRF24L01 Zender (Arduino Nano)
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
int x_key = A1, y_key = A0, p_key = A3, q_key = A2;
int x_pos, y_pos, p_pos, q_pos, pos;
void setup() {
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.setChannel(87);
radio.setDataRate(RF24_250KBPS);
radio.stopListening();
Serial.begin(9600);
pinMode(x_key, INPUT); pinMode(y_key, INPUT);
pinMode(p_key, INPUT); pinMode(q_key, INPUT);
}
void loop() {
x_pos = analogRead(x_key); y_pos = analogRead(y_key);
p_pos = analogRead(p_key); q_pos = analogRead(q_key);
if (p_pos>400 && p_pos<600 && q_pos>400 && q_pos<600) { // Joystick 1 actief
if (x_pos>400 && x_pos<600 && y_pos>400 && y_pos<600) pos=100; // stop
else if (x_pos>400 && x_pos<600 && y_pos<400) pos=200; // vooruit
else if (x_pos>400 && x_pos<600 && y_pos>600) pos=300; // achteruit
else if (y_pos>400 && y_pos<600 && x_pos<400) pos=400; // links
else if (y_pos>400 && y_pos<600 && x_pos>600) pos=500; // rechts
radio.write(&pos, sizeof(pos)); delay(100);
}
else if (p_pos<400 || p_pos>600) { // Joystick 2 (servo)
if (p_pos<400) pos=600; // servo 90°
else pos=700; // servo 180°
radio.write(&pos, sizeof(pos)); delay(100);
}
}
Code: nRF24L01 Ontvanger (Arduino UNO op Rover)
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
RF24 radio(7, 8);
const byte address[6] = "00001";
Servo servo;
int servo_pin = 9;
void setup() {
Serial.begin(9600);
radio.begin();
servo.attach(servo_pin);
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.setChannel(87);
radio.setDataRate(RF24_250KBPS);
radio.startListening();
pinMode(3, OUTPUT); pinMode(4, OUTPUT);
pinMode(5, OUTPUT); pinMode(6, OUTPUT); // Motor pinnen
}
void loop() {
if (radio.available()) {
int pos; radio.read(&pos, sizeof(pos));
switch(pos) {
case 100: stopMotors(); break;
case 200: forward(); break;
case 300: backward(); break;
case 400: left(); break;
case 500: right(); break;
case 600: servo.write(90); break;
case 700: servo.write(180); break;
}
} else { Serial.println("connection lost"); }
}
void stopMotors() { digitalWrite(3,LOW); digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,LOW); }
void forward() { digitalWrite(3,HIGH); digitalWrite(4,LOW); digitalWrite(5,HIGH); digitalWrite(6,LOW); }
void backward() { digitalWrite(3,LOW); digitalWrite(4,HIGH); digitalWrite(5,LOW); digitalWrite(6,HIGH); }
void left() { digitalWrite(3,LOW); digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,LOW); }
void right() { digitalWrite(3,HIGH); digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,HIGH); }
Telegram Alerting (Python op Server)
import requests, json, time
from boltiot import Bolt
import conf # bevat: bolt_api_key, device_id, telegram_bot_id, telegram_chat_id, threshold
mybolt = Bolt(conf.bolt_api_key, conf.device_id)
def get_sensor_value(pin):
try:
resp = mybolt.digitalRead(pin)
data = json.loads(resp)
if data["success"] != 1: return -999
return int(data["value"])
except: return -999
def send_telegram(msg):
url = f"https://api.telegram.org/{conf.telegram_bot_id}/sendMessage"
payload = {"chat_id": conf.telegram_chat_id, "text": msg}
try:
r = requests.get(url, params=payload)
return json.loads(r.text)["ok"]
except: return False
while True:
val = get_sensor_value("4") # bodemvocht sensor op pin 4
if val == -999: time.sleep(10); continue
if val >= conf.threshold:
send_telegram(f"Vochtigheidwaarde {val} overschrijdt drempel!")
time.sleep(100)
Google Assistant + IFTTT + Integromat (Make) voor SMS/E-mail
- Integromat scenario: IFTTT Webhook → HTTP GET naar Bolt Cloud (sensorwaarde) → Router → Mailgun (e-mail met temp = sensorwaarde/10.24) & Twilio (SMS).
- IFTTT Applet: Google Assistant commando "Send sensor value" → Webhook naar Integromat URL.
- Zeg "Ok Google, send sensor value" → ontvang e-mail/SMS met temperatuur.
Schema's
Zie bijgevoegde afbeeldingen voor: motor driver aansluiting, Bolt pinout, nRF24L01 verbindingen, joystick wiring, en de complete rover-schematic.
Productieproces
- Bluetooth-gecontroleerde Arduino Spybot bouwen
- FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
- DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
- Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten
- Arduino Boter-Kaas-Eieren met MAX7219 LED Matrix en Kartonnen Behuizing
- Bouw een Slimme Arduino Vierpotige Robot: Stap-voor-Stap Handleiding
- Naadloze LED-dimmer met Bolt IoT en Arduino UNO
- Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming
- Bouw een Volledig Functionele CNC-machine met Arduino Nano R3