Projekt/Thekenlicht: Unterschied zwischen den Versionen
MongoQ (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
MongoQ (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
(134 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{ProjektInfoBox | {{ProjektInfoBox | ||
|name=Thekenlicht | |name=Thekenlicht | ||
|status= | |status=experimental | ||
|description=LED-Leiste unter der Thekenplatte (Küche), steuerbar über Laborautomation | |description=LED-Leiste unter der Thekenplatte (Küche), steuerbar über Laborautomation | ||
|author=Kanga, MongoQ, Andreas | |author=Kanga, MongoQ, Andreas | ||
|version=0. | |version=0.2 | ||
|update='' | |update='2023-09-29' | ||
}} | }} | ||
<big>News</big> | |||
*Die [https://www.androegg.de/shop/ir-fernbedienung-remote-control-uart-rs232-decoder/ Beispiel YS-IRTM Module] konnten erfolgreich in Betrieb genommen werden. Ein Test mit MongoQs eigenem LED-Streifen verlief erfolgreich. Es gibt jetzt für das Labor die LED-Streifen in 3x-RGBW-Ausführung. | |||
*Eine [https://www.aldi-nord.de/angebote/aktion-do-28-09/led-lichtsaeule-1002067-0-0.article.html LED-Lichtsäule] wurde beschafft (von Aldi). Die Fernbedienung (wohl auch mit dem NEC Protokoll) wird alsbald ausgemessen. Dies sollte aber kein Problem darstellen. | |||
* Eine Platine ist in Mache (KiCad), bei der die [https://www.digikey.de/de/blog/logic-level-shifting-basics Level Shifter] mittels [https://www.digikey.de/de/products/detail/on-semiconductor/BS170/244280 BS170] N-Kanal Mosfets realisiert werden. Auf die Platine sollen auch die ESP32 Boards in der im Labor verfügbaren Version verlötet werden (machbar auch für Lötanfänger). Und natürlich die YS-IRTM Module. Die BS170 wurden beschafft (20x). | |||
<big>LED-Leiste</big> | <big>LED-Leiste</big> | ||
Angedacht ist eine LED-Leiste, die unter der Thekenplatte in der Küche befestigt wird, mit der man eine Beleuchtung hat, um auf der | Angedacht ist eine LED-Leiste, die unter der Thekenplatte in der Küche befestigt wird, mit der man eine Beleuchtung hat, um auf der Arbeitsplatte Drinks (z.B. Tschunk) ohne "Festagsbeleuchtung" zu mischen. Die LED-Farben sollen per Webseite (bzw. Laborautomation) steuerbar sein; zudem sollen Funktionen wie Fading, Blinken und Ein- und Ausschalten implementiert werden. | ||
<big>Thekenaufbau</big> | |||
[[Datei:Theke mit Pfeile.jpg|mini]] | |||
<big>Nutzung von "beliebigen" LED-Streifen</big> | |||
Es sollen für Teilnehmer der Arduino Gruppe "beliebige" RGB LED-Streifen, die über eine Fernbedienung verfügen, nutzbar gemacht werden. | Es sollen für Teilnehmer der Arduino Gruppe "beliebige" RGB LED-Streifen (ähnlich [https://chronoslights.com/products/led-strip-5050-rgb diesem]), die über eine Fernbedienung verfügen, nutzbar gemacht werden. | ||
Der | Der Theorie nach (nach ausgiebiger Forenrecherche) arbeiten die meisten Fernbedienungen mit dem [https://www.sbprojects.net/knowledge/ir/nec.php NEC IR Protokoll]. | ||
Dabei sollen ESP32 Boards (mit Wlan Funktionalität) verwendet werden. Eine Entscheidung für C oder MicroPython wurde noch nicht getroffen. | |||
Die Idee ist hierbei, dass man [https://www.androegg.de/shop/ir-fernbedienung-remote-control-uart-rs232-decoder/ YS-IRTM] Module verwendet. Diese sprechen das NEC IR Protokoll (bidirektional) und verhalten sich dabei wie ein UART. Die gesamte "Magie" der richtigen Modulation wird eingekapselt und muss so nicht selber programmiert werden. Lediglich mehrere Bytes müssen gelesen und geschrieben werden über eine UART Verbindung. Quasi beliebige Mikrocontroller sollten sich so sehr einfach anbinden lassen. | |||
Die den LED-Streifen beigelegten Fernbedienungen sollten sich mit den YS-IRTM Modulen auslesen lassen. Ein Replay, also das Steuern der LED-Streifen mit den ausgelesenen IR Daten, sollte machbar sein. Auch LED-Streifen mit einzel auswählbaren LEDs (z.B. [https://www.led-genial.de/LED-Controller-M-fuer-WS2812-inkl-Fernbedienung WS2812(B)]) sollten steuerbar sein, gemäß Optionen der Fernbedienung. | |||
Der [https://user-images.githubusercontent.com/2816602/100772766-b2423c00-3408-11eb-8ce3-3f13aa15e629.png Schaltplan] ist sehr einfach. Neben dem YS-IRTM Modul braucht es nur einen [https://www.tinytronics.nl/shop/en/communication-and-signals/level-converters/i2c-uart-bi-directional-logic-level-converter-5v-3.3v-2-channel-with-supply 3,3V zu 5V Levelshifter]. | |||
Die Webseite sollte analog zu [https://www.robotique.tech/robotics/light-leds-by-wifi-with-the-esp32/ dieser Lösung] implementiert werden. Diese wird dabei von dem ESP32 alleine vorgehalten ("gehostet"). | |||
[ | Neben einer Browserlösung sollte eine [https://www.redhat.com/sysadmin/telnet-netcat-troubleshooting Telnet (Netcat) Anbindung] möglich gemacht werden, zur Nutzung per Labor Automation. Evtl. könnte auch ein SSH Zugang implementiert werden. | ||
<big>Materialsammlung</big> | <big>Materialsammlung</big> | ||
*[https://randomnerdtutorials.com/esp32-esp8266-rgb-led-strip-web-server/ C-Beispielcode, inkl. Farbauswahl per | *[https://randomnerdtutorials.com/esp32-esp8266-rgb-led-strip-web-server/ C-Beispielcode, inkl. Farbauswahl per Webseite, Einsatz von Transistoren, kein IR, 5V RGB LED Streifen] | ||
*[https://github.com/mcauser/micropython-ys-irtm MicroPython Code für YS-IRTM] | *[https://github.com/mcauser/micropython-ys-irtm MicroPython Code für YS-IRTM] | ||
*[https:// | *[https://www.sbprojects.net/knowledge/ir/nec.php NEC IR Protokoll] / [https://www.renesas.com/us/en/document/apn/1184-remote-control-ir-receiver-decoder Renesas Appl. Note] | ||
*[https://arduinodiy.wordpress.com/2016/11/02/bruteforce-code-finding-in-an-rgb-infrared-ledstrip/ BruteForce code finding in an RGB Infrared LEDstrip] | *[https://arduinodiy.wordpress.com/2016/11/02/bruteforce-code-finding-in-an-rgb-infrared-ledstrip/ BruteForce code finding in an RGB Infrared LEDstrip] | ||
*[https://www.mikrocontroller.net/articles/IRMP IRMP - Infrarot-Multiprotokoll-Decoder] | |||
*[https://docplayer.net/101050357-Nec-infrared-codec-module-ver1-0-ys-irtm.html NEC Infrared Codec Module - YS-IRTM - Befehlsreferenz (Sende- / Empfangsparameter)] | |||
*[https://www.cnx-software.com/2017/04/20/karls-home-automation-project-part-4-mqtt-bridge-updated-to-use-ys-irtm-ir-receiver-transmitter-with-nodemcu/ MQTT Bridge Updated to Use YS-IRTM IR Receiver & Transmitter with NodeMCU] | |||
*[https://arduino-projekte.info/produkt/d1-mini-esp32-wifi-bluetooth/ ESP32 D1 Mini Pinout] | |||
*[https://woodsgood.ca/projects/2015/02/13/rgb-led-strip-controllers-ir-codes/ RGB-LED Strip Controllers: IR-Codes (24 Key / 44 Key)] - [https://www.mikrocontroller.net/topic/425148 LSB first?] | |||
*[https://dronebotworkshop.com/using-ir-remote-controls-with-arduino/ Arduino C Beispielcode für Fernbedienungsemulation ohne YS-IRTM, mit Protokollerkenner] / [https://www.makerguides.com/ir-receiver-remote-arduino-tutorial/ Alternative] | |||
<big>Bilder Bauteile und Aufbauten</big> | |||
Hierbei müssen die Bilder ähnlich [https://community.openmqttgateway.com/t/ys-irtm-1-30-all-in-one-ir-send-receive-module/49/2 dieser Quelle] für diese Wiki Seite noch aufgenommen und eingebaut werden. | |||
<!--[[Datei:Bauteile Thekenlicht.jpg|mini]]--> | |||
<big>MicroPython Beispielquelltext (vgl. [https://github.com/mcauser/micropython-ys-irtm Quelle])</big> | |||
<pre>from machine import UART | |||
uart = UART(1, tx=14, rx=15, baudrate=9600) | |||
# Sniffen einer Fernbedienungstaste (IR-Daten) | |||
def sniff(): | |||
while True: | |||
if uart.any(): | |||
print(uart.readline()) | |||
# Beispielausgabe: b'\x00\xff\x45' | |||
# Replay der IR-Daten | |||
def replay(): | |||
uart.write(bytearray(b'\xa1\xf1\x00\xff\x45')) | |||
uart.read() | |||
# TODO: Auswerten | |||
# Falls b'\xf1' zurückgegeben wird, so war das Senden erfolgreich; | |||
# der LED-Streifen sollte auf das entsprechende IR-Kommando reagieren | |||
</pre> | |||
<big>C Beispielquelltext (vgl. [https://www.youtube.com/watch?v=lbAT3R5z-i0 Quelle] / [https://wiki.seeedstudio.com/Software-Serial/ Pinbelegung])</big> | |||
<pre>#include <SoftwareSerial.h> | |||
SoftwareSerial uart(2, 3); // RX = D2, TX = D3 (bei Arduino Nano) | |||
void setup() { | |||
Serial.begin(9600); | |||
uart.begin(9600); | |||
} | |||
// Sniffen einer Fernbedienungstaste (IR-Daten) | |||
// Beispielausgabe: b'\x00\xff\x45' | |||
void sniff() { | |||
while (true) { | |||
if (uart.available()) { | |||
Serial.println(uart.readString()); | |||
} | |||
} | |||
// Replay der IR-Daten | |||
// Der LED-Streifen sollte auf das entsprechende IR-Kommando reagieren | |||
void replay(){ | |||
byte replayData[] = {0xa1, 0xf1, 0x00, 0xff, 0x45}; | |||
uart.write(replayData, sizeof(replayData)); | |||
byte response = uart.read(); | |||
// Falls 0xf1 zurückgegeben wird, so war das Senden erfolgreich | |||
if (response == 0xf1) { | |||
Serial.println("IR-Command sent!"); | |||
} | |||
for(;;){} // Stop hier | |||
} | |||
void loop() { | |||
sniff(); | |||
//replay(); | |||
} | |||
</pre> | |||
<big>Linux Bash Skript</big> | |||
Hiermit sollten [https://www.elektor.de/ch340-usb-to-ttl-converter-uart-module-ch340g-3-3-v-5-5-v USB-TTL-Wandler] nutzbar zu machen sein. Dies ermöglicht die Steuerung von LED-Streifen von Linux (u.a. PC mit USB, ohne Mikrocontroller) aus. Der Code sollte ähnlich [https://github.com/mongoq/Diskstation-Funksteckdosen/blob/main/sendtonano.sh dieser Quelle] aussehen. Der USB-TTL-Wandler sollte auf 5V eingestellt sein (falls wählbar); dabei entfällt dann natürlich der 3,3V zu 5V Levelshifter. Zum anfänglichen Testen sollte man [https://askubuntu.com/questions/360179/sending-hex-with-cutecom CuteCom] nehmen. | |||
<pre> | |||
#!/bin/bash | |||
#TODO: Sniff und Replay Code getrennt | |||
tty=/dev/ttyUSB0 | |||
stty -F $tty cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl | |||
echo -n -e "\xa1\xf1\x00\xff\x45" > $tty | |||
#read "reply" < $tty | |||
#echo "Reply Command: $reply" | |||
</pre> | |||
<big>PC Python Lösung</big> | |||
Folgender Code schaltet MongoQs LED-Streifen an und wieder aus. Erfolgreich getestet! Üblicher USB-TTL Wandler. | |||
<pre> | |||
import serial | |||
from time import sleep | |||
ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, timeout=1) | |||
data_to_send = bytearray(b'\xfa\xf1\x00\xef\x03') | |||
ser.write(data_to_send) | |||
sleep(1) | |||
data_to_send = bytearray(b'\xfa\xf1\x00\xef\x02') | |||
ser.write(data_to_send) | |||
sleep(1) | |||
ser.close() | |||
</pre> | |||
<big>Kommandos</big> | |||
<pre>TODO: Die "großen" Fernbedienungen für LED-Streifen laufen nicht. | |||
https://github.com/mcauser/micropython-ys-irtm | |||
https://github.com/mcauser/micropython-ys-irtm/blob/master/remotes.md | |||
https://www.sbprojects.net/knowledge/ir/nec.php</pre> |
Aktuelle Version vom 28. September 2024, 02:10 Uhr
Thekenlicht Release status: experimental [box doku] | |
---|---|
Description | LED-Leiste unter der Thekenplatte (Küche), steuerbar über Laborautomation |
Author(s) | Kanga, MongoQ, Andreas |
Last Version | 0.2 |
News
- Die Beispiel YS-IRTM Module konnten erfolgreich in Betrieb genommen werden. Ein Test mit MongoQs eigenem LED-Streifen verlief erfolgreich. Es gibt jetzt für das Labor die LED-Streifen in 3x-RGBW-Ausführung.
- Eine LED-Lichtsäule wurde beschafft (von Aldi). Die Fernbedienung (wohl auch mit dem NEC Protokoll) wird alsbald ausgemessen. Dies sollte aber kein Problem darstellen.
- Eine Platine ist in Mache (KiCad), bei der die Level Shifter mittels BS170 N-Kanal Mosfets realisiert werden. Auf die Platine sollen auch die ESP32 Boards in der im Labor verfügbaren Version verlötet werden (machbar auch für Lötanfänger). Und natürlich die YS-IRTM Module. Die BS170 wurden beschafft (20x).
LED-Leiste
Angedacht ist eine LED-Leiste, die unter der Thekenplatte in der Küche befestigt wird, mit der man eine Beleuchtung hat, um auf der Arbeitsplatte Drinks (z.B. Tschunk) ohne "Festagsbeleuchtung" zu mischen. Die LED-Farben sollen per Webseite (bzw. Laborautomation) steuerbar sein; zudem sollen Funktionen wie Fading, Blinken und Ein- und Ausschalten implementiert werden.
Thekenaufbau
Nutzung von "beliebigen" LED-Streifen
Es sollen für Teilnehmer der Arduino Gruppe "beliebige" RGB LED-Streifen (ähnlich diesem), die über eine Fernbedienung verfügen, nutzbar gemacht werden. Der Theorie nach (nach ausgiebiger Forenrecherche) arbeiten die meisten Fernbedienungen mit dem NEC IR Protokoll.
Dabei sollen ESP32 Boards (mit Wlan Funktionalität) verwendet werden. Eine Entscheidung für C oder MicroPython wurde noch nicht getroffen.
Die Idee ist hierbei, dass man YS-IRTM Module verwendet. Diese sprechen das NEC IR Protokoll (bidirektional) und verhalten sich dabei wie ein UART. Die gesamte "Magie" der richtigen Modulation wird eingekapselt und muss so nicht selber programmiert werden. Lediglich mehrere Bytes müssen gelesen und geschrieben werden über eine UART Verbindung. Quasi beliebige Mikrocontroller sollten sich so sehr einfach anbinden lassen.
Die den LED-Streifen beigelegten Fernbedienungen sollten sich mit den YS-IRTM Modulen auslesen lassen. Ein Replay, also das Steuern der LED-Streifen mit den ausgelesenen IR Daten, sollte machbar sein. Auch LED-Streifen mit einzel auswählbaren LEDs (z.B. WS2812(B)) sollten steuerbar sein, gemäß Optionen der Fernbedienung.
Der Schaltplan ist sehr einfach. Neben dem YS-IRTM Modul braucht es nur einen 3,3V zu 5V Levelshifter.
Die Webseite sollte analog zu dieser Lösung implementiert werden. Diese wird dabei von dem ESP32 alleine vorgehalten ("gehostet").
Neben einer Browserlösung sollte eine Telnet (Netcat) Anbindung möglich gemacht werden, zur Nutzung per Labor Automation. Evtl. könnte auch ein SSH Zugang implementiert werden.
Materialsammlung
- C-Beispielcode, inkl. Farbauswahl per Webseite, Einsatz von Transistoren, kein IR, 5V RGB LED Streifen
- MicroPython Code für YS-IRTM
- NEC IR Protokoll / Renesas Appl. Note
- BruteForce code finding in an RGB Infrared LEDstrip
- IRMP - Infrarot-Multiprotokoll-Decoder
- NEC Infrared Codec Module - YS-IRTM - Befehlsreferenz (Sende- / Empfangsparameter)
- MQTT Bridge Updated to Use YS-IRTM IR Receiver & Transmitter with NodeMCU
- ESP32 D1 Mini Pinout
- RGB-LED Strip Controllers: IR-Codes (24 Key / 44 Key) - LSB first?
- Arduino C Beispielcode für Fernbedienungsemulation ohne YS-IRTM, mit Protokollerkenner / Alternative
Bilder Bauteile und Aufbauten
Hierbei müssen die Bilder ähnlich dieser Quelle für diese Wiki Seite noch aufgenommen und eingebaut werden.
MicroPython Beispielquelltext (vgl. Quelle)
from machine import UART uart = UART(1, tx=14, rx=15, baudrate=9600) # Sniffen einer Fernbedienungstaste (IR-Daten) def sniff(): while True: if uart.any(): print(uart.readline()) # Beispielausgabe: b'\x00\xff\x45' # Replay der IR-Daten def replay(): uart.write(bytearray(b'\xa1\xf1\x00\xff\x45')) uart.read() # TODO: Auswerten # Falls b'\xf1' zurückgegeben wird, so war das Senden erfolgreich; # der LED-Streifen sollte auf das entsprechende IR-Kommando reagieren
C Beispielquelltext (vgl. Quelle / Pinbelegung)
#include <SoftwareSerial.h> SoftwareSerial uart(2, 3); // RX = D2, TX = D3 (bei Arduino Nano) void setup() { Serial.begin(9600); uart.begin(9600); } // Sniffen einer Fernbedienungstaste (IR-Daten) // Beispielausgabe: b'\x00\xff\x45' void sniff() { while (true) { if (uart.available()) { Serial.println(uart.readString()); } } // Replay der IR-Daten // Der LED-Streifen sollte auf das entsprechende IR-Kommando reagieren void replay(){ byte replayData[] = {0xa1, 0xf1, 0x00, 0xff, 0x45}; uart.write(replayData, sizeof(replayData)); byte response = uart.read(); // Falls 0xf1 zurückgegeben wird, so war das Senden erfolgreich if (response == 0xf1) { Serial.println("IR-Command sent!"); } for(;;){} // Stop hier } void loop() { sniff(); //replay(); }
Linux Bash Skript
Hiermit sollten USB-TTL-Wandler nutzbar zu machen sein. Dies ermöglicht die Steuerung von LED-Streifen von Linux (u.a. PC mit USB, ohne Mikrocontroller) aus. Der Code sollte ähnlich dieser Quelle aussehen. Der USB-TTL-Wandler sollte auf 5V eingestellt sein (falls wählbar); dabei entfällt dann natürlich der 3,3V zu 5V Levelshifter. Zum anfänglichen Testen sollte man CuteCom nehmen.
#!/bin/bash #TODO: Sniff und Replay Code getrennt tty=/dev/ttyUSB0 stty -F $tty cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl echo -n -e "\xa1\xf1\x00\xff\x45" > $tty #read "reply" < $tty #echo "Reply Command: $reply"
PC Python Lösung
Folgender Code schaltet MongoQs LED-Streifen an und wieder aus. Erfolgreich getestet! Üblicher USB-TTL Wandler.
import serial from time import sleep ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, timeout=1) data_to_send = bytearray(b'\xfa\xf1\x00\xef\x03') ser.write(data_to_send) sleep(1) data_to_send = bytearray(b'\xfa\xf1\x00\xef\x02') ser.write(data_to_send) sleep(1) ser.close()
Kommandos
TODO: Die "großen" Fernbedienungen für LED-Streifen laufen nicht. https://github.com/mcauser/micropython-ys-irtm https://github.com/mcauser/micropython-ys-irtm/blob/master/remotes.md https://www.sbprojects.net/knowledge/ir/nec.php