Internet Devices für Home Automation
6 Schritt:Schritt 1: Sie benötigen Schritt 2: Prototyping die Arduino Internet Device Schritt 3: Schließen Sie den Stromkreis Schritt 4: UDP Communication Schritt 5: Hier ist der Code Schritt 6: Die nächsten Schritte
Diese instructable zeigt die bei der Herstellung von Geräten zur Heimautomatisierung über das Internet steuern beteiligten Prinzipien. Wir werden ein Gerät (oder mehrere), dass die miteinander reden über das Internet, um Lichter, Motoren für Vorhänge / Jalousien, Steckdosen usw. steuern konstruieren
Im Gegensatz zu Geräten von einem Webbrowser oder Telefon gesteuert werden, diese sind so konzipiert, einfach zu sein, Arduino-basierte Geräte, die in der Lage ist, miteinander zu reden bidirektional sind. Sie können im gleichen Haus oder in verschiedenen Gebäuden sein und kann eine bidirektionale Kommunikation (zB einen Lichtschalter und Licht) oder Zwei-Wege (zum Beispiel ein Automatisierungscontroller) haben.
Es ist möglich, lokale Gerät / Relaiskombinationen steuern Netzbuchse Macht, Fernseher, Computer etc ..
Auch Sie diese Arbeiten im Gebäudesteuerung sehen konnte. Kommerzielle Beispiele, die über lokale oder proprietäre Schnittstellen zu arbeiten: Clipsal C-Bus, X10, Bus-SCS.
Das Bild zeigt ein Beispiel für das, was wir versuchen, mit Hilfe der kommerziellen C-Bus Geräte als Beispiel, um zu erreichen.
(Http://en.wikipedia.org/wiki/File:CBus_Wiring.gif). Aber in unserem Fall die C-Bus wird durch das Internet oder ein lokales Netzwerk ersetzt.
Praktisch gesprochen, wäre es am sinnvollsten, ein Gerät pro Raum mit mehreren Schaltern, Sensoren und ggf. Niederspannungsmotoren in sie verdrahtet, und ein Gerät am Verteiler Steuerung Relais oder Dimmer haben.
Ein wesentlicher Faktor für Energie Abfall wird mit Licht an zu hell in Zeiten, wenn ein Raum ausreichend gegen Umgebungslicht beleuchtet. Hinzufügen eines Lichtsensoreinrichtung in einem Raum mit einem dimmbare Lichtgerät deutlich erhöht die Energieeffizienz, indem die Zimmer Licht in Reaktion auf den erfassten Licht in den Raum.
==========
Apropos. Wenn Sie diese Instructable mögen, mögen Sie vielleicht auch:
Digital-Thermometer für Ihr Home:
http://www.instructables.com/id/An-Arduino-Thermometer-with-Digital-Display/
Internet-Radio:
http://www.instructables.com/id/Arduino-Raspberry-Pi-Internet-Radio/
Machen Sie Ihre eigenen "Wii-Remote" wie die Kontrolle über einen PC Flight Simulator
http://www.instructables.com/id/Flight-Simulator-with-Arduino-and-Python/
==== ======
Schritt 1: Sie benötigen
-
Für jedes Gerät brauchen Sie:
* Ein Arduino (Uno)
* Eine Ethernet-Schild (oder Wifi)
Prototypen:
* Ein Steckbrett
* Einige LEDs, Drähte und Schalter
Für Netzkontrolle:
* Ein Netzrelais Arduino Shield (zB http://www.dfrobot.com/index.php?route=product/product&product_id=496 )
Wir werden nicht für den Netzkontrolle, weil es in viele Tutorials abgedeckt und es gibt eine Menge von Schirmen zur Verfügung.
Schritt 2: Prototyping die Arduino Internet Device
- Wir werden auf den Grundsätzen der das Gerät selbst konzentrieren.
Um dies zu tun, dass wir mit LEDs und Schalter werden Prototyping es. Sobald die Arduinos sprechen und Steuerung LEDs, so dass es mit Netz Relay Schilde und Motorabschirmungen zu arbeiten, ist einfach.
Wir werden ein Gerät mit Schalter und LEDs zu konstruieren, und wir werden 2 über Ethernet verbinden von ihnen. Auf diese Weise werden wir sowohl die Schaltfunktion und die Light Control-Funktion zur gleichen Zeit und demonstriert bidirektionale comm ist Protoyping werden.
Für viele Geräte sollten wir sie über einen Router zu verbinden. Wenn wir nur 2 Geräte (wie wir hier tun), dann können wir sie miteinander zu verbinden. Die Ethernet-IC übernimmt den erforderlichen Crossover.
Wir müssen darüber nachdenken, wie ein Gerät kennt die Adresse des Gerätes, sie zu kommunizieren will geben.
Hier ist, wie wir es zu nähern:
Jedes Gerät hat eine eigene statische IP-Adressen. Jedes Gerät "weiß", welches Gerät sie zu sprechen wünscht. Deshalb können wir hartcodieren die Static-IP-Adresse des Zielgeräts in der Arduino-Code der Sendeeinrichtung. Nicht die eleganteste Lösung. Aber ganz praktisch.
Schritt 3: Schließen Sie den Stromkreis
-
Bauen Sie sich ein Beispiel Geräte wie in den Diagrammen dargestellt. In der Tat, bauen zwei von ihnen. Wir werden einen braucht, um zum anderen zu sprechen.
Jede Vorrichtung besteht aus:
1. Ein Arduino (Uno)
2. Ein Ethernet-Schild
3. Eine LED und Widerstand zu einem Ausgangslicht darstellen.
4. Zwei Schalter auf EIN / AUS-Schalttafel oder UP / DN Dimmer (zum Beispiel) zu vertreten.
Sobald Sie gebaut haben sie beide in den PC USB-Stecker für die Programmierung.
Stecken Sie ein Ethernet-Kabel aus dem Geräte-1-zu-Gerät 2 (der Frequenzweiche ist Pflege in der Ethernet-Schild gemacht).
Schritt 4: UDP Communication
- Wir werden UDP für die Kommunikation über das Internet zu nutzen.
UDP ist ein Internet Protocol (TCP so ist). So wird unsere Kommunikation UDP / IP sein.
http://en.wikipedia.org/wiki/User_Datagram_Protocol
An einen UDP-Paket benutzen wir das Arduino Ethernet-Bibliothek wie folgt:
1.
Zuerst müssen wir unsere IP-Adresse und die Adresse des Empfangsgerätes, sowie die Ports wir senden und empfangen zu definieren:
Byte-mac [] = {
0x90, 0xA2, 0xDA, 0x00, 0x85, 0x46};
IPAddress ip (192, 168, 2, 177);
IPAddress rem_ip (192, 168, 2, 178);
unsigned int localport = 8887; // lokalen Port zum Abhören
unsigned int remPort = 8888; // Remote-Port zu senden
2.
Wir beginnen das Ethernet und UDP-Dienste (erinnern, es ist UDP over Ethernet -UDP / IP)
Ethernet.begin (mac, ip);
Udp.begin (localport);
3.
Als wir um eine Nachricht zu senden wollen es braucht einen Anfang, Beginn und Ende:
Udp.beginPacket (rem_ip, remPort);
Udp.write (SND);
Udp.endPacket ();
4.
Zum Empfangen wir nach einem Nicht-Null-Paketgröße empfangen:
int Packet = Udp.parsePacket ();
und lesen Sie es in das RCV-Puffer:
Udp.read (& rcv, Größe);
Also, was tun wir schicken?
Ganz einfach, wir konnten für Schalter 0 gedrückt und "1" für die Schalter 1 gedrückt senden '0'.
Wenn Devices hatten Sensoren angebracht mehr Daten zB müssen Sie
{State_sw0, State_sw1, Sensor_val}
Was auch immer Sie in Ihrer Anwendung entscheiden, kann es als ein String über UDP in der gleichen Weise gesendet werden.
Schritt 5: Hier ist der Code
- / *
Diese Skizze sendet ein UDP-Nachrichtenzeichenfolge
Anthony Kelly 07/11/2012
von UDPSendReceive.pde angepasst:
21. August 2010
von Michael Margolis
Dieser Code ist in der Public Domain.
* /
#include <SPI.h> // später für Arduino-Versionen benötigt als 0018
#include <Ethernet.h>
#include <EthernetUdp.h> // UDP-Bibliothek aus: [email protected] 2008.12.30
// Geben Sie eine MAC-Adresse und IP-Adresse für Controller unten.
// Die IP-Adresse wird abhängig von Ihrem lokalen Netzwerk:
Byte-mac [] = {
0x90, 0xA2, 0xDA, 0x00, 0x85, 0x46};
IPAddress ip (192, 168, 2, 177);
IPAddress rem_ip (192, 168, 2, 178);
unsigned int localport = 8887; // lokalen Port zum Abhören
unsigned int remPort = 8888; // Remote-Port zu senden
char NA; // Erhalten Zeichen (machen es zu einem Array für Streich Rx)
char snd // Sendezeichen (machen es zu einem Array für Streich Rx)
// Definieren Sie die Arduino-Verbindungen
int swPin0 = A0;
int swPin1 = A1;
int LEDPin = 9;
int sw0, sw1, SWD0, SWD1;
// Ein EthernetUDP Beispiel, uns senden und empfangen Pakete über UDP
EthernetUDP Udp;
Leere setup () {
// Starten Sie das Ethernet und UDP:
Serial.begin (9600);
Ethernet.begin (mac, ip);
Serial.print ("Server ist");
Serial.println (Ethernet.localIP ());
Udp.begin (localport);
pinMode (LEDPin, OUTPUT);
// Setzen Sie die Stifte an die Eingänge und aktivieren Sie die Klimmzüge so brauchen wir nicht
// Externen Pull-up-Widerstände für die Schalter
pinMode (swPin0, INPUT);
pinMode (swPin1, INPUT);
digital (swPin0, HIGH); // Pullup aktivieren
digital (swPin1, HIGH); // Pullup aktivieren
}
Leere Schleife () {
if (RcvPkt ()) {
// Wir haben gerade ein UDP-Paket erhalten so auf, dass Act.
if (rcv == '1') {
digital (LEDPin, HIGH);
Serial.println ("on");
}
else if (rcv == '0') {
digital (LEDPin, LOW);
Serial.println ("off");
}
}
// Tat jemand nur einen Knopf drücken?
SWD0 = sw0; // Beachten Sie den alten Wert des Schalters
sw0 = digitalRead (swPin0); // Der neue Wert Get
SWD1 = sw1;
sw1 = digitalRead (swPin1);
// Wenn der alte Wert nicht gedrückt wurde (1) und der neue Wert gedrückt wird (0)
// Dann die Taste gerade gedrückt.
if (SWD0 && sw0!) snd = '1';
else if (SWD1 && sw1!) snd = "0";
sonst snd = '-';
// Senden Paket, um die IP-Adresse und Port-
if (snd =! "-") {
Udp.beginPacket (rem_ip, remPort);
Udp.write (SND);
Udp.endPacket ();
}
Verzögerung (100);
}
int RcvPkt () {
// Wenn es Daten vorhanden, lesen Sie ein Paket
int Packet = Udp.parsePacket ();
if (Packet)
{
Serial.print ("empfangene Paket von Größe");
Serial.println (Packet);
Serial.print ("From");
IPAddress remote = Udp.remoteIP ();
for (int i = 0; i <4; i ++)
{
Serial.print (remote [i], DEC);
wenn (i <3)
{
Serial.print (".");
}
}
Serial.print ("Hafen");
Serial.println (Udp.remotePort ());
// Lesen Sie das Paket in packetBufffer
Udp.read (& rcv, 1);
Serial.println ("Inhalt:");
Serial.println (RCV);
}
zurück Packet;
}
Schritt 6: Die nächsten Schritte
-
Die wichtigsten Ideen wurden vorgestellt. Einige nächste Schritte, um zu versuchen:
* Stellen Sie die LED Dimmable unter der Kontrolle des Fernschalter
* Machen Sie eine dimmbare LED erzielen konstante Helligkeit in Gegenwart von erfaßten Lichtstärke im Raum
- Hinweis: Wenn der Lichtsensor erkennt erhöhte Helligkeit der LED Dimmt und vice.versa
- Hinweis: Dies ist ein wichtiger Faktor bei der Energieeffizienz. Mit Zimmer Leuchtet während Zeiten erhöhter Umgebungslicht zu hell verschwendet viel Energie.
* Verwenden Sie Port Forwarding auf dem Router, um diese Arbeit in verschiedenen Orten zu machen.
* Stellen Sie die Message-Protokoll weiter fortgeschritten, viele verschiedene Geräte im Netzwerk zu ermöglichen:
zB
{State_sw0, State_sw1, Sensor_val}
oder
{"SWITCH", sw_number, sw_state}
{"LIGHT SENSOR", sensor_number, Sensor_value}
etc...
* Machen Sie eine Handshake-Protokoll so Receiver zu senden eine Bestätigung zurück an den Sender.
* Schaffung einer dynamischen IP-Adressierungsschema (Advanced).