Ding:Wortuhr von Udo

Aus FabLab Nürnberg Wiki
Wechseln zu: Navigation, Suche


Foto
Wortuhr V1.0.1 esistzehnvorhalbvier.png
Basisdaten
Status funktionstüchtig
Schöpfer Udo (Diskussion)


Udo's Version einer Wortuhr



Eine Uhr welche die Zeit nicht mit Zeigern oder Zahlen sondern als geschriebene Wörter in Intervallen von Fünf Minuten anzeigt.


Zusammenfassung:
  • Zum Einbau in einen IKEA RIBBA Bilderrahmen
  • Für jeden verwendeten Buchstaben wird eine LED (99 LED'S) verwendet, daher gleichmäßige Ausleuchtung aber auch höherer Kosten- und Zeitaufwand.
  • größeres Projekt für Fortgeschrittenen Bastler, daher leider nicht für Einsteiger geeignet (Mechanik und Elektronik)
  • Die angesteuerten Leds leuchten alle gleichzeitig, kein Multiplexing, daher höhere Lichtausbeute aber auch höherer Strombedarf als bei Multiplexing
  • für die Komplette Darstellung der Zeit werden lediglich drei (3) Byte verwendet (24-Bit)
  • Differenzierung zwischen EIN und EINS (ES IST EIN UHR / ES IST FÜNF NACH EINS)
  • Geschlossenes Gehäuse (Bilderrahmen) mit freien Zugang zu den Bedienelementen (Taster) zum einstellen / ändern der Uhrzeit
  • Batterie gestützte Echtzeit Uhr, d.h. die Zeit läuft weiter auch wenn die Schaltung von der Versorgung/Netzteil getrennt wurde und ist sofort wieder verfügbar sobald die Versorgung (Netzteil) angeschlossen wird.



geplante Erweiterungen:
  • An eine Funk Uhr Anbindung mit DCF77 Empfänger wurde zwar gedacht, wegen schlechten Empfangs (allgemein bekannt) jedoch wieder verworfen
  • über eine Zeit Synchronisierung mit RDS Signal des UKW Radios' (z.B. mit SI4735 o.ä.) denke ich gerade nach Ein fertiges Modul bekommt man u.a. bei ELV hier auch ein nettes Video vom CCzwei: SDR Software Defined Radio von Burkhard Kainka und ein weiteres Video auch vom CCzwei DSP Radio mit dem Arduino Testboard
  • auch eine Synchronisierung über WLAN und Zeit-Server (NTP) ist noch nicht gänzlich aus dem Rennen
  • Dimmer Funktion zur Helligkeitsanpassung an das Umgebungslicht
  • Näherungssensor für "Magic Mirror" Effekt (steht man direkt vor der Uhr wird das Display ausgeschaltet und die gesamte Fläche ist dann ein Spiegel) natürlich muss dann eine durchlässige Spiegelfolie hinter der Glasplatte angebracht werden



Downloads:




neue Bezugsquelle für spezielle Bauteile:

In meiner Dokumentation hatte ich als Bezugsquelle für bestimmte Bauteile den HBE-Shop angegeben.

Doch wie ich feststellen musste, wurde dieser Shop geschlossen.

Auf Anfrage bei Farnell für eine alternative wurde mir der

  • DEVElektro genannt,


https://www.develektro.com/
dort kann man auch als Endkunde auf die volle Produktpalette von Farnell, einem der größten Zwischenhändler für elektronische Bauelemente, zugreifen und bestellen.

Hinweis:

Ich lasse keine Platinen mehr fertigen. Trotz der professionellen Fertigung bleibt das bestücken und testen zu aufwändig. Wenn Ihr die Wortuhr nachbauen wollt, dann baut die elektronik bitte diskret wie beschrieben auf.



Alternative Elektronik:

Wer den Nachbau der kompletten Elektronik Scheut kann auch meinem Entwurf "Schieberegister_mit_Leistung"

mit einem Arduino (FabUino) kombinieren und hierfür verwenden, es werden drei (3) Platinen "Schieberegister_mit_Leistung" ohne FET's benötigt.
Das ganze verschwindet dann natürlich nicht mehr 'unsichtbar' in den Bilderrahmen :-(
Außerdem muss dann auch noch ein extra RTC-Modul besorgt werden, es sei denn man verzichtet auf den Komfort eines Batterie gestützten Uhr-Moduls und nimmt in Kauf dass die Zeit noch stärker als mit dem DS1307 abweicht, wenn der Arduino nicht Zeitkalibriert wird.

Modding:

Die Dateien "Wortuhr_V1.0.1 Grundplatte für 5mm LED + Aufbaurahmen + Kleinteile 3mm.svg" und "Wortuhr_V1.0.1 Segment - Trenner Karton.svg" (Beide Dateien im ZIP Archiv der mechanischen Baupläne für VisiCut "Wortuhr_V1.0.1_VisiCut_Daten.zip") wurden so gestaltet dass anstelle der einzelnen LEDs auch LED Strips mit Controller (WS2812B) z.B. http://www.adafruit.com/products/1461 o.ä. mit 60 LED/m eingesetzt werden können (RM 16.666mm). Die LED Streifen werden dann auf die Grundplatte geklebt und die Montagerahnen und Segment-Trenner darüber angebracht. Die Ausschnitte sollten breit und hoch genug sein um genügend Raum für die LED Streifen zu gewährleisten. Natürlich ist für dieses Modding auch eine Anpassung der Ansteuerung nötig, IC2 bis IC7 fallen ersatzlos weg und die LED Strips werden mit dem SPI (ISP) Port angesprochen. natürlich kann dann auch ein "normaler" Arduino oder auch der FabUino verwendet werden.
Zum Programmieren steht im GitHub die Library Fastled mit ausführlicher Beschreibung bereit. http://github.com/FastLED/FastLED


Grundlagen zur Programmierung:

Verwendete Libraries:

  DS1307 Library - http://playground.arduino.cc/Main/DS1302RTC
I2C-Library - http://www.arduino.cc/en/Reference/Wire
Time-Library - http://playground.arduino.cc/code/time

Für die Programmierung (Arduino-IDE) wichtige Infos
In das Char - Array "Anzeige" werden später die anzusteuernden LED-Gruppen geschrieben,
(HI/BitSet = LEDs Leuchten)

Anmerkung: das Zeichen # am Zeilenanfang wird hier nicht korrekt angezeigt (Formatierung) und daher durch ≠ dargestellt.
Im Code ist dies natürlich zu berücksichtigen. Ebenfalls betroffen ist die Strukturierung ich bitte um Nachsicht

 code tags durch pre ersetzt
 <code> ... </code>

Dann bleibt die Formatierung erhalten da das Wiki die Finger davon läßt. Heinz


#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
int latchPin = 10;          // Pin connected to ST_CP of 74HC595
int clockPin = 13;          // Pin connected to SH_CP of 74HC595
int dataPin = 11;           // Pin connected to DS of 74HC595
int Oe = 9;                 // Output Enable der Shift Register
int s1 = 14;                // Taster S1 analog0 = digital-Pin14
int s2 = 15;                // Taster S2 analog1 = digital-Pin15
int s3 = 16;                // Taster S3 analog2 = digital-Pin16
int s4 = 17;                // Taster S4 analog3 = digital-Pin17
char anzeige[2];            // (Anzeigemuster-Array 0-2)
tmElements_t tm;            // Uhrzeit und Datum Variable

void setup()
{
    Serial.begin(9600);
    pinMode(latchPin, OUTPUT);  // für das Shift Register
    pinMode(clockPin, OUTPUT);  // für das Shift Register
    pinMode(dataPin,  OUTPUT);  // für das Shift Register

    pinMode(Oe, OUTPUT);        // Output Enable<br />
    pinMode(s1, INPUT);         // Analog 0 als Digitaler Eingang
    pinMode(s2, INPUT);         // Analog 1 als Digitaler Eingang
    pinMode(s3, INPUT);         // Analog 2 als Digitaler Eingang
    pinMode(s4, INPUT);         // Analog 3 als Digitaler Eingang

    digitalWrite(Oe, LOW);      // Ausgänge der Schieberegister aktivieren
}

void Loop()
{
    RTC.read(tm);                   // Auslesen der RTC
    Serial.print("RTC: ");
    if (tm.Hour <10) {Serial.print("0");}   // Führende Null einblenden
    Serial.print(tm.Hour);
    Serial.print(":");
    if (tm.Minute <10) {Serial.print("0");} // Führende Null einblenden
    Serial.print(tm.Minute);
    Serial.print(":");
    if (tm.Second <10) {Serial.print("0");} // Führende Null einblenden
    Serial.println(tm.Second);
    // Hier muss noch der Code für die Ausgabe geschrieben werden um dann letztendlich die Ausgabe durchzuführen
    // Natürlich ist auch die Bedienung der Taster-Abfrage hier noch zu berücksichtigen.
    ausgabe(); // Das Variablen Array an die Schieberegister senden
}

void ausgabe()
{
    digitalWrite(latchPin, LOW);  // Latch ausschalten (LOW), damit die Register
    // beschrieben werden können.
    shiftOut(dataPin, clockPin, MSBFIRST, anzeige[0]); // Katoden Bits 0 bis 7
    shiftOut(dataPin, clockPin, MSBFIRST, anzeige[1]); // Katoden Bits 0 bis 7
    shiftOut(dataPin, clockPin, MSBFIRST, anzeige[2]); // Katoden Bits 0 bis 7

    digitalWrite(latchPin, HIGH); // LATCH: übertrag vom Register in den Speicher
    // und damit auch die Werte in die Anzeige
    // übernehemen, dies geschieht nur bei einem
    // LOW-HIGH Übergang des Latch-Pin
}

Das Array könnte folgendermaßen beschrieben werden:

void arrayleeren()
{
    anzeige[0]=0;
    anzeige[1]=0;
    anzeige[2]=0;
}

void minuten_drei()
{
    // 3. Datenbyte Bit 6
    bitSet(anzeige[2],6;
}

void minuten_viertel()
{
    // 3. Datenbyte Bit 7
    bitSet(anzeige[2],7);
}
Neue Controller Platine in Arbeit:

Juni 2016: Ich habe eine neue Controllerplatine in Arbeit. Dieses mal komplett in 3,3 Volt Technik (mein erstes Projekt mit dieser Technik)

  • minimale Platinen Abmessung von 99mm x 2,54mm
  • Micro USB Buchse
  • SD-Card Socket (Micro SD-Card, SDHC)
  • aktiver bidirektionaler 4-Bit Level-Shifter für 5V Logik
  • drei Eingabetaster 90°
  • versenkter Reset Taster 90°
  • alles von einer Seite aus zugänglich
  • vier Side LEDs für Betrieb, RXD, TXD und SD Card Aktivität
  • mit Temperatur kompensierter, Batterie gepufferter Echtzeituhr RV-3029-C2 (I2C)
  • zwei MicroMatch Steckverbinder für 3,3V I/Os
  • Standard Anschlüsse RM 2,54 für 5V I/Os
  • Eingangsspannung 5V stab.

Dies ist der Entwurf meines neuen 3,3V Controllers für die WortUhr, SD-Card und Temperatur kompensierter, Batterie gepufferter Echtzeituhr, auch kann ein ESP WiFi oder andere 3,3 V Devices direkt angeschlossen werden (Nokia 5110 Displays o.ä.). An einen 4-Bit aktiven bidirektionalen Level Shifter für 5V Logik wurde auch gedacht. Die analog/digital Wandler können allerdings nicht genutzt werden, alles ist digital.

OnBoard Recources
* Arduino UNO ATmega 328 TQFP32 @ 16 MHz @ 3,3 V
* RTC = RealTimeClock RV 3029-C2 I2C-Bus @ 3,3 V  Adresse = 0xac/2 (Arduino konforme I2C Adressse)
* I2C Interface                          @ 3,3 V  SDA = analog 4 , SCL = analog 5
* SD Card Socket für Micro SD/SDHC       @ 3,3 V  Card Select SS =  9 (digital i/o 9)
* SPI Interface                          @ 3,3 V  Port Select SS = 10 (digital i/o 10)
* IO Ports direkt                        @ 3,3 V  digital i/o 2, 3, 4, 5
* IO Ports über LeverlShifter            @ 5,0 V  digital i/o 14, 15, 16, 17 (aka Analog Pins 0-3)
Neue Controller Platine in Arbeit

zu gegebenen Zeitpunkt (wenn alles "funzt") werde ich ein separates 'DING' erstellen ;-)

Neue Controller Platine uMighty1284P würde fertig gestellt:

hier geht es zum Projekt: Eine neue Controller Platine wurde fertiggestellt: uMighty

Eine neue Controller Platine wurde fertiggestellt: uMighty

--Udo (Diskussion) 13:19, 24. Aug. 2015 (CEST)...