Dieses Projekt war ein Projekt an meiner Schule. Es beeinflusste spätere Projekte wie "Raspberry Pi Backup Server" und "Stratoflights 2019". Es war aber als Projekt früher jugend und schulischer Ausbildung geprägt. Deshalb sind einige Dinge unüberlegt gewesen oder in nicht so besonders gutem Stil umgesetzt worden. Jedoch verbergen sich hier einige tiefe Überlegungen, weshalb ich das Projekt hier mal vorstelle. Hinter dem Projekt steckt das, was sich heute Smarte Steckdose nennt und zu haufe verkauft wird. Jedoch habe ich damit nichts zu tun.
In einer Schule (Oberstufenzentrum) habe ich einen Teil meiner Ausbildung gamacht. Dort haben wir viel zum Thema IT, Netze und Netzwerke gemacht. Darauf lag der Fokus. Nun hat die Schule jedes Jahr einen Tag der offenen Tür. Zu diesem werden von allen Kursen Dinge den Besuchern präsentiert, um diese für die Ausbildung an der Schule zu interessieren. Unsere Lehrer hatten die Idee gehabt, da gerade Raspberry Pi und Arduino Boards angeschafft waren und das Thema Smart Home aktuell war, dass wir Schüler dazu etwas machen sollten. Also mit entweder dem Raspberry Pi oder dem Arduino etwas steuern, messen womit sich eine kluge Idee für Smart Home ergibt. Die Ausarbeitung sollte in den Unterricht und damit als Projektnote in das Zeugnis einfließen. Ich arbeitete an dem Projekt mit einem Mitschüler. Wir begangen damit im November 2015 und hatten Zeit bis zum Februar 2016. Denn da war der Tag der offenen Tür. An diesem sollten die Projekte eben nicht nur der Klasse, dem Lehrer vorgestellt werden, sondern dem Publikum das zu diesem Tage kam.
Die Idee war, aus dem Raspberry Pi und dem Arduino ein Projekt zu machen. Ich sah den Arduino als Microcontroller eher in der Funktion als Messgerät oder Steuereinheit. Den Raspberry Pi hatte ich eher mit Webserver und anderen
Anwendungen als den zentralen Mittelpunkt im Sinn. Man hat bei Smart Home oft die Anwendung etwas intelligent an- oder auszuschalten. Oder etwas zu überwachen. Dafür eignet sich der Arduino ganz gut. Doch alle Einstellungen
vornehmen und Werte überwachen wollen Nutzer lieber am Smartphone oder gerade mal am Computer. Da eignen sich eben Anwendungen besser, die man über dem Raspberry laufen lässt. Obwohl dieser ebenfalls steuern kann.
Ich kam aber auf die Idee ein System zu bauen, was heute vergleichbar ist mit Smart Home Systemen wie ZigBee ist. Viele kleine Sensor- und Aktor Einheiten und ein zentraler Rechner, an dem alles gesteuert und verwaltet wird. So sollte
zwischen einem Gerät wie Kühlschrank oder Fernsehr und der dazu gehörigen Steckdose ein Arduino mit Messsensor für Strom und Spannung, sowie ein Relais installiert werden. Damit sollte der Energieverbrauch erfasst
werden. Im Beispiel könnte man den genannten Fernseher abschalten, wenn beispielsweise niemand im Haus ist. Um den Energieverbrauch sehen zu können und über das Jahr berechnen zu können sollten die Messwerte aller
Arduinos auf den Raspberry Pi geschickt werden und dort verarbeitet werden. Dort hätte der User auch gleich alle Einstellungen vornehmen können.
Da wir Spanung und Strom der Verbraucher messen wollten um die Verbrauchte Leistung zu berechnen mussten wir uns über das Vorgehen bei der Messung gedanken machen. Als Controller für die Messung sollte ja ein Arduino dienen.
Dieser hat eine Analoge Schnittstelle. Da Spannung und Strom auch analoge Werte sind, lag es nahe, das Analog Interface dafür nutzen zu müssen. Doch der Arduino selbst kann nur TTL- Spannungen an diesem Inerface messen. Wir
wollten aber die Messung an der Steckdose ausführen bzw. uns zwischen Steckdose und Verbraucher schalten und messen. Und dort liegen eben 230 Volt Wechselspannung an. Außerdem fließen bei manchen Verbrauchern auch
große Ströme. Dies wäre so mit den Analog Interface des Arduino nicht messbar.
Nach langem suchen im Internet fanden wir ein Beispiel, wie im Bild gezeigt. Es benutzt einen speziellen Messkontroller, mit dem der Strom am Verbraucher Kreis gemessen werden kann und dem Arduino als analoger Wert zu gesendet wird. Die
Spannung wird daneben mit einem Spannungsteiler abgenommen. Leider fanden wir den Messer nicht einfach zu bekommen. Auch eine Anleitung fand sich erstmal nicht.
Ich schätze, dass der Stromwert über Spannungsfaktoren einer Referenzspannung in den Arduino gespeist wird. Das bedeutet, man müsste dies erst wieder umrechnen auf einen Stromwert. Auch die Spannung hätte man aufgrund
des Spannungsteilers noch gegenrechnen müssen. Und wie man im Bild sieht, geht man in diesem Beispiel von 24 Volt aus (Wahrscheinlich auch noch Gleispannung) und wir wollten 230 Volt messen. Da uns dazu erstmal die Kentisse und Mittel
fehlten, haben wir erstmal nur das Schalten von Verbrauchern mit dem Arduino Realisiert.
Messschaltung aus einem Beispiel im Internet um mit dem Arduino Spannung und Strom messen zu können
Um mit dem von uns überlegten System zum Beipiel auch eine Lichtsteuerung zu machen, sollten natürlich die Arduino auch Schalten können. Eine sehr grundlegende Übung. Jedes Arduino Schaltmodul sollte sich per Server
schalten lassen. Sonst macht das natürlich keinen Sinn. Der Server ist unser "Gehirn" und steuert alles zum Beispiel nach einem Zeitplan. Und für das Licht sollte deswegen natürlich ein Arduino genommen werden, um
dem Beispiel zufolge das Licht automatisiert zu schalten. Doch wenn wir einfach das Stalten an der Steckdose vornehmen, könnte man nicht mehr manuell schalten, wenn es im System zur Zeit gerade aus ist. Und den Gedanken, sich erst in
die Websteuerung anmeldun zu müssen, um dann in dieser den Arduino sagen zu können, dass er mal einschalten soll, fanden wir nicht sinnvoll. Deswegen war klar, dass es der Ardunino von der Ferne aus (also vom Server) schalten
sollte und wenn man direkt an ihm eine Taste betätigt.
So haben wir erstmal die möglichkeit zum Schalten am Arduino entworfen. Im Bild sieht man eine LED, die am Arduino angeschlossen ist. Sie kann nach dem Entwurf durch eine gößere Lampe für die Steckdose ersetzt werden
(auch wenn das eventuell eine zusätzliche Schaltung benötigt). Tja und der Taster, der mit einem Wiederstand am Arduino angeschlossen ist, benutzt man dann zum direkten Schalten. Dieser kann später durch einen
größeren Taster ersetzt werden (zum Beispiel auch einen Wandtaster). Somit kann der User direkt schalten, wenn er es gerade Braucht oder das System schaltet per Befehl vom Server.
Primitiver Entwurf der Arduino Steuerschaltung
Damit der Arduino nun auch von der ferne geschaltet werden kann, also vom Server aus, stellte sich die Frage, wie das gehen sollte. Der Raspberry Pi sollte ja der Zentrale Server sein. Also sollte er sich mit den Arduinos verbinden
können. Das muss dann natürlich eine möglichst freie Kommunikation sein. Also zum Beispiel über Funk im Niederfrequenz bereich oder auf bestehende Funknetze wie WLAN. Doch die Zeit drängte und die Zusatzkomponenten
fehlten. Auch sahen wir beispiele, wie man mit dem ESP8266 und ein bisschen Software den Arduino an WLAN verbinden kann. Doch das Verständnis fehlte uns dafür.
Beim suchen in den Beispielen für den Arduino fand ich das "SerialEvent" beispiel vom Entwickler Tom Igoe. Es zeigt einem das verwenden der im Arduino befindlichen Seriellen Schnittstelle. Diese kann man mit den Tx/Rx Pins
der Digitalen Kontaktleiste benutzen oder per USB Kabel. Nun - und man kann dann einfach den Arduino mit einem USB Kabel an einen Raspberry Pi anschließen. Wenn man dann den Code von "SerialEvent" auf den Arduino lädt
und am Raspberry Pi in der Arduino IDE den "SerialMonitor" öffnet, kann man dem Arduino einen Text schicken, der diesen einem wieder zurück schickt.
Das war dann die Alternative für uns, um für den Prototyp erstmal einen Arduino am Raspberry zu betreiben. Wir testeten noch die Verwendung ohne Arduino IDE aus und entwickelten dafür ein kleines Python script. Und sobald der
Arduino eine 1 oder 0 empfing, schaltete er die LED eben ein oder aus. So konnten wir prinzipiell am Arduino direkt und per "Remote" vom Raspberry Pi steuern.
Ein Foto des Prototyps mit einer LED als Gerät zum Schalten angeschlossen an einem Arduino UNO R3. Dieser ist wiederum am Raspberry Pi per USB angeschlossen und wird von dort betreut.
Befehlskette | Beschreibung |
---|---|
setA | Gerät Einschalten |
setI | Gerät ausschalten |
setT <TIME_NOW FORM(HH_mm_ss)> <TIME_TICK FORM(HH_mm)> (dact | nact) | Zu gewünschter Zeit schalten, mit 1) Aktueller Zeit, 2) Ziel Zeit, 3) (De-)Aktivieren |
info (stat | lght | powr | time) | Status info für Gerätezustand | Lichtwert am Senor | Aktuelle Leistung am Verbraucher | Einstellung der Zeitsteuerung |
Rückgabewerte | Beschreibung |
---|---|
done | Befehl ohne Fehler ausgeführt |
secf | Nicht ausführbar - Sicherheitsabschaltung |
echo devc (iact | nact) | Anzeige ob Gerät gerade Aktiviert oder Deaktiviert ist |
echo lght (nght | dayL | dayS | dayC) | Abfrage des Lichtklassifizierung mittels Licht Enum Typ |
echo powr <var> | Ausgabe der gemessenen Elektrischen Leistung |
echo time (iact | nact) + <HH_MM> | Ausgabe ob Zeitsteuerung (aktiviert | deaktiviert) ist und Zeitwert. Wenn Deaktivert ist Zeit immer 00:00 |
fail | Nicht möglich! Gerät bereits im angeforderten Zustand |
ncom | Unbekannter Befehl |
Mit dem definierten Protokoll war das Kommunizieren von Raspberry Pi und Arduino möglich. Das Python Script ermöglichte bereits das Senden und Empfangen der Befehlsketten. Doch das war für den Alltags Nutzer natürlich
nicht Umgänglich genug. Und wenn sich so schnell keine App aufbauen ließ, so sollte wenigstens eine Weboberfläche da sein. Nun kam der Raspberry Pi ins Spiel. Auf diesem funktionierte die Kommunikation soweit. Jetzt wurde
auf diesem noch ein Webserver installiert und eine Scripting umgebung. Wir benutzten den Apache Webserver. Leider wussten wir nicht, ob man Python direckt am Apache ausführen lassen kann. Aber wie man mit PHP ein Script ausführen
kann, welches sich auf dem Server befindet, dass war bekannt.
So haben wir PHP Scripte für die jeweiligen Aktionen geschrieben. Diese haben dann nur die Parameter zusammen gestellt (eventuell welche von einem HTML Form bekamen) und dann das Python script mit den Parametern aufgerufen. Das
führte wiederum zum übertragen der Befehle via USB Seriell Schnittstelle an den Arduino und dann konnte dieser den Befehl auseinander nehmen und verarbeiten. Schickte dieser seine Rückgabe zurück, zeichnete das Python
Script diese auf und gab sie an PHP weiter. Dort konnte es in eine menschlich lesbare Information verarbeitet und in der Webseite dargestellt werden. Durch ein Betätigen der Ein- oder Aus Funktion konnte man nun also im Sitzen auf dem
Sofa mit dem Handy das Licht an machen und für Mitternacht einstellen, dass es wieder ausgehen soll.
Diese Bilder zeigen Screenshots der Weboberfläche, mit derer der User das System verwalten kann. Einmal vom Android Handy und einmal von eimem Computer aus aufgerufen.
Am Ende des Projekt stand die Präsentation am Tag der Offenen Tür. Bis dahin, war das Steuern einer Lampe am Arduino direkt und per Remote möglich. Ich baute den Raspberry Pi im Präsentationsraum auf und ließ ihn am Hotspot des Handys laufen. Meinen Laptop hatte ich ebenfalls mit und ihn ebenfalls mit dem Hotspot verbunden. Das habe ich alles gemacht, denn ich wollte zeigen, das man an beiden Geräten die Webseite zum steuern des Systems benutzen kann. Es kamen einige Leute vorbei. Ich errinere mich daran, das ein ältere Herr mit mir über das System und seine Möglichkeiten der Erweiterung gesprochen hatte. (Ich dennke dieser Herr war nur aus Technik interesse da :-D ).
Was nicht mehr Entwickelt wurde, war zum Einen die Erfassung der elektrischen Leistung. Da die Schaltung mit dem Strommesser nicht für Netzspannung war und auch der darin verbaute Stromsensor nicht einfach aufzutreiben war, haben wir
nie die Messschaltung entwickelt. Dem zufolge konnten wir natürlich Strom und Spannung nicht erfassen, um sie als berechnete Leistung an den Server zu schicken (zumindest, wenn dieser nach fragt).
Zum Anderen hatten wir über die Steuerung von Licht die Idee bekommen gehabt, dieses entsprechend der Tageslichtmenge zu schalten. Das Protokoll hatte dafür zwar bereits Optionen vorgesehen. Ferner hatten wir uns bereits
überlegt gehabt, dass es gut wäre eine Steuerung des Lichtes anhand des Tageslichts zu machen. Aber dafür blieb im Schuljahr aber auch keine Zeit mehr, weshalb wir es nicht mehr entwickelt haben. Aber das ist vieleicht das
einfachere Feature, so dass ich es vieleicht noch entwickle.
Da der Arduino immer noch per USB am Raspberry Pi angeschlossen war, wäre natürlich der nächste Schritt gewesen, die beiden Systeme zu trennen vom Kabel und auf Drahtlos umzustellen.
Sobald das geschafft wäre, gibt es da noch eine Sache. Das Projekt wurde mit einem Arduino UNO durchgeführt. Der Arduino soll aber in der Idee mal am Netzkabel oder im Gehäuse einer Steckdose angeschlossen werden um seine
Schaltaufgabe zu erfüllen. Und eventuell sollte die Strommessung auch in die Steckdose eingebaut passen. Dafür ist der UNO aber zu groß. Dafür müsste das ganze mindestens auf einen Arduino Nano portiert werden oder
sogar auf einen kleinen Microcontroller auf einer eigenen noch kleineren Platine. Jedoch, wenn es dann so weit gekommen wäre, gäbe es viele solcher Systeme. Diese alle mit dem Raspberry Pi verbunden und von diesem aus verwaltet.
Dann könnte man wirklich damit seine Verbraucher steuern und den Strom verbrauch messen. Damit kann der User vielleicht doch noch Energiekosten sparen. Und eine Tageslicht gesteuerte Licht automatik gibt es so dann vielleicht auch
noch.