Analoguhr mit 60 Dreifarben-LEDs

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Um meinem Sohn das Erlernen der Uhr zu erleichtern, habe ich eine analoge Uhr bestehend aus 60 Dreifarben-LEDs gebaut. Das Projekt war durchaus anspruchsvoll (Löten!). Ich denke, dass sich daraus vielleicht nette Ideen und Anregungen für weitere Projekte ergeben. Schaltpläne habe ich derzeit noch keine erstellt (btw, kennt jemand ein einfaches Schaltplantool für MAC?); das und weitere Dokumentation kann ich aber gerne nachholen bzw zur Verfügung stellen.

    Der Sourcecode ist auf github verfügbar: https://github.com/thomaspfeiffer…/analogledclock


    Ansteuerung der LEDs (clock.py)

    Die Ansteuerung der 60 3-Farben-LEDs (insgesamt also 180 LEDs) benoetigt insgesamt 12 MCP23x17 Port-Expander (16 x 12 = 192 getrennt steuerbare Ausgaenge). Da die Adressleitungen fuer die MCP23x17 nur drei Bit breit sind, benoetigen wir also acht MCP23017, die mit dem I2C-Bus angesteuert werden und weitere vier MCP23S17, die mit dem SPI-Bus angesteuert werden.

    Die Abbildung der 180 Einzel-LEDs (also Ausgaenge) als Bitmuster findet sich in der Datei clock.py in den Arrays bits_red, bits_green und bits_blue. Diese auf den ersten Blick etwas komplizierte Darstellung ermoeglicht es, dass die einzelnen LED-Adressen von der Business-Logik abstrahiert werden koennen.

    • tech: I2C oder SPI; je nachdem unterschiedliche Ansteuerung der Portbausteine in den jeweiligen Klassen
    • device: Adresse des jeweiligen Bausteins
    • bank: "A" oder "B" fuer die jeweilige Bank
    • bit: jener Ausgang, der dann die jeweilige LED ansteuert


    In der Methode Main() in clock.py wird in einer Schleife die aktuelle Uhrzeit abgefragt und die zur jeweiligen Sekunde, Minute und Stunde korrespondierenden Ausgaenge (LEDs) gesetzt (Array bits und Methode WriteBits()).

    Zwei Anmerkungen hierzu:

    • Zwischen 20:00 Uhr und 7:00 Uhr leuchten die Stunden-LEDs nicht dauerhaft (das waere naemlich trotz Helligkeitsregelung zu hell).
    • Der Code rund um die Variable bTest dient zur Generierung eines eigenen Bitmusters (20 LEDs leuchten wie ein sich fortbewegender Wurm). Das unterstuetzt beim richtigen Einbau der LEDs ins Holzgehaeuse.

    Helligkeitsregelung (lightness.py)

    Die gemessene Helligkeit steuert ueber Puls-Weiten-Modulation PWM die Helligkeit der LEDs (wiringPi.pwmWrite()).

    Ueber einen Lichtsensor und den A/D-Wandler MCP3008 wird als eigener Thread ein Helligkeitswert eingelesen. Achtung: Nachdem zwei Threads auf den SPI-Bus zugreifen (Ansteuerung der MCP23S17-Bausteine und Ansteuerung des MCP3008), ist unbedingt ein Lock erforderlich!

    Die Helligkeitsmesswerte werden in einem Deque (class Measurements) gespeichert. Der aktuelle Wert (target) wird in einer Schleife dem Durchschnittswert der letzten Messungen nachgefuehrt. Dadurch aendert sich die Helligkeit der LEDs nicht sprunghaft, sondern sanft.

    Der PWM-Ausgang des Pi steuert ueber eine Darlington-Transistorschaltung den gemeinsamen Plus-Pol der Dreifarben-LEDs an. Die jeweiligen Minuspole sind ueber Transistorarrays ULN2803A mit den Ports der Portexpander MCP23x17 verbunden.


    Files

    • clock.py: main file
    • Lightness.py: controls lightness of LEDs via PWM and a photo resistor
    • SPI_const.py: various constants for the SPI bus
    • MCP3008.py: reading analog values of photo resistor for lightness control
    • MCP23x17.py: various constants for MCP23x17
    • MCP23017.py: code for MCP23017 (I2C)
    • MCP23S17.py: code for MCP23S17 (SPI)


    Bauteilliste

    • 8 MCP23017
    • 4 MCP23S17
    • 24 ULN2803A
    • 1 MCP3008
    • 1 photo resistor
    • 60 three color LEDs with common anode
    • 3 x 60 Resistors for LEDs (depending on used voltage)
    • several BC547, BC337 used as darlington pair
    • 1 wooden box (about 30 cm x 20 cm x 6 cm)
    • 1 Raspberry Pi with SD card, wifi, and power supply


    Einmal editiert, zuletzt von smtp (3. Januar 2016 um 07:14)

  • Wahnsinn, was für Menschen mit zuviel (Restlebens)Zeit

    Ich hätte und habe für sowas WS2812b Stripes oder Single Dioden gewählt.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • Ja, wunderbar - dann freut sich das Forum sicherlich über Sourcecode sowohl für die Stripe- wie auch die Dioden-Lösung.

    nun ja ich habe 16 LED Stripes a 18 WS2812b +5 Status LEDs auf einem Stripe -> 293 LEDs, verkabelt, jede 2 Stripes mit einem eigenen stepdown aus 24V/5V weil mir das auf der 5V Seite mit 100W zu heftig war.

    Ich weiss wieviel Arbeit das macht, deswegen.....

    und als wordclock24h ist die Anteuerung auch nicht leichter, es gilt etliche Buchstaben passend zu beleuchten.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!