Octopod: Smarte IoT-Automatisierungslösung für Zuhause und Industrie
Komponenten und Zubehör
| Arduino UNO | × | 1 |
| Arduino MKR WiFi 1010 (oder NodeMCU ESP8266 / ESP32) | × | 1 |
| Maxim Integrated MAX32630FTHR (Alternative: MAX32620FTHR, Arduino 1010, ESP8266 Board + externes WiFi) | × | 1 |
| Raspberry Pi Zero Wireless (oder Pi 2/3) | × | 1 |
| DHT11 Temperatur- & Feuchtigkeitssensor (4 Pins) | × | 1 |
| Seeed Grove Gas Sensor MQ2 | × | 1 |
| SparkFun Soil Moisture Sensor (mit Schraubklemmen) | × | 1 |
| PIR Bewegungsmelder (optional) | × | 1 |
| RFID Reader (allgemein) | × | 1 |
| Relais (2-Kanal empfohlen) | × | 1 |
| RGB LED Common Cathode | × | 1 |
| Raspberry Pi Camera Module | × | 1 |
| Servo Tower Pro MG996R | × | 1 |
| Summer (Buzzer) | × | 2 |
| HC-05 Bluetooth Modul (optional) | × | 1 |
| LED (allgemein) | × | 4 |
| Netzteil / Powerbank | × | 2 |
| Speicherkarte (>4 GB, Class 10 für Raspberry Pi OS) | × | 1 |
Benötigte Werkzeuge und Maschinen
- Heißklebepistole
- 3D-Drucker (optional)
- Handwerkzeug (Seitenschneider, Schere, Cutter, etc.)
Apps und Online-Dienste
- Blynk (IoT-App)
- OpenCV (Computer Vision)
Über dieses Projekt
Es gibt viele IoT-Automatisierungsprojekte, aber Octopod ist einzigartig! Octopod nutzt NodeMCU (oder MAX32620FTHR / Arduino MKR 1010), Arduino Uno und Raspberry Pi 3. Es macht Ihr Zuhause smart. Octopod sendet Daten wie Temperatur, Luftfeuchtigkeit, Gasqualität. Es benachrichtigt bei Bewegung und meldet, wann Pflanzen gegossen werden müssen. Geräte lassen sich per Blynk-App am Smartphone steuern. Dazu echtes Mood Lighting!
Eine kleine Kamera liefert Live-Feed. Mit Künstlicher Intelligenz (OpenCV) erkennt sie Menschen und sendet deren Bilder per E-Mail. Zusätzlich ein RFID-Türschloss!



Wie alles funktioniert
NodeMCU ist mit Sensoren, Relais-Modul und RGB-LEDs verbunden. Per WLAN mit Blynk-App gekoppelt – Datenaustausch und Steuerung.
Raspberry Pi ebenfalls per WLAN: Live-Feed via Pi-Camera. OpenCV installiert, erkennt Menschen im Blickfeld und mailt deren Bilder.
Smart Door Unit: RFID-Modul. Erlaubte RFID-Karte in Reichweite → Tür öffnet automatisch (Servo).
SCHRITT 1: Haupt-Octopod programmieren
Code fast zeilenweise kommentiert – zum Verständnis, nicht nur Kopieren. Kurzübersicht:
Bibliotheken einbinden
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#define BLYNK_PRINT Serial
Blynk Auth-Token, WLAN-Credentials:
char auth[] = "Your Blynk Auth Key";
char ssid[] = "Your WiFi SSID";
char pass[] = "Your WiFi Password";
Pins und Variablen definieren
#define DHTPIN 2
#define soilPin 4
#define gasPin A0
#define pirPin 12
int pirValue, soilValue, PIRpinValue, SOILpinValue;
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
BLYNK_WRITE() – App steuert Sensor-Aktivierung
BLYNK_WRITE(V0) { PIRpinValue = param.asInt(); } // Motion Detection AN/AUS
BLYNK_WRITE(V1) { SOILpinValue = param.asInt(); } // Soil Moisture AN/AUS
sendSensor() – DHT11 Daten an Blynk senden
void sendSensor() {
int h = dht.readHumidity();
int t = dht.readTemperature();
if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; }
Blynk.virtualWrite(V5, h); // Humidity
Blynk.virtualWrite(V6, t); // Temperature
}
getPirValue() & getSoilValue() – Sensoren lesen & Push-Benachrichtigung
void getPirValue() {
pirValue = digitalRead(pirPin);
if (pirValue) { Serial.println("Motion detected"); Blynk.notify("Motion detected"); }
}
void getSoilValue() {
soilValue = digitalRead(soilPin);
if (soilValue == HIGH) { Serial.println("Water Plants"); Blynk.notify("Water Plants"); }
}
setup() – Initialisierung
void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
dht.begin();
Blynk.tweet("OCTOPOD IS ONLINE!");
pinMode(pirPin, INPUT);
pinMode(soilPin, INPUT);
timer.setInterval(1000L, sendSensor);
}
loop() – Hauptloop
void loop() {
Blynk.run(); timer.run();
if (PIRpinValue == HIGH) getPirValue();
if (SOILpinValue == HIGH) getSoilValue();
}
SCHRITT 2: RFID Smart Lock programmieren
Zwei Versionen: mit/ohne Bluetooth. Einfach: MFRC522 Library installieren, Beispiel dumpInfo nutzen, um Karten-UIDs auszulesen. Dann UID in Code eintragen:
if (content.substring(1) == "XX XX XX XX") { ... }
Logik: UID match → Servo bewegt sich (Tür auf), grüne LED, Summer. Kein Match → rote LED, anderer Summer-Ton.



SCHRITT 3: Raspberry Pi Menschenerkennung (KI) einrichten
Anleitung für Smart Security Camera: Kamera sendet E-Mail bei Objekterkennung, Live-Feed via IP-Adresse im lokalen Netz (oder ngrok für extern). Von Grund auf:
Voraussetzungen
- OpenCV (Open Source Computer Vision Library)
- Raspberry Pi 3B
- Raspberry Pi Camera V2
Annahmen
- Raspbian Stretch (frische Installation empfohlen, Upgrade von Jessie riskant).
- Physischer Zugriff oder SSH/VNC.
Schritt 1: Kamera anschließen
- Kamera-Modul öffnen, statische Entladung beachten (geerdetes Objekt berühren).
- Kabel in Connector zwischen Ethernet und HDMI (Silberkontakte Richtung HDMI).
- Pi booten,
sudo raspi-config→ Kamera aktivieren (unter Interfacing Options). Falls nicht sichtbar:sudo apt-get update && sudo apt-get upgrade. - Reboot.
Schritt 2: OpenCV Installation
- Dateisystem erweitern:
sudo raspi-config→ Advanced Options → Expand Filesystem. Optional LibreOffice & Wolfram Engine entfernen für Platz (sudo apt-get purge wolfram-engine libreoffice* && sudo apt-get clean && sudo apt-get autoremove). - Abhängigkeiten installieren (Build-Tools, Bild/Video I/O, GTK, Optimierungsbibliotheken, Python Headers). Siehe Code-Blöcke im Original.
- OpenCV 3.3.0 + opencv_contrib 3.3.0 herunterladen & entpacken (Versionen müssen identisch sein).
- pip installieren, virtualenv/virtualenvwrapper einrichten, Python Virtual Environment
cverstellen (Python 2.7 oder 3). - NumPy in
cvinstallieren. - OpenCV kompilieren mit CMake (Swap-Size auf 1024 MB erhöhen für 4-Core-Compile:
sudo nano /etc/dphys-swapfile→CONF_SWAPSIZE=1024, Swap-Service neu starten).make -j4(odermakebei Fehlern). - Installieren:
sudo make install && sudo ldconfig. - Symlink in Virtual Environment:
ln -s /usr/local/lib/pythonX.Y/site-packages/cv2.so ~/.virtualenvs/cv/lib/pythonX.Y/site-packages/cv2.so(bei Python 3 Datei vorher umbenennen). - Test:
source ~/.profile && workon cv && python -c "import cv2; print(cv2.__version__)"→ 3.3.0. - Swap zurück auf 100 MB setzen, Build-Verzeichnisse löschen.
Schritt 3: Python-Programm einrichten
- Kamera testen:
raspistill -o image.jpg. - Python-Dateien & Modelle herunterladen (Google Drive Link im Original).
- Virtual Environment aktivieren (
source ~/.profile && workon cv). - In Repository-Verzeichnis:
pip install -r requirements.txt. mail.pyanpassen: Gmail-Absender, Passwort, Empfänger eintragen (SMTP, „less secure apps“ in Google erlauben).main.pyoptional anpassen (E-Mail-Intervall, Kamera-Flip, Klassifikator-Modell: fullbody/upperbody/facial).- Starten:
python main.py. Live-Stream im Browser:https://. Extern via ngrok::5000 ./ngrok http 5000. - Autostart via
/etc/rc.localeinrichten.







SCHRITT 4: Blynk App Interface einrichten
Einfach & spaßig:
- Blynk App installieren (App Store/Play Store), Anmelden.
- New Project → Name, Device: NodeMCU, Connection: WiFi → Create.
- Auth Key per Mail → in Code kopieren.
- Widgets hinzufügen (Energie nötig):
- 3 Gauges: Temperature (V6, 0-50°C), Humidity (V5), Gas (V?).
- zeRGBa: R→GP15, G→GP3, B→GP1.
- 4 Buttons (Farben anpassen) für Relais, Motion, Soil, etc.
- SuperChart: 3 Data Streams (Temp, Humidity, Gas).
- Tabs: 2. Tab → Twitter, Notifications, Email, Eventor konfigurieren (Triggers für Benachrichtigungen).
- Play-Button drücken – Interface läuft. Nach Belieben anpassen.


SCHRITT 5: Octopod-Gehäuse bauen
Warnung – zeitaufwendigster Teil! Optional: 3D-Druck-Dateien nutzen (siehe CAD-Bereich).
Design inspiriert von Oktaeder (3D-Achteck). Aus Pappe:
- Rechtecke 9×9,5 cm zeichnen, 4 Stück aneinander (oder 8 bei langem Karton).
- Teilschnitte (Falz) zwischen Rechtecken, langes Stück ausschneiden. 4× wiederholen.
- 135° Winkel zeichnen & ausschneiden (16 Stück).
- Winkel mit Heißkleber in Falzen fixieren.
- 2 offene Strukturen zu geschlossenem Oktaeder verkleben.
- Weitere 2 Strukturen senkrecht ankleben → 3D-Form.
- 4 weitere 9×9,5 cm Stücke in Lücken kleben.
- 8 offene Dreiecke bleiben → Acryl-Butterbrotpapier-Dreiecke zuschneiden (noch nicht kleben).
Lackierung: Im Freien, Maske/Handschuhe, 2-3 Schichten Sprühfarbe, 4-5 Std. Trocknung zwischen Schichten.

SCHRITT 6: Türschloss-Gehäuse
Schuhkarton, 2-3 Farbschichten, evtl. Muster mit Duck Tape.

SCHRITT 7: Octopod zusammenbauen
Schaltplan beachten (Bild/Datei). Kurz:
- NodeMCU auf großem Breadboard, Breadboard-Netzteil darauf. Alle Sensoren, LEDs, Relais vom Netzteil versorgt.
- Sensor-Anschlüsse: DHT11→D4/GP2, MQ2→A0, Soil→D2/GP4, PIR→D6/GP1, RGB R→D8/GP15, G→Rx/GP3, B→Tx/GP1, Relais1→D0/GP16, Relais2→D5/GP14.
- Stromversorgung: Powerbank oder Netzteil an Breadboard-Netzteil.
- Raspberry Pi mit Kamera: Loch in Kartonwand, Kamera festkleben.
- Elektronik durch offenes Dreieck einschieben, Dreiecke mit Acryl-Papier verschließen (1-2 offen lassen für Wartung). Bodensensor-Spitzen nach außen.

Fertig! Einschalten, auf Tisch stellen, Live-Feed via Pi-IP im Browser genießen!
SCHRITT 8: Türschloss zusammenbauen
Code auf Arduino laden, Verdrahtung laut Schaltplan/Fritzing. Schuhkarton: 2 Löcher für LEDs, Servo herausragen lassen. RFID-Reader, Breadboard, Arduino im Karton fixieren. Netzteil/Powerbank anschließen. Fertig! (Nur Experiment, nicht als echtes Schloss nutzen!)
Fazit
Ein wirklich spaßiges Projekt! Ergebnis gefällt mir gut, Lichter sehen toll aus. Selbst als Nachttischlampe lohnt der Bau. Danke an Blynk- und OpenCV-Ersteller – großartige Software! Fragen? Gerne kommentieren. Danke & Please Vote!
-Saksham
Arduino Blog / Full Instructable

UPDATE
Integration mit Amazon Alexa in Arbeit, Code folgt in 2-3 Tagen!
Code
octopod.ino (Arduino) – Hauptcode für NodeMCU / MKR 1010
/***************************************************************************
OCTOPOD: SMART HOME AUTOMATION PROJECT BY SAKSHAM
Blynk Library: https://github.com/blynkkk/blynk-library/releases/latest
DHT Library: https://github.com/adafruit/DHT-sensor-library
***************************************************************************/
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#define BLYNK_PRINT Serial
char auth[] = "Your Blynk Auth Key";
char ssid[] = "Your WiFi SSID";
char pass[] = "Your WiFi Password";
#define DHTPIN 2
#define soilPin 4
#define gasPin A0
#define pirPin 12
int pirValue, soilValue, PIRpinValue, SOILpinValue;
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
BLYNK_WRITE(V0) { PIRpinValue = param.asInt(); }
BLYNK_WRITE(V1) { SOILpinValue = param.asInt(); }
void sendSensor() {
int h = dht.readHumidity();
int t = dht.readTemperature();
if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; }
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
}
void getPirValue() {
pirValue = digitalRead(pirPin);
if (pirValue) { Serial.println("Motion detected"); Blynk.notify("Motion detected"); }
}
void getSoilValue() {
soilValue = digitalRead(soilPin);
if (soilValue == HIGH) { Serial.println("Water Plants"); Blynk.notify("Water Plants"); }
}
void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
dht.begin();
Blynk.tweet("OCTOPOD IS ONLINE!");
pinMode(pirPin, INPUT);
pinMode(soilPin, INPUT);
timer.setInterval(1000L, sendSensor);
}
void loop() {
Blynk.run(); timer.run();
if (PIRpinValue == HIGH) getPirValue();
if (SOILpinValue == HIGH) getSoilValue();
}
octopod_door.ino (Arduino) – Automatisches Türschloss (OHNE Bluetooth)
/***********************************************************************************************************
OCTOPOD: SMART HOME AUTOMATION BY SAKSHAM
ARDUINO RFID DOOR LOCK – Library: MFRC522
************************************************************************************************************/
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5
#define LED_R 4
#define BUZZER 2
MFRC522 mfrc522(SS_PIN, RST_PIN);
Servo myServo;
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
myServo.attach(3);
myServo.write(0);
pinMode(LED_G, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
Serial.println("Put your card to the reader..."); Serial.println();
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
Serial.print("UID tag :");
String content = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println(); Serial.print("Message : "); content.toUpperCase();
if (content.substring(1) == "XX XX XX XX") { // HIER EIGENE UID EINTRAGEN
Serial.println("Authorized access"); Serial.println(); delay(500);
digitalWrite(LED_G, HIGH); tone(BUZZER, 500); delay(300); noTone(BUZZER);
myServo.write(180); delay(5000); myServo.write(0); digitalWrite(LED_G, LOW);
} else {
Serial.println(" Access denied");
digitalWrite(LED_R, HIGH); tone(BUZZER, 300); delay(1000);
digitalWrite(LED_R, LOW); noTone(BUZZER);
}
}
octopod_door_bluetooth.ino (Arduino) – Türschloss MIT Bluetooth
/***********************************************************************************************************
OCTOPOD: SMART HOME AUTOMATION BY SAKSHAM
ARDUINO RFID DOOR LOCK (Bluetooth) – Library: MFRC522
************************************************************************************************************/
#include <SoftwareSerial.h>
SoftwareSerial BTserial(0, 1); // RX | TX
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5
#define LED_R 4
#define BUZZER 2
MFRC522 mfrc522(SS_PIN, RST_PIN);
Servo myServo;
void setup() {
BTserial.begin(9600);
BTserial.println("Waiting for connections...");
SPI.begin();
mfrc522.PCD_Init();
myServo.attach(3); myServo.write(0);
pinMode(LED_G, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
BTserial.println("Put your card to the reader..."); BTserial.println();
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
BTserial.print("UID tag :");
String content = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
BTserial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
BTserial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
BTserial.println(); BTserial.print("Message : "); content.toUpperCase();
if (content.substring(1) == "33 3E A7 E5" || content.substring(1) == "E5 36 6B 49") {
BTserial.println("Authorized access"); BTserial.println(); delay(500);
digitalWrite(LED_G, HIGH); tone(BUZZER, 500); delay(300); noTone(BUZZER);
myServo.write(180); delay(5000); myServo.write(0); digitalWrite(LED_G, LOW);
} else {
BTserial.println(" Access denied");
digitalWrite(LED_R, HIGH); tone(BUZZER, 300); delay(1000);
digitalWrite(LED_R, LOW); noTone(BUZZER);
}
}
Eigene Teile und Gehäuse
Grunddesign für Karton/Holz-Bau: octopod_v2_ukTmIJ0uMl.f3d
Richtiges Gehäuse für 3D-Druck: octo_2_v3_sii4tuCF7d.f3d
Schaltpläne
Pin-Belegung kann bei Arduino MKR 1010 abweichen.
Ohne Bluetooth. Für Bluetooth: Rx (HC-05) → Tx (Arduino), Tx (HC-05) → Rx (Arduino), 5V↔5V, GND↔GND.
ESP MAX AO GPIO2 A1 GPIO1 Soil Sensor MAX analog GPIO3 Gas Sensor (MQ2) MAX sensor GPIO4 PIR Sensor MAX sensor GPIO0 Relay MAX 1 M0 2 M1
Herstellungsprozess
- Wie Smart Home Technologie den Alltag transformiert
- Malvertising bedroht Smart-Home-IoT: Versteckte Anzeigen kompromittieren Geräte
- Raspberry Pi Home Automation System für Fernsteuerung bauen
- Intelligente Jalousien: Automatische Lichtsteuerung mit Arduino & Solarenergie
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Smart Home Automatisierung & Sicherheitssystem mit 1Sheeld
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
- WLAN-Türschloss mit Arduino & ESP8266 – Per Smartphone entsperren
- Industrielle Automatisierung 4.0: Produktionseffizienz revolutionieren