/LixieClock

a simple easy to build lixieclock design

Primary LanguageC++GNU General Public License v3.0GPL-3.0

LixieClock

4_digit_complete_alt

4_digit_on_2

WERKZEUG

  • Lötkolben + Lötzinn
  • Philips-Kopf Schraubendreher
  • Kleine Kabelbilder
  • Heißkleber
  • Glasreiniger
  • Mikro-USB Kabel
  • [OPTINAL] Holzkleber

TEILELISTE

BILD ZEIGT ALTE REVISION

4_digit_parts

MECHANICAL

  • LASERCUT TEILE SVG - ./src/svg oder DXF - ./src/dxf

    • 4x 4x_numbers_2mm_set_300_200_simplified - acrylglas gs 2mm, engrave (blue lines), cut (red lines)
    • 1x 4_digit_combined_set_1 - playwood 4mm, engrave (blue lines), cut (red lines)
    • 1x 4_digit_combined_set_2 - playwood 4mm, engrave (blue lines), cut (red lines)
    • 1x 4_digit_combined_set_3 - playwood 4mm, engrave (blue lines), cut (red lines)
  • 3D DRUCK

    • [OPTINAL] 4x ./src/3d_print/4x_lixie_feet.stl - 0.2mm PLA
  • MISC

    • 16x M4x30 Philips Head Type PH2 - DIN7985
    • 16x M4 Nut - DIN934
    • [OPTINAL] 4x M4 THREAD INSERTS

ELECTRICAL

  • 4x LED_PCB, SEE ./src/pcb, LED SEITE BESTÜCKT
  • 1x ESP8266 D1 Mini
  • 8* 1*3 2.54mm 90° MALE HEADERS
  • 4x 3xJumperwires FEMALE<=>FEMALE

SOFTWARE

  • Arduino IDE

BUILD INSTRUCTIONS

0. PROGRAMMIERUNG BASIS-PROGRAMM

Zum späteren Funktionstest wird hier zuerst der ESP8266 D1 Mini programmiert. Somit kann die vollständige Funktionalität vor dem finalen Zusammenbau überprüft werden.

Hierzu sollte die Arduino IDE installiert und dieses Git-Repository heruntergeladen sein. Unter Linux kann dies wie folgt geschehen:

# ###### LINUX INSTALL ######
$ sudo apt update && sudo apt install -y git xz-utils

# CLONE REPOSITORY
$ cd ~ && git clone https://github.com/RBEGamer/LixieClock ./LixieClock

# INSTALL ARDUINO IDE
# # sudo snap install arduino => SEE NOTE!
$ wget https://downloads.arduino.cc/arduino-1.8.19-linux64.tar.xz
$ tar -xf arduino-1.8.19-linux64.tar.xz
$ cd arduino-1.8.19-linux64 && bash ./install.sh

# ALLOW USB COMMUNICATION
$ sudo usermod -a -G dialout $USER
$ sudo reboot

Nach dem Neustart kann der ESP8266 D1 MINI per USB Kabel mit dem Computer verbunden werden.

Das Demo-Programm der Uhr, welches eine vollständige über NTP Synchronisierte Uhr darstellt, benötigt einige Bibliotheken. Diese könne über den Library-Manager der Arduino IDE installiert werden oder aus diesem Repository kopiert werden. Unter Windows wird der Inhalt des Ordners ./src/required_libs nach BENUTZER_VERZEICHNIS/Dokumente/Arduino/libraries kopiert.

Unter MacOS und Linux befindet sich der Arduino-Ordner direkt im Benutzer-Ordner ~/. Unter Linux muss aufgepasst werden, wie die Arduino IDE installiert wurde. Wurde snap install arduino verwendet, befindet sich der Library-Order im Snap Verzeichnis ~/.snap/arduino/current/library.

# ###### LINUX LIB COPY ######
$ cd ~
$ cp -Rf ./LixieClock/src/required_libs ~/Arduino/libraries

Anschließend kann die Arduino IDE geöffnet werden.

Unter Datei -> Öffnen kann das Programm geöffnet werden, dies befindet sich in diesem Repository unter dem Pfad ./src/lixieclock/lixieclock.ino

Unter den Einstellungen muss danach zuerst der Support für den ESP8266 geladen werden. Hierzu wird unter dem Punkt Zusätzliche Boardverwalter-URLs die folgende Zeile hinzugefügt:

  • https://arduino.esp8266.com/stable/package_esp8266com_index.json

NOTE

Falls ein ESP32 verwendet wird muss diese hinzugefügt werden:

  • https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

Allgemein ist die Software mit dem ESP6266 (nicht ESP6266-01) und dem ESP32 kompatibel.

END NOTE

Nach dem Speichern der Einstellungen muss das Board noch installiert werden. Dazu wird unter Werkzeuge -> Board -> Boardverwalter der ESP8266 installiert. Anschlißend kann das LOLIN (WEMOS) D1 MINI (CLONE) als Board ausgewählt werden.

board_settings

Unter Port wird der Serielle-Port ausgewählt, an welchem sich das Board befindet.

  • Windows COMx
  • MacOS /dev/ttyXXxxxXXxxx
  • Linux /dev/ttyUSBx

Anschließend kann über Sketch -> Hochladen das Programm hochgeladen werden.

NOTE

Im Verzeichnis ./src/lixieclock__base befindet sich ein Demo-Programm, welches nur die einzelne Segmente ansteuert. Dies kann als Basis für eigene Projekte verwendet werden. Mittels der Funktion update_clock_display können alle Segmente der Uhr einzeln verändert werden. Zur Bestimmung der Farbe können die Funktionen Wheel und digit_color verwendet werden.

void update_clock_display(int h, int m, int s, int col, int _bright, bool _disable_leading_zero);
uint32_t Wheel(int WheelPos, int _bright);
uint32_t digit_color(int _val,int _index, bool _banked, int _base_color, int _bright);

1. LED MODULE VORBEREITEN

HINWEIS: Alle Sperrholzteile sind mit deren Namen markiert. Soweit nicht anders angegeben, zeigt diese nach oben.

single_digit_new

Jedes LED Modul besteht aus drei Schichten:

  • 4x jeweils 10x Acryglas Ziffern
  • 4x jeweils 1x Sperrholz Ziffern-Halter
  • 4x jeweils 1x Sperrholz Lightguide

Zuerst wird die Schutzfolien von den einzelnen Ziffern entfernt und ließend mit Glasreiniger entfettet. Ab jetzt dürfen die Ziffern nur noch an den Seiten angefasst werden, denn nach der Montage in der Halterung kommt man nur noch sehr schwer an die inneren Flächen der Ziffern.

Jetzt werden sie einzelnen Ziffern in den Ziffern-Halter eingesetzt. Dabei müssen diese mit der gravierten Seite alle in die gleiche Richtung zeigen. Auch ist die Reihenfolge wichtig, von hinten nach vorne, sind die Ziffern in dieser Reihenfolge einzusetzen:

0 - 9- 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1

single_digit_digits_only

Anschließend werden die Ziffern auf den Lighguide gesetzt.

Dabei muss die gravierte Seite der Ziffern in Richtung der FRONT Markierung zeigen und die Markierungen auf dem Lightguide müssen mit den Ziffern übereinstimmen.

Dieser Prozess, wird für alle vier Ziffern-Blöcke wiederholt.

NOTE

pcb_solder

Sollte bei den vier LED-PCBs die zwei Stiftleisten nicht bestückt sein, muss dies zuerst geschehen. Dazu werden diese in die beiden vorgesehenen 1x3 Pin Bohrungen gesteckt. Diese sind auf der Platine mit H1 und H2 beschriftet. Die lange Seite der Stiftleisten zeigt dabei von der LED Seite weg.

2. Zusammenbau Oberseite

Nachdem alle vier Module vorbereitet wurden, können diese nun mit der oberen Bodenplatte zusammengeschraubt werden. Dabei wird zusätzlich auch die LED_PCB und der PCB Spacer benötigt.

  • 4x PCB Spacer
  • 4x LED_PCB mit Bestückter LED Seite
  • 4x Top-Cover

Für den Zusammenbau wird das TOP_COVER mit der Beschriftung nach oben gelegt und die LED-PCBs jeweils mit den Stiftleisten in die Aussparungen des TOP_COVER gelegt, sodass die Platine flach aufliegt.

WICHTIG Die FRONT Markierung auf dem TOP_COVER und der Pfeil zeigt dabei zur Tischkante!

Diese werden dadurch nicht flach auf dem Tisch liegen, es empfiehlt sich das TOP_COVER dafür auf eine Tasse zu stellen.

led_pcb_placement

Anschließend wird auf jede LED_PCB der Sperrholz PCB_SPACER gelegt, hier ist die Ausrichtung nicht relevant.

Als letztes, wird das im ersten Schritt zusammengebaute Ziffern-Modul auf den PCB_Spacer gesetzt.

Dabei ist die Ziffer 1 die vorderste Ziffer (richtung der FRONT Markierung).

Nach dem Platzieren der vier Ziffern-Module, sollten diese jeweils mit einer der M40x30 Schrauben und M4 Mutter gesichert werden. Hier reicht es diese nicht fest anzuziehen. Dieser Schritt erleichtert die Montage im folgenden Schritt.

led_module_and_top_cover

3. Montage Bodenplatte

spacers

Für diesen Schritt, wird alles umgedreht, sodass die LED Module mit der runden Seite auf der Tischplatte stehen. Die FRONT Markierung sollte jetzt in die andere Richtung Zeigen und somit das LED-Modul welches die Zehner-Stunden darstellen auf der linken Seite befindet.

Hier werden die folgenden Sperrholzteile benötigt:

  • 1x SPACER_TOP
  • 1x SPACER_BOTTOM

Diese dienen als Abstandshalter zwischen des TOP_COVERS und der Bodenplatte BOTTOM_COVER. Am SPACER_BOTTOM befindet sich eine Aussparung für den ESP8266 D1 MINI.

OPTINAL

Da diese beiden Teile leicht zerbrechlich sind bietet es sich an, diese mit etwas Holzleim zu verkleben.

spacers_glue

Dabei wird der SPACER_TOP auf den SPACER_BOTTOM geklebt und zu einfachen Arretierung dieser mit zwei Schrauben (oder Wäscheklammern) für 5 Minuten fixiert. Nach dieser Zeit können diese wieder gelöst werden.

spacer_final

END OPTIONAL

Die Schrauben (aus Schritt 2), welche die Module gehalten haben können jetzt wieder gelößt werden.

Die beiden Spacer (geklebt oder nicht), werden anschließend auf das TOP_COVER gesetzt, sodass sich die Aussparung unten links in der Ecke befindet und sich somit auf der Rückseite der Uhr befindet. Anschließend können die Module wieder mit je einer Schraube fixiert werden. Somit sollten auch die beiden Spacer fixiert sein.

4. Montage Elektronik

Für die Verkabelung und Montage der Elektronik, wird alles umgedreht, sodass die LED Module mit der runden Seite auf der Tischplatte stehen. Die FRONT Markierung sollte jetzt in die andere Richtung Zeigen und somit das LED-Modul welches die Zehner-Stunden darstellen auf der linken Seite befinden. Für diesen Schritt werden die Jumper-Wires, sowie der ESP8266 D1 MINI benötigt.

Jetzt werden mit den 4x drei Jumper-Wires die einzelnen Module miteinander Verbunden. Auf den LED-PCBs sollten die Stiftleisten durch das TOP_COVER zugänglich sein. Bei diesen sind die einzelnen Pins beschriftet. Für H1 => 5V D0 GND und für H2 => 5V DIN GND. Das Ziel ist es die einzelnen Platinen zu einer Kette zu verbinden. Angefangen von der Zehner-Stunden, wird die H2-Stiftleiste über drei Jumper-Wires mit der H1-Stiftleiste des Stunden-Einer-Moduls verbunden. Dabei wird 5V->5V, GND->GND und DI->D0 verbunden. Dieser Prozess wird anschließend noch zweimal wiederholt:

  • Stunden-Zehner H2 => Stunden-Einer H1
  • Stunden-Einer H2 => Minuten-Zehner H1
  • Minuten-Zehner H2 => Minuten-Einer H1

Nach diesem Schritt sind die Stiftleisten Stunden-Zehner H1 und Minuten-Einer H2 nicht verbunden. Im letzten Schritt wird der ESP8266 D1 Mini mit der Stunden-Zehner H1 verbunden. Dabei werden die folgenden Pins am ESP8266 D1 Mini verbunden:

  • (ESP8266 D1 MINI) 5V => (Zehner Stunden H1) 5V
  • (ESP8266 D1 MINI) D8 => (Zehner Stunden H1) DIN
  • (ESP8266 D1 MINI) GND => (Zehner Stunden H1) GND

Anschließend kann vor dem finalen Zusammenbau die Funktion getestet werden. Mit einem USB-Kabel wird der ESP8266 D1 Mini verbunden. Jede Ziffer sollte einmal aufleuchten. Falls dies nicht der Fall ist, ist die Verkabelung zu Prüfen.

Um den Zusammenbau zu vereinfachen, werden die einzelnen Stiftleisten mit dem Jumperwires leicht zueinander (ca. 45°) gebogen und mit Heisskleber fixiert. Auch die Kabel zwischen den Elementen werden mit Kabelbindern und/oder Heißkleber an der TOP_PLATE fixiert.

electric_complete

5. Endmontage

Im letzten Schritt wird der ESP8266 D1 Mini in die Aussparung des Spacers mit Heißkleber geklebt, sodass der USB-Anschluss nach aussen zeigt. Geklebt wird auf der glatten Seite des ESP8266 D1 Mini (auf der gegenüberliegenden Seite des USB-Anschluss).

esp8266_usb

Final kann die Bodenplatte BOTTOM_COVER montiert werden. Dazu werden die zuvor zur Montage genutzten Schrauben wieder gelöst und das BOTTOM_COVER auf die Spacer gelegt. Alle Schrauben werden dann handfest angezogen.

bottom_screw

OPTIONAL

Anstatt der vier M4 Muttern an den Ecken können auch die 3D gedruckten Füße angeschraubt werden. Dazu werden die M4 THREAD INSERTS mit dem Lötkolben erwärmt und in die Bohrung des Fußes bündig einschmelzen. Nach dem Abkühlen können die Muttern an den Ecken ersetzt werden.

lixie_feet

6. Bedienung und Ersteinrichtung

Wenn die Uhr mit dem Basis-Programm programmiert wurde, agiert diese nach dem Starten als NTP-Synchronisierte Uhr. Hierzu wird ein WLAN benötigt, mit welchem die Uhr einen Zeitserver abgragen kann. Um dieses WLAN festzulegen, wird die Uhr normal mit Spannung versorgt. Mit einem anderen Endgerät z.B. dem Handy kann sich mit dem WLAN-Access-Point der Uhr verbunden werden.

Die WLAN-Konfigurations-Website ist nach dem Start der Uhr für 120 Sekunden sichtbar.

Der aktive Access-Point wir vonder Uhr mit 00:00:00 angezeigt!

Dieses heißt LixieClockConfiguration_xxXXxxXX. Nach dem Verbinden mit diesem öffnet sich eine Konfigurationsübersicht, in der das WLAN gesetzt werden kann. Falls sich die Konfigutationsseite nicht automatisch öffnet (z.B. auf einem PC), kann die IP http://192.168.4.1/ in einem Browser angegeben werden.

Achtung Nur 2.4 Ghz Netzwerke werden vom ESP8266 und ESP32 unterstützt.

Bei einer fehlerhaften Verbindungsaufbau zeigt das Display der Uhr 42:42:42 an. Wenn dies der Fall ist, kann die Uhr neugstartet werden und die Konfiguration kann erneut durchgeführt werden.

Nach einer erfolgreichen Verbindung, zeigt die Uhr ihre IP-Adresse auf den einzelnen Ziffern per Laufschrift an. Wird diese Adresse in einem Browser aus dem gleichen Netz aufgerufen, kann diese umfassend konfiguriert werden.

web_config

Troubleshooting

Ziffern 3,4 und 7,8 sind getauscht

Dann hast du eine Platine der ersten Version verwendet. Diese hat einen Fehler in der Platzierung der LEDs bzw. deren Reihenfolge. Dieser Fehler kann einfach per Software behoben werden. In der beigliegenden Demo-Software /src/lixieclock und /src/lixieclock_base gibt es ein passendes Makro welches gesetzt werden kann.

10 | #define PCB_V1_FIX //FIX DIGIT 3,4 and 7,8 SWAPPING ERROR ON PCB_V1 

Ziffern sind um eine Stelle vertauscht

Wenn alle Ziffern um eine Stelle nach hinten verschoben ist, dann ist die Entwicklungsversion der Uhr bevor diese als Bausatz konzepiert wurde. Hier existiert eine Error-LED auf der Platine, somit gibt es eine zusätzliche LED bei der Berechnung des LED-Index. Hierzu bietet die Software ein Define, welches diesen Fehler behebt.

9 | #define PCB_V0_FIX //ON THE ESP8266 VERSION OF PCB V0 IS THE ERROR LED PRESENT

Wordclock

Die Software-Version >=2.0 unterstützt zusätzlich die Anordnung der LEDs als Wordclock. Wenn nicht die richtigen Wörter aufleuchten, muss die Software für die Verwendung als Wordclock angepasst werden.

11 | #define WORDCLOCK_V0 // german wordclock layout

RTC Offline-Mode

Falls keine Internetverbindung bestehen sollte, kann die Uhr auch im Offline-Modus verwendet werden. Dazu wird eine RTC Modul DS1307 oder DS3231 am I2C Bus des Controllers angeschlossen. Zusätzlich muss der Software-Support aktiviert werden. Die RTC wird automatisch durch den NTP-Server gestellt/aktualisiert, wenn eine Internetverbindung vorhanden ist.

14 | #define ENABLE_RTC

ESP32 Version speichert Konfiguration nicht

Je nach verwendeter Arduino-IDE Version, sowie der verwendeten Libraries kann es bei der ESP32 Software zu Fehlern mit dem Dateisystem FS kommen. Hierzu gib es eine neue Version LitteFS, welche die Default-Version Filesystem ersetzt. Mittels Flag kann erzwungen werden, dass die neue LittleFS Bibliothek verwendet werden soll.

7 | #define USE_LITTLEFS