Zeitanzeige über LED-Balken

Hallo zusammen,

meine Tochter arbeitet in einem Pflegeheim für geistig eingeschränkte Bewohner, und kam mit folgendem Wunsch auf mich zu.

Da einige der Bewohner nicht in der Lage sind eine Uhr zu lesen, wäre es schön, wenn man den Tag (von 6:00 bis 21:00) in 1/4 Stunden, anhand eines LED-Balkens darstellen könnte.
die Pfleger könnten dann z.B. die Essenszeiten oder andere Termine anhand eines Stickers bei der entsprechenden LED markieren.
Der Wunsch wäre also, eine ca. 1 Meter langer Balken mit 60 LEDs.
Ich dachte mir, daß dies doch mit einem Arduino realisierbar sein müßet.

Leider bin ich nicht das Programmiergenie, aber wenn ihr Ideen habt, wie ich dem Pflegeheim eine Freude machen kann, würde ich das mit eurer Hilfe bestimmt hinbekommen.
Arduino Uno und Nano wären vorhanden und löten kann ich auch.

Viele Grüße
Herbert

Sollte mit einzeln ansteuerbaren LED Streifen zu machen sein.
Hier mal ein link zu einem shop (gibt's aber bei ali deutlich günstiger) WS2813 RGB Stripe - LEDs mit integriertem WS2811 controller, 60 LED/m
Die Ansteuerung mit einem ESP8266 und dessen integration in's örtliche WLAN mit zeitsynchronisierung über ntp (ggf. auch noch eine vernünftige WEB-Oberfläche zur Konfigurierung) dürfte ein nettes kleines Projekt sein.

ich würde auch sagen nimm einen Streifen mit Neopixel/WS2812
Kläre ab, ob du dort ein WLAN nutzen kannst, wenn ja - dann unbedingt einen ESP (ESP8266 oder ESP32) für NTP über Internet.

Wenn das nicht möglich ist, brauchst du zum UNO auch ein RTC Modul.

Ich schliesse mich den anderen voll an.
Du brauchst eine genauere Zeitquelle - also mindestens DS3231 - einen LED-Streifen mit programmierbaren LED und dann 50 Zeilen Code.
Für die Helligkeit und die Farbe evtl. einen Encoder oder ein Poti, damit ein gewisser Regelbereich als persönliche Note möglich ist.

Hallo Herbert,
ich finde das eine Klasse Idee!
Allerdings mit einem LED - Streifen finde ich das etwas klein... Ansonsten sehe ich es ähnlich, wie die restlichen Autoren hier :slight_smile:
lg
JD

Hallo zusammen,

danke für die vielen Antworten!

Es gibt ein freies Wlan, das aber nicht immer zuverlässig funktioniert.

Bevor ich jetzt die ganzen Teile bestelle, um eine Prototypen zu bauen, sollte ich allerdings wissen, was die optimale Lösung sein könnte.
Und was ich genau bestellen muß.

Nochmal kurz die Eckpunkte:
60 LEDs auf 1 Meter
Bedienung sollte so sein, daß nur der Strom eingesteckt werden muß und die Zeit sich dann selbst stellt. Ab 6:00, soll sich der Leuchtbalken in 1/4 Schritten füllen.

Ich hoffe, daß ihr mir bei der Programmierung ebenso behilflich seid, da ich mit meine fast 70 Jahren, etwas aus dem Thema raus bin.

Viele Grüße
Herbert

Das reicht schon fast!
Jetzt noch eine RTC z.B. DS3231
Und ein 5V Netzteil mit genug Power für den LED Streifen

Nicht jammern, sondern machen!

Hallo zusammen,

jetzt habe ich mal ein RTC DS3231 und WS2813 LED Stripe bestellt.

Ich werde bis zur Lieferung, versuchen mich ein bißchen einzulesen, werde aber bestimmt noch viele Fragen haben.

Viele Grüße
Herbert

imho solltest du folgendes einplanen.

  • zwei Taster zum Stellen der Uhrzeit. Auch die Batterie am RTC wird mal ausgehen und dann soll man nicht von jemanden abhängig sein, der den Microcontroller neu programmiert.
  • ein "normales" Display zur parallelen Anzeige der Uhrzeit. Einerseits fürs Uhrzeit einstellen - andererseits finde ich hat das dann auch einen Mehrwert und vieleicht kommen so Leute zum ablesen.

weiters solltest du dir vorab Gedanken machen was / wie angezeigt werden soll:
Einfach einen String von 60 Leds finde ich unübersichtlich.
du könntest eine (farbliche) Skalierung vornehmen z.b. jede 3 Stunde hervorheben - 9 - 12 - 15 - 18 - 21 damit das ablesen leichter wird. (Das Pflegepersonal muss ja auch wissen wo sie Zettel hinkleben sollen!).

edit:
nur mal auf die Schnelle:

/*
    UNO Neopixel Clock with RTC
    60 Neopixels from 6:00 to 20:59 - One pixel per quarter
    https://forum.arduino.cc/t/zeitanzeige-uber-led-balken/1237662/
    https://wokwi.com/projects/392897977230186497

    2024-03-20 by noiasca
    code im sketch
*/

#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <RTClib.h>
#include <OneButton.h>

OneButton btnUp(A1, true);       // a button which will close to GND (activeLOW)
OneButton btnDown(A0, true);     // another button

constexpr uint8_t pixelPin {2};	 // input pin Neopixel is attached to
constexpr uint8_t pixelNum {60}; // number of neopixels

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(pixelNum, pixelPin, NEO_GRB + NEO_KHZ800);
RTC_DS1307 rtc;

// Debug Ausgabe der Uhrzeit auf Serielle Schnittstelle
void showTime() {
  DateTime now = rtc.now();
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
}

// Anzeige auf 60 Neopixel
void showNeopixel(uint8_t hour, uint8_t minute) {
  const uint32_t colorOff = 0x000000;       // inaktiv
  const uint32_t colorOn = 0x00FF00;        // aktiv
  const uint32_t colorOffMarker = 0x808000; // 3h Stundenmarker inaktiv
  const uint32_t colorOnMarker = 0xFF0000;  // 3h Stundenmarker aktiv

  uint32_t color = colorOff;

  int quarter = hour * 4 + minute / 15;
  int startQuarter = 6 * 4;
  Serial.print("quarter="); Serial.println(quarter);
  for (uint16_t i = 0; i < pixelNum; i++) {
    if ((quarter - startQuarter) >= i) {
      if (i == 0 || i == 12 || i == 24 || i == 36 || i == 48)  // die 3h Stundenmarker
        color = colorOnMarker;
      else
        color = colorOn;
    }
    else {
      if (i == 0 || i == 12 || i == 24 || i == 36 || i == 48)  // jaja ich weis ...
        color = colorOffMarker;
      else
        color = colorOff;
    }
    pixels.setPixelColor(i, color);
    //Serial.print(i); Serial.print("\t 0x"); Serial.println(color, HEX);
  }
  pixels.show();
}

// trigger update of clock - if necessary
void timer() {
  static uint16_t previousMinute = 65;
  DateTime now = rtc.now();
  if (now.minute() != previousMinute) {
    previousMinute = now.minute();
    showNeopixel(now.hour(), now.minute());  // update Neopixel
    showTime();                              // update Time on Serial
  }
}

void setup() {
  Serial.begin(115200);
  pixels.begin(); // Initializes the NeoPixel library.
  Wire.begin();
  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
  }

  // only test - einzeln aktivieren - und im loop den timer auskommentieren
  //showNeopixel(6, 14);  // nur 6 Uhr
  //showNeopixel(6, 15);  // 6 Uhr + 1 Viertelstunde
  //showNeopixel(6, 16);  // 6 Uhr + 1 Viertelstunde
  //showNeopixel(12, 0);
  //showNeopixel(19, 0);  // 18 Uhr + 4 Viertelstunde
}

void loop() {
  timer();
}

Geht sicher schöner ^^

Das sieht ja schon super aus!
Die Idee, alle 3 Stunden eine extra Markirung zu machen ist wirklich sinnvoll!
Wie kann ich da die Uhr stellen?
Was für ein Display würdest du mir empfehlen?

Sobald ich alles habe werde ich mal testen.

Viele Dank für deine Mühe
LG Herbert

was dir beliebt. Ich würde wohl etwas mit LEDs nehmen damits optisch zu den anderen LEDs passt. Also ein MAX7219 Modul (entweder als 7 Segment Anzeige oder gar so eine Punktmaktrix Anzeige) oder ein HT16K33 Modul.

Sag ich ja dass man sowas braucht ;-).

Schau dir "typische" Bedienkonzepte für Uhren an. Viele kommen mit zwei Taster aus. Mit einer Taste schaltet man "weiter" mit der anderen "erhöht +" man den Wert

Jetzt fällt mir noch der Quargel mit der Sommerzeit-Umstellung ein... dafür braucht es das ganze Datum, und dann macht vieleicht eine dritte Taste "minus -" auch einen Sinn.

Hallo,
Du könntest immer nur eine LED leuchten lassen , oder maximal 4 für die letzte vergangene Stunde, dann ist das mit der Stromversorgung wensentlich einfacher.

Habe gerade in der Bedienungsanleitung von meinem Auto nachgelesen.
Da steht auch sowas drin!

Wenn du den Tank voll machst, gibts einen Achsenbruch.

Da hat wohl auch einer gespart.

Wieso so kompliziert mit Display? 2 Buttons und deine vorhandenen 60 Leds reichen.

Drücke Taster 1 1x. Lass die erste Led Blinken und mit jedem druck auf Taster 2 erhöst du die Led Anzahl (max 24, danach gehts wieder bei der ersten los) damit hättest deine Stunden abgedeckt.

Ein weiterer druck auf Taster 1 wechselt zu den Minuten. Gleiche Prinzip wie bei den Stunden, nur diesmal gehts bis 60.

Und nun nochmal Taster 1 drücken und du wechselst zu den Sekunden (falls doe benötigt werden) wenn nicht, dann beendet der dritte druck auf Taster 1 einfach alles, speichert deine Uhrzeit und kehrt in den Ausgangszustand zurück.

Wenn du rgb Leds verwendest, könntest dir noch was überlegen das farblich abzuheben. Stunden rot, Minuten grün oder sowas.

1 Like

Das ohne Display gefällt mir!
Es soll ja auch so günstig, wie möglich werden.

Könnte ich auch einen Arduino NANO dafür verwenden?
Wäre vom Platzbedarf besser.

LG Herbert

Ob Uno oder Nano spielt keine Rolle, da sie beide den gleichen Mikrocontroller verwenden und solange du keine Wlan funktionalität benötigst, ist ein Nano vollkommen ausreichend. Dann aber natürlich mit zusätzlicher rtc.

O.k., den NANO und den RTC DS3231 habe ich schon.
Wenn jetzt noch, der von hajos118 im 2. Post genannte LED-Sripe eintrifft, kann's losgehen.

Ich bin so froh, daß ich hier so toll unterstützt werde! :slight_smile:
Ist ja leider in den meisten Foren nicht so.
Da wird man als Anfänger oft fertig gemacht :slightly_frowning_face:

LG Herbert

Überleg dir nochmal einen ESP8266 einzusetzen. WLAN vorausgesetzt und NTC verwenden sparst du dir jede Menge Ärger mit falsch eingestellter Zeit...
... und eine ESP(WeMOS D1 mini) kostet fast nix (unter 3€ in der Bucht) ...

Alles schön und gut und richtig was du schreibst. Aber mit dem ESP ist man dann immer auf ein funktionierendes Wlan angewiesen und wenn sich in der Wlan strucktur was ändert (neue Zugangsdaten etc ) kommt man nicht dran vorbei den ESP neu zu programmieren. Ich bin der Meinung, für ein Projekt für privat daheim kann man das mit dem ESP durchaus machen. Aber für den vorgesehenen Einsatzzweck würde ich das so einfach wie möglich halten und es so aufbauen, dass man den Microcontroller nach Möglichkeit nie mehr anfassen muss.

Bis jetzt ist kein Geld rausgeworfen. Wenn es ein unstabiles WLAN gibt wäre der RTC auch an einem ESP8266 verwendbar. "Strukturänderungen" kann man mit dem Wifi Manager gut abfackeln - man hartcodiert dann keine Wifi Credentials.

Aber imho liegt das alles noch in weiter ferne, solange noch nicht mal die erste LED blinkt.

Ich würde den TO jetzt einfach mal werkeln lassen und Erfahrung sammeln lassen.
Er wird dann schon draufkommen was für den Einsatzzweck gut geeignet ist.