Bild 0 3 IKEA-Bilderrahmen mit verschiedenen Anzeigen
(Anklicken zum Vergrößern)
|
Bild 1 LED-Thermometer im IKEA-Bilderrahmen
(Anklicken zum Vergrößern)
|
Bild 2 Detail-Ansicht
(Anklicken zum Vergrößern)
|
Eine Anmerkung vorweg:
Dies ist kein Projekt für ioBroker-/Arduino-Anfänger.
Es sollten Grundkenntnisse im Erstellen von ioBroker-Javascript,
sowie Löterfahrung und Kenntnisse zum Flashen von NodeMCU mittels der Arduino-IDE vorhanden sein.
Ein 3D-Drucker zum Erstellen des Gehäuses ist ebenfalls hilfreich.
|
Hier möchte ich mein ioBroker-LED-Thermometer vorstellen, welches seine Daten via MQTT aus ioBroker bezieht.
Es können 2 Temperaturen (Innen-/Außentemp) mittels farbigen LEDs (Typ WS2812) dargestellt werden.
Der Anzeigebereich reicht von -15°C bis + 45°C
Die Innentemperatur wird immer in gelber Farbe dargestellt, während die Farbe der Außentemperatur variiert:
je kälter die Temperatur, desto "kühler" die LED-Farbe, d.h. Temperaturen > 20°C = Rottöne, Temperaturen < 0°C = Violettöne:
- -15°C bis -6°C dunkelviolett
- -5°C bis -1°C violett
- 0°C bis +5°C weiß
- +6°C bis +10°C türkis
- +11°C bis +15°C dunkelgrün
- +16°C bis +19°C grün
- +20°C bis +25°C orange
- +26°C bis +35°C rot
- +36°C bis +45°C violett
Zur besseren Übersicht, bzw. Skaleneinteilung leuchten in 5°C-Schritten LEDs schwach blau (s. Bild 2).
Die Skala wird, abhängig vom Umgebungslicht, mittels eines LDR hinterleuchtet..
Mechanischer Aufbau:
Der WS2812 LED-Stripe wird in ein mittels 3D-Drucker erstelltes Gehäuse eingeklebt.
Damit einzelne LEDs nicht in den Bereich von Nachbar-LEDs strahlen, wurde eine Maske erstellt,
welche das Licht der einzelnen LEDs nur nach oben durchläßt.
Ich hatte nur weißs Filament zum Druck zur Verfügung, welches die einzelnen LEDs nicht genug abgeschirmt hat,
deshalb wurde die "Maske" im Nachhinein noch mit schwarzem Sprühlack geschwärzt (s. Bild 3).
Erschwerend kam hinzu, daß die Druckfläche meines Druckers auf 20x20 cm begrenzt ist, das Thermometer aber ca. 50 cm lang wird
So musste ich das Gehäuse zum Drucken in 3 Teile von jeweils ca. 17cm Länge "zerlegen".
Damit diese 3 Teile später wieder nahtlos zusammengefügt werden können, habe ich an den Seiten Laschen vorgesehen,
in die jeweils ein Alu-Streifen (10x2 mm) mit ca. 40cm Länge eingepresst/eingeklebt wird.
|
Bild 3 Thermometer-Träger
(Anklicken zum Vergrößern)
|
Bild 4 Druckeinstellungen ( Slicer: Cura )
(Anklicken zum Vergrößern)
|
Bild 5 Thermometer-Traeger zusammengesetzt
(Anklicken zum Vergrößern)
|
Beim Drucken ist zu beachten, daß Support, bzw. Stützstruktur zu verwenden ist. Ich habe mit einer Auflösung von 0,3 mm gedruckt (s. Bild 4).
Für die Elektronik habe ich ein eigenes Gehäuse verwendet, welches einfach auf die Rükseite des Thermometers geklebt wird.
Anbei die 3D-Druckdateien: Thermometer-Druckdateien.zip
Die Skala habe ich mit CorelDraw entworfen und auf normalem (nicht allzu dickem) Fotopapier ausgedruckt.
Auch hier musste ich die Skala "halbieren", da sie sonst nicht auf eine DIN A4-Seite gepasst hätte.
Nach dem Ausdruck habe ich die beiden Skalenstreifen entspr. zurechtgeschnitten und mit transparentem Klebeband zusammengefügt.
Diese Papierskala wird einfach auf das Thermometer-Gehäuse aufgeklebt.
Anbei eine Skalen-Vorlage als PDF-Datei: BigThermometer-Skala.pdf
Für die Elektronik habe ich ein eigenes Gehäuse verwendet, welches einfach auf die Rükseite des Thermometers geklebt wird.
Elektronik und Software:
Angesteuert wird das Thermometer über den MQTT-Adapter in ioBoker, welcher als Server/Broker konfiguriert ist
Die beiden Temperaturwerte werden über ein JS erfasst, welches 2 Datenpunkte generiert ( javascript.0.BigTemp.1 und javascript.0.BigTemp.2) .
Ändert sich entweder die Außen-, oder Innentemperatur, wird der neue Wert gerundet und in den entspr. Datenpunkt geschrieben, anschl. via MQTT/WLAN an die NodeMCU gesendet.
Die NodeMCU läßt dann die entspr. LED farbig aufleuchten. Die Innentemperatur wird immer gelb dargestellt, während die Farbe der Außentemperatur abhängig von der Temperatur ist.
Heiße Außentemperaturen werden in Rottönen und kalte Außentemperaturen in Violettönen angezeigt (s. Bild2).
Das entspr. Java-Script kann hier heruntergeladen werden: BigTemp.js
Natürlich müssen die beiden Konstanten aussentemp/innentemp noch an die eigenen Sensoren angepasst werden!
Die Elektronik rund um die NodeMCU beschränkt sich auf wenige Bauteile:
Zum Einen natürlich der WS2812 RGB Led-Stripe, welcher insgesamt 61 LEDs enthält und über einen 470Ω Widerstand von PIN D6 angesteuert wird.
Zur Spannungsversorgung dient ein 12V Steckernetzteil, aus dem insgesamt 3 Spannungen generiert werden:
- 11,3 V für die analoge PWM-Schaltung zur Helligkeitssteuerung der Skalen-Hintergrundbeleuchtung (s. Schaltplan NE 555 LED-Dimmer
- 9 V zur Spannungsversorgung der NodeMCU
- 5 V zur Spannungsversorgung des RGB LED-Stripes
Ich habe noch einen von außen erreichbaren Micro-Taster vorgesehen, mit dem die NodeMCU resetted werden kann, sollte sie sich mal aufhängen.
Für die helligkeitsgesteuerte Hintergrundbeleuchtung habe ich mich für eine analoge Lösung mittels PWM-Steuerung über einen NE555 Timer-Baustein entschieden.
Dieser steuert über einen LDR (Photowiderstand) einen kaltweißen 12V LED-Stripe an, d.h. je heller das Umgebungslicht, desto heller die Hintergrundbeleuchtung (s. Schaltplan NE 555 LED-Dimmer).
Der "Umweg" über die analoge Schaltung war bei mir notwendig, da Flackereffekte aufgetreten sind, wenn ich versucht habe, einen PWM-PIN der NodeMCU dafür zu nutzen.
Ist eine Helligkeitssteuerung nicht notwendig/gewünscht, kann man diesen Teil auch kpl. weglassen und
den 12V LED-Stripe direkt an die 12V Spannungsversorgung anschließen (bzw. 11,3V wenn man den Spannungsverlust an der Schutzdiode einbezieht).
Arduino-Sketch: Big_Thermometer.ino
Ich bin ein Freund von statischen IP-Adressen von Geräten, die bei mir permanent im (W)LAN hängen,
deshalb müssen im Sketch alle Parameter, die das eigene Netzwerk betreffen, manuell angepasst werden!
Im Sketch sind entspr. Kommentare dazu eingefügt.
Zum Sketch gibt es ansonaten nicht viel zu sagen:
Die am Anfang eingebundenen Libraries:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoOTA.h> // fuer Flashen ueber WLAN ( OTA = Over The Air)
#include <FastLED.h>
müssen manuell aus dem Internet heruntergeladen und in die Arduino-IDE eingebunden werden.
Nach dem Booten der NodeMCU leuchten zunächst alle LEDs türkisfarben, quasi als Betriebsanzeige.
Solange noch keine WLAN-Verbindung steht, leuchten die LEDs mit einem Regenbogeneffekt.
Ist das WLAN verbunden, leuchten alle LEDs grün, bis die MQTT-Verbindung hergestellt wurde.
Anschl. werden die Temperaturwerte empfangen und die entspr. LEDs leuchten in der entspr. Farbe.
Im Sketch wurde noch eine sog. OTA-Funktion (Over the air) implementiert, die es ermöglicht,
die NodeMCU nach dem erstmaligen Flashen über USB ggf. via WLAN neu zu programmieren.
Das hat den Vorteil, falls das Thermometer an unzugänglicher Stelle montiert ist, nicht ausgebaut und zum PC verbracht werden muss.
Bild 6 Thermometer bei Nacht
| | |