- App-Fernbedienung: Fernsteuerung Ihrer Haushaltsgeräte und Geräte über die App eWeLink auf einem Smartphone oder Tablet. Keine Entfernungs-/Zeitbegrenzung.
- Synchronisierte Aufgabe und Energieeinsparung: Stellen Sie Countdown-Timer ein, um die intelligente Steckdose nach Bedarf automatisch ein- und auszuschalten.
- Einfach zu bedienen: Schließen Sie einfach ein Gerät an die intelligente Steckdose an und verbinden Sie es mit Ihrem WLAN-Netzwerk.
- Freisprech-Sprachsteuerung: SONOFF S26R2 ist kompatibel mit Amazon Alexa (Amazon Echo / Echo Dot / Amazon Tap) und Google
- Hinweis: Der Router muss 2,4 GHz sein (5,0 GHz WiFi wird nicht unterstützt), aber es gibt keine Einschränkung für das Smartphone-Netzwerk (2G / 3G / 4G / WiFi Netzwerk ist korrekt).
Anleitung zum Aufbau einer RGB-LED-Uhr mit Matrix-LED-Display für die Ausgabe von z.B. Statusmeldungen.
Benötigte Bauteile:
ACHTUNG! Bei den NeoPixelRingen gibt es 3 verschiedene Varianten! [RGB/RGBw/RGBcw]
Es werden 4 identische Stücke benötigt!
– 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
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+)