DIY Smart IoT-Gerät: ATmega32U4, ESP8266 & Sensoren (GIY-Projekt)
Komponenten und Materialien
| ATmega32U4 (Microchip) | 1× |
| ESP8266 ESP-12E | 1× |
| 16 MHz Quarz | 1× |
| N-Channel Power MOSFET | 4× |
| Spannungsregler-Modul (Digilent) | 1× |
| DHT11 Temperatur & Luftfeuchte | 1× |
| DS18B20 1-Wire Temperatursensor | 1× |
| Wassererkennungssensor (MikroE Water Detect Click) | 1× |
| LCD Screen (Arduino-kompatibel) | 1× |
| Fotowiderstand (LDR) | 1× |
Werkzeuge & Maschinen
- 3D-Drucker (BigRep, Ultimaker 2+)
- Lasercutter (Epilog Fusion 60W)
- CNC-Fräse (e-sign Easy Worker MasterPro 2513)
- Vakuumformmaschine (Formech)
Software
- Autodesk Fusion 360 (CAD)
- Arduino IDE
- EAGLE (PCB-Design)
- GIMP (Bildbearbeitung)
- LCD Assistant (Bitmap-Konvertierung)
- Simplify3D (Slicer)
Projektbeschreibung
Einführung: „Grow It Yourself“ (GIY)
Inspiriert vom TED-Talk „Digital Farming“ (Caleb Harper, MIT OpenAg) entstand die Vision eines kompakten, automatisierten Pflanzenschranks: ideales Klima, LED-Wachstumslicht (450 nm & 650 nm), Aeroponik (Ultraschallvernebler), automatische Nährstoffdosierung, pH/TDS-Überwachung, Wasserwechsel per Knopfdruck, präzise Luftsteuerung (Temp/Feuchte) und Mobile App für Monitoring & Control.
Experimente: Substrate & Methoden
Vier Testgruppen: (Erde + Sonnenlicht), (Nebel + Sonnenlicht), (Erde + LED), (Nebel + LED = HERO). Keimung auf Kokos-Quelltabletten, später Umstieg auf Steinwolle (Rockwool), da Nebel Tonkugeln/Erde nicht ausreichend benetzte. Osterpause ließ alle Pflanzen eingehen – Neuanfang mit verbesserter Methodik.
Elektronik: Eigenes PCB-Design (FabLeo-Basis)
Mikrocontroller: ATmega32U4 (Hardware-USB, 16 MHz Quarz). Entwurf in EAGLE (Schematic + Board Layout). Features:
- 4× MOSFET-Ausgänge (3× 12 V direkt, 1× Step-Up auf 24 V für Vernebler)
- Spannungsregler 12 V → 5 V
- AVRISP-Programmierheader
- USB-Schaltung + Quarz
- Sensor-Anschlüsse: DHT11, DS18B20 (4,7 kΩ Pullup nachträglich), LDR, Wasserstand, pH
- Grafik-LCD (ST7920 128×64) per 3 Pins (SPI-ähnlich)
Doppelseitiges PCB: Fräsen (Roland via FabModules), Löten, Fehlersuche (Kurzschluss per Multimeter finden), Step-Up-Regler kalibrieren (24 V), ESP-12E Modul auf Rückseite.
Sensoren & Programmierung
- DHT11: Einfach, 1 Hz, ±2 °C / ±5 % rF. Bibliothek
DHT.h. - DS18B20: 1-Wire, ±0,5 °C, eindeutige 64-Bit-ID. Bibliotheken
OneWire.h,DallasTemperature.h. Wasserdicht per Schrumpfschlauch selbst gemacht. - LDR: Analog an A0, Werte 0–1023 → Dunkel bis Sehr hell.
- Wasserstand: Bodenfeuchtesensor zweckentfremdet: 0 = leer, ~800 = niedrig, >900 = voll.
- pH-Sensor (Logo v1.1): Op-Amp-Board wandelt mV-Sonde auf 0–5 V. Kalibrierung: Offset (pH 7 → 2,5 V) per Potentiometer, Step per Pufferlösung (pH 4,01). Formel:
pH = 7 + ((2,5 - U) / 0,18). - Grafik-LCD (U8glib): 3 Pins (4, 12, 6), FabLab-Logo als Bitmap (HEX-Array) beim Start anzeigen.
Finaler Code (Auszug)
#include "dht.h"
#include "U8glib.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHT11_PIN 2
#define ONE_WIRE_BUS 3
#define WATER_LEVEL A4
#define LDR_PIN A3
#define PH_PIN A5
#define GROW_LIGHT 10
#define FOG_PUMP 13
dht DHT;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature waterTemp(&oneWire);
U8GLIB_ST7920_128X64 u8g(4, 12, 6, U8G_PIN_NONE);
// ... Logo-Bitmap-Array (PROGMEM) ...
void setup() {
waterTemp.begin();
pinMode(GROW_LIGHT, OUTPUT); pinMode(FOG_PUMP, OUTPUT);
digitalWrite(GROW_LIGHT, HIGH);
// LCD Init & Logo anzeigen
u8g.firstPage(); do { u8g.drawBitmapP(32, 0, 16, 64, logo); } while(u8g.nextPage());
}
void RefreshDisplay(float *hum, double *T, int *WL, int *LL, int *pH_val) {
u8g.setFont(u8g_font_fub11);
u8g.drawStr(4, 0, "Hum%"); u8g.setPrintPos(68,0); u8g.print(*hum);
u8g.drawStr(4, 15, "Temp"); u8g.setPrintPos(68,15); u8g.print(*T);
u8g.drawStr(4, 30, "Wlvl");
if (*WL == 0) { u8g.drawStr(68,30,"EMPTY!"); digitalWrite(FOG_PUMP, LOW); }
else if (*WL < 800) u8g.drawStr(68,30,"LOW");
else { digitalWrite(FOG_PUMP, HIGH); u8g.drawStr(68,30,"HIGH"); }
// Licht-Level Text
if (*LL < 100) u8g.drawStr(68,45,"Dark");
else if (*LL < 200) u8g.drawStr(68,45,"Dim");
else if (*LL < 500) u8g.drawStr(68,45,"Light");
else if (*LL < 800) u8g.drawStr(68,45,"Bright");
else u8g.drawStr(68,45,"VeryBright");
// pH
double voltage = 5.0 / 1024.0 * (*pH_val);
float pH = 7 + ((2.5 - voltage) / 0.18);
u8g.drawStr(4, 45, "pH"); u8g.setPrintPos(28,45); u8g.print(pH);
}
void loop() {
waterTemp.requestTemperatures();
double T = waterTemp.getTempCByIndex(0);
int waterLevel = analogRead(WATER_LEVEL);
int lightLevel = analogRead(LDR_PIN);
int pH = analogRead(PH_PIN);
float hum = DHT.humidity; // DHT.read11(DHT11_PIN) zuvor
u8g.firstPage();
do { RefreshDisplay(&hum, &T, &waterLevel, &lightLevel, &pH); } while(u8g.nextPage());
delay(1000);
}
3D-Druck & Gehäuse
Wasserbehälter (BigRep, 1 m³ Bauraum, PLA, 0,2 mm Layer, 20 % Infill, Support), Net Pots (Ultimaker 2+, optimierte Wurzelöffnung), Bodenplatte, runde Ecken (transparent). Design in Fusion 360, parametrisch.
Lasercutting (Acryl 5 mm)
Front/Seiten/Rückwand (grün), Front mit LCD-Ausschnitt, Rückwand mit USB-Zugang, Top-Abdeckung transparent mit LED-Schlitzen.
CNC-Fräsen (18 mm Multiplex)
Strukturwände & Form für Vakuumgießen (Wasserdichtung des 3D-Druckteils).
Vakuumgießen (Formech)
Dünne Einlegewanne aus Kunststoff, um 3D-Druckbehälter wasserdicht zu machen. Trick: Erste dünne Schicht als Trennschicht (Silikonspray), dann eigentliche Wanne darüber ziehen.
Endmontage & Ergebnis
Struktur verschrauben, RGB-LED-Streifen (4 Stücke) anlöten, Sensoren verdrahten, PCB einbauen. Funktionierendes, optisch ansprechendes GIY-System.
Lizenz & Quelle
© 2017 Albot Dima. Creative Commons BY-NC-SA 4.0.
Original: Fab Academy Archive
Schaltpläne
PCB-Schematic & Board Layout als Bilder verfügbar.
Herstellungsprozess
- Individuelle 4×4 Tic-Tac-Toe Visitenkarten-Platine – Design, Bau und Programmierung
- Multi-Position Temperatursensor-System für Smart-Home-Integration
- DIY Lötkolben-Controller für 862D+ – Präzision & Zuverlässigkeit
- MotionSense: Smarte Einbruchserkennung mit Arduino & ESP8266
- 3D-Drucker Brandschutz: Intelligentes Sensorsicherheitssystem
- Web-fähigen IoT-Messer mit Arduino, Yaler und IFTTT bauen
- Arduino-basierte abstoßende Magnetschwebung: Einfache Schaltung & DIY-Anleitung
- Fortgeschrittener ferngesteuerter Greifer-Roboter für präzises Handling
- Hochleistungs-Datenlogger für Arduino-Wetterballons
- CoroFence Thermaldetektor: PIR-Sensor & IoT-Integration mit Panasonic GridEye