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 bekommt der Arduino keine Verbindung mit der Fritz-Box.

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.


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 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.


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. Damit wird der Infrarotsensor sowie das Gehäuse mit Display für den I2C-Bus und den beiden Tastern angeschlossen. 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. Der Tastencode der Fernbedienung wird übers Netzwerk an den Phönix-Regler und dem Programm AutoRec zur weiteren Auswertung gesendet.
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.


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 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.


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.

Der große Chip auf der Platine rechts beinhaltet einen Arduino-Prozessor und gleichzeitig die Funktionalität für WLAN.
Nach ein paar Anpassungen lässt sich dieser Arduino D1 WLAN 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 D1 WLAN programmieren zu können. Das ganze ist schon aufwendiger als beim Arduino Uno/Mega. Als Board ist "Generic ESP8266 Module" eingestellt. Das Programmieren des Boards dauert auch bei sehr kleinen Programmen länger als beim Arduino Uno, da stets der komplette Speicher beschrieben wird.

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.

Anwendung:

Aus einer Mischung aus dem Beispielprogramm ESP8266WIFI / WIFIManualWebServer und dem Programm für den Arduino Uno von der Heimautomatiserung, wurde ein neues Programm für den Arduino D1 WIFI entwickelt. Damit tauscht er Daten mit dem Phönix-Regler aus und schaltet den Klolüfter mit wählbarer Laufzeit ein. Die Auswahl der Laufzeit erfolgt über den Taster, die Anzeige über die vier LEDs.


Arduino D1 Mini WLAN:

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

Auch 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.


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 Undo 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 von 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. 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.
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:

Uhrzeit und Datum

Helligkeitsstufe: Tageslicht / Dämmerung / Nacht
Helligkeit und Aussentemperatur
Wohnungslicht, Gartenlichter, Beleuchtung Gartenhaus

Anzeigen zur Warmwasserbereitung und Heizung
Mit dem Button "Warmwasser" lässt sich auch ein Kommando zurück an die SPS senden, um dort Schaltvorgänge auszulösen.

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

Die ganzen Daten stammen von der Hausautomatisierung und werden vom Phönix-Regler übers Netzwerk an den Arduino gesendet, der den Datenstring über die serielle Schnitsttelle an das Display sendet.


Evtl. gelingt auch eine direkte serielle Verbindung zwischen Phönix-Regler und Display. Das würde die Reaktionszeit zur Anzeige veringern und den Arduino noch weiter entlasten.


Nächste Aufgaben:

- Evtl. Nachrüstung eines Mini-Lautsprecher inkl. Vorwiderstand von 120 Ohm auf dem Experimentierboard zur Ausgabe von akustischen Signalen.


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