my-CTRL

x

LOGO

SENSORENTWICKLUNG

Keine Home-Automation

ohne Sensoren!

Sensoren sind das A und O

Erste Versuche mit Sensoren und Aktoren auf dem Breadboard


Als erstes muss ich mich natürlich mit kleinen Schritten an die Sache rantasten. Es gilt, den Raspberry Pi mit Linux kennenzulernen und herauszufinden, wie man seine diskreten Ein- und Ausgänge ansteuert und ausliest.

Im nächsten Schritt ist dann gleich die Entwicklung der Sensoren und Aktoren angesagt. Darum dreht sich schließlich alles bei einer Hausautomation. Ideen habe ich viele, aber ich beschränke mich zunächst mal auf das Wesentliche: das Überwachen und natürlich das Ein- und Ausschalten von Lampen, die Heizungsregelung, das Öffnen und Schließen meines Garagentores sowie das Überwachen von Temperaturen, Fenstern und Türen.

Später sollen dann weitere Objekte dazukommen, wie z.B. Rollladensteuerung, Kameras, Zugangskontrolle, Wetterstation und was haste nicht gesehen....

Um die Sache preiswert zu halten, wird erst mal alles auf einem Breadboard zusammengesteckt. So kann man einfach und ohne Aufwand die Schaltungen ausprobieren und ändern.


Es geht los!

Den Raspberry Pi einrichten und kennenlernen
Dezember 2015
raspi.jpg

Zuallererst heißt es, den Raspberry Pi einzurichten und ein wenig Erfahrung damit zu sammeln. Da ich keinerlei Erfahrung damit habe, besuche ich die Raspberry Pi Website und installiere das Betriebssystem RASPIAN (eine Linux-Variante) über Noobs. Das ist super beschrieben und wirklich kinderleicht.

Dreh- und Angelpunkt für eine Hausautomation ist die Fähigkeit des Raspberry Pi, mittels der GPIOs (General Purpose Input / Output) digitale Signale zu schalten und zu messen. Derer stellt der Himbeerkuchen etwa zwei Dutzend zur Verfügung, von denen auch einige als I2C-Bus oder 1-Wire-Bus oder SPI-Bus konfiguriert werden können.

Jetzt muss ich mich erst mal mit den Eigenheiten von Linux vertraut machen. Die meisten Infos hole ich mir aus dem Internet. Ich versuche mich auf das zu konzentrieren, was ich wirklich brauche. Puuh! Gar nicht so einfach, wenn man nicht genau weiß, wonach man suchen soll! Die kleine Kiste ist genial - ein vollwertiger Computer im Zigarettenschachtelformat!

Ich lese mich kurz in die Materie ein und beschließe, keine Zeit zu verlieren, sondern einfach mal etwas auszuprobieren.

LOGIN

Erste Versuche mit dem Breadboard

LEDs schalten und Schalter abfragen
Dezember 2015
breadboard1.jpg

Nach kurzer Recherche im Netz finde ich heraus, wie man mit einem Python-Script schnell und einfach die GPIOs ansteuern kann. Eine LED und ein Mikro-DIP-Switch aus meinem Fundus ist in Nullkommanix auf das Breadboard gesteckt und ein paar Zeilen Python Code von einer Internet Seite in ein paar Sekunden abgetippt.

Schon kann ich per Software eine LED ein- und ausschalten oder blinken lassen. Das war ja easy! Aber bis zu einer halbwegs funktionierenden Hausautomation liegt noch ein weiter, weiter Weg vor mir.

Ich probiere verschiedene Logiken mit Schaltern und Tastern aus, die ich in einer Endlosschleife über das Python-Script abfrage, um damit eine LED anzusteuern. Schließlich sollen später ja einmal einfache Schalter, Wechselschalter, Dimmer und Eltako-Relais eingebunden werden können.

LOGIN

Ein 220V Detektor muss her!

(Hoch-) spannende Versuche mit dem Breadboard
Januar 2016
vorversuche.jpg

Mit den GPIOs eine Relaisschaltung anzusteuern, die dann ihrerseits einen Verbraucher schaltet, das ist einfach. Es gibt solche Relaisschaltungen auch für wenig Geld zu kaufen, aber sie haben einige Nachteile, die ich für mein Projekt nicht akzeptieren will oder kann. Außerdem melden diese Platinen keinen Status zurück.

Eine der für mich wichtigsten, aber momentan schwierigste Funktionen ist die Erkennung, ob ein Verbraucher (z.B. eine Lampe oder ein Gerät) eingeschaltet ist oder nicht. Eine Rückmeldung des Zustands ist für mich eigentlich unentbehrlich, nachdem ich ja wissen möchte, ob irgendwo noch ein Licht brennt. Also fange ich mal damit an - einfach kann ja jeder!

Es muss also ein 220V-Detektor her, der klein und einfach, aber auch gleichzeitig sicher ist. Meine Suche im Internet bringt mich auf eine Basisschaltung, aus der ich dann nach und nach meinen eigenen Detektor entwickle. Natürlich muss der Netzspannungsteil vom Niederspannungsteil galvanisch getrennt sein, also wird auch ein Optokoppler eingesetzt.

Zugegeben: Mit 220 V auf einem Breadbord zu experimentieren entspricht nicht unbedingt den Sicherheitsvorschriften und erfordert sorgfältiges und konzentriertes Arbeiten. Man möchte ja weder einen Stromschlag erleiden, noch den kleinen Computer zerstören. Also erst mal die Schaltung alleine mit dem Multimeter vermessen, bevor man den Pi anschließt. Gott sei Dank: die Schaltung funktioniert - zumindest am Multimeter! Ein erster kritischer Meilenstein scheint geschafft!

LOGIN

Versuch mach kluch!

Noch will der 220V Detektor nicht so wie er soll!
Januar 2016
220Vdetect2.jpg

Jetzt muss der 220 Volt Detektor zeigen, was er am Raspberry Pi kann. Schließlich ist das eine Wechselstromschaltung, mit der nicht sicher ist, ob man nicht zufällig in der Nähe eines Nulldurchgangs misst und die Software dann "Lampe ist aus" statt "Lampe ist an" meldet.

Ich frage den Detektor zyklisch ab und tatsächlich ist je nach Schaltungsauslegung und Abfragefrequenz ein hoher Anteil falscher Rückmeldungen vorhanden. Ganz so einfach ist es also doch nicht.

Ich beschließe, das ganze mit verschiedenen Kapazitäten und Widerständen zu versuchen. Ich kann die Quote zwar verbessern, aber das ist mir nicht verlässlich genug!

Vielleicht kann ich ja per Software etwas verbessern. Ich versuche das ganze mehrfach mit verschiedenen und wechselnden Intervallen abzufragen, von denen mindestens eine in eine positive Halbwelle fällt. Das gelingt, so dasss ich eine 95%ig korrekte Rückmeldung erhalte. Das ist erst mal gut genug! Allerdings wird es noch Monate und etliche Versuche und Verbesserungen benötigen, um das ganze zu perfektionieren.

LOGIN

Erste Temperaturmessungen

Analog-Digitalwandler und Thermosensor
Januar 2016
ADCtemp.jpg

Meine ersten Temperaturmessungsversuche mache ich mit einem analogen KTY 81-222, der über einen Analog-Digitalwandler MCP-3008 an den Raspberry Pi angeschlossen ist.

Das ganze funktioniert nach einigem Hin und Her auch ganz gut, aber ich will ja in jedem Raum meine Heizung steuern und dafür nicht überall ADCs verbauen, von denen ich nur 1/8 nutze. Eine direkte digitale Lösung muss her, die mir den Vielbeiner erspart!

Etwas mehr Zeit und Geduld bei der Recherche hätte mich sicherlich gleich zum DS-18B20 gebracht, einem Temperatursensor, der über den 1-Wire-Bus angesteuert wird und die Temperatur direkt als Zahlenwert liefert. Macht nichts! Der Ausflug in die alte analoge Welt hat ja auch Spaß gemacht!

LOGIN

Der erste Bus

Digitale Temperaturmessung mit dem DS-18B20 über den 1-Wire-Bus
Und noch Januar 2016
1W-BusDevices.jpg

Jetzt wird es interessant: Der DS-18B20 funktioniert nur über den 1-Wire-Bus. Ich versuche zunächst mal die einfache Variante, bei der der Datenkanal über einen Widerstand auf die 3.3 V Spannungsleitung aufmoduliert wird. Für die kurzen Entfernungen am Breadboard sollte das erst mal OK sein.

Das Python Script ist etwas umfangreicher, aber nicht weiter schwierig. Allerdings gilt es, den Raspberry Pi auf den Bus vorzubereiten. Dazu muss der Treiber installiert und einige Scripts geändert werden. (Anmerkung: Heute ist hierfür in den aktuellen RASPIAN Distributionen nur ein einziger Mausklick notwendig)

Jeder 1-Wire Busteilnehmer hat eine eigene, weltweit eindeutige fest zugeordnete Adresse, über die er identifiziert und abgefragt werden kann. Für jeden DS-18B20 wird die aktuelle gemessene Temperatur jeweils in ein eigenes Verzeichnis unter /sys/bus/w1/devices/ auf der Micro-SD Karte des Raspberry Pi abgelegt. Später einmal sollen die Temperaturen dann mit Zeitstempel in einer Datenbank gespeichert werden.

Der 1-Wire Bus überträgt die Temperaturen zuverlässig und genau genug für eine solche Anlage. Nur bei längeren Leitungen gibt er ab und zu mal 85°C aus. Mit einer 3-poligen Verdrahtung klappt das aber einwandfrei.

LOGIN

Noch mehr Sensoren

Wassersensor und Fensterüberwachung
Februar 2016
moresensors.jpg

Als nächstes müssen weitere Sensoren realisiert werden! Zum Einen möchte ich auf einen Blick sehen, ob Fenster offen stehen, wenn ich das Haus verlasse, zum Anderen soll im Falle eines Einbruchs Alarm ausgelöst werden. Nach meinem Wasserschaden vor 2 Jahren möchte ich auch Leckagen entdecken können.

Der Fenstersensor ist einfach ein Reed-Schalter am Fensterflügel, der von einem Magneten am Fensterrahmen geschlossen wird, sobald das Fenster zu ist. Entfernt sich der Magnet durch Öffnen des Fensters vom Reed-Kontakt, meldet das System: "Fenster offen"!

So ein Reed Relais mit Magnet kann man fertig kaufen und die zugehörige Logik am Pi umfasst nur wenige Zeilen Code. Peanuts!

Die Entwicklung eines Wassersensors dauert schon ein paar Tage, aber dann habe ich es mit einfachsten Mitteln hinbekommen. Am Ende ist es nur ein Transistor und ein zweipoliges Kabel. Das Schälchen Wasser auf meinem Basteltisch verschütte ich vor Euphorie gleich mehrmals!

LOGIN

Relais

Wer Geräte und Lampen schalten will braucht ein Relais
Februar 2016
relais.jpg

Wer 220V-Geräte und Lampen schalten will, braucht ein Relais! Von einer LED wird ein Zimmer nicht hell.

Eine gekaufte Relaisplatine mit 5 Volt funktioniert ganz gut am Pi, aber ich will noch einen 220V Detektor mit auf der selben Platine haben. Sowas gibt es nicht zu kaufen.

Ich muss also eine eigene Relaisschaltung mit galvanischer Trennung entwickeln, die ich zusammen mit einem 220V Detektor auf einer kleinen Platine unterbringen kann, die ihrerseits wiederum in eine Unterputzdose passt.

Da 3.3V Relais nur schwer zu finden sind, nehme ich ein gängiges 5V Printrelais. Das zieht auch bei etwas über 3V noch zuverlässig an. Die Schaltung drum herum ist auch kein Hexenwerk und funzt gleich beim ersten Versuch.

LOGIN

Mehr GPIOs

...gibt es mit dem GPIO-Extender MCP-23017
März 2016
GPIOextender.jpg

Einmal Blut geleckt, wächst die Liste an Ideen für Objekte die ich im Haus, in der Garage und im Außenbereich steuern und überwachen will, schnell. Zu schnell als dass die paarundzwanzig GPIOs des Raspberry Pi reichen würden.

Eine Lösung ist schnell gefunden: Der MCP-23017 GPIO-Extender mit 16 frei programmierbaren GPIOs, die über SPI oder I2C Bus angesteuert werden. Man kann bis zu 8 dieser Vielbeiner adressieren. Macht also 128 Schnittstellen plus die restlichen 22 des Raspberry Pi, nachdem einige zum 1-Wire und I2C-Bus umfunktioniert werden müssen.

Beim großen Elektronikladen in der Stadt besorge ich mir ein paar Exemplare des MCP23017. Für schlappe 1,25 € pro Stück kann man nicht viel kaputt machen. Jetzt muss dann auch ein zweites Steckbrett her. Das erste platzt ja schon aus allen Nähten!

Ich installiere die I2C Bustreiber und kupfere den Code für die Ansteuerung der GPIOs über den Bus plump aus dem Internet ab. Ehrlich gesagt, habe ich mich bis heute nicht tiefer damit beschäftigt! Hauptsache es funktioniert.

Es braucht viele Versuche, bis ich das Teil reproduzierbar am Laufen habe. Immer wieder bricht die Verbindung ab und ich weiß nicht warum. Keine 200 Bus-Re-Starts später weiß ich auch schon genau was man tun muss, um die GPIOs richtig zu konfigurieren.

LOGIN

Das Steckbrett ist voll!

...und die durchlaufenden Daten werden langsam unübersichtlich!
März 2016
vogelwild.jpg

Seit ich angefangen habe, sind erst 2 Monate vergangen. Aber mein Breadboard ist bereits gesteckt voll mit vogelwild verdrahteten Schaltungen. Wenn sich ab und zu eines der filigranen Käbelchen löst, brauche ich gefühlt Stunden, um festzustellen, wo es hingehört.

Ich steuere und überwache meine Daten immer noch zyklisch direkt in Python. Auch das wird langsam unübersichtlich, weil man gar nicht so schnell schauen kann, wie der kleine Computer die Daten durchschaufelt und ob sie richtig oder falsch sind. Ich brauche eine einfache statische Anzeige auf dem Handy.

Tja, und dann ist da auch schon die Frage, wie man Daten und Kommandos zwischen dem Webinterface und dem Python Script auf dem Pi und zurück transferiert. Nach einigem Überlegen komm ich zu der Erkenntnis, dass dies wohl am besten über eine Datenbank gehen müsste. Ja! So mache ich es! Oh je! Dann muss ich wohl auch noch mySQL lernen!

Neben dem Apache Webserver installiere ich gleich noch mySQL auf dem Pi und setze die Datenbank auf! Die Umsetzung der SQL Befehle in PHP und in Python sind natürlich wieder unterschiedlich. Schwer für mich, hier den Überblick über Funktionen und Syntax zu behalten!

Ich teste das Prinzip an einem einfachen Beispiel: mit der Web-App ändere ich den Sollwert für ein Objekt in der Datenbank, z.B. Bad-Licht: Sollwert=an. Das Python Script im Raspberry Pi liest die Sollwerte zyklisch aus der Datenbank, vergleicht sie mit den Ist-Werten an der Hardware und schaltet das Objekt ggf. ein oder aus. Dann wartet das Python Script auf die Rückmeldung des zugehörigen Sensors und schreibt den neuen Ist-Wert in die Datenbank. Die Web-App liest alle Ist-Werte ebenfalls zyklisch aus der Datenbank und zeigt sie an. So ist die Web-App binnen weniger Sekunden auf dem aktuellen Stand.

LOGIN

Akzeptieren

Diese Website verwendet Cookies. Durch die Nutzung dieser Webseite erklären Sie sich damit einverstanden, dass Cookies gesetzt werden. Mehr erfahren