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.
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
lg
JD
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.
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();
}
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?
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.
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.
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.
Ü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.