Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Komponenten und Zubehör

Bauteil Menge Hinweis
Arduino UNO 1 pro Raum Für jeden zu automatisierenden Raum ein separater Arduino UNO.
Raspberry Pi 2 Model B 1
Jumper-Kabel (generisch) 1
Breadboard (generisch) 1
LDR (Lichtabhängiger Widerstand) 1 Liefert unterschiedliche Spannungswerte bei unterschiedlicher Lichtintensität.
PIR-Bewegungsmelder (generisch) 1 Passiver IR-Sensor erkennt menschliche Anwesenheit.
Relais-Modul (generisch) 1 Beliebiges Relais-Modul. Anzahl Relais = Anzahl zu steuernder Geräte.
Siemens Schütz (3TF32 00-0AP0) 1 Für Wasserpumpe max. AC3: 16A 415VAC. Spulenspannung 250VAC. Vor Kauf Pumpen-Leistung prüfen.
Leitungsschutzschalter (1P C16A) 1 Schützt Wasserpumpe vor elektrischen Fehlern/Überlast. Passend zum Schütz (16A).

Apps und Online-Dienste

Über dieses Projekt

In der heutigen Zeit kann Technologie das menschliche Leben verbessern. Automatisierung war früher Science-Fiction – heute Realität. Durch Kombination neuester Technik mit dem Zuhause entsteht ein großartiges Smart Home. Mit Raspberry Pi und Windows 10 bauen wir ein System, das Hausgeräte automatisch steuert.

Erste Schritte: Grundlagen verstehen

Betrachte die Gesamtkonfiguration:

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Raum-Konfiguration

Pro Raum steuert ein Arduino UNO Geräte und liest Sensoren. Der Raspberry Pi fragt periodisch Sensordaten vom Arduino ab. Die „Raum-Architektur“ zeigt die Verkabelung:

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Jeder Raum hat: mehrere steuerbare Geräte (Licht, Ventilator, Steckdosen), einen PIR-Sensor (Anwesenheit), einen Temperatursensor (LM35) und einen LDR (Lichtintensität am Fenster).

Geräte-Adressierung

Geräte werden durch Kombination aus Raumnummer + Gerätenummer eindeutig identifiziert.

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Zusammenfassung: Raspberry Pi = Hauptcontroller. Jeder Raum hat einen Arduino UNO als I2C-Slave. Kommunikation über I2C-Bus.

Schaltpläne

Implementierung für den ersten Raum. Schaltplan beachten.

I2C-Bus-Leiste: Für mehrere Arduinos am Bus.

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Gerät an Relaisplatine anschließen

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Software

Projekt besteht aus Raspberry Pi 2 (Visual Studio 2015, C#, Universal Windows XAML) und Arduino UNO. Vorausgesetzt: Grundkenntnisse in Arduino, C#, UWP/XAML.

Protokoll (I2C-Kommunikation Pi ↔ Arduino)

Ziele: Sensoren lesen, Gerätestatus lesen, Gerätestatus setzen.

Sende-Bytes: fest 3 Bytes. Empfangs-Array: 14 Bytes.

Protokoll-Details (X = ignorierter Wert):

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Klasse I2C_Helper im Universal-Windows-Projekt implementiert das Protokoll (Solution Explorer → Library → Communication). Arduino-Seite nutzt Standard-I2C-Bibliothek.

Klassenstruktur (Objektmodell auf dem Pi)

OOP-Struktur: Home → Liste von Room → Liste von Device + Sensor-Struktur.

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Benutzeroberfläche (Wireframes & Screenshots)

Hauptziele: Raumverwaltung, Geräteverwaltung, externe Dienste (GSM, Internet).

Aufgeteilt in:

Wireframes:

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Entwickelte UI (Screenshots):

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Konfiguration Schritt für Schritt

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core
Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Wasserpumpe & Geyser steuern

Nicht direkt an Relais anschließen (Gefahr/Defekt)! Stattdessen: Pumpe/Geyser → Schütz → Relais steuert Schützspule. Schütz-Spulen- und Kontaktdaten müssen zur Pumpe passen. Lieber etwas höher dimensionieren.

Deployment auf Raspberry Pi 2

Referenz: Windows 10 IoT Core Deployment Guide

App als Startup-App registrieren

Artikel: Windows 10 IoT Core: Setting Startup App

Bekannte Probleme & Lösungen

Arduino Boot-Up Flackern (Pin D13)

Beim Booten flackert D13. Kein Relais an D13 anschließen, sonst flackert das angeschlossene Gerät.

Lösung: 1) D13 nicht nutzen. 2) OptiBoot-Firmware ohne D13-Flackern neu flashen (aufwendiger).

Uhrzeit-Problem (kein RTC auf Pi 2)

Raspberry Pi 2 hat keine Echtzeituhr. Nach Stromausfall/Neustart geht Zeit verloren.

Lösung: Externes RTC-Modul anschließen (an Pi oder Arduino). Alternativ NTP (braucht Internet) oder Arduino liest RTC und Pi fragt beim Boot ab.

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Debugging-Probleme bei Universal Apps

Asynchrone Operationen in UWP führen zu schwer lokalisierbaren Fehlern. Häufig: Absturz ohne Fehlermeldung, Watch Window nutzlos.

Lösung: Breakpoints vor vermuteten Fehlerzeilen setzen. Zum Veröffentlichungszeitpunkt fehlen UWP noch Debugging-Features klassischer Windows-Apps.

Zukunft & Ausblick

Keine Grenzen für Features: RF/IR statt I2C, Azure-Webportal für Mobile, echte Automation (zeitgesteuert via RTC, ereignisgesteuert z. B. Licht bei Dämmerung). Raspberry Pi 2 mit 900 MHz Quad-Core und Windows 10 IoT Core bietet riesiges Potenzial.

Viel Erfolg & Sicherheit! Fragen gerne stellen.

Code

Arduino Sketch (I2C Slave)

/* Arduino Sketch v0.4 für "Home Automation using Raspberry Pi 2 and Windows 10 IoT"
   Getestet auf Atmega328p. Arduino als I2C-Slave (Adresse 0x40) für RPi2 unter Win10 IoT.
   Ziele: Periodisch Sensordaten sammeln (loop), OnReceive: 3-Byte-Modus empfangen & ausführen,
   OnRequest: 14-Byte-Response basierend auf Modus senden.
   Keine Gewährleistung. Nutzung privat/kommerziell erlaubt. Keine Haftung für Schäden.
*/
#include <Wire.h>
#define _DEBUG_
#define SLAVE_ADDRESS 0x40

// Pin-Deklaration
int Pin_AmbientLight_LDR = A0;
int Pin_PassiveIR = 2;
int Pin_Temperature = A1;

// Globale Variablen
volatile short Value_AmbientLight_LDR, Value_Temperature;
volatile bool Value_PassiveIR;

// Protokoll-Variablen
byte Mode, Pin, Value;
byte Response[14];

void setup() {
  pinMode(Pin_AmbientLight_LDR, INPUT);
  pinMode(Pin_PassiveIR, INPUT);
  pinMode(Pin_Temperature, INPUT);
  // Alle digitalen Pins 0-13, A2, A3 als Ausgänge für Relais
  for (int p = 0; p <= 13; p++) pinMode(p, OUTPUT);
  pinMode(A2, OUTPUT);
  pinMode(A3, OUTPUT);

#ifdef _DEBUG_
  Serial.begin(9600);
#endif

  Wire.begin(SLAVE_ADDRESS);
  Wire.onRequest(SendData);
  Wire.onReceive(ReceiveData);
}

void loop() {
  // LDR lesen (10-bit → 8-bit)
  Value_AmbientLight_LDR = analogRead(Pin_AmbientLight_LDR);
  Value_AmbientLight_LDR = map(Value_AmbientLight_LDR, 0, 1023, 0, 255);

  // PIR lesen
  Value_PassiveIR = (digitalRead(Pin_PassiveIR) == HIGH);

  // Temperatur (LM35: 10mV/°C, 5V/1024 = 4.88mV/LSB → 0.488°C/LSB)
  Value_Temperature = (short)((float)(analogRead(Pin_Temperature) * 0.48828125));

  delay(100);
}

void ReceiveData(int byteCount) {
  Mode = Wire.read();
  Pin = Wire.read();
  Value = Wire.read();

  if (Mode == 2) digitalWrite(Pin, Value);

#ifdef _DEBUG_
  Serial.print(Mode); Serial.print(" "); Serial.print(Pin); Serial.print(" "); Serial.println(Value);
#endif
}

void SendData() {
  switch (Mode) {
    case 0: // Sensoren lesen
      Response[0] = (byte)Value_AmbientLight_LDR;
      Response[1] = (byte)(Value_PassiveIR ? 1 : 0);
      Response[2] = (byte)(Value_Temperature < 0 ? 0 : 1); // Vorzeichen
      Response[3] = (byte)(Value_Temperature < 0 ? -Value_Temperature : Value_Temperature);
      break;
    case 1: // Gerätestatus lesen
      Response[0] = digitalRead(0) == HIGH ? 1 : 0;
      Response[1] = digitalRead(1) == HIGH ? 1 : 0;
      Response[2] = digitalRead(3) == HIGH ? 1 : 0;
      Response[3] = digitalRead(4) == HIGH ? 1 : 0;
      Response[4] = digitalRead(5) == HIGH ? 1 : 0;
      Response[5] = digitalRead(6) == HIGH ? 1 : 0;
      Response[6] = digitalRead(7) == HIGH ? 1 : 0;
      Response[7] = digitalRead(8) == HIGH ? 1 : 0;
      Response[8] = digitalRead(9) == HIGH ? 1 : 0;
      Response[9] = digitalRead(10) == HIGH ? 1 : 0;
      Response[10] = digitalRead(11) == HIGH ? 1 : 0;
      Response[11] = digitalRead(12) == HIGH ? 1 : 0;
      Response[12] = digitalRead(A2) == HIGH ? 1 : 0;
      Response[13] = digitalRead(A3) == HIGH ? 1 : 0;
      break;
    case 2: // Gerät gesetzt → Status zurückgeben
      Response[0] = digitalRead(Pin) == HIGH ? 1 : 0;
      break;
  }
  Wire.write(Response, 14);
}

Raspberry Pi 2 Software (Windows Headed App)

Vollständiger Quellcode: GitHub Repository

Schaltpläne

Mehrere Räume durch zusätzliche Arduinos mit einzigartigen I2C-Slave-Adressen am Bus erweiterbar.

Smart Home Automation mit Raspberry Pi 2 & Windows 10 IoT Core

Fritzing-Datei: Home Automation Schematic - Anurag S Vasanwala.fzz

Herstellungsprozess

  1. Fern-Temperatursensor mit Raspberry Pi & Python bauen – Schritt-für-Schritt-Anleitung
  2. 433 MHz Smart-Home-Controller mit Sensorflare und Raspberry Pi selbst bauen
  3. Raspberry Pi Badezimmer-Belegungssensor mit Sprach- & SMS-Benachrichtigung via Twilio
  4. Heimtemperatur mit Raspberry Pi Dashboard überwachen
  5. Raspberry Pi Home Automation System für Fernsteuerung bauen
  6. Adafruit 10DOF IMU Daten von Raspberry Pi 2 an Azure Event Hubs senden (Windows 10 IoT Core)
  7. Präzise Temperatur- & Feuchtigkeitsüberwachung mit SHT15 unter Windows 10 IoT Core
  8. Windows 10 IoT Core auf Raspberry Pi 3 Model B+ installieren – Schritt-für-Schritt
  9. Microsoft Kinect mit Raspberry Pi integrieren für Echtzeit-Menschenerkennung am Sonbi Roboter
  10. Automation & IoT: Die Zukunft des Supply Chain Managements gestalten