Arduino:

Der Arduino ist ein einfach zu programmierender Microcontroller. Mit einer Vielzahl an Zubehör bietet er viele Möglichkeiten für Sensoren und Aktoren. Das ganze für wenig Geld.

Die Entwicklungsumgebung (IDE) zum Erstellen eines Programms (Sketch) gibt es kostenlos unter arduino.cc

Beispielprogramme für eine Vielzahl von Sensoren und Aktoren gibt es in obiger Entwicklungsumgebung oder bei funduino.de
Je nach Anwendung wird dazu eine Library eingebunden, die den Code für die jeweilige Hardware beinhaltet. Das macht das ganze recht einfach. Unter dem Suchbegriff „Arduino“ findet man auch bei Youtube zahlreiche Anleitungen.

Aber oft steckt der Teufel im Detail. Z.B. muß bei mir der Arduino direkt mit der Fritz-Box verbunden sein. Beim Umweg über einen Switch Netgear FS108 bekommt der Arduino keine Verbindung mit der Fritz-Box.
Update: Mit dem neuen Gigabit Switch Netgear GS108V4 funktioniert die Netzwerkverbindung auch über den Switch.

Es gibt auch viele Hardware-Erweiterung in Form einer Platine zum Aufstecken auf den Arduino (Shield).

Damit eröffnen sich ganz neue Möglicheiten für die Hausautomatisierung, die vorher nicht denkbar gewesen wären.

Arduino Uni / Arduino Mega:

Programmierte Funktionen
Erster Aufbau mit folgenden Möglichkeiten
Programmieren des Bootloaders auf den Controller-Chip
Mechanische Einbindung
LCD-Display
Zuverlässigkeit des Arduinos Uno in dieser Anwendung
IR-Signale empfangen und an den PC senden
HMI-Display mit Touch-Funktion

Arduinos mit WLAN:

Arduino D1 Mini
Arduino D1
Arduino D1 mit HMI-Touch-Display, EMail-Versand und Ping-Test
NEU Arduino D1 Mini als Uhr

Problematisch wird es, wenn ein Arduino mehrere Funktionen gleichzeitig ausführen soll. Manchmal kommen sich die eingebundenen Include-Dateien in die Quere, wenn sie die gleichen Timer verwenden.


Programmierte Funktionen:

- Datenaustausch im Netzwerk mit dem Phönix-Regler

- Datenaustausch im Netzwerk mit dem Windows-Programm AutoRec. Dieses läuft auf dem PC zur Steuerung der Aufnahme und Wiedergabe mit der TV-Karte.
Auf dem direkten Weg geht es schneller als über den Umweg über den Phönix-Regler.

- Empfang von Signalen der Infrarot-Fernbedienung und Weiterleitung an den Phönix-Regler und Autorec.

- Anzeigen von Meldungen und Prozesswerten auf dem 4 zeiligen Text-Display.

- Einlesen der beiden Tasten neben dem Display. Weiterleiten von Tastendrücken an den Phönix-Regler und an Autorec.

- Schalten des Klolüfters über WLAN mit wählbarer Laufzeit.

- Weiterleitung der Anzeigen vom Phönix-Regler an das grafische Touch-Display.
Weiterleitung der Bedienung vom grafischen Touch-Display an den Phönix-Regler.

- Kanalvorwahl beim DVB-C Receiver mittels Signal über Infrarot-LED. Dazu sendet der Phönix-Regler den gewünschten Kanal übers Netzwerk an den Arduino, der darauf entsprechend die LED ansteuert. Das geht wesentlich schneller als wie bisher, die Tasten des Receivers über Relais-Kontakte anzusteuern.

- Ansteuern eines kleinen Lautsprechers über einen kleinen Verstärker. Erstmal nur eine kurze Melodie beim Einschalten.


Erster Aufbau mit folgenden Möglichkeiten:

- Empfang der Signale der Infrarot-Fernbedienung mit Anzeige des Codes auf dem Display
- Abstandsmessung mittels Ultraschall mit Anzeige des Abstandes auf dem Display


Programmieren des Bootloaders auf den Controller-Chip:

Wenn man die Ausgänge des Arduinos zu stark belastet (z.B. mit einem kleinen 8 Ohm Lautsprecher ohne Vorwiderstand von 120 Ohm) kann der Arduino-Chip schon mal zerstört werden.

Abhilfen:
- Am einfachsten ist es, für ca. 6,39 Euro inkl. Versand einen neuen Arduino ohne USB-Kabel bei z.B. ebay zu kaufen.
- oder den defekten Chip gegen einen bereits mit Bootloader programmierten Chip für 7,41 Euro zu tauschen.
- Einen unprogrammierten Ersatz-Chip gibt es bereits für 3,49 Euro bei Conrad-Elektronik. Bei ebay auch schon für 2,99 Euro.
Aber der ist so noch nicht lauffähig. Man muß erst noch den Bootloader auf den Chip programmieren.
Dies kann man mit einem funktionsfähigen Arduino erledigen:

Bei diesem Video wird in deutscher Sprache erklärt, wie die beiden Arduinos verkabelt werden und der funktionsfähige Arduino zu einem Programmiergerät umfunktioniert wird. Beim Zeitindex 5:10 unbedingt abbrechen !!! Was danach kommt ist nur noch Schrott!

Beim zweiten Video wird die Verkabelung in englischer Sprache mit indischer Aussprache erklärt. Ab Zeitindex 1:30 geht es mit der Programmierung los.

Alternativ kann man in diesem Video ab Zeitindex 1:02 die Vorgehensweise sehen.

Ich hatte viel Zeit und Nerven vergeudet, um die Vorgehensweise zum Programmieren des Chips mit dem Bootloader herauszufinden. Ich hätte besser gleich einen neuen Arduino gekauft!

Jetzt da ich es schon einmal erfolgreich durchgeführt habe, werde ich es bei Bedarf vielleicht wieder so machen und dann die Vorgehensweise gut nachvollziehbar hier aufschreiben.


Mechanische Einbindung:

Arduino von vorne mit den Anschlüssen für Netzwerk, USB und Netzteil.

von oben: Experimentier-Shield mit den beiden LEDs und den angeschlossenen Leitungen. Die führen zum IR-Sensor sowie zu dem Gehäuse mit dem Display und den Tastern.


Der Arduino sitzt nun auf der gleichen Hutschiene wie der Phönix-Regler.

Der Arduino ist auf einen Halter für eine Hutschiene montiert.

Mittels Netzteil bekommt er eine unabhängige Stromversorgung.

Mit der aufgesteckten Netzwerkplatine (Netzwerk-Shield) wird der Arduino netzwerkfähig und tauscht Daten mit dem Phönix-Regler zur Heimautomatisierung und dem Programm AutoRec aus.

Darauf ist eine Experimentierplatine aufgesteckt. Mit mehreren Funktionen bzw. Anschlüssen:
- Drahtverbindungen zum Arduino Mega zu den Anschlüssen SCL und SDA (I2C-Bus für LCD-Display) sowie RX1 und TX1 (seriell für HMI-Display)
- Verbindungen zur seriellen Schnittstelle im USB-Adapter am PC zur Programmierung des HMI-Display. (unten rechts)
- serielle Leitung links: Verbindung zum Infrarotsensor. Der Tastencode der Fernbedienung wird übers Netzwerk an den Phönix-Regler und dem Programm AutoRec zur weiteren Auswertung gesendet.
- serielle Leitung Mitte: Verbindung zum Gehäuse mit dem HMI-Display. Im abgehenden Stecker ist ein Kippschalter eingebaut. Damit wird zwischen Programmier-Modus (serielle Verbindung zum USB-Adapter) und Anzeige-Modus (serielle Verbindung zum Arduino) umgeschaltet.
- serielle Leitung rechts: Verbindung zum Gehäuse mit dem LCD-Display am I2C-Bus und den beiden Tastern.
- Die grüne LED leuchtet beim zyklischen Datenempfang übers Netzwerk vom Phönix-Regler.
- Die rote LED leuchtet kurz auf beim Empfang von Signalen über den Infrarot-Sensor.

Es gibt auch Shields mit bereits montierten Schraubklemmen. Aber ich habe mich für die Variante zum Löten entschieden.
Alternativ kann man auch zwei "Screw Shields" bei Conrad Elektronik, ebay oder ebay kaufen.

Der IR-Sensor ist am Monitor-Ständer montiert, wo er die Signale der Fernbedienungen gut empfangen kann.


LCD-Display:

Das Display wirkt auf dem Bild heller als in Wirklichkeit. Darüber erfolgt die Ausgabe von Texten, die vom Phönix-Regler übers Netzwerk an den Arduino gesendet werden. Leider kann das Display Umlaute und manche andere Sonderzeichen nicht anzeigen.

Hier mit allen möglichen Anzeigen:

- Uhrzeit und Datum
- Infos zur Warmwasserbereitung: Betriebszustand, Kessel- und Warmwassertemperatur
- Meldung über neue Post im Briefkasten und Türklingel
- Status zur Aufnahme von Fernsehsendungen über die TV-Karte im PC

Es wurden zwei Taster nachgerüstet, die vom Arduino eingelesen und übers Netzwerk an den Phönix-Regler gemeldet werden. (auf dem Bild noch nicht zu sehen)

Der grüne Taster quittiert Meldungen, die in der Heimautomatisierung gelöscht werden und danach vom Display verschwinden.

Wenn keine Meldungen anstehen und zur Schlafenszeit, wird die Hintergrundbeleuchtung ausgeschaltet.
Mit dem schwarzen Taster wird die Hintergrundbeleuchtung für 8 Sekunden eingeschaltet.


Zuverlässigkeit des Arduinos Uno in dieser Anwendung:

Bei einem PC steht dem Prozessor ein Chipsatz zur Verfügung, der das Senden und Empfangen von Daten auf unterster Ebene erledigt. Außerdem können Daten gepuffert werden. Dadurch wird der Prozessor entlastet und die Daten werden zuverlässig vom Chipsatz übertragen.
Der Arduino muß ohne Chipsatz die Arbeit auf unterster Ebene selbst erledigen. Wenn mehrere Aufgaben gleichzeitig zu erledigen sind, kommt er zwangsläufig nicht mehr hinterher. Daten können verloren gehen bzw. werden nicht empfangen.

Das Hauptproblem beim Arduino Uno ist der geringe Arbeitsspeicher. Wenn man ein etwas größeres Projekt programmiert hat, und dadurch viel vom knappen Arbeitsspeicher verbraucht wurde, kann die Abarbeitung unzuverlässig werden, ohne daß man vorher rechtzeitig gewarnt wird!
Dies ist beim Datenempfang übers Netzwerk zu beobachten. Werden mehr als ca. 33 Zeichen vom Sender gesendet, gehen die letzten Zeichen verloren.
Abhilfe schaffte, die Funktionen zum Empfang der IR-Signale im Programm komplett zu entfernen. Dann konnten schon deutlich mehr Zeichen übers Netzwerk empfangen werden. Aber mehr als ca. 80 Zeichen waren dann auch nicht möglich.
Aber selbst wenn die Datenpakete unter 33 Zeichen bleiben und korrekt empfangen wurden, wird manchmal das Display nicht mehr richtig beschrieben. Die alten Zeichen werden nicht mehr mit den neuen Zeichen überschrieben. Obwohl sie übers Netzwerk korrekt empfangen wurden. Abhilfe schaffte erst ein Reset des Arduinos.

Dies alles schränkt die Einsetzbarkeit des Arduinos Uno bei größeren Projekten doch sehr ein. Er ist eben doch nur bedingt leistungs- und multitaskingfähig!
Abhilfe könnte der Einsatz einen weiteren Arduinos schaffen, der einen Teil der Aufgaben übernimmt.
Ob ein Rasberry Pi da bessere Resultate liefert?

Weitere Abhilfen für den Arduino Uno:
- Netzteil vom Arduino Uno an die Steckdose anschliesen, die jede Nacht für das Gateway 433 MHz kurz ausgeschaltet wird. Damit wird der Arduino Uno täglich resetet.
- Entfernen aller nicht unbedingt notwendigen Programmteile wie: erstmaliges Beschreiben des Displays nach einem Reset, Ausgabe der IP-Adresse auf dem Display nach Initialisierung des Netzwerk-Shields, Fehlermeldung wenn das Netzwerk-Shield nicht vorhanden ist.
- Mittels Parameter F() das Verlegen von Texten vom Arbeitsspeicher in den Festwertspeicher. Dies funktioniert aber nicht bei Befehlen, die Text übers Netzwerk ausgeben.

Bei einer Belegung des globalen dynamischen Speichers von 57% konnten gerade noch 87 Zeichen fehlerfrei empfangen werden.
Damit läuft der Arduino Uno nun auch ohne tägliches Reseten fehlerfrei.

Je mehr Arbeitsspeicher frei wird, destso mehr Zeichen können zuverlässig übers Netzwerk empfangen werden. Bei einer Belegung des globalen dynamischen Speichers von 45% (durch Entfernen der Funktionen zum Infrarot-Sensor) konnten noch 120 Zeichen fehlerfrei empfangen werden. Es wäre also hilfreich, die Aufgaben auf mehrere Arduinos aufzuteilen. Einer für den Empfang und Weiterleitung der IR-Signale und einer zur Ansteuerung des Displays.

Die bessere Abhilfe: Der Arduino Mega 2560 Rev3 hat 8K SRAM statt 2K SRAM wie beim Arduino Uno Rev3. Zu finden unter unter "Tech Specs". Durch einen Umstieg auf den Arduino Mega wurden die Speicherprobleme vollständig beseitigt. Auch mit der Funktion mit dem Auswerten der IR-Signale können mindestens 200 Zeichen übers Netzwerk zuverlässig empfangen werden.
Die Anschlüsse für den I2C-Bus fürs Display liegen beim Arduino Mega auf anderen Pins. Ansonsten konnte die Software unverändert übernommen werden. Man muß nur in der IDE von Arduino Uno auf Mega umschalten.

Aber auch mit dem Arduino Mega wird keine vollständige Zuverlässigkeit erreicht. Der Text "Taster schwarz = 1" wird nicht vollständig übertragen. Es landet nur "= 1" beim Empfänger.
Löscht man zwei Zeichen und sendet den Text "Tast schwarz = 1", wird der Text plötzlich vollständig empfangen.
Da liegt wohl ein Bug in einer Bibliothek zur Netzwerkplatine vor.


NEU IR-Signale empfangen und an den PC senden

Über einen IR-Sensor empfängt der Arduino die IR-Signale von Fernbedienungen.
Die empfangenen Steuercodes werden übers Netzwerk an den PC an das Programm AutoRec gesendet. Damit kann die Wiedergabe von aufgenommenen Fernseh-Sendungen gesteuert werden.

Da die Texte in Großschrift angezeigt werden, kann man sie auch noch aus zwei bis drei Meter Entfernung gut lesen.


HMI-Display mit Touch-Funktion

Begonnen hat es mit dem Besuch der Seite https://arduino-projekte.info/nextion-hmi-display/
Da war schnell klar, daß so ein Display auch in meine Heimautomatisierung einfliesen muß.

Das Display gibt es in verschiedenen Größen von 2,4 bis 7 Zoll. Ich habe mich für die Version mit 3,5 Zoll entschieden. Für 40 Euro inkl. Versand bei Amazon. Dies gab es zwar bei ebay deutlich günstiger, aber aufgrund dem Versand aus China mit deutlich längerer Lieferzeit.

Die Oberfläche wird mit einem kostenlosen Editor auf dem PC erstellt. Download beim Hersteller Nextion auf seiner Homepage.

Von der Touch-Funktion wurde hier kaum Gebrauch gemacht. Man kann damit beliebige Texte an die SPS senden, um dort damit Schaltvorgänge auszulösen.

Generell empfiehlt es sich, einen Arduino Mega zu verwenden, da er mehr als nur eine serielle Schnittstelle hat. Eine braucht man zur Ausgabe von Meldungen auf dem seriellen Monitor zur Unterstützung bei der Programmentwicklung. Eine zweite braucht man zur Verbindung mit dem Display.
Wenn man unbedingt beim Arduino Uno bleiben will, gibt es auch die Möglichkeit, eine serielle Schnittstelle mittels Programmerweiterung über die digitalen IO-Pins des Arduino Uno zu emulieren. Siehe folgende Videos bei Youtube.

Bei Youtube gibt es dazu nützliche Einführungen:
Nextion Display - Teil 1: Grundlagen und Werte übermitteln
Nextion touch TFT display examples | Digital power supply - part 1 (auf englisch, aber sehr zu empfehlen!)
NEXTION Tutorial #1 - Der Editor und seine Elemente (Grundlagen)
Und einfach mal selbst rumprobieren. Damit lernt man auch viel kennen.

Upload: Wie bringt man das mit dem Editor für das Display erstellte File auf das Display?
1. Möglichkeit: Datenaustausch über Micro-SD-Karte.
- Über die Funktion "File/TFT file Output" wird ein File erstellt
- das File auf eine Micro-SD-Karte kopieren, danach den Datenträger wieder vom PC abmelden
- die Micro-SD-Karte in das ausgeschaltete Display eingestecken
- Display einschalten -> Das File wird sehr schnell auf das Display kopiert
- aus dem ausgeschalteten Display die Micro-SD-Karte wieder entnehmen. Ansonsten würde mit jedem Einschalten des Display wieder der Kopiervorgang starten.
- Display wieder einschalten.
Der eigentliche Kopiervorgang geht zwar sehr schnell, aber durch die vielen notwendigen Arbeitsschritte dauert es aber trotzdem lange.
2. Möglichkeit: Programmierung über die serielle Schnittstelle.
Dazu braucht man ein "PL2303HX USB zu TTL RS232 Modul". Dies gibt es für knapp 4 Euro inkl. Versand bei ebay. Dies arbeitet mit TTL-Pegel von 5 Volt. Eine normale serielle Schnittstelle arbeitet mit deutlich höheren Spannungen, die die Elektronik mit 5 Volt-Pegel zerstören können!
Den Treiber dazu gibt es auf der eigenen Homepage des Verkäufers. Oder bei makershop.de oder Download direkt für Windows bzw. MAC OS.
Erst den Treiber installieren, dann den Adapter in den PC einstecken!
Im Editor über den Button "Upload" steht eine Funktion zur direkten Programmierung über die serielle Schnittstelle RS232. Dazu muß man die Sende- und Empfangsleitung Rx und Tx vom Arduino abziehen und mit der seriellen Schnittstelle zum PC verbinden. Es empfielt sich, das über einen zweipoligen Umschalter zu führen. Wenn man dabei ein Baudrate von 512.000 wählt, geht die Übertragung sehr schnell.
Hat man nur wenige Änderungen im Programm vorgenommen, wird auch nur dieser geänderte Teil neu übertragen. Das spart viel Zeit. Außerdem lässt sich mit der System-Variable "bauds" (siehe Befehlsübersicht) die Baudrate von 9600 auf höhere Werte einstellen.

Das Display ist intelligent. Befehls-Übersicht
Über den Editor können damit Programme erstellt werden, die dann auf dem Display ablaufen.
Damit war es möglich, mit einem einzigen String mit allen Daten, die zur Anzeige gebracht werden sollen, in einem Rutsch an das Display zu senden. Das Display entnimmt der mit den Daten beschriebenen Textvariablen in einem Timeraufruf zyklisch für jedes Objekt die dazugehörigen Daten und bringt sie zur Anzeige. Dazu wurden die Befehle "substr" und "covx" verwendet. Der Befehl "vis" eignet sich zusammen mit einer If-Abfrage sehr gut, um aus einer "0" oder "1" eine Grafik ein- bzw. auszublenden.
Diese Verarbeitung im Display selbst ist eine massive Entlastung für den Arduino, der die Aufgabe zwar erledigen konnte, aber durch die erhöhte Auslastung die anderen Funktionen nicht mehr richtig ausführen konnte.

Ergebnis

Über den Simulator des Editors wurden mittels entsprechenden Befehlen die volle Bandbreite der Anzeigemöglichkeiten aktiviert. Die ist aber normalerweise so nicht sichtbar.

Links / Mitte:

Uhrzeit und Datum

Standby: "Totmanschaltung" Vorwarnung bevor über die SPS der PC und der Fernseher ausgeschaltet wird. Der blaue Balken wandert dabei nach rechts.

Aussentemperatur, darunter Hysterese zur Freigabe der Heizung,
Helligkeit und Helligkeitsstufe: Tageslicht / Dämmerung / Nacht

Anzeige für Heizkessel und Kesseltemperatur sowie Warmwasserbehälter und Warmwassertemperatur.
Mit dem Button rechts davon lässt sich auch ein Kommando zurück an die SPS senden, um dort die Warmwasserbereitung zu aktivieren.

Rechts:

Signalisierung zu neuer Post im Briefkasten und Zeitungsrohr, sowie zur Türklingel
Signalisierung über laufende bzw. beendete Aufnahmen über TV-Karte und Webradio.

Darunter eine Anzeige über den Versand von EMails.

Baudrate, Uhrzeit wann die SPS den PC neu startet, Telegrammzähler

Die ganzen Daten stammen von der Hausautomatisierung. Der Phönix-Regler setzt aus den einzelnen Daten den Datenstring zusammen und sendet sie übers Netzwerk an den Arduino, der ihn dann unverändert über die serielle Schnitsttelle an das Display weiter leitet.

Die beiden Displays verhalten sich im normalen Betrieb optisch unauffällig wenn es nichts zu melden gibt.


Eine direkte serielle Verbindung zwischen Phönix-Regler (über die PS2-Buchse) und HMI-Display hat trotz Pegelanpassung leider überhaupt nicht funktioniert.
Das hätte die Reaktionszeit zur Anzeige veringert und den Arduino noch weiter entlastet



Arduino mit WLAN

Es gibt die Arduinos auch mit eingebautem WLAN. Grundlage dafür ist der Chip ESP8266. Dieser Chip beinhaltet einen Arduino-Prozessor und gleichzeitig die Funktionalität für WLAN.
In einer Ausführung Arduino D1 (ähnlich wie Arduino Uno) und in kleinerer Bauform Arduino D1 Mini.

Nach ein paar Anpassungen lässt sich dieser Arduino auf dem PC mit dem gleichem Programm programmieren wie der Arduino- Uno oder Mega.

Erst auf der Seite https://arduino-projekte.info/wemos-d1/ habe ich einen Treiber für den USB-Port am PC gefunden, der auch funktioniert.

Dort wird auch erklärt, wie man die Entwicklungsumgebung (IDE) anpassen muß, um den Arduino programmieren zu können. Das ganze ist schon aufwendiger als beim Arduino Uno/Mega.
Als Board wird "Generic ESP8266 Module" eingestellt. Oder auch "LOLIN(Wemos) D1 R2 & mini". Das Programmieren des Boards dauert auch bei sehr kleinen Programmen länger als beim Arduino Uno, da stets der komplette Speicher beschrieben wird. Durch Hochsetzen der Baurate wird es aber erträglich.

Die Arduinos mit WLAN lassen sich sogar über WLAN programmieren. Ohne eine serielle Verbindung. Das ist sehr nützlich wenn der Arduino irgendwo verbaut ist, wo man nicht gleich ran kommt. Mit folgenden Befehlen lässt sich das umsetzen:
vor "void setup()":
#include <ArduinoOTA.h>
vor "void loop()":
ArduinoOTA.begin();
ArduinoOTA.setHostname("");
Da ist ein selbst gewählter Name einzutragen. Hat sich bei mir aber nie ausgewirkt.
ArduinoOTA.setPassword(""); Da ist ein selbst gewähltes Passwort einzutragen. Hat sich bei mir aber nie ausgewirkt.
nach "void loop()":
ArduinoOTA.handle();

Beim ersten mal muß dies noch seriell auf den Arduino geladen werden. Danach in der IDE unter Werkzeuge/Port den Eintrag mit der IP-Adresse des Arduinos auswählen. Und schon kann der Upload über WLAN erfolgen.
Das klappte beim Arduino D1 auch wunderbar. Nur hatte er danach (auch nach kurzem Abziehen der Versorgungsspannung) keinerlei Verbindung mehr ins Netzwerk. Was die ganze Sache ziemlich sinnlos macht!
Das identische Programm seriell übertragen, und schon war der Arduino wieder online.
Das sind wohl die Dreckeffekte, wenn der Arduino zu viele Aufgaben parallel ausführen soll?

Inzwischen gibt es den leistungsfähigeren ESP32 als Nachfolger des ESP8266. Weitere Infos dazu hier und hier.


Arduino D1 Mini WLAN:

Der kleine Bruder des Arduino D1 ist der Arduino D1 Mini.
Die Platine ist deutlich kleiner. Dadurch fehlt das Netzteil für Spannungseinspeisung über die runde Buchse. Und die Platine ist beidseitig bestückt.

Hier musste erstmal mühsam die Belegung der IO-Adressen ermittelt werden:

Funktion

IO-Adresse

Pin

Pin

IO-Adresse

Funktion

-

Reset

TX

1

A0

RX

3

LED1

16

D0

D1

5

Relais

LED2

14

D5

D2

4

LED3

12

D6

D3

0

LED4

13

D7

D4

2

LED Board

Taster (Pull down)

15

D8

GND

-

Schirm

Taster +

-

3,3 V

5 V

-

Im Prinzip ist das Programm und die Programmierung identisch zum Arduino D1 WLAN.
Aufgrund von den unterschiedlichen IO-Adressen sind die Programme für Arduino D1 und D1 Mini aber nicht kompatibel.

Aufbau für die Steuerung des Klolüfters:

Aufgebaut auf einer Art Motherboard sind die einzelnen Module (Relais, Arduino D1 Mini und Schnittstelle nach aussen) nebeneinander angeordnet.

Auf dem Motherboard sind rechts die Vorwiderstände für die LEDs sowie die Leitung mit den Adern für die LEDs und den Taster zu sehen.

Das ganze ist im Spiegelschrank eingebaut und in Funktion.

Die Bedien- und Anzeigeelemente an der Seite des Spiegelschranks.

Mit dem Taster unter den vier LEDs wird die Stufe der Nachlaufzeit eingestellt.

Die Anzeige links vom Taster zeigt die Einschaltung des Lüfters an. (im Bild ist das Leuchten aber kaum zu sehen)

Der Schalter ganz links ist für die manuelle Schaltung ohne die Elektronik.

Der Arduino D1 WLAN Mini dient dabei mehr als Ein- und Ausgabemodul. Die Verarbeitung der Signale erfolgt im Phönix-Regler. Dort sind auch die Laufzeiten der vier Stufen festgelegt.
Nun lassen sich über mehrfachen Tastendruck auch unterschiedlich lange Laufzeiten realisieren. Mit Anzeige der Zeitstufen über LEDs.
Das Relais schaltet den Lüfter mit 230 Volt. Dessen Ansteuerung ist fest mit dem Signal D1 verbunden.

Beim ersten Aufbau gab es noch EMV-Probleme beim Schalten des Lüfters und beim Einschalten der Glühlampen. Dies äusserte sich in der Form als wäre der Taster gedrückt worden.
Außerdem hat sich die Konstruktion mit den Steckkontakten auf dem "Motherboard" als sehr anfällig für Wackelkontakte erwiesen.

Abhilfen:
- Die beiden Platinen wurden direkt auf das "Motherboard" eingelötet. Das Protoboard wurde entfernt und alles direkt auf das Motherboard gelötet.
- Ein Entstörkondensator wurde parallel zum Relaiskontakt hinzugefügt. (Montiert bei der rechten Glühlampe) Somit wird ein Funke beim Schalten des Relais direkt neben dem Microcontroller vermieden.
- Die Adern zum Taster sind nun in einer abgeschirmten Leitung verlegt.
- Ein Pulldown-Widerstand von 3,3 KOhm zieht das Signal vom Taster auf 0 Volt runter.

Jetzt ist das ganze ausgereift.

Das ganze hat die Funksteckdose für den Klolüfter ersetzt.
Bisher wurde über den Rückkanal der Funksteckdose (mit 868 MHz) die manuelle Einschaltung an die SPS gemeldet, damit diese den Lüfter nach einer festgelegten Zeit wieder ausschaltet. Die Signal-Übertragung mit Funksteckdose und deren Gateway fürs Netzwerk war nie ganz zuverlässig und auch nur recht umständlich zu programmieren. Inzwischen funktionierte es überhaupt nicht mehr, weil sich diese Funksteckdose nicht mehr ansprechen lies.

Das ganze wurde noch um einen kleinen Lautsprecher inkl. Verstärker (der oder der) erweitert, um damit ein akustisches Signal auszugeben, wenn im anderen Zimmer die "Totmannschaltung" in kürze den PC und Fernseher abschalten will. Dann kann man dies mit dem Taster für den Klolüfter verhindern.
Parallel dazu eine Anzeige über LED.


Aduino D1 WLAN:

Unter der Bezeichnung "Wemos D1 Wifi Arduino UNO komp. Board mit WLAN ESP8266 ESP-12E Mini Wifi on Board" wurde für 6,65 Euro inkl. Versand bei ebay einen Arduino D1 mit WLAN-Funktion gekauft.

Dieser Arduino D1 WLAN hat aber weniger Ein- und Ausgänge als der Arduino Uno: Eine analoge Eingabe und acht freie binäre Leitungen. Drei weitere sind bereits für die LED auf dem Board und für die serielle Ein- Ausgabe über USB belegt.

Besonders nervig waren die bunt durchgewürfelte Belegung der IO-Adressen, die erst noch ermittelt werden mussten:

Funktion

Pin

IO-Adresse

Taster (Pull down)

D10

15

LED Board (Pull up, LED dunkler)

D9

2

Relais (Pull up, LED heller)

D8

0

LED4

D7 / D11

13

LED3

D6 / D12

12

LED2

D5 / D13

14

(SDA I2C Display)

D4 / D14

4

(SCL I2C Display)

D3 / D15

5

LED1

D2

16

(TX seriell)

D1

1

(RX seriell)

D0

3

Die Pins D3 - D7 sind elektrisch mit den Pins D15 - D11 verbunden. D15 bis D11 sind also keine weiteren Anschlüsse und somit nutzlos.

Damit steht die Grundlage für neue Anwendungen (an Orten an denen kein Netzwerkanschluß zur Verfügung steht).


Arduino D1 mit HMI-Touch-Display, EMail-Versand und Ping-Test

Ein Arduino D1 mit Touch-Display wurde über der Simatic-CPU auf einer Hutschiene montiert.
Angesteuert wird er über WLAN vom Phönix-Regler.

von vorne:

von der Seite:

Programmierte Funktionen:

- Ansteuerung des Touch-Displays

Die Anzeigen unterscheiden sich etwas vom Display im Wohnbereich.

Oben:

Uhrzeit, Anzeige für Licht: Wohnung, Garten linke und rechte Seite

Aussentemperatur, darunter Hysterese zur Freigabe der Heizung,
Helligkeit und Helligkeitsstufe: Tageslicht / Dämmerung / Nacht

Darunter links und Mitte: Anzeigen zur Warmwasserbereitung und Heizung:
Schaltzustand der Wasserpumpen Heizung und Warmwasser. Im Betrieb sind sie blau und drehend animiert.
Anzeige für Heizkessel und Kesseltemperatur sowie Warmwasserbehälter und Warmwassertemperatur.
Mit dem Button rechts davon lässt sich auch ein Kommando zurück an die SPS senden, um dort die Warmwasserbereitung zu aktivieren.

Mitte: Eine Anzeige über den Versand von EMails.
(Blau=aktiv, grün=erfolgreich, rot=fehlerhaft)

Rechts:
Signalisierung zu neuer Post im Briefkasten und Zeitungsrohr, sowie zur Türklingel

Baudrate und Telegrammzähler

- Versenden von EMails

Grundlage dafür war eine Vorlage von https://fipsok.de/Projekt/esp32-esp8266-html-mail.
Weitere Infos dazu auf der Homepage https://fipsok.de/ unter "Esp32 Esp8266 Mailversand".
Dieses dann aber noch für die Anforderungen der Hausautomatisierung anzupassen, war nochmals eine gutes Stück Arbeit.

Den eigentlichen EMail-Versand erledigt die Seite www.smtp2go.com/ Die Email-Adresse, die man dort bei der Anmeldung angeben muß, dient nur der Kommunikation mit dem Anbieter. Mit den zu versendenden EMails hat dies überhaupt nichts zu tun.

Zuerst wurde die Versendung von EMails mit steigender Anzahl immer unzuverlässiger. Dies machte ein tägliches Reseten bzw. kurzes Ausschalten notwendig. Danach klappte es wieder einwandfrei.
Nach ein paar Änderungen am Code klappt es inzwischen noch nach mehreren Tagen fehlerfrei. Es wird auch nach jedem Versenden eines EMails an den Phönix-Regler zurück gemeldet, ob der Versand erfolgreich oder fehlerhaft war. Im Fehlerfall wird von dort ein Reseten des Arduinos D1 eingeleitet.

Eine andere Möglichkeit gibt es bei az-delivery.de. Dort verwendet man ein Google-Konto, um EMails über GMail zu versenden.

- Netzwerkteilnehmer anpingen

Grundlage dafür war in der Entwicklungsumgebung die Bibliothek "ESP8266WiFi". Unter Beispiele "ESP8266-ping"
Dies an die Anforderungen der Hausautomatisierung anzupassen, war nochmals eine große Herausforderung. Besonders weil die Quelldatei "Pinger.cpp" geändert werden musste. Nur so war es möglich, innerhalb einer Sekunde alle 8 Netzwerkteilnehmer einmal anzupingen.

Nach Aufruf der Seite oder nach Antippen von "Ping" werden die Netzwerkteilnehmer angepingt. Wenn dies bei jedem Netzwerkteilnehmer erfolgreich ist, ist dies in weniger als einer Sekunde erledigt.

Durch Antippen von "Exit" wird diese Seite verlassen und wieder die Hauptseite angezeigt.


Arduino D1 Mini als Uhr

Der alte Videorekorder aus den 80iger Jahren wird schon lange nicht mehr benutzt. Er steht nur noch als Dekoration da und zeigt die Uhrzeit an. Doch dafür verbraucht er laut Strommessdose 15 Watt im Dauerbetrieb! Das sind 131 Kilowattstunden im Jahr. Und das Gehäuse ist über dem Netzteil und Display immer gut warm. Darauf kann man im heissen Sommer auch gerne verzichten. Das kann ein Arduino mit viel weniger elektrischer Leistung.

Hier das bisherige Display des Videorekorders zur Anzeige der Uhrzeit:

Dieses Display wird ersetzt durch eine Platine mit kompatiblen Abmessungen und einem Arduino und vierstelliger Ziffernanzeige. Die Ziffernanzeige gibt es für wenig Geld bei ebay. Mit Versand aus China.

Diese Platine passt genau in die Aussparungen des Gehäuses des Videorekorders. Damit ist das ganze mechanisch fixiert.
Die schwarze Leitung gehört zu einem Netzteil mit 5 Volt. Über eine Zwischensteckdose verbunden mit einer zusätzlichen Spannungsbuchse für 230 Volt im Gehäuse des Videorekorders, wird das Netzteil mit Spannung versorgt. Das ganze ist im Schacht für die Videokassetten verstaut. Das Netzteil des Videorekorders bleibt also spannungslos und verbraucht keinen Strom mehr.

Später wurde die Spannungsversorgung der LED-Anzeige von 5V auf 3,3 Volt umgelötet, damit das Display nicht so hell leuchtet.
Außerdem wurde noch eine farbige Frischhaltefolie auf das Display geklebt, damit das Licht bläulicher und damit angenehmer wird.
So sieht das ganze im eingebauten Zustand aus:

Durch das Blitzlicht sieht man neben der Uhrzeit auch die ganzen Innereien. Bei Tageslicht sieht man davon fast nichts. Ohne Tageslicht nur mit Zimmerbeleuchtung sieht man nur noch die leuchtenden Ziffern vom Display.

Programmierte Funktionen:
Nach dem Zuschalten des Netzteils wird die Uhrzeit auf 0:00 Uhr initialisiert. Danach zählt der Arduino selbständig die Zeit hoch.
Der Arduino D1 Mini loggt sich ins WLAN ein, hat aber noch keine Verbindung zur Hausautomatisierung.
Jede Nacht nachdem sich der Phönix-Regler von der Fritz-Box die Uhrzeit abgeholt hat, verbindet sich der Phönix-Regler kurz mit diesem Arduino und überträgt die aktuelle Uhrzeit. Diese Übertragung kann man auch über das HMI-Display mit Touch-Funktion starten.
Danach wird stets die aktuelle Uhrzeit angezeigt. Eine Umstellung beim Wechsel der Sommer- und Winterzeit erfolgt dadurch nun automatisch.
Außerdem kann man der Ziffernanzeige die Helligkeit vorgeben. Wobei in dieser Anwendung bereits die niedigste Stufe ausreichend hell ist.

Der Stromverbrauch ist für diese Arduino-Uhr so gering, daß die Strommessdose 0 Watt anzeigt.
Über die ersparten Stromkosten hat sich das ganze nach einigen Monaten schon bezahlt gemacht. (Die Arbeit bleibt dabei unberücksichtigt)

Das Programmieren des Arduino D1 Mini klappt bei dieser Anwendung erstmalig auch über WLAN. Vermutlich weil hier kein zyklischer Datenaustausch übers Netzwerk stattfindet.

Einen interessanten Beitrag zur Ziffernanzeige gibt es hier.

Download des Programmes (Die Zugangsdaten fürs WLAN wurden natürlich entfernt)
Es finden sich noch auskommentierte Spuren von einer vorherigen Version im Programm. Um eine "0" bei der ersten Ziffern zu unterdrücken, war ein Wechsel der Library sowie ein paar Anpassungen im Programm notwendig.



Sie sehen kein Inhaltsverzeichnis auf der linken Seite? Dann hier klicken.