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

Heimautomatisierung mit Raspberry Pi 2 und Windows 10 IoT

Komponenten und Verbrauchsmaterialien

Arduino UNO
Nehmen Sie für jeden Raum, den Sie automatisieren möchten, ein separates Arduino UNO.
× 1
Raspberry Pi 2 Model B
× 1
Jumper (generisch)
× 1
Breadboard (generisch)
× 1
LDR (Lichtabhängiger Widerstand)
LDR bietet unterschiedliche Spannungswerte für unterschiedliche Lichtintensitäten.
× 1
PIR-Bewegungssensor (generisch)
Passive IR erkennt menschliche Anwesenheit.
× 1
Relais (generisch)
Sie können jede Art von Relaismodul verwenden. Die Anzahl der Relais hängt davon ab, wie viele Geräte Sie steuern möchten.[NoOfDevices =NoOfRelay]
× 1
Siemens-Schütz (3TF32 00-0AP0)
Der Schütz wird verwendet, um die Wasserpumpe mit der maximalen Nennleistung von AC3 zu steuern:16A 415VAC.Vorher Wenn Sie ein Schütz kaufen, überprüfen Sie bitte die Nennwerte Ihrer Wasserpumpe und Ihre Länderabhängigkeiten, falls vorhanden. "3TF32 00-AP0" ist in der Lage, bis zu 16 A und 415 VAC Wasserpumpe zu betreiben. Dieses Schütz arbeitet mit einer eingebauten Spule. Die Spulennennwerte sind (nur für 3TF32 00-0AP0) 250VAC.
× 1
Miniatur-Leistungsschalter (1P C16A)
MCB wird vor dem Schütz angebracht, um die Wasserpumpe vor elektrischen Fehlern und Überlastung zu schützen. Auch hier haben MCB spezifische Ratings. Unser Schütz hat 16A und daher habe ich 16A MCB verwendet. Sie können nach Belieben ändern.
× 1

Apps und Onlinedienste

Arduino-IDE
Um Arduino-Firmware zu schreiben. Im Artikel erklären lassen.
Microsoft Visual Studio 2015
Community-Edition wird befohlen und ist für bis zu fünf Benutzer kostenlos. Sie können jedoch höher verwenden, wenn Sie eine lizenzierte Kopie von Visual Studio 2015 erworben haben.
Microsoft Windows 10 IoT Core
Als primäres Betriebssystem, das die Geräte über Arduino steuert und eine Verwaltungskonsole bereitstellt.

Über dieses Projekt

In der heutigen Zeit kann Technologie das menschliche Leben verbessern. Die Technologie entwickelt sich Jahrzehnt für Jahrzehnt weiter. Automatisierung war früher eine Science-Fiction, heute nicht mehr. Durch die Kombination der neuesten Technologie mit dem Zuhause können wir ein fantastisches Zuhause bauen. Mit dem Raspberry Pi und Windows 10 können wir ein Hausautomationssystem aufbauen, das in der Lage ist, Heimgeräte automatisch zu bedienen.

Erste Schritte

Bevor Sie mit dem Projekt beginnen, sollten Sie zunächst die Grundlagen verstehen. Betrachten Sie das folgende Bild (Gesamtkonfiguration):

Konfiguration für Raum

Betrachtet man nun das Raumszenario, steuert ein Arduino UNO Geräte und liest Sensordaten. In regelmäßigen Abständen fordert Raspberry Pi die von Arduino UNO gesammelten Sensordaten an. Die Abbildung "Raumarchitektur" zeigt, wie sich das Arduino UNO mit den Geräten und Sensoren verbindet. Jeder Raum verfügt über mehrere steuerbare Geräte (z. B. Licht(e), Ventilator, Steckdose(n) usw.), ein Passiv-IR (um die Anwesenheit von Personen im Raum zu erkennen), einen Temperatursensor (LM35 zum Erfassen der Raumtemperatur) und LDR ( um die Lichtintensität in der Nähe des Raumfensters zu erkennen).

Zuordnung von Geräteadressen

Der wichtigste Teil ist, wie wir Geräte identifizieren. Es ist einfach. Wir erstellen eine Geräteadresse, indem wir die Zimmernummer mit der Gerätenummer kombinieren.

Zum Beispiel:

Bisher kennen wir also die Gesamtkonfiguration. Kurz gesagt, ein Raspberry Pi fungiert als primärer Controller. Jeder Raum hat seinen eigenen Arduino UNO, der als Slave des Raspberry Pi fungiert. Die Kommunikation zwischen Raspberry Pi und Arduino UNO erfolgt über I2C.

Schaltpläne

Um es einfacher zu machen, beginnen wir mit der Implementierung für den ersten Raum. Beziehen Sie sich auf den Schaltplan, um die Komponenten richtig zu verbinden.

I2C-Busstreifen: Um mehr als einen Arduino anzuschließen, können Sie I2C Bus Stripe wie unten gezeigt verwenden.

Wie verdrahte ich das Gerät mit der Relaisplatine?

Alles auf der Hardwareseite erledigt. Jetzt ist es an der Zeit, Software zu entwickeln.

Software

Unser Projekt besteht aus einem Raspberry Pi 2 und Arduino UNO. Raspberry Pi 2-Software, die in Visual Studio 2015 entwickelt wurde. Ich gehe davon aus, dass der Leser mit der Projekterstellung für Raspberry Pi 2 in Visual Studio 2015 vertraut ist. Ich gehe auch davon aus, dass der Benutzer über fortgeschrittene Kenntnisse des Arduino-Frameworks, Visual C # und Windows Universal XAML verfügt /P>

Lassen Sie uns Software in folgender Formation verstehen:

  • Protokoll (Wie Raspberry Pi 2 und Arduino sprechen)
  • Klassenstruktur (Wie Raspberry Pi 2 solche komplizierten Geräte und Räume verwaltet)
  • Benutzeroberfläche (Drahtmodell)

Protokoll (Wie Raspberry Pi 2 und Arduino über I2C sprechen)

Bevor wir fortfahren, lassen Sie uns zunächst entscheiden, wie Raspberry Pi und Arduino sprechen. Um ein zuverlässiges Protokoll zu erstellen, müssen wir zunächst klare Ziele oder Ziele für die Kommunikation haben. In Anbetracht dieses Projekts sind die Ziele:

  • Sensoren lesen
  • Gerätestatus lesen
  • Gerätestatus festlegen

Beginnen wir zuerst mit der Definition des Protokolls. Protokoll definiert Regeln für die Kommunikation über den Bus. Protokoll ist nichts anderes als eine Bytefolge.

Ich habe ein Protokoll zum Senden und Empfangen von Bytes definiert. Das Senden von Bytes ist auf drei festgelegt, während das empfangende Byte-Array vierzehn Bytes umfasst.

Sehen Sie sich die folgenden Schemata an, um das für dieses Projekt definierte Protokoll zu verstehen ('X' steht für einen Zufallswert oder '0', wird während der Kommunikation ignoriert):

Die Klasse mit dem Namen 'I2C_Helper' enthält die Implementierung des Protokolls im universellen App-Projekt von PRi2. Diese Klasse ist im universellen Windows-Projekt verfügbar. So öffnen Sie es:Gehen Sie zu Projektmappen-Explorer> Bibliothek> Kommunikationsordner. Auf Arduino-Seite ist die I2C-Bibliothek leicht zu verstehen.

Jetzt haben wir ein geeignetes Kommunikationsschema definiert, das in der Lage ist, den Status und die Werte von Sensoren und Geräten anzugeben und auch Zugriff auf die Einstellung des Gerätestatus bietet.

Klassenstruktur (Wie Raspberry Pi 2 Objekte verwaltet)

Wie zuerst besprochen, betrachtete dieses Projekt das ganze Haus. Das Haus besteht aus mehreren Räumen und der Raum besteht aus mehreren Geräten. Daher ist die OOP-Struktur einer solchen Konfiguration unten dargestellt:

Die Primärklasse "Home" besteht aus mehreren Raumobjekten als generische Raumliste (List). Die Home-Klasse bietet eine statische Methode zum Laden und Speichern von Home-Objekten auf dem Pi, um sie später zu verwenden.

Raum besteht aus Geräten als generische Liste von Geräten (List) und Sensorstruktur, um alle Sensoren in einem zu kapseln.

Das Gerät besteht aus Details zu ihnen und Funktionen zum Ein- und Ausschalten mithilfe des Protokollmodus - 2. AmbientLight, PassiveIR und Temperaturklasse bietet Zugriff auf die Umgebungsdaten des Raums. Das Raumobjekt verwaltet die Sensordaten und aktualisiert sie regelmäßig im Protokollmodus - 0.

Benutzeroberfläche

Jede Anwendung muss benutzerfreundlich sein. Beginnen Sie für eine benutzerfreundliche Anwendung mit Drahtmodell. Gehen Sie davon aus, dass Sie Ihre eigene Anwendung verwenden und die Hauptziele herausfinden und wie Sie sie so integrieren können, dass sie für den Endbenutzer am einfachsten sind.

Im Szenario dieser Anwendung sind unsere Hauptziele:

  • Raumverwaltung
  • Geräteverwaltung
  • Externe Dienste wie GSM-Kommunikation, Internetkommunikation usw.

Dazu habe ich das Problem aufgeteilt in:

  • Startseite:Bietet grundlegende Informationen zum Gerätestatus, Datum/Uhrzeit und Sperre
  • Lieblingsgeräte:Direkter Zugriff auf Lieblingsgeräte
  • Raumseite:Bietet Zugriff auf konfigurierte Räume und deren Geräte
  • Gemeinsame Wassergeräte:Wasserpumpe und Geysir
  • Einstellungen/Konfiguration:Ermöglicht die Verwaltung von Räumen und deren Geräten

Drahtmodell:

Basierend auf dem Wire-Frame habe ich eine Benutzeroberfläche entwickelt, die als nächstes gezeigt wird. Sie können den vollständigen Quellcode herunterladen. Link zum Download finden Sie am Ende des Artikels.

Also, haben bereits UI entwickelt. Ich hoffe, Sie können es an Ihre Bedürfnisse anpassen. Fühlen Sie sich frei, für die Hilfe einen Kommentar zu hinterlassen.

Wie konfiguriere ich?

Ich habe versucht, diese Software so einfach wie möglich zu machen. Mit geringfügiger Konfiguration können Sie Geräte direkt mit diesem Raspberry Pi 2 betreiben. Die Schritt-für-Schritt-Konfiguration wird unten gezeigt:

Wie steuere ich Wasserpumpe und Geysir mit dieser App?

Sie können Wasserpumpe und Geysir auf die gleiche Weise anschließen, wie Sie das Gerät hinzufügen. Sie können jedoch keine Wasserpumpe oder einen Geysir direkt an die Relaisplatine anschließen, um sie mit Strom zu versorgen. Es wird die Relaisplatine sprengen und gefährlich sein.

Um eine Wasserpumpe oder einen Geysir zu betreiben, verbinden Sie die Wasserpumpe oder den Geysir mit dem Schütz und verbinden Sie die Spule des Schützes mit der Relaisplatine. Wenn Sie das Gerät jetzt betätigen, aktiviert das Relais die Spule des Schützes und somit startet/stoppt die Pumpe oder der Geysir. Vergewissern Sie sich vor dem Kauf des Schützes über die Spulenleistung und die Leistung des Schützes. Schütze sind in so vielen Variationen erhältlich. Überprüfen Sie es also mit der Bewertung Ihrer Wasserpumpe. Es ist ratsam, Schütze mit einer etwas höheren Nennleistung als der Nennleistung Ihrer Wasserpumpe zu kaufen.

Wie stelle ich diese Lösung auf Raspberry Pi 2 bereit?

Sie können diesen Link aufrufen, um den Bereitstellungsprozess zu verstehen.

Wie registriere ich diese App als Start-App?

Viele Bastler möchten, dass ihre Anwendung direkt nach dem Start des Raspberry Pi 2 startet. Lesen Sie dazu meinen Artikel: Windows 10 IoT Core:Einstellung der Start-App

Bekannte Probleme

Arduino-Bootup

Wenn Arduio bootet, flackert der D13-Pin. Es ist gut, keinen Relais-Pin an D13 anzuschließen, da D13 beim Booten oder Neustart von Arduino einmal flackert und wenn ein mit dem Relais verbundenes Gerät (gesteuert über D13) ebenfalls flackert.

Lösung: Es gibt zwei Möglichkeiten:Erstens, einfach nicht wirklich mit D13 verbinden. Zweite ist etwas kompliziert. Sie können die OptiBoot-Firmware von Aruino neu schreiben, die beim Booten kein D13 verwendet, und diesen Bootloader auf Arduino brennen.

Uhrproblem

Raspberry Pi 2 hat keinen integrierten Echtzeituhr-Chip. Somit ist es nicht möglich, die Zeit nach einem Stromausfall oder einem Neustart aufrechtzuerhalten. Daher muss eine externe Echtzeituhr angeschlossen und programmiert werden, um die Datumszeit beizubehalten.

Lösung :NTP kann verwendet werden, benötigt aber eine Internetverbindung oder sogar Arduino kann RTC- und Raspberry Pi-Anfragen für die Datumszeit beim Booten verarbeiten. Es ist auch gut, externe RTC direkt mit RPi 2 zu verbinden.

Debugging-Problem

Ich war bei der Entwicklung von Universal App in C# mit vielen Problemen konfrontiert. Die universelle App ist eine Obermenge von WinRT und daher mussten so viele asynchrone Vorgänge ausgeführt werden. Wenn beim asynchronen Betrieb ein Fehler auftritt, wird dies zu Kopfschmerzen. Wann immer eine Ausnahme oder ein Fehler auftrat, sah ich meistens folgenden Bildschirm:

Kein Hinweis auf die fehleranfällige Zeile, keine programmiererfreundliche Nachricht, nichts. Ich muss so viele Breakpoints setzen, um die Fehlerursache herauszufinden. Beim Debuggen wird die Universal-App manchmal ohne vorherige Ankündigung einfach heruntergefahren und mein Überwachungsfenster wird plötzlich nutzlos. Die Ursache des Verhaltens ist unter diesem Link beschrieben.

Lösung :Haltepunkt vor der erwarteten fehleranfälligen Zeile platzieren.

Kurz gesagt, in diesem Moment (während dieser Artikel veröffentlicht wurde) ist die universelle App großartig, aber es fehlen Debugging-Funktionen wie bei herkömmlichen Windows-Anwendungen.

Zukunft

Es gibt keine Einschränkungen, wenn es um Funktionen, neue Ideen oder sogar um die Überwindung bestehender Einschränkungen geht. Es ist jedoch nicht möglich, alle Funktionen auf einmal hinzuzufügen. In dieser Version erfahren Sie in diesem Artikel die wahre Leistungsfähigkeit von Raspberry Pi 2 und Windows IoT. Windows Universal XAML ist ein großartiges GUI-Framework für Windows 10 IoT &Raspberry Pi 2 haben einen guten Grafikprozessor an Bord. Durch die Kombination dieser beiden kann eine außergewöhnlich aussehende GUI-Lösung erstellt werden. Darüber hinaus verfügt der Raspberry Pi 2 über eine 900-MHz-Quad-Core-CPU, was für Multithread-Lösungen (in UWP, Task) ziemlich großartig ist. Dies ist das grundlegende bis fortgeschrittene Projekt für diejenigen, die die Grundlagen von Embedded- und Softwaresystemen erlernen möchten (zB I2C-Bus-Kommunikation, Bedienung von Geräten, benutzerdefiniertes Protokolldesign, OOP-Design für reale Anwendungen und Wire-Frame).

In Zukunft können wir die Möglichkeit zur Kommunikation über Remote-Geräte mit RadioFrequency oder InfraRed anstelle des I2C-Busses hinzufügen. Für mobile Geräte kann ein Webverwaltungsportal mit Azure integriert werden. Weiterhin wird die eigentliche Automatisierung wie ereignisbasierter Betrieb, zeitgesteuerter Betrieb mit RTC-Chip integriert. Schalten Sie beispielsweise die Gartenbeleuchtung um 19:00 Uhr ein. und schalten Sie sie um 22:00 Uhr wieder aus; Ein gutes Beispiel für ereignisbasiertes Licht ist das Einschalten der Gartenbeleuchtung, wenn die Umgebungslichtintensität unter eine bestimmte Intensität sinkt und so weiter. Es gibt also keine Einschränkungen für diese neue Windows 10 IoT Core-Plattform für Raspberry Pi 2.

Viel Glück und Sicherheit.

Zögern Sie nicht, um Hilfe oder Fragen zu bitten.

Code

  • Arduino-Skizze
Arduino-SkizzeC/C++
/* Arduino Sketch v0.4 Dieser Sketch wurde für "Home Automation using Raspberry Pi 2 and Window 10 IoT" geschrieben. Siehe diesen Link:https://www.hackster.io/AnuragVasanwala/home-automation Dieser Sketch ist getestet nur auf Atmega328p. Diese Skizze bereitet ein Arduino-Gerät als Slave-Gerät auf einem I2C-Bus vor, der von Raspberry Pi 2 mit Windows 10 IoT Core betrieben wird. Ziele:+ Regelmäßiges Sammeln von Sensordaten (Funktion:Schleife) + OnRecevive, Sammeln von 3-Byte-Modusbefehlen und Ausführen einer darauf basierenden Operation. (Funktion:ReceiveData) + OnRequest, sendet ein 14-Byte-Antwort-Array basierend auf dem ausgewählten Modus von OnReceive. (Funktion:SendData) Diese Skizze wird ohne jegliche GEWÄHRLEISTUNG zur Verfügung gestellt. Sie können es sowohl für den persönlichen als auch für den kommerziellen Gebrauch verwenden. Ich hafte nicht für Datenverlust oder Verletzungen, die durch diese Skizze verursacht werden.*/#include  #define _DEBUG_/* Arduinos I2C-Slave-Adresse */#define SLAVE_ADDRESS 0x40/* PIN-ERKLÄRUNG */int Pin_AmbientLight_LDR =A0;int Pin_PassiveIR =2;int Pin_Temperature =A1;/* Global Variable */volatile short Value_AmbientLight_LDR, Value_Temperature;volatile bool Value_PassiveIR;/* Protokollvariable */byte Mode, Pin, Value;byte Response[14];void setup() { // Pins initialisieren pinMode (Pin_AmbientLight_LDR, INPUT); pinMode (Pin_PassiveIR, INPUT); pinMode (Pin_Temperature, EINGANG); pinMode (0, AUSGANG); pinMode (1, AUSGANG); pinMode(3, AUSGANG); pinMode (4, AUSGANG); pinMode(5, AUSGANG); pinMode(6, AUSGANG); pinMode (7, AUSGANG); pinMode (8, AUSGANG); pinMode(9, AUSGANG); pinMode (10, AUSGANG); pinMode(11, AUSGANG); pinMode(12, AUSGANG); pinMode(13, AUSGANG); PinMode (A2, AUSGANG); pinMode(A3, OUTPUT);#ifdef _DEBUG_ Serial.begin(9600);#endif // I2C-Slave auf Adresse 'SLAVE_ADDRESS' initialisieren Wire.begin(SLAVE_ADDRESS); Wire.onRequest(SendData); Wire.onReceive (ReceiveData);}void loop () {// LDR lesen // Arduino unterstützt 10-Bit-Analog-Lesen. // Also müssen wir es in 8-Bit umwandeln. Value_AmbientLight_LDR =analogRead (Pin_AmbientLight_LDR); Value_AmbientLight_LDR =map(Value_AmbientLight_LDR, 0, 1023, 0, 255); // PassiveIR-Wert lesen Value_PassiveIR =(digitalRead(Pin_PassiveIR) ==HIGH) ? wahr falsch; // Temperatursensor lesen und Spannung in Celsius umwandeln Value_Temperature =(short) ((float) (analogRead (Pin_Temperature) * 0.48828125)); // Warte auf 100 ms Verzögerung (100);} // Callback für I2C Received Datavoid ReceiveData (int byteCount) { // Erstes Byte lesen, Protokollmodusmodus =Wire.read (); // Zweites Byte lesen, das Pin ist. Nur gültig für Modus 2 Pin =Wire.read(); // Lesen Sie das dritte Byte, das Pin-Wert ist. Nur gültig für Modus 2 Wert =Wire.read(); // Angegebenen Pin signalisieren, wenn Modus 2 empfangen wird Wenn (Modus ==2) { DigitalWrite (Pin, Wert); } #ifdef _DEBUG_ Serial.print (Modus); Serial.print ( " "); Serial.print (Pin); Serial.print ( " "); Serial.println (Value); #endif}void SendData () { Schalter (Modus) { Fall 0:// Modus:Sensorantwort lesen [0] =(Byte)Value_AmbientLight_LDR; // Value_PassiveIR ist boolean, sodass wir es in Byte umwandeln müssen Response[1] =(byte)((Value_PassiveIR ==true) ? 1 :0); // Antwort[2] Byte ist Vorzeichenbyte für Temperatur // 0 - -ve Temperatur // 1 - +ve Temperatur Antwort[2] =(byte)((Value_Temperature <0) ? 0 :1); Serial.println (Wert_Temperatur); // -ve Temperatur kann nicht in Byte gesendet werden. Konvertieren Sie es in +ve äquivalente Antwort[3] =(byte)((Value_Temperature <0) ? (Value_Temperature*(-1)) :Value_Temperature); brechen; Fall 1:// Modus:Read Devices State Response[0] =(digitalRead(0) ==HIGH) ? 1 :0; Antwort[1] =(digitalRead(1) ==HIGH) ? 1 :0; Antwort[2] =(digitalRead(3) ==HIGH) ? 1 :0; Antwort[3] =(digitalRead(4) ==HIGH) ? 1 :0; Antwort[4] =(digitalRead(5) ==HIGH) ? 1 :0; Antwort[5] =(digitalRead(6) ==HIGH) ? 1 :0; Antwort[6] =(digitalRead(7) ==HIGH) ? 1 :0; Antwort[7] =(digitalRead(8) ==HIGH) ? 1 :0; Antwort[8] =(digitalRead(9) ==HIGH) ? 1 :0; Antwort[9] =(digitalRead(10) ==HIGH) ? 1 :0; Antwort[10] =(digitalRead(11) ==HIGH) ? 1 :0; Antwort[11] =(digitalRead(12) ==HIGH) ? 1 :0; Antwort[12] =(digitalRead(A2) ==HIGH) ? 1 :0; Antwort[13] =(digitalRead(A3) ==HIGH) ? 1 :0; brechen; Fall 2:// Modus:Set Device State Response[0] =(digitalRead(Pin) ==HIGH) ? 1 :0; brechen; Vorgabe:Pause; } // Antwort zurückverdrahten Wire.write(Response, 14);}
Raspberry Pi 2 (Windows Headed App)-Software
https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-

Schaltpläne

Sie können mehrere Räume hinzufügen, indem Sie einzelne Arduinos mit eindeutiger I2C-Slave-Adresse an den Bus anschließen. Fritzing-Datei mit vollständigem Schaltplan. Home%20Automation%20Schema%20-%20Anurag%20S%20Vasanwala.fzz

Herstellungsprozess

  1. Python- und Raspberry Pi-Temperatursensor
  2. 433 MHz Smart Home Controller mit Sensorflare und einem RaspberryPi
  3. Sprach– und SMS–aktivierter Lichtsensor mit Raspberry Pi und Twilio
  4. Überwachen Sie Ihre Haustemperatur mit Ihrem Raspberry Pi
  5. RASPBERRY PI HOME AUTOMATION
  6. Windows 10 IoT Core auf Raspberry Pi 2 – Adafruit-Sensordaten
  7. Windows 10 IoT Core und SHT15
  8. Windows 10 IoT Core für Raspberry Pi 3 Model B+
  9. SONBI ROBOTER MENSCHLICHE ERKENNUNG MIT KINECT UND HIMBEE PI
  10. Automatisierung und IoT in der Lieferkette:Was kommt als Nächstes?