Elektronik_Header_3Lüftersteuerung mit ESP-01

 

Vierfach Temperaturanzeige

Um eine in die Tage gekommene Anzeige für vier Temperaturen mit Minimum- und Maximumspeicher zu ersetzen, deren LCD Anzeigemodule nicht mehr ablesbar sind, habe ich eine Modernisierung ins Auge gefasst. Die Verwendung der vorhandenen PT100 Temperaturaufnehmer erschien mir zu aufwändig, nach einschlägigen Hinweisen wären dafür Messverstärker o.Ä. notwendig gewesen.

Ein Arduino als Hirn, dazu ein OLED Display und vier moderne Temperatursensoren mit OneWire Anschluss des Typs DS18b20 kommen da schon eher in Frage. Allerdings wünscht sich der Besitzer des Originals die gewohnten vier Anzeigen und die Minima/Maxima sollten getrennt für jede Anzeige löschbar sein.

Ok, die vier Displays sind eine Herausforderung, denn die normalerweise käuflich zu erwerbenden OLED Anzeigemodule haben alle dieselbe I²C Adresse 0x3C.

Es kursieren Anleitungen im Netz, die den Umbau solch einer Anzeige auf eine alternative Adresse beschreiben, aber der Umbau gestaltet sich kompliziert und knifflig, den potentiellen Verlust der Anzeige inbegriffen. Zudem hätte ich dann immer noch zwei Anzeigen zu wenig, weshalb ich auf diesen Ansatz verzichtet habe und lieber auf die OLED Library U8g2 von Oli Kraus ausgewichen bin, die unkompliziert erlaubt, beliebige Pins des Arduino als Software I²C Bus zu verwenden. Der Arduino steuert also die vier OLEDs über jeweils einen eigenen I²C Bus an. Das hat Performanceeinbußen zur Folge, aber gemeinhin ändern sich Temperaturen eher langsam, die geringe Geschwindigkeit gegenüber dem Hardware I²C Bus sollte also kein Hindernis darstellen.

Da der Arduino Pins im Überfluss hat, habe ich zusätzlich jedem Temperatursensor einen eigenen Pin für die Daten spendiert. Im Prinzip könnten diese Sensoren alle über einen einzigen OneWire Bus betrieben werden.

Nur bei der Bedienung habe ich geknausert und lediglich einen einzelnen Taster in Form eines TTP223 Sensors vorgesehen, der über die Library “PinChangeInterrupt.h” von Nico Hood angebunden ist. Eine ausgebuffte Menüführung ist dann natürlich Ehrensache, die Telefonhotline soll ja nicht allzuoft in Anspruch genommen werden müssen :-)


Soweit geplant wurde die Schaltung und das Layout in EAGLE erstellt um die Abmessungen für das notwendigen Gehäuse ermitteln zu können. Da ich die Freeware Version von EAGLE verwende, darf die Platine nicht breiter als 100 mm sein, grenzwertig bei einer Breite von 25 mm je OLED Anzeige. Das hat aber gerade so noch hingehauen, die Pins der OLEDs sitzen innerhalb dieses Rahmens, die Platine selbst ist etwas größer.

Die Schaltung ist recht unspektakulär, ein Arduino, vier Displays, vier Temperatursensoren und ein Touchsensor. Die Datenleitungen der vier Temperatursensoren habe ich mit jeweils einem PullUp Widerstand versehen, die internen PullUps des Arduino hätten aber wahrscheinlich ebenfalls ausgereicht.

Temperaturanzeige 4-fach          (Click auf das Bild für größere Darstellung)

Das Board dazu ist einseitig entflochten, es müssen sechs Drahtbrücken anstelle der blauen Leiterbahnen eingesetzt werden.

Temperaturanzeige 4-fach          (Click auf das Bild für größere Darstellung)

Das Ergebnis in Natura, hier noch mit Dummywerten in der Anzeige:

Temperaturanzeige mit Dummywerten

Die Temperatursensoren werden über die links unterhalb des ersten OLED sichtbaren Steckkontakte angeschlossen und nach unten aus dem Gehäuse geführt.

Die mir zur Verfügung stehenden Stecksockel bzw. DIP Streifen sind eigentlich viel zu hoch, ich muss unbedingt mal nach einer flacher bauenden Alternative suchen.
Damit die OLEDs sicher an die Unterseite des Gehäusesdeckels angedrückt werden, lege ich einen Streifen Depron in passender Dicke unter die Displays.

Abstand...

Die Stromversorgung wird auch im harten Dauereinsatz mittels USB Netzteil erfolgen, das hat sich bei den Wortuhren bewährt. Im hier gegebenen Fall ist allerdings ein abgewinkelter USB Stecker notwendig, da das Gehäuse sonst unnötig groß hätte werden müssen. Die USB-Leitung wird nach links aus dem Gehäuse heraus geführt.

Stromversorgung


Mit den jetzt gegebenen Maßen der Platine wird das Gehäuse in Designspark mechanical entworfen.

Gehäuseoberteil

Gehäuseunterteil

Die beiden Gehäuseteile werden, wie nachfolgend gezeigt, zusammen gesteckt.

Gehäuse exploded

Nach ca. neun Stunden hat der kleine Ender-2 seinen Job erledigt.

Gehäuse

Die beiden Teile passen sauber ineinander, lediglich die Ausschnitte für die Displays mussten etwas nachgearbeitet werden, damit auch die untersten Zeilen komplett sichtbar sind. Die vier Eckpfosten fixieren zusammen mit zwei Kanten im Oberteil des Gehäuses die Platine im passenden Abstand zur Gehäuseoberseite.

Das Gehäuse hat rechts eine fühlbare Markierung der Stelle an der der Touchsensor im Innern liegt.

Die Designfiles im Format Designspark mechanical V6 und STL für den 3D-Drucker stelle ich zur Verfügung.


Und jetzt die Hauptsache des ganzen Projekts, die Firmware für den Arduino. Wichtige Hinweise zu Voraussetzungen und der Bedienung sind im Sourcecode zu finden.

Zur gefälligen Kenntnisnahme hier die wesentlichen Bedienschritte:

Die Bedienung erfolgt über einen einzelnen Sensor des Typs TTP223, der innen an der rechten Gehäuseseite angebracht ist.

(1) Um die Displays vor frühem wear out zu schützen (aktive Pixel von OLEDs werden über die Zeit dunkler), werden sie - die Displays - nach einer Minute abgeschaltet.

Beim ersten Tastendruck werden alle Displays wieder eingeschaltet um die Temperaturen abzulesen.
Jede Anzeige zeigt jetzt den Namen des Sensors sowie die aktuelle Temperatur in großer Schrift, darunter in kleiner Schrift das jeweilige Minimum und Maximum seit dem letzten Rücksetzen (oder Spannungsausfall).

Ohne weitere Interaktion geht die Anzeige aus jedem Zustand nach der vorgesehenen Zeit wieder AUS (1).

(2) Wird innerhalb der aktiven Zeit die Taste ein weiteres Mal KURZ gedrückt, wird die erste Anzeige invers, die anderen drei Anzeigen normal eingestellt. Die jeweils INVERSE Anzeige ist die AKTIVE Anzeige.
Bei jedem weiteren KURZEN Tastendruck wandert die AKTIVE Anzeige eins weiter, immer reihum.
Wird die Taste länger als 1,5 Sekunden festgehalten (LANGER Druck) wenn eine der Anzeigen im AKTIVEN Modus ist, wird diese AKTIVE Anzeige in den LÖSCHMODUS geschaltet.
Im LÖSCHMODUS wird abgefragt, ob wirklich Min und Max dieser Anzeige gelöscht werden soll.
Mit KURZEM Druck wird Nein/Ja umgeschaltet, immer wechselnd, mit LANGEM Druck die momentane Selektion ausgewählt.
Ist momentan "Nein" aktiv, wird der Löschvorgang abgebrochen, die komplette Anzeige geht wieder in den Status (2), jetzt kann mit KURZEM Druck wieder die aktive Anzeige ausgewählt werden.
Ist momentan "Ja" aktiv, werden mit einem LANGEN Druck Min und Max dieser AKTIVEN Anzeige auf die momentane Temperatur gesetzt. Anschließend geht es bei (2) weiter.

Wird die Taste länger als 5 Sekunden gedrückt, wird die VersionInfo (Version und Build Datum) ausgegeben.

nota bene

  • KURZ bedeutet kürzer als 300 Millisekunden (kurz antippen)
  • LANG bedeutet länger als 1,5 Sekunden (im Geiste bis 3 Zählen)


Im harten Dauereinsatz wurden alte Hüte in Sachen minimale Außentemperaturen ad absurdum geführt. Der Minimumspeicher der Außentemperatur zeigt eines Morgens satte -2025 °C an...

Als Hausnummer für den absoluten Nullpunkt kennt man -273 °Celsius. Eine kurze Recherche bestätigt, dass das absolute Temperaturminimum in unserem Universum bei -273,15 °Celsius liegt, der angezeigte Wert also noch nicht mal als Messfehler durchgeht.

Um solche Ausreißer zukünftig zu ignorieren um die Temperaturstatistik nicht zu versauen, wird eine Schranke implementiert, die zu große Abweichungen gegenüber dem vorigen Messwert ausblendet, bevor die Minima und Maxima der Temperaturen gespeichert werden. Die Korrektur ist in der Firmware Version V1.51 implementiert.

... und in der aktualisierten Firmware Version V1.52 werden dann jetzt auch die Minima und Maxima korrekt angezeigt und gespeichert :)

 


Beim Aufruf dieser Funktion werden Daten an Google in USA übermittelt. Neben Ihrer IP-Adresse wird auch die URL der besuchten Seite übertragen.
Besucherzaehler

Besucher seit
25.11.2000