HTML5 Icon 10 Jahre Thailand 

Hausbeleuchtung mit dem Smartphone steuern

by Nudels


Posted on Mittwoch Juli 21, 2021 at 05:23PM in Technik - Steuern und Regeln


Die Hausbeleuchtung mit einer 5$-Hardware über das Smartphone steuern


Ich lebe in der thailändischen Provinz, das Klima ist tropisch und der Körper stellt sich automatisch auf einen bewegungsarmen Tagesablauf ein. Einen großen Teil der Tageszeit verbringen wir in unseren Aussenbereichen, besonders in den Morgen- und Abendstunden – mit Beleuchtung. Meine Hauselektik habe ich auf einen deutschen Standard umgebaut, das heißt unter anderem: Lichtschalter, und Steckdosen befindet sich immer dort, wo sie benötigt werden. Auf langen Wegen sind Wechselschalter notwendig – oder nicht ? Stop! Weitere Kabelinstallationen und Schalter brauche ich doch gar nicht, wenn ich das Licht mit meinem Smartphone schalten könnte. Das Gerät habe ich doch sowieso immer bei mir. Die Idee war geboren, und es folgt die Umsetzung.  




Unser Haus mit dem vorderen Aussenbereich. Hinten ist ein weiterer und der Weg dorthin geht durch 3 Räume.




Was brauche ich?


Damit ich nicht unverhältnismäßig mehr Zeit benötige, als für eine Kabelinstallation, lasse ich mich zunächst auf ein Prototypenkonzept ein, welches später komponentenweise auf einen Release-Status gehoben werden kann. Skalierbarkeit ist also die Devise. Es soll erstmal nur funktionieren.

Das Grobkonzept ist schnell entwickelt. Eine kostengünstige Micrcontroller-Alternative zum Industriestandard ist der Arduino. Ein Open-Source-Zwerg, der mit etwas Phantasie, leistungsstark fast auf Augenhöhe mit den Platzhirschen stehen kann. Weiter ist eine Smartphone-App erforderlich, die ich erstmal nur für Android-Endgeräte entwickeln werde.

Eine überschaubare Aufgabe, die in einem überschaubaren Zeitrahmen durchfürbar sein sollte. Ich nehme es vorweg – von der Idee bis zum ersten Schalten aller Beleuchtungen sind 2 Wochen vergangen.






Hier hängt schon das fertige Produkt in der 20 Baht-Käsebox:


1 - wichtig! Die Lichtleitungen kommen alle einzeln am Sicherungskasten an.


2 - Hier werden sie durch die Relais in Reihe zum Standard Schalter nochmal unterbrochen


3 - Ein ausgedientes Smartphonenetzteil als Stromversorgung





Die Stückliste:



    • Arduino Uno AMTEL MEGA328P 1 Stck
    • Wemos R1 D1 ESP8266 1 Stck
    • Tongling Relais 5V/250V 10A 3 Stck (optional auf n erweiterbar)
    • Display 1602A I2C 1 Stck
    • Breadboard 48pins 1 Stck
    • solderless Cables ausreichend
    • Widerstand 220Ohm 3 Stck

Als Netzteil nehme ich ein ausgemustertes Smartphoneladegerät. Das fertige Assembly wird in eine 20 Baht-Klarsicht-Käsebox mit M2-Schrauben montiert und dann in die Wand verschraubt. Der Prototyp wird zunächst für die Licht-Stromkreise unseres längsten Weges entwickelt, das sind 3. Er muss natürlich beliebig erweiterbar sein. Warum ich mich für ein weiteres Microcontroller-Board entschieden habe, ist eine Frage der Skaliebarkeit. Das Wemos-Board wird als Komunikations-Server programmiert. Es händelt die TCP/IP-Anfragen und verteilt sie auf einen Feld-Bus, der beliebig viele, z.B.: Uno-Boards bedient, die funktional abgegrenzte Aufgaben erledigen.






Es funktioniert ;-) Ein Display zeigt den Verbindungsstatus, letzte Aktionen ... etc. an.





Die Entwicklungsumgebungen


Vor 10 Jahren konnte man dieses Projekt noch vollständig mit der Eclipse-IDE abwickeln. Ich arbeite seit Ewigkeiten mit Eclipse und ich schätze es, meine Aufgaben in einer vertrauten Umgebung zu erledigen. Leider wird Android-Unterstüzung nicht mehr weiterentwickelt. Mit dem Sloeber-plugin läßt sich die Arduino-Entwicklung in Eclipse realisieren. Das Sloeber-plugin arbeitet sehr performant. Das ESP8266-Board muss in den Window-Preferences-Arduino-Third Party Index urls eingetragen werden: http://arduino.esp8266.com/stable/package_esp8266com_index.json und in Platform and Boards ausgewählt werden.



    • Eclipse-IDE (mit Sloeber-plugin)
    • Arduino-IDE (alternativ)
    • Android-Studio  



Die Arduino-IDE hat keine Subversion-Schnittstelle. (kleine Anregung an die Entwickler). Ich erwähne es nur der Vollständigkeit: Subversion, oder ein anderes Produkt, als Tool für verteiltes Entwickeln und Versionskontrolle ist ein must have für Softwareprojekte. Warum benutze ich 3rd-Party-Boards? Die Antwort ist keine Frage des Preise, viel mehr eine Frage der schnellen Verfügbarkeit. Wie erwähnt, lebe ich in Thailand und eine Lieferung aus China ist in der Zollabwicklung ein Durchlaufposten, während die Lieferung eines Genuinen-Boards aus Europa ein Geduldsspiel ist.









Der Prototyp ist fertig - beachte die grünen LEDs auf der Platine.






Welche Voraussetzung sind zu erfüllen?


Um einen Microcontroller zu programmieren, ist es unbedingt erforderlich, zu verstehen, wie er funktioniert. Der Arduino kann in C oder C++ programmiert werden. Der interne Speicher ist sehr begrenzt. C++ ist eine Erweitrung von C und keine eigene Programmiersprache. Ich gebe also pure C den Vorzug. C-Programmierung ist sehr effizient, hat dafür aber auch diverse Fallstricke. Prüfe Dich selbst und revidiere die Begriffe: Heap, Stack, DataSegment und CodeSegment. Wenn Du alle 4 Begriffe genau erklären kannst und auch noch weißt, was Pointer und Adressoperatoren sind, wirst Du wenig Probleme mit der Programmiersprache C haben.
Ein Server läuft üblicherweise als Service- and Childs-Modell. Auf dem Arduino muss ich aber POSIX-Threads verwenden, oder ein eigenes Time-Slicing-Verfahren entwickeln, um das gleiche Verhalten zu erzeugen. Warum tue ich das? Der Arduino ist kein Rechner mit Betriebssystem, sondern schlicht ein Microcontroller mit einem winzigen Stück Firmware und dem Bootloader. Deshalb läuft nur genau ein Service auf ihm und das ist das main mit dem setup und dem loop aus der Arduino-IDE. Möchtest Du mehr, musst Du simmulieren. :-)



Der Android-Client kann in Java oder Kotlin programmiert werden. Aufgrund Jahrzehnte langer Erfahrung gebe ich natürlich Java den Vorzug. Es ist schon klar, dass in der Entwicklung in Java der Fokus auf Software-Entwurf und Datenmodell liegt, wenn man skalierbar programmieren möchte. Also eine gute Vorarbeit erleichtert alle Erweiterungen und Änderungen in der Zukunft. Android-Endgeräte verfügen in der Regel über großzügige Resourcen, im Vergleich zum Arduino. Deshalb gehört hier die gesamte Anwendungslogik rein.


Elektrotechnische Kenntnisse werden nur sehr marginal benötigt. Wir brauchen einen Spannungsteiler, um die unterschiedlichen Betriebspannung zwischen dem Amtel und dem ESP8266 auszugleichen. Sie liegen bei 5V und 3.3V. Es ist schon klar, das ein Verständnis für Spannung, Strom und Widerstand erforderlich ist und die Beziehung dieser untereinander bekannt sind. Stelle Dir hierzu einfach die Frage: Wie unterschiedlich verhalten sich Ströme und Spannungen in Maschen und Knoten?


Da am Ausgang der Relais Ströme von 10 Ampere bei 250V geschaltet werden, darf die Montage nur von Elektro-Fachleuten durchgeführt werden. Wir arbeiten hier mit lebensbedrohlichen Stromstärken!


Damit sind die Voraussetzungen abgeklärt.






Der elektrotechnische Part ist sehr simple.





Der erste Kontakt


Das Arduino-Board ist Open-Source. Es hat in der Regel das gleiche Layout, egal ob man es in China oder in Europa kauft. Die grün eingekreisten Bauteile, oder Baugruppen sollte man kennen. Dazu kommen noch einige Begriffe wie: SPI, PWM, I2C, TWI ...,etc. Chinesische Varianten weichen gelegentlich bei diskreten Bauteilen und Chips ab. Dieser Umstand betrifft dann auch die USB-Baugruppe und den notwendigen Treibern dazu. Ist aber kein großer Umstand.  






Das ist er also - Der Microcontroller. Einige Bauteile solltest Du kennen:



... weiter im Text geht es dann irgendwann später.


Nils Wehrmann