Anleitung zum Aufbau einer RGB-LED-Uhr mit Matrix-LED-Display für die Ausgabe von z.B. Statusmeldungen.

 

 

Benötigte Bauteile:

4x NeoPixelRing 1/4 60 (http://amzn.to/2BIA8R0)
  (Achtung! Hier gibt es 3 Varianten! [RGB/RGBw/RGBcw] Es werden 4 die gleichen Stücke benötigt!)
Arduino Uno (http://amzn.to/2lgzAuD)
RealTimeClock (http://amzn.to/2BWnsKl)
NRF24l01+ (http://amzn.to/2pEsaa4) incl Breakout Board (http://amzn.to/2DkmCDD)
LED-Matrix 32×8 (http://amzn.to/2BWP0zl)
DC-DC-Stepdown (http://amzn.to/2lfa7le)
Netzteil (6-12V) (http://amzn.to/2BFVRZD)
M3 Einsatz-Muttern (http://amzn.to/2CbMsws)
M3 Schrauben (http://amzn.to/2Cb6dEn)
PushButton 12x12mm mit Kappe (http://amzn.to/2C0gggf)

3D-gedrucktes Gehäuse mit Deckel (https://www.thingiverse.com/thing:2763438)

 

 

Montage:

Verdrahtet die Bauteile wie im folgenden Anschlussplan zu sehen. Beim NRF24L01+ muss das in der Bauteilliste aufgeführte Breakoutboard angeschlossen werden und nicht der NRF selber. Da ich dieses Board aber nicht als Komponente im Fritzing hatte, habe ich direkt den NRF verwendet. Da es die selben Pins sind, könnt Ihr euch trotzdem an der Beschriftung der Pins orientieren.  

Hier noch mal die verwendeten Pins:

PIN 3 MAX_LED-Matrix CLK
PIN 4 MAX_LED-Matrix DATA
PIN 5 MAX_LED-Matrix CS
   
PIN 6 NeoPixel Ring – DATA
   
PIN 7 BUTTON to set hours
PIN 8 BUTTON to set minutes
   
PIN 9 NRF – CE
PIN 10 NRF – CSN
PIN 11 NRF – MOSI
PIN 12 NRF – MISO
PIN 13 NRF – SCK

Die Buttons und der Helligkeitssensor benötigen einen Pulldown-Widerstand zwischen dem Eingangs-Pin am Arduino und GND. Ich habe dafür jeweils einen 200Ohm Widerstand verwendet. 

Ich habe als Stromquelle ein 12V Netzteil verwendet. Um den internen Stepdown im Arduino zu entlasten habe ich einen DC-DC-Stepdown vorgeschaltet, auf 5V Ausgangsleistung eingestellt und den Ausgang des Stepdowns mit dem V-IN und GND des Arduinos verbunden. Wer lieber USB nutzt kann dies natürlich auch tun.

Die NeoPixel benötigen keine zusätzliche Stromquelle, sondern arbeiten ebenfalls mit 5V, die der Arduino ja direkt bereit stellt.  

 

 

Arduino einrichten:

Das Sketch findet Ihr im Github unter folgendem Link:
RGB-LED-Uhr mit NeoPixel-Ring (153 Downloads)

Das Sketch besteht ausnahmsweise mal aus mehreren Dateien. Um es etwas übersichtlicher zu halten, habe ich die einzelnen Methoden nach Bauteilen in einzelne Dateien gruppiert. Ladet daher alle der folgenden Dateien herunter (oder nutzt den Download-Button der euch alles als ein Archiv komprimiert liefert)
– neoPixelRingUhr.ino  (Haupt-Datei)
– ledMatrix.ino
– neoPixelRing.ino
– rf.ino
– rtc.ino

 

Öffnet die Datei neoPixelRingUhr.ino mit der Arduino Software (die anderen Dateien müssen im selben Verzeichnis liegen, und werden dann automatisch mit geladen) und übertragt dieses Sketch wie gewohnt auf den Arduino. Anschließend sollte dir Uhr sofort ihre Arbeit aufnehmen.  

 

 

Parameter

Das Sketch bietet auch einige optionalen Einstellmöglichkeiten. Zur reinen Funktionalität ist zwar keine Anpassung notwendig, aber falls Ihr etwas ändern wollt, erkläre ich hier kurz die vorhandenen Parameter:

#define MAX_DEVICES 4
Gibt an, wie viele 8×8-LED-Matrix Module in Reihe geschaltet sind. In meinem Fall sind es 4 Stück

#define SCROLL_DELAY 40
Gibt an, wie groß das Delay zwischen den einzelnen Schritten beim Text-Scrolling im Matrixdisplay sein soll. Um so größer die Zahl, um so langsamer läuft der Text durch. 

#define CHAR_SPACING 1
Gibt an, wie viele  LEDs zwischen einzelnen Zeichen frei bleiben sollen. 

#define BUF_SIZE 50
Legt die Größe des Buffers für den Text-Empfang fest. (Sollte i.d.R. nicht geändert werden müssen)

int out[] = {1, 30, 100, 180, 255}; 
Legt Werte für die Helligkeit fest, die an den NeoPixelRing übergeben werden. Das Array wird für multimap(in, out, arraySize) verwendet.
Die Parameter in[] und out[] müssen immer die selbe Anzahl an Elementen enthalten. Die Anzahl der Einträge muss beim Aufruf von multimap in der Datei neoPixelRing.ino angepasst werden, sofern man diese ändert!

int in[] = {0, 150, 350, 700, 1000};
Legt Schwellwerte für die Helligkeit fest, die vom Helligkeitssensor ausgewertet werden. Das Array wird für multimap(in, out, arraySize) verwendet.
Die Parameter in[] und out[] müssen immer die selbe Anzahl an Elementen enthalten. Die Anzahl der Einträge muss beim Aufruf von multimap in der Datei neoPixelRing.ino angepasst werden, sofern man diese ändert!

byte colors[3][3] = { {150,100,0},
                                         {60,8,1},
                                         {10,0,0}
                                       }; 
Legt die Farben der Uhrzeiger fest. Es handelt sich daher um 3 Farbwerte, die jeweils als ein Array aus 3 Zahlen zwischen 0 und 255 bestehen müssen.
Die erste Zahl ist der Rot-Anteil, die zweite der Anteil für Grün und die dritte für Blau.

int colorDiffPercent1 = 75;
Gibt die Helligkeit an, die für die LEDs verwendet wird, die einen Punkte Abstand zum eigentlichen Zeiger hat, sofern dieser breiter als nur eine LED angezeigt wird.

int colorDiffPercent2 = 93;
Gibt die Helligkeit an, die für die LEDs verwendet wird, die neben dem eigentlichen Zeiger liegt, sofern dieser breiter als nur eine LED angezeigt wird.

static const uint64_t pipes[6] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL};
Legt die Pipes fest, auf denen der NRF lauschen soll. Diese müssen mit den NRF-Sendemodulen übereinstimmen. Standardmäßig ist Pipe 0 (Client 1) für die Funkklingel und Pipe 1 (Client 2) für freie Texte die auf dem Display angezeigt werden sollen reserviert. 

static uint32_t keyDelay = 300;
Legt das Delay für die Buttons fest, nach wie viel ms der Button erneut reagiert (Also, wenn man ihn gedrückt hält wann es als weitere Eingabe gewertet wird) 

 

 

Text von anderem Gerät per Funk an LED-Matrix senden:

Prinzipiell kann man an die Uhr beliebige Texte mit einer Länge von 32Zeichen senden. Diese werden dann nach einer kurzen Animation, damit man auf die Nachricht aufmerksam wird, als Scrolltext im LED-Matrix-Display eingeblendet. Diese Texte müssen nur auf dem richtigen Funk-Kanal mit dem NRF24l01 gesendet werden. (Pipe 0xF0F0F0F0D2LL / ClientId: 2)

Ich habe den Standard-Funksender um diese Funktionalität erweitert. Alternativ kann man natürlich auch einen neuen Sender nur für diesen Zweck erstellen. 
Weitere Informationen zum senden von Statusmeldungen über 2.4GHz findet Ihr im folgenden Artikel:

Anleitung: Funksender für Statustexte via 2.4GHz (NRF24L01+)


Bei Links auf Amazon-Artikel handelt es sich um Affiliate-Links. In diesen Links wird meine Amazon-Partner-Id mit übergeben, wodurch ich eine kleine Provision für eure Käufe erhalte. Ihr zahlt natürlich das gleiche wie sonst auch.
Ich würde mich freuen, wenn Ihr bei eurer Bestellung die Links verwendet und mich so einfach und für euch kostenlos unterstützt, um weiterhin neue Projekte mit euch teilen zu können.

Vielen Dank für euer Verständnis und eure Unterstützung!


Daniel Scheidler

Da mein Vater bereits in der IT tätig war, wurde auch mein Interesse für diesen Bereich sehr früh geweckt. Mit 13 bekam ich meinen ersten Laptop mit dem ich den Einstieg in die Programmierung begann. (Das Codes abtippen am C64 lasse ich mal aussen vor) Und so nahm alles seinen lauf.

Im Jahr 2004 schloss ich meine Ausbildung als Fachinformatiker Fachrichtung Anwendungsentwicklung ab und bin seit dem als Java Fullstack Entwickler tätig. Damals noch im ERP Umfeld, heute im Medizinischen Bereich.

Auch meine Freizeit „opfere“ ich gerne der Technik. Hier widme ich mich sämtlichen Themen rund um Arduino, Raspberry, 3D Druck/Design, RC-Modellbau (Multicopter, Heli, Flugzeug, Autos) und anderen Handwerklichen Projekten.

Mit der Kernsanierung des Altbaus entstand die Idee, das Haus auf ein SmartHome umzurüsten. Nach dem Kostenvoranschlag des Elektrikers wurde schnell klar, dass ich hier selber ran muss, wenns bezahlbar bleiben soll.

In der Hoffnung weitere kreative Leute zu finden, die sich an dem Vorhaben beteiligen oder es einfach nur nachbauen möchten dokumentierte ich alles und stellte alle Quelltexte incl. Anleitungen online.

Und so entstand SmartHomeYourself.de.

Diese Webseite verwendet Cookies, um die Nutzung der Seite zu verbessern, den Erfolg von Werbemaßnahmen zu messen und interessengerechte Werbung anzuzeigen.
Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen.

Wenn Sie diese Website ohne Änderung der Cookie-Einstellungen verwenden oder auf "Akzeptieren" klicken, erklären Sie sich damit einverstanden.

Weitere Informationen zu den verwendeten Cookies und unseren Datenschutzbestimmungen finden Sie in unseren Datenschutzbestimmungen.

Schließen