Elektronik_Header_3Lüftersteuerung mit ESP-01

 

Mini-Wecker

Im Zuge der Entwicklung des Holz-Weckers ist mir irgendwann die Idee durch den Kopf geschossen, so eine Wortuhr mĂŒsste doch auch noch wesentlich kleiner gebaut werden können. Und nachdem mit dem Holz-Wecker der Schritt weg von der Verwendung von LED-Stripes hin zur eigenen Platine mit aufgelöteten LED-Pixeln bereits getan war, habe ich mal geschaut, was so an kleineren, seriell ansteuerbaren RGB-LEDs auf dem Markt angeboten wird.

Relativ schnell fand ich Typen in der GrĂ¶ĂŸe 2427, also 2,4 x 2,7 mm groß, kurz darauf auch quadratische Versionen in 2020, also 2 x 2 mm groß.

Einige Überlegungen und Rechnungen spĂ€ter habe ich die Front der gewĂŒnschten Wortuhr mit 75 x 75 mm festgelegt und mit der Platzierung der LEDs in der GrĂ¶ĂŸe 2020 und sonstigen Bauelemente begonnen. Das Schaltbild konnte ich fast 1:1 vom Holz-Wecker ĂŒbernehmen, lediglich die dort gefundenen Auslassungen und Optimierungen wurden eingebaut.

Hier sind zu nennen der Treibertransistor fĂŒr den Piezo-Piepser, der ja mit 5 V betrieben wird und mit der vom ESP8266 gelieferten Spannung von 3,3 V nur viel zu leise vor sich hin piept, sowie sicherheitshalber eine Pegelwandlerstufe zwischen ESP und der ersten LED. Hier dasselbe Problem, der ESP liefert 3,3 V, die LEDs werden aber mit 5 V betrieben und erwarten fĂŒr eine sichere Ansteuerung TTL-Pegel. Es soll aber nicht unerwĂ€hnt bleiben, dass die Ansteuerung der LEDs in allen meinen Wort-Uhren bisher ohne diese Pegelwandlerstufe vollkommen problemlos funktioniert. Die minimale Eingangsspannung der LEDs ist demnach ESP-geeignet.


FĂŒr die Erstellung des Layout fĂŒr die LEDs habe ich wieder ein Excel-Sheet erstellt, das mir die notwendigen Koordinaten auswirft.

Mini-Wecker LED Koordinaten

FĂŒr das Lichtgitter gibt es ebenfalls eine Tabelle.

Mini-Wecker Lichtgitter Koordinaten

Die Platine habe ich in EasyEDA erstellt und dann auf direktem Weg bei  JLCPCB bestellt. Auch diesmal ging das Ganze vollkommen problemfrei, qualitativ hochwertig und schnell ĂŒber die BĂŒhne, nach 2 Wochen lagen die Platinen im Briefkasten.

Der in den beiden Excel-Sheets Orange markierte Bereich kann ĂŒbrigens in ein weiteres Excel-Sheet kopiert werden, welches dann automatisch die notwendige Definition der Anordnung der LEDs fĂŒr “Layout.h” generiert.


Damit die LEDs leichter aufgelötet werden können, habe ich sie um 45° gedreht platziert. Dadurch kommt man besser an die LötanschlĂŒsse heran, zusĂ€tzlich ergibt sich ein aufgerĂ€umteres Leiterbild, was aber ein eher psychologischer Aspekt ist, denn die Leiterbahnen sind unter der aufgebrachten Farbschicht kaum noch erkennbar.

Die Sensortasten sind alle an die oberen Kante gewandert, die Bedienung von Up und Down auf der Seite hat sich als ungĂŒnstig erwiesen, der Wecker wird dabei nur in der Gegend herum geschoben. Da bei einem aktiven Weck-Ereignis (der Wecker piept) alle Tasten ein Abschalten des Wecksignals bewirken, ist das die naheliegendste Positionierung der Tasten. Es ist also nicht zu befĂŒrchten, dass man morgens, im Halbkoma auf der Suche nach der Taste zum Abschalten des Alarms, alle Einstellungen des Weckers ĂŒber den Haufen wirft.

Auf der Vorderseite ist ansonsten nur noch der LDR fĂŒr die automatische Helligkeitsanpassung platziert.

Mini-Wecker Platine - Front

Auf der RĂŒckseite der Platine ist schon mehr los. Im oberen Bereich sitzt der Wemos D1 mini als Hirn des Weckers. Links neben dem Wemos kann der Piezo-Piepser in SMD -AusfĂŒhrung eingebaut werden, der Einbauplatz fĂŒr dessen Schaltstufe ist ebenfalls zu sehen.

Rechts oben in der Ecke kann man den Einbauplatz des Pegelwandler-MOSFET fĂŒr die LEDs sehen, ansonsten ist noch der Anschluss rechts unten fĂŒr einen 2200 ”F Blockkondensator erwĂ€hnenswert. Der Kondensator ist ein Typ mit beiden AnschlĂŒssen auf einer Seite und wird liegend eingelötet und zusĂ€tzlich festgeklebt. Die Anschlussbeine mĂŒssen dafĂŒr passend abgeknickt werden.

Mini-Wecker Platine - Back

Hier noch eine GegenĂŒberstellung der beiden Wecker-Varianten.

Mini-Wecker und Holz-Wecker


Der Einbau der LEDs war erwartungsgemĂ€ĂŸ kein Kinderspiel. Die LEDs haben keine Beinchen seitlich am GehĂ€use, wie das bei den 5050er und den 2427er Typen der Fall ist, die Anschlusspads sitzen komplett auf der Unterseite des GehĂ€uses.

GrĂ¶ĂŸenvergleich RGB-LEDs in 5050, 2427, 2020

Das, zusammen mit der Winzigkeit der LEDs, erhöht den Spaßfaktor beim Anlöten in keinster Weise. So hat sich dann auch ĂŒber die nĂ€chsten Tage der eine oder andere Lötfehler eingeschlichen, und das, obwohl ich in weiser Voraussicht einen Taster in die Plusleitung vom Netzteil eingebaut habe, um direkt nach dem Einlöten einer jeden LED einen Funktionstest durchzufĂŒhren.

GeĂ€ußert hat sich der Fehler in einem sporadischen Farbwechsel im mittleren und unteren Bereich der Anzeige, nachdem die Anzeige lĂ€ngere Zeit gelaufen ist. Im Prinzip also ein WĂ€rmefehler, den ich durch Nachlöten der in Frage kommenden LEDs beheben konnte.

Hier die fertig bestĂŒckte Platine des Mini-Weckers. Es ist 22 Minuten nach 4 Uhr.

Mini-Wecker fertig bestĂŒckt


Das Lichtgitter ist unspektakulÀr, mit 6 mm genauso dick wie das des Holz-Weckers, nur, geschuldet den kleineren Abmessungen, um Einiges filigraner.

Mini-Wecker Lichtgitter


FĂŒr die Front musste ich mir noch etwas einfallen lassen, denn die Buchstaben dĂŒrfen nur noch ca. 3,5 mm hoch sein, die StrichstĂ€rke fĂ€llt entsprechend gering aus.

Zum GlĂŒck hatte Andreas schon wieder eine gute Idee. Modulor bietet eine 3 mm dicke Acrylglas-Platte mit rĂŒckseitiger Verspiegelung an. Ein Test an einem freundlicher Weise von Modulor zur VerfĂŒgung gestellten Handmuster bewies, damit kann die Front in der notwendigen Auflösung gefrĂ€st werden, zudem ist die Spiegelschicht lichtdicht - Volltreffer.

Leider fĂ€llt das Licht der LEDs nicht ausschließlich geradeaus durch die Acryl-Schicht hindurch, sondern wird auch in die benachbarten LichtschĂ€chte des Lichtgitters gespiegelt, so dass nicht nur die beleuchteten Buchstaben, sondern auch deren Nachbarn deutlich erhellt werden.

Durch AbfrÀsen der nicht verspiegelten Seite der Acryl-Platte auf ca. 0,8 mm StÀrke konnte dieser Effekt soweit vermindert werden, dass die Streuung nicht mehr stört. Eine Spiegelung ist aufgrund der durch die FrÀserspuren nicht mehr glatten Oberseite der Platte ohnehin nicht mehr zu erwarten.

Die hier abgebildete Front ist das Handmuster

Acryl-Front Handmuster

Acryl-Front Handmuster

Im linken Teil der Front sieht man das ebenfalls in dieses Handmuster gefrĂ€ste, um 90° gedrehte Buchstabenbild fĂŒr den Holz-Wecker.

Unten sind die erwĂ€hnten Probleme mit der kalten Lötstelle zu sehen. Hier sieht man noch ein leichtes Übersprechen zwischen beleuchteten und benachbarten, dunklen Buchstaben.

Acryl-Front Handmuster

Liegt das vorgesehene Modulor MicroWood in Ahorn ĂŒber der dĂŒnn gefrĂ€sten Acryl-Platte, ist vom Übersprechen auf benachbarte Buchstaben nichts mehr zu sehen.

Acry-Front mit MicroWood Ahorn

Der Hof um die Buchstaben und deren UnschÀrfe liegt teilweise an der gewölbten Form des MicroWood, ich habe das auf die Schnelle nicht glatt aufgelegt bekommen, sorry ;-)


Die fast endgĂŒltige Front, noch ohne dĂŒnn gefrĂ€st zu sein.

komplette Front

“Fast” bedeutet konkret, die Buchstaben sind zu dick gefrĂ€st, das Bild der Glocke gefĂ€llt mir nicht, das Fenster fĂŒr den LDR ist zweimal vorhanden (ja, ich habe vergessen, dass die Front gespiegelt auf der FrĂ€se bearbeitet wird ;)

Ich spare mir deshalb die Bearbeitung der Oberseite um die Scheibe dĂŒnner zu bekommen, sie wird ohnehin nicht zum Einsatz kommen.


Ok, einen kleinen Wecker kann wahrscheinlich jeder, auch wenn’s schwer fĂ€llt...

Also habe ich mir noch etwas Besonderes in den Kopf gesetzt. Der Weck-Sound wird beim Mini-Wecker nicht mehr mit einem Piezo-Piepser erzeugt, sondern alternativ wird eine MP3-Datei abgespielt. Hierzu verwende ich einen IÂČS-VerstĂ€rker, den Adafruit MAX98357 I2S VerstĂ€rker, dessen Ansteuerung durch den ESP8266 ĂŒber die von Earle F. Philhower, III zur VerfĂŒgung gestellte Library ohne große Probleme umgesetzt werden kann.

Der dort beschriebene Ansatz fĂŒr ein Minimal-Interface zwischen ESP8266 und Schallwandler, die Umwandlung der MP3-Datei direkt ĂŒber einen Software DeltaSigma -Wandler im ESP und die VerstĂ€rkung dieses Signals ĂŒber einen einzelnen FET oder Transistor, hat zwar prinzipiell funktioniert, der Hörgenuss bleibt dabei aber irgendwie auf der Strecke und der Gewinn gegenĂŒber dem Piezo-Schallwandler ist nur marginal. Konkret ist beim Abspielen der MP3 Datei permanent ein sehr störendes Rauschen und Knistern zu hören. Das lassen wir also.

Das oben erwĂ€hnte “ohne große Probleme” bezieht sich ĂŒbrigens nur auf den prinzipiellen Vorgang der Umwandlung von MP3 in Schall mittels eines ESP8266, das hat Earl ja in seinen Beispielen bereits fertig ausprogrammiert zur VerfĂŒgung gestellt.

Beim Einbau der Ansteuerung des IÂČS-VerstĂ€rkers in den QlockWiFive Code haben sich dann aber doch ein paar Probleme ergeben, auf die ich hier nĂ€her eingehen will.

Explizit geht es um Speicher, genauer um genĂŒgend freien Speicher im RAM. Im Uhren-Code werden die HTML-Seiten der GUI (Graphical User Interface, die BedienoberflĂ€che im WEB-Browser) dynamisch aufgebaut und belegen dadurch große Bereiche des RAM/Heap, wovon insgesamt ca. 80 kB im ESP zur VerfĂŒgung stehen.

Die MP3-Wandlung benötigt ihrerseits Einiges an Speicher, verteilt auf eine Reihe von Puffern, die reihum gefĂŒllt und geleert werden.

Das Problem hierbei ist, die Texte fĂŒr die HTML-Seiten werden gleich beim Programmstart im RAM angelegt und verbleiben dort, auch wenn die GUI gar nicht aufgerufen wird. In Folge kann der Programmteil des MP3-Decoders seine Puffer nicht allokieren, es wird keine Musik ausgegeben.

Das Problem der Blockierung von RAM fĂŒr statische Texte ist ein Bekanntes, die Erfinder von Arduino haben also bereits Abhilfe in Form des F(..) Makros geschaffen. Mit Hilfe dieser Konstruktion bekommt der Compiler gesagt, dass der betroffene Text nicht im RAM, sondern ausschließlich im Flash abgelegt und zur Laufzeit auch von dort geholt werden soll.

Hier zur Verdeutlichung der Code fĂŒr die ĂŒbersichtliche WEB-Seite “Error 404 - File not found”. Anstelle der gewohnten Definition

    // Page 404.
    void handleNotFound()
    {
     esp8266WebServer.send(404, "text/plain", "404 - File Not Found.");
    }

verwenden wir jetzt

    // Page 404.
    void handleNotFound()
    {
     esp8266WebServer.send(404, F("text/plain"), F("404 - File Not Found."));
    }

und schaufeln dadurch 30 Byte Zeichen plus 2 Byte Zeichenketten-Abschluss im RAM frei.

Im Code finden sich zudem Konstruktionen, bei denen der Text dynamisch zusammengesetzt wird. Im nachfolgenden Beispiel wird der Seitentitel erstellt.

    String message = F("<!doctype html>");
    message += F("<html>");
    message += F("<head>");
    message += F("<title>") + String(PRODUCT_NAME) + F(" Settings</title>");
    message += ....

In der 4. Zeile wird der Titel aus dem statischen Text “<title>”, dem in ein String-Objekt gewandelten PRODUCT_NAME und dem Abschluss " Settings</title>" zusammengesetzt.

Der +-Operator fĂŒr die Concatenation (Aneinanderreihung, Verkettung) eines String-Objekts mit einem nachfolgenden char-Array , das per PROGMEM Anweisung aus dem Flash zu holen ist, ist definiert, der letzte Teil der Zeile funktioniert also problemlos.

Der +-Operator fĂŒr die Concatenation eines im PROGMEM liegenden char-Array mit einem nachfolgenden String-Objekt hingegen ist nicht definiert, der Compiler meldet hier Fehler und bricht ab.

Das Problem lÀsst sich aber mittels Casting umgehen:

    String message = F("<!doctype html>");
    message += F("<html>");
    message += F("<head>");
    message += (const char*)F("<title>") + String(PRODUCT_NAME) + F(" Settings</title>");
    message += ....

Nachdem alle HTML-Texte dergestalt ĂŒberarbeitet wurden, funktioniert sowohl das Compilieren als auch der Betrieb der Uhr, allerdings wird die MP3-Datei trotzdem nicht ausgegeben.

Weitere Nachforschungen ergeben, dass der Transfer der HTML-Texte ins Flash lĂ€ngst nicht genug dynamischen Speicher freischaufelt. Die unzĂ€hligen Debug-Ausgaben in Klartext, teilweise gedoppelt durch zusĂ€tzliche Ausgaben an den Syslog-Server, mĂŒssen sich ebenfalls die Ablage im Flash gefallen lassen, was aber immer noch nicht ausreicht. Zwar spielt inzwischen die Musik beim Wecken, aber nach wenigen Sekunden ist wieder Schluss. Exception wegen Speicherengpass.

Letzte Abhilfe fand ich dann, indem ich die Ansammlung von verschiedenen Layouts drastisch auf das eine Layout reduziert habe, das im gegebenen Fall Verwendung findet. Das ist insofern kein Problem, da der Typ der Uhr ohnehin in der Configuration.h mit einem Define festgelegt wird. Das Define verwende ich in Layout.h zur Selektion des - in einzelnen FĂ€llen der beiden - möglichen Layouts. Diese Maßnahme schafft dann, zusammen mit den Text-Überarbeitungen, den notwendigen Platz im RAM fĂŒr die Puffer der Audio Bibliothek.

HĂ€tte diese Idee nicht gefruchtet, wĂ€re noch die Weichei-Lösung in Frage gekommen, bei der sowohl Speicherung der MP3-Dateien als auch deren Dekodierung und VerstĂ€rkung in einem eigenen MP3-Modul mit SD-Karten-Slot erfolgt wĂ€re. Die Steuerung solcher Module erfolgt ĂŒber eine serielle Schnittstelle, was problemlos in den Uhren-Code einzubauen gewesen wĂ€re.

Der Charme der von mir gewĂ€hlten Lösung ist, dass mit dem Wemos D1 mini pro sowohl der notwendigen Speicher fĂŒr die MP3-Datei als auch die Rechenleistung fĂŒr die MP3 -Dekodierung im ESP8266 zur VerfĂŒgung stehen. Lediglich der VerstĂ€rker muss zusĂ€tzlich vorgesehen werden. Der Wemos D1 sollte unbedingt die “pro” Version sein, diese hat 16 MByte Flash und stellt somit ca. 14 MByte Speicher fĂŒr die MP3-Datei zur VerfĂŒgung.

Hinweis
Die Audio Bibliothek von Earle stellt beide Stereo-KanĂ€le zur VerfĂŒgung, verwendet man also einen Stereo tauglichen IÂČS VerstĂ€rker, kann man sich auch in Stereo wecken lassen. Genauso ist es möglich, zwei der oben bezeichneten IÂČS-VerstĂ€rkermodule zu verwenden, denn die kann man von Mono-Wiedergabe auf Linken/Rechten Kanal jumpern.


Als weiteres Goodie habe ich mir in den Kopf gesetzt, den Wecker ĂŒber einen Qi-Ladeadapter mit Strom zu versorgen. Diese Qi-Charger dienen dem kabellosen Laden von Handys. Vereinfacht ausgedrĂŒckt wird das Handy einfach auf den Adapter aufgelegt und eine im Handy eingebaute Spule empfĂ€ngt den Strom, eine mehr oder minder komplizierte Schaltung bereitet ihn auf und der Handyakku wird geladen.

Der mir zusagende Qi-Ladeadapter kommt recht edel daher. Er misst 9 x 9 cm im Quadrat, ist ca. 5 mm dick, die Oberseite besteht aus dunklem Glas.

Qi Ladeadapter

Qi Ladeadapter

Der passende - getrennt gekaufte - Qi-EmpfÀnger, hier angeschlossen an eine fertig aufgebaute Holz-Wecker Platine.

Qi-EmpfÀnger

Qi-EmpfÀnger

Derselbe Adapter, diesmal bereits ohne UmhĂŒllung, an das Testboard angesteckt.

Testaufbau Wort-Uhr Testboard mit Qi-Charger

Man sieht sehr schön die erwÀhnte Spule und die zugehörige Elektronik.

Das Testboard wird ĂŒber den Qi Ladeadapter drahtlos mit Strom versorgt. Der Qi-EmpfĂ€nger liegt im gefrĂ€sten MDF-Rahmen fĂŒr den Holz-Wecker um zu testen, ob der durch das 3 mm dicke HolzgehĂ€use vergrĂ¶ĂŸerte Luftspalt den Betrieb einschrĂ€nkt. Tut er nicht.

Auch in einem 5 mm dicken PLA-GehÀuse aus dem 3D-Drucker ist der Betrieb, hier testweise mit einer Mini-Wecker-Platine, noch gegeben, hier muss der Qi-EmpfÀnger aber schon ziemlich genau in der Mitte des Ladeadapters positioniert werden, beim 3 mm HolzgehÀuse ist noch ein gewisser Spielraum vorhanden.

Mini-Wecker mit Qi-Versorgung

Ich habe folgerichtig ein weiteres GehĂ€use mit 3 mm dickem Boden entworfen, dessen Konstruktion ich im RSDOC- und STL-Format fĂŒr DesignSpark mechanical und Cura offenlege.

Hinweis
Die STL-Datei des GehÀuses enthÀlt Fehler, die ich nicht beheben konnte, wird aber trotzdem von Cura fehlerfrei gesliced und gedruckt. Konkret wird das GehÀuse nach dem Laden in Cura geschlossen dargestellt, nach dem Slicen sieht man das geplante Ergebnis.


Der magnetische Mini-Schallwandler im Piezo-Piepser-Design, den ich fĂŒr die Tests verwendet habe:

Magnetischer Schallwandler

Magnetischer Schallwandler

Den Wandler habe ich mit einem Streifen Tesa zugeklebt um die schrillen Töne im Hochtonbereich, die er naturgemĂ€ĂŸ sehr gut wiedergeben kann, zu dĂ€mpfen. BĂ€sse erzeugt er dadurch immer noch nicht, aber das Klangbild ist ausgewogener. Und er ist leiser. Das ist zwar alles kein Killkriterium, denn dieser Schallwandler wird im Wecker ohnehin nicht zum Einsatz kommen, aber bei der Programmentwicklung und beim Debuggen muss immer wieder der Weck-Sound angespielt werden, was auf Dauer dann doch nervt. Anfangs habe ich einen kleinen Mini-Lautsprecher aus einem Transistorradio verwendet, aber der kommt dann schon recht laut daher, auch wenn er in einer Schachtel eingesperrt ist.

Es soll erwĂ€hnt werden, dass der IÂČS-VerstĂ€rker zwar eine per Beschaltung fest einstellbare VerstĂ€rkung hat, das aber selbst die leiseste Stufe noch immer recht laut ist.

IÂČS VerstĂ€rker

Der in den Unterlagen erwĂ€hnte Weg, die LautstĂ€rke zu verringern indem die Versorgungsspannung auf 3,3 V gesetzt wird, empfehle ich nicht, dann treten nĂ€mlich Verzerrungen auf, die bei Versorgung mit 5 V nicht vorhanden sind. Grund dafĂŒr könnte natĂŒrlich sein, dass die 3,3 V des Wemos D1 mini nicht stabil genug sind und die Spannung somit zusammenbricht. NĂ€her untersucht habe ich das nicht, in der endgĂŒltigen Version der Wecker-Firmware wird die LautstĂ€rke softwaremĂ€ĂŸig einstellbar sein. Denke ich :-)


Den aus dem PrototypgehÀuse, der nicht fertig gefrÀsten Spiegel-Acryl-Front, dem Qi-Adapter und dem oben vorgestellten Schallwandler liebevoll mit Tesa zusammengeklebten Mini-Wecker habe ich in einem kleinen Video verewigt.

Mini-Wecker Alarm-Video auf Vimeo          (Click auf das Bild fĂŒhrt zu Vimeo)

Der fĂŒr die Tests stark gekĂŒrzte MP3-Sound startet etwa bei Minute 1:01, den langen Vorlauf bitte ich zu entschuldigen.

 


Besucherzaehler

Besucher seit
25.11.2000

>