Gemeinsam Entwerfen, Planen, Bauen – Unsere Sonntagsreihe.
Jeder hat seine ganz eigene Vorstellung, wie die Wortuhr aussehen soll und welche Funktionen diese haben muss. Die Front in Edelstahl, im 3D-Druck hergestellt oder doch lieber in Acrylglas oder edlem Wallnussholz?
Der eine mag die Uhrzeit in englischer Sprache ablesen. Die andere lieber in Deutsch, in der Variante „dreiviertel sieben“. Die Nächste auf „Bärndütsch“ und sicher ausgefallen ist der Wunsch, die Uhrzeit auf Klingonisch anzeigen zu lassen.
All das ist möglich, wenn man sich selbst mit so einem solchen Projekt beschäftigt. Dabei werden die unterschiedlichsten Themen des Fablab und MakerSpace vorgestellt. So wird sicher klassische Holzbearbeitung, Elektronik, Programmierung, Lasercutter und Vektorsoftware eine Rolle spielen. Vielleicht aber auch 3D-Druck und zusätzlich die CNC-Fräse?
Vorkenntnisse sind nicht erforderlich.
Wir erarbeiten uns alle Fähigkeiten Schritt für Schritt und bestellen bei Wunsch auch gemeinsam Material.
Du hast Interesse? Dann melde Dich unter info@makerspace-rheinfelden.ch
Unser Weg zur fertigen Uhr Nov./Dez. 2023
erster Austausch
Wir haben unsere Ideen vorgestellt, ganz viele Fragen geklärt. Thomas (THT) hat uns besucht, uns wertvolle Tipps gegeben und uns seine Uhr von 2016 mitgebracht und vorgeführt. Sie läuft immer noch 😉
Jeder weiss nun, in welcher Sprache/Dialekt er gerne die Zeit angezeigt bekommen möchte – klingonisch ist nicht dabei. Mit dem WordClockGenerator von im-pro.at lässt sich einfach herausfinden, wie gross die Buchstabenmatrix mindestens sein muss, damit alle Worte angezeigt werden können.
Wir haben gezählt und gerechnet: Welche Variante vom IKEA-SANNAHED es wohl bei jedem werden wird, 23/25/35/55 cm; eher 60 LED auf dem Meter oder doch 30 weniger.
Wir werden die unterschiedlichsten Sensoren/Module verbauen: Helligkeitssensor, Temperaturmesser, Zeit per WLAN, Zeit per Funksender, vielleicht wird die ein oder andere Uhr nun auch noch das Wetter anzeigen oder erinnern, dass morgen die Bio-Tonne abgeholt wird.
Ich freue mich, dass wir so unterschiedliche Exemplare bauen wollen und gemeinsam die Zeit gefunden haben, diese Projekte miteinander anzugehen. Es wird gut!
Materialliste
- Grundlage vieler Exemplare wird ein IKEA-Bilderrahmen „SANNAHED“ sein, weil er gut hinzustellen ist und eine entsprechende Tiefe mitbringt. Diesen gibt es in den Grössen 23×23/25×25/35×35 und 50×50 in den Farben weiss, schwarz und holzfarbig.
- Es werden LED-Streifen verwendet, in der Version 30LED pro Meter und in der Version 60LED pro Meter.
- Als Microcontroller setzen wir ein: ESP8266 NodeMCU V3 Module
- Mit dem Modul Real Time Clock (RTC DS3231) soll die Uhrzeit weiterlaufen, auch wenn das Internet mal nicht verfügbar ist. Und die, die erst gar kein WLAN verwenden möchte, empfangen die aktuelle Zeit per DCF 77 Empfangsmodul.
So wurde schon vor dem Internetzeitalter die aktuelle Uhrzeit verbreitet: https://de.wikipedia.org/wiki/DCF77 - Mit einem Fotowiderstand soll die Umgebungshelligkeit gemessen werden und die Helligkeit der Anzeige z.B. Nachts damit entsprechende reduziert werden.
- Um sich etwas Lötarbeit zu ersparen, verbinden wir die einzelnen LED-Streifen per „LED Strip Connector„, bei dem man auf der einen Seite den LED-Streifen und auf der anderen Seite das 3polige Kabel einklemmt.
- Als Basis verwenden wir die umfangreiche Anleitung von Techniccontroller, sowohl die Version 2022 als auch die von 2020.
Der Plan
- jeder erstellt für seine Wunschuhr die Buchstabenmatrix
- Wahl von 30/60LED pro Meter und bestimmt dabei die Grösse der Anzeige.
- Als Basis einen Bilderrahmen oder einen eigenen Rahmen werkeln.
- Frontplatte mit Inkscape designen.
- LEDs auf den Rücken des Bilderrahmens montieren
- Software „Arduino IDE“ installieren und erste Beispiele ausprobieren.
- Microcontroller mit den einzelnen Sensoren testen
- LED-Streifen-Funktionstest
- Nach der Basis-Anleitung die Software herunterladen und alle nötigen Anpassungen vornehmen.
- Nach der Basis-Anleitung alle Komponenten verkabeln und in den Rahmen einbauen.
- Frontplatte anbringen und strahlen.
- Und zwischendrin wohl aus vielen Details lernen, neue Konzepte erstellen, umdenken, improvisieren und gemeinsam Lösungen finden.
Thema ESP8266
Wenn der ESP8266 nicht im Gerätemanager zu finden ist, könnte es am Kabel liegen, einfach mal ein anderes Kabel versuchen. Es gibt Kabel, die nur laden und welche, die auch Daten übertragen können, die zweiteren sind hier wichtig.
Es gibt ein gutes Video das zeigt, wie man den passenden Treiber findet: Passenden Treiber finden: USB Modul wird nicht erkannt? USB ESP8266 Lösung Teil05 – YouTube
Auch wichtig: Der serielle Monitor in der Arduino IDE – Tutorial deutsch – YouTube
Thema Arduino IDE
Sketch? Sketchbook? Sketchbookfolder? Um den Programmcode von Techniccontroller erfolgreich herunterzuladen, zu Öffnen und zu Bearbeiten muss man sich zunächst mit den Begrifflichkeiten vertraut machen und wissen, dass der Ordner, mit dem Programmcode am richtigen Ort und mit dem richtigen Namen gespeichert werden muss. In diesem Video wird erklärt, wo der Ordner zu finden ist und wie man seine Projekte benennen muss: Understanding the Arduino Sketchbook: Opening and Saving Arduino Sketches – YouTube
Ganz klar, am PC/Notebook/Mac mit einer ordentlichen Tastatur und einer Maus kann man richtig arbeiten, alles andere wohl eher eine Notlösung – aber doch wohl auch machbar.
Alle, die kein Notebook mitbringen können und es z.B. auf dem Tablet ausprobieren wollen: Programmieren kann man auch in der Browser-Version, der Free-Plan reicht: https://cloud.arduino.cc/plans
Interessant hier, das Projekt kann sich vom Notebook zuhause per Cloud synchronisieren. Ihr arbeitet im Fablab auf eurem Tablet und könnt nahtlos am heimischen Notebook weitermachen.
Um den ESP8266 (Microcontroller – unser Minicomputer) am Tablet anschliessen zu können, braucht es aber ein spezielles Kabel. Welches und was man vorher prüfen sollte ist super im Video erklärt: https://www.youtube.com/watch?v=OJrCvdgM4N4
NEOPIXEL
Früher musste man zu jeder LED noch einen Widerstand verlötet und mehrere LED einzeln mit einander verbinden. Diese Firma hat dann die LED-Streifen verkauft. Man musste nur noch Strom und Daten anbringen, alles wurde viel einfacher: https://www.adafruit.com/category/168
Die einzelnen LED sind einzeln ansteuerbar, obwohl diese z. B. auf einem 5Meter langem Streifen leben.
Dazu liefert die Firma Treiber, die wir heute eingebunden haben. Ihr seht es im Programmcode, es erscheint immer mal wieder Adafruit.
Die NEOPIXEL gibt es in der Zwischenzeit auch als Matrix, als Ringe und filigrane Ketten… Auch andere Hersteller produzieren die LEDstreifen, die mit diesen Treibern funktionieren.
*** Umbau Code – Trennung von TEXT und LOGIK ***
Oben haben wir nun all unsere Texte und Parameter platziert. Diese werden nun unten verwendet.
Ich habe viele if/else-Codezeilen löschen können und dafür // Erklärungen als Kommentarzeilen hinzugefügt.
Mit dem Code kann man alle Texte am Dateianfang in den Parametern erfassen und muss dann unten nichts mehr ändern, weil es sich alles selbst aus den Parametern heraussucht.
Silhouette Plotter
Für Silhouette Plotter muss man aus dem svg-File ein dxf machen. Dafür nicht benötigte Objekte, wie z.B. LED-Streifen löschen und dann dxf mit speichern unter erstellen. Achtung vorher benötigte Objekte in Pfad umwandeln.
Für Silhouette-Import unter Bearbeiten gem. Bild 1 Einstellungen vornehmen.
*** Ereignistage ***
ein paar von uns hatten ja in der Buchstabenmatrix noch Platz für „geheime“ Botschaften, z.B. Namen, die am Datum des Geburtstags beleuchtet werden sollen.
Ich habe dazu eine Funktion erstellt, die die zum Text passenden Wörter am Tag/Monat waagerecht oder senkrecht aufleuchten lässt. Meldet Euch, dann zeige ich, wohin die Funktion gehört, wie man oben in der Datei die Ereignistage festlegt. und wo die Funktion im loop() aufgerufen werden muss.
Wenn Ihr Ereignistage (Geburtstage, Hochzeitstage, …) anzeigen wollt, dann müsst Ihr diese Zeile in der Hauptdatei „wordclock_esp8266.ino“ einfügen:
Lichtdiffusor
Als Lichtdiffusor eignet sich sehr gut Migros Budget Backpapier:)
Löten
Im Fablab stehen mehre Lötstationen bereit. Für alle die, die das noch nie ausprobiert haben, schaut mal hier ins Video:: https://www.youtube.com/watch?v=CPXZM8r8xFw
Heisskleber
Mit Schrauben lässt sich ein guter Abstandshalter erstellen. Wir haben gelernt, dass man den Kleber VOR dem Aufsetzten des Boards mit Heissleim versehen sollte, statt nachher (auf dem Bild ist es falsch) auf diese Weise hält es gleich noch besser.
*** NTP – aktuelle Uhrzeit stimmt nicht? ***
Bei Euch ist immer halb acht? Keine Sorge, weder die Hard- noch die Software ist wirklich kaputt. Kaputt war der NTP-Server – … na ja, ein winziges Teil davon:
https://status.ntppool.org/incidents/rfd5rb7s8hbx?u=15423cbml6t8
LED-Setzkasten
Die einzelnen LEDs sollen ja nur ihren eigenen Buchstaben beleuchten und kein Licht zur Seite abstrahlen können, also muss eine Art Setzkasten gebaut werden. In der ersten Version haben wir diesen aus 3mm MDF gebaut. Vorteil: günstiges Material, Lichtisolation erfolgreich Nachteil: macht die Uhr schwer
LED-Setzkasten -Version MDF
Mit dem 3mm MDF aus dem Obi: Das Zusammenstecken ist etwas mit Kraftaufwand verbunden, aber machbar. Vielleicht hätten wir burn mit negativen Zahlen testen sollen: Es ist wirklich so dicht, dass das Zusammenstecken ernsthaft Mühe gemacht hat.
-> Nach dem Besprühen mit Chromfarbe werden die Teile unerwartet dicker und lassen sich ab dann nur noch mit dem Gummihammer zusammenstecken. 🙂
-> Danach ist die Oberfläche so eben und so stabil, dass es auch für eine 0.6mm Frontplatte KEIN extra MDF-Untergrund mehr braucht.
Puffer zwischen LED-Band und Setzkasten
Das Band der LEDs ist sehr dünn, aber dennoch dringt dort Licht zum benachbarten LED aus. Auch an den Lötstellen am LED-Band-Ende kann es passieren, dass der LED-Setzkasten nicht eben aufliegt. Es braucht also einen flexiblen Stoff, der sowohl das LED-Band vor dem MDF schützt als auch für Lichtdichtheit sorgt.
Oft wird hierzu Moosgummi verwendet. Je nach Material darf dieser aber nicht in den Lasercutter und von Hand 11×11 Kästchen präzise ausschneiden?
Wir sind mal wieder in der Haushaltwarenabteilung fündig geworden. Bei Schneiden riecht es ein wenig nach Fenchel, wer den Geruch mag, wird hungrig werden.
Wie komme ich auf die Weboberfläche der Uhr?
An diesem Punkt sind wir alle immer mal wieder gestanden:
Wenn die Wortuhr nicht ins WLAN findet, macht sie ein eigenes locales WLAN auf, ihr seht es dann in der Liste der verfügbaren WLAN-Verbindungen. Dort kann man dann sein WunschWLAN auswählen und dessen Passwort eingeben.
Wenn die Wortuhr erfolgreich im WLAN ist, dann könnt ihr diese per IP-Adresse aufrufen.
Die ersten Stellen der IP-Adresse der WortUhr sind fix. Die letzte Stelle ist variable, diese wird beim Starten immer in der Uhr angezeigt.
Allerdings geht das so schnell (2 Sekunden), dass es schwierig sein kann, die Ziffern zu lesen. Also, verlängern wir doch einfach die Anzeigezeit!
In der Hauptdatei (wordclock_esp8266.ino) steht delay(2000); Das bedeutet: Warte 2000 Millisekunden, was nichts anderes als 2 Sekunden sind. Wenn wir aus der Zweitausend eine Zehntausend machen, wartet die Uhr 10 Sekunden.
Dann gibt man im Browser oben in der Adresszeile (nicht in der Suche) die IP-Adresse der Uhr an: 192.168.0.*** dabei muss man die *** durch die bis zu drei Ziffern ersetzten, die in der Uhr angezeigt werden.
*** LUFTFEUCHTIGKEIT in der App anzeigen ***
im Aduino-Verzeichnis, im Projektverzeichnis diese index-Datei mit einem Editor öffnen.
dort den div-container mit dem Nightmode suchen und z.B. oberhalb zwei neue Container hinzufügen (grau markiert), dass es am Ende so in der Datei ausschaut:
<div class="checkbox-container">
<label for="Luftfeuchtigkeit" style="align-self: flex-start">Luftfeuchtigkeit</label>
<div>
<input type="text" id="Luftfeuchtigkeit" name="Luftfeuchtigkeit">
</div>
</div>
<div class="checkbox-container">
<label for="Temperatur" style="align-self: flex-start">Temperatur</label>
<div>
<input type="text" id="Temperatur" name="Temperatur">
</div>
</div>
weiter unten in dieser index-Datei noch diese beiden Zeilen hinzufügen. Sie versorgen unsere neuen Anzeige-Felder mit den Werten, die die Sensoren messen:
document.getElementById("Luftfeuchtigkeit").value = myVar.Luftfeuchtigkeit;
document.getElementById("Temperatur").value = myVar.Temperatur;
in der Hauptdatei: „Wordclock_esp***“ bei der Variable, in der wir den Zeitpunkt der letzten Messung speichern, beim Initialwert 60 Sekunden abziehen, so dass direkt zu Beginn schon das erste Mal die Luftfeuchtigkeit ausgemessen wird:
Für die Werte (Luftfeuchtigkeit und Temperatur) brauchen wir nun noch je eine Variable, in der wir den Wert speichern können.
In der Hauptdatei, z.b. unter dem Wert, in dem wir die Helligkeit speichern diese beiden Variablen hinzufügen:
float Luftfeuchtigkeit = 0;
float Temperatur = 0;
(Zeilennummern können abweichen)
In der Funktion, in der wir die Sensoren auslesen, müssen wir die Ergebnisse nun in die Variablen versorgen. Den Teil durch den neuen Code ersetzten:
// ****************** LUFTFEUCHTIGKEIT ***************/
if(millis() - lastLuftfeuchtigkeitsCheck > PERIOD_LUFTFEUCHTIGKEITSCHECK){
Temperatur = dht22.getTemperature();
Luftfeuchtigkeit = dht22.getHumidity();
if (dht22.getLastError() != dht22.OK) {
Serial.print("last error :");
Serial.println(dht22.getLastError());
}
Serial.print("Luftfeuchtigkeit: ");Serial.print(Luftfeuchtigkeit,1);Serial.print("\t");
Serial.print("Temperatur: ");Serial.println(Temperatur,1);
lastLuftfeuchtigkeitsCheck = millis();
}
Jetzt müssen wir noch diese beiden Variablen auch an den Webdienst weitergeben, dass unsere App die Daten auch erhält:
Hierzu in der Hauptdatei die Funktion „handleDataRequest“ suchen und dort diese Zeilen anhängen:
message += ",";
message += "\"Luftfeuchtigkeit\":\"" + String(Luftfeuchtigkeit) + "\"";
message += ",";
message += "\"Temperatur\":\"" + String(Temperatur) + "\"";
Zum Schluss muss jetzt noch diese index.html auf dem ESP8266 aktualisiert werden und leider nein, das klappt nicht per hochladen, dass müssen wir im Browser hochladen. Das ist der gleiche Weg, wie wir diese Dateien bereits zu Beginn auf den kleinen Webserver auf dem ESP8266 hochgeladen haben:
Die IP-Adresse der Wortuhr im Browser eintragen.
Dann dort die Datei fs.html hinzufügen, aktuell bei mir z.B. : http://192.168.178.128/fs.html
Dort die index-Datei löschen (1) und dann die neue Version der index-Datei auswählen (2) und hochladen (3):