SmartAgro: Fortschrittliche IoT-Lösungen für Precision Farming
Komponenten und Materialien
| Arduino MKR GSM 1400 | × | 1 |
| SORACOM Air Global IoT SIM | × | 1 |
| Arduino MKR MEM Shield | × | 1 |
| GY-21 Temperatur- und Feuchtigkeitssensor | × | 1 |
| Adafruit SI1145 UV-Lichtsensor | × | 1 |
| SparkFun Bodenfeuchtesensor (mit Schraubklemmen) | × | 1 |
| Adafruit Wasserdichter DS18B20 Digitaler Temperatursensor | × | 1 |
| Jumper-Kabel | × | 1 |
Benötigte Werkzeuge und Maschinen
- Lötkolben
Über dieses Projekt
Überblick
Ackerland ist eine kostbare Ressource, die für das Überleben der modernen Gesellschaft unverzichtbar ist. Doch die Landwirtschaft steht vor vielen Herausforderungen: Temperatur, Luftfeuchtigkeit und Sonneneinstrahlung müssen für die Kulturpflanze stimmen, und man muss sicherstellen, dass nichts die Ernte vernichtet.
Das Konzept des Smart Farming hat in den letzten Jahren Gestalt angenommen – die Idee, den Zustand der Felder ferngesteuert zu überwachen. Doch diese Revolution hat ihren Preis: Die meisten verfügbaren Systeme sind zu teuer für kleine Betriebe und decken große Flächen oft nicht ab.
SmartAgro will ein Netzwerk von Geräten schaffen, die einfach auf dem zu überwachenden Feld platziert werden können. Die Geräte erfassen atmosphärische Daten, Bodenparameter und Lichtwerte und senden alle Daten in die Cloud, wo sie auf einem Dashboard visualisiert werden.
So kann jeder Betrieb – unabhängig von der Größe – in das neue Zeitalter der Landwirtschaft eintreten und eine skalierbare Flotte von Geräten über sein Land verteilen, die z. B. vor drohender Dürre warnen.


Funktionalität
SmartAgro ermöglicht dem Anwender, eine Flotte von Geräten auf dem Feld einfach zu implementieren. Diese Geräte nehmen in definierten Zeitintervallen Proben von ihren Sensoren.
Die Daten werden auf einer SD-Karte in einer CSV-Datei protokolliert und an das Backend gesendet, wo sie auf einem Dashboard visualisiert werden. Das Projekt besteht aus Frontend (physikalische Geräte) und Backend.
Frontend
Das Frontend sind die physischen Geräte auf dem Feld. Sie erfassen Sensordaten, schreiben sie auf die SD-Karte und senden sie an das Backend.

Ein MKR GSM wird für das Frontend verwendet. Das Gerät sammelt Daten und sendet sie an Soracom, wo sie visualisiert werden. Die Schritte bei der Datenerfassung:

SD-Karte
Das Gerät loggt die Sensordaten in eine CSV-Datei auf der SD-Karte. Die Daten werden angehängt; falls die Datei nicht existiert, wird sie neu erstellt.

Batterie
Das Gerät kann über LiPo-Akku (Buchse am Board), Powerbank oder über den VIN-Pin mit Strom versorgt werden. Die Lebensdauer hängt stark von der Batteriekapazität ab. Zwischen den Messungen geht das Gerät in den Sleep-Mode, um Energie zu sparen.
Datensendung
Die Daten werden per GSM-Verbindung als JSON-Payload an Soracom gesendet. Beispiel-Payload:
{
"Latitude": 53.3570404,
"Longitude": -6.2609935,
"soilTemp": 20.56,
"soilHumidity": 40,
"atmoTemp": 22.12,
"atmoHumidity": 62,
"uvLight": 0.00,
"irLight": 257,
"deviceName": "device1"
}
Backend
Das Backend ist Soracom. Die Daten werden von Soracom empfangen, verarbeitet und auf dem Dashboard dargestellt.

Dashboard
Das Dashboard wird auf Soracom Lagoon gehostet. Soracom Air empfängt die Daten, Soracom Harvest sammelt sie, und Lagoon fragt sie aus Harvest ab. Standort jedes Geräts und alle Sensordaten werden auf dem Dashboard geplottet.


Alerts
Der Benutzer kann E-Mail-Benachrichtigungen einrichten, wenn UV-Index oder Bodenfeuchte abnormale Werte zeigen. So erfährt man rechtzeitig, wenn die Pflanzen Aufmerksamkeit benötigen.
Vorteile
- Daten überall und jederzeit über das Dashboard visualisieren.
- Geräte einfach skalieren und als Flotte betreiben.
- Deutlich geringere Kosten als marktübliche Lösungen.
Projektaufbau
Schritt 1: Benötigte Hardware
- 1× Arduino MKR GSM
- 1× Arduino MEM Shield
- 1× GY-21 Temperatur- und Feuchtigkeitsmodul
- 1× Wasserdichter Temperatursensor (DS18B20)
- 1× SI-1145 UV-Lichtsensor
- 1× Bodenfeuchtesensor
- 1× 2×AA-Batteriehalter (mit Batterien) oder LiPo-Akku
- 1× Soracom SIM-Karte
- 1× SD-Karte
- Jumper-Kabel

Schritt 2: Schaltung aufbauen
Ein Lötkolben wird benötigt, um alle Komponenten zu verlöten. Das Schaltbild ist in der Fritzing-Datei unten dargestellt. Vergessen Sie nicht, das MEM Shield auf das Board zu stecken!

MKR GSM vorbereiten
Ich versorgte das Board über den VIN-Pin mit 2 AA-Batterien. Die Schritte sind in den Bildern dokumentiert.

Schritt 3: Code verstehen
Der Code gliedert sich in vier Hauptbereiche:
- SD-Karte vorbereiten
- Daten sammeln
- Daten auf SD-Karte schreiben
- Daten an Soracom senden
SD-Karte vorbereiten
bool createFile() {
Serial.println("Creating File");
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
Serial.println("OK - File Created");
dataFile.println(legend);
dataFile.close();
return true;
} else {
Serial.println("Error - File Not Detected");
delay(5000);
return false;
}
}
void checkFile() {
if (SD.exists("datalog.csv")) {
Serial.println("OK - File Exists, Will Append");
} else {
while (!createFile()) {}
}
}
Daten sammeln
void collectData() {
soilSens.requestTemperatures();
soilTemp = soilSens.getTempCByIndex(0);
soilHumidity = map(analogRead(A1), 1023, 0, 0, 100);
atmoTemp = gy21.readTemperature();
atmoHumidity = gy21.readHumidity();
visibleLight = uv.readVisible();
irLight = uv.readIR();
uvLight = uv.readUV() / 100.0;
}
Daten auf SD-Karte brennen
bool burnData(String data) {
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
dataFile.println(data);
dataFile.close();
return true;
}
delay(5000);
return false;
}
Daten an Soracom senden
void parseData(String dataToSend) {
if (client.connect(url, 80)) {
client.println("POST / HTTP/1.1");
client.println("Host: harvest.soracom.io");
client.println("User-Agent: Arduino/1.0");
client.println("Connection: close");
client.print("Content-Length: ");
client.println(dataToSend.length());
client.println();
client.println(dataToSend);
}
// Response lesen...
}
Danach geht das Gerät für eine definierte Zeit in den Sleep-Mode und wiederholt den Zyklus.
Schritt 4: Variablen einstellen
deviceName: Benutzerdefinierter Gerätename (wird mit Payload an Soracom gesendet).sleepTime: Sleep-Dauer in Millisekunden zwischen den Messungen.proDebug:truefür Debugging (Serial Monitor muss offen sein),falsefür Feldeinsatz.
Schritt 5: SD-Karte vorbereiten
Die SD-Karte muss als FAT32 formatiert werden. (Bilder zeigen die Schritte unter Windows.)
Schritt 6: Code hochladen
MKR GSM mit Computer verbinden, Code hochladen (Modus auf 1 setzen). Alle Sensoren in Wasser tauchen, Taste drücken und auf Datensendung warten. Mehrmals wiederholen, um Soracom Air zu füllen.
Schritt 7: Soracom einrichten
Zwei Abschnitte: (1) Konto erstellen & SIM registrieren, (2) Soracom Harvest für Datensammlung einrichten. Falls Sie bereits ein Soracom-Konto haben, Abschnitt 1 überspringen.
Abschnitt 1: Konto erstellen – Screenshots zeigen den Registrierungsprozess.
Abschnitt 2: Gruppen & Harvest – Screenshots zeigen die Konfiguration von Gruppen und Harvest.
Schritt 8: Soracom Lagoon einrichten
Lagoon ist das Visualisierungstool. Damit erstellen wir Dashboards und E-Mail-Alerts bei abnormalen Werten. Screenshots zeigen die Einrichtung.
Bibliotheken
- ArduinoLowPower
- MKRGSM
- Wire
- OneWire
- DallasTemperature
- RTCZero
- SPI
- SD
Abschluss
Ich habe ein Gehäuse entworfen; idealerweise ist der Deckel transparent, damit der UV-Sensor innen Platz findet. Ich habe meinen Sensor außen platziert, um Interferenzen zu vermeiden.


Verwendung eines SD-Kartenmoduls
Ich nutzte das Arduino MKR MEM Shield, da es kompakt und einfach ist. Ein SD-Kartenmodul geht auch, aber die meisten arbeiten mit 5 V, während der MKR GSM nur 3,3 V liefert – ein Level-Shifter wäre nötig.
Hintergrund
Die Idee kam mir bei einer Busfahrt an Feldern vorbei. Ich hatte von teuren Überwachungssystemen gelesen, die sich Landwirte oft nicht leisten können. Also entschied ich mich, den kostengünstigen Arduino für die Überwachung mehrerer Parameter einzusetzen – damit jeder Betrieb, groß oder klein, in das IoT- und Smart-Farming-Zeitalter eintreten kann.

Code
SmartAgro – Vollständiger Code
(Der vollständige Code ist im Originalartikel verlinkt.)
Schaltpläne
schematics_rrBJ3HiIfc.fzz
Herstellungsprozess
- Arduino-Sensoren: Typen, Anwendungen und reale Projekte
- Günstiges drahtloses Sensornetzwerk für Zuhause selbst bauen
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Digitales Stadiometer bauen: Körpergröße messen mit Arduino & Lasersensor VL53L0X
- Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
- DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden
- Sensorturm mit Arduino Cloud: Temperatur, Bewegung & Gase überwachen
- Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
- PHP-Webinterface zur Steuerung des Arduino Uno – Komplettanleitung
- Kompaktes Arduino-Radar mit HC-SR04 Ultraschallsensor & 1,8″ Display