Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
de:tech:gardenled [2022/11/14 13:23] – bullar | de:tech:gardenled [2022/11/14 15:56] (aktuell) – bullar | ||
---|---|---|---|
Zeile 20: | Zeile 20: | ||
Bei einem Preis von unter 4€ pro Stück kommt das ganze wirklich in einem wasserfesten Alugehäuse mit einer internen Steuerplatine und funktioniert! Lichtgeber ist eine 3mm LED die mit 21.5V bei einem Konstantstrom von 266mA betrieben wird. Die höhere Spannung wird durch einen Boost Regler [[http:// | Bei einem Preis von unter 4€ pro Stück kommt das ganze wirklich in einem wasserfesten Alugehäuse mit einer internen Steuerplatine und funktioniert! Lichtgeber ist eine 3mm LED die mit 21.5V bei einem Konstantstrom von 266mA betrieben wird. Die höhere Spannung wird durch einen Boost Regler [[http:// | ||
- | {{: | + | <WRAP group> |
+ | <WRAP half column> | ||
+ | {{ : | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | {{: | ||
+ | </ | ||
+ | </ | ||
Jetzt brauchen wir nur ein Idee wie wir die im Home Assistant ausgewählte Dimmung für jedes Spotlight als PWM Signal bereitstellen. Das Gehäuse der LED erlaubt dabei keine voluminöse Lösung. [[https:// | Jetzt brauchen wir nur ein Idee wie wir die im Home Assistant ausgewählte Dimmung für jedes Spotlight als PWM Signal bereitstellen. Das Gehäuse der LED erlaubt dabei keine voluminöse Lösung. [[https:// | ||
- | Erste Versuche mit einer Kommunikation über Niedrigvoltleitungen schlugen aus Zuverlässigkeits- und Skalierungsgründen fehl. Dazu gibt es durchaus einen pfiffigen Ansatz: [[https:// | + | Erste Versuche mit einer Kommunikation über Niedrigvoltleitungen schlugen aus Zuverlässigkeits- und Skalierungsgründen fehl. Dazu gibt es durchaus einen pfiffigen Ansatz: [[https:// |
Für Datenübertragungen über mehrere zehn Meter kommt einem immer auch [[https:// | Für Datenübertragungen über mehrere zehn Meter kommt einem immer auch [[https:// | ||
Zeile 40: | Zeile 47: | ||
{{ : | {{ : | ||
- | Der LED Boot Driver ist identisch zur Originalversion und nur durch die PWM-Ansteuerung ergänzt. Da ich bei den ersten Versuchen ein paar Hardwareausfälle (ATTINY85 + BP1808) wegen Überspannung hatte, wird das PWM Signal galvanisch mit einem Optokoppler (OC1) getrennt. An der RS485 Schnittstelle sind auch optional die Abschlusswiderstände vorgesehen (R1,R3,R4). Der MAXIM Baustein arbeitet im Halb-Duplex, | + | Der LED Boot Driver ist identisch zur Originalversion und nur durch die PWM-Ansteuerung ergänzt. Da ich bei den ersten Versuchen ein paar Hardwareausfälle (ATTINY85 + BP1808) wegen Überspannung hatte, wird das PWM Signal galvanisch mit einem Optokoppler (OC1) getrennt. An der RS485 Schnittstelle sind auch optional die Abschlusswiderstände vorgesehen (R1,R3,R4). Der MAXIM Baustein arbeitet im Halb-Duplex, |
==== PCB ==== | ==== PCB ==== | ||
Zeile 52: | Zeile 60: | ||
{{ : | {{ : | ||
- | Um die Platine elektrisch isoliert in das Gehäuse einzubauen drucke ich aus flexiblem TPU ein zweiteiliges Cover. An beiden Enden über die Platine geschoben bleibt dann alles vor ungewollten Kurzschlüssen geschützt. | + | Um die Platine elektrisch isoliert in das Gehäuse einzubauen, drucke ich aus flexiblem TPU ein zweiteiliges Cover. An beiden Enden über die Platine geschoben bleibt dann alles vor ungewollten Kurzschlüssen geschützt. |
- | + | ||
+ | {{ : | ||
===== Firmware ===== | ===== Firmware ===== | ||
- | Den physikalischen Layer haben wir mit RS485 gewählt | + | Den physikalischen Layer haben wir mit RS485 festgelegt |
In meiner Implementierung besteht ein Frame aus 13 Bytes: | In meiner Implementierung besteht ein Frame aus 13 Bytes: | ||
- | * drei Header Bytes (0xAA) | + | * 3x Header Bytes (0xAA) |
- | * des ID Bytes (0..15) | + | * 1x ID Bytes (0..15) |
- | * drei Bytes Payload | + | * 3x Bytes Payload |
* Function (0...255) | * Function (0...255) | ||
* Value (0...255) | * Value (0...255) | ||
* Delay (0...255) | * Delay (0...255) | ||
- | * vier CRC Bytes (32-bit) | + | * 4x CRC Bytes (32-bit) |
- | * ein EOF Byte (0x55) | + | * 1x EOF Byte (0x55) |
- | der je nach Funktion vom Spotlight beantwortet wird. Bei Broadcastbefehlen erfolgt keine Antwort der Gegenseite. Hier die kurze Befehlsübersicht: | + | der je nach Funktion vom angesprochenen |
< | < | ||
Zeile 103: | Zeile 110: | ||
In den Spotlights lassen sich auch individuelle Helligkeits- und Fadewerte abspeichern, | In den Spotlights lassen sich auch individuelle Helligkeits- und Fadewerte abspeichern, | ||
+ | |||
==== Programmierung ==== | ==== Programmierung ==== | ||
- | In der Werkseinstellung des ATTINY85 ist das // | + | In der Werkseinstellung des ATTINY85 ist das // |
{{ : | {{ : | ||
- | Das Debug- und Programmingtool der ersten Wahl ist und bleibt //SNAP (PG164100)// | + | Das Debug- und Programmingtool der ersten Wahl ist und bleibt |
{{ : | {{ : | ||
+ | |||
===== Integration ===== | ===== Integration ===== | ||
- | Hat man die Spotlights wie oben beschrieben programmiert, | + | Hat man die Spotlights wie oben beschrieben programmiert, |
- | Mein Wunsch | + | Mein Ziel ist es aber die Spotlights in Home Assistant (HA) zu integrieren. Dazu brauchen wir ein Gateway, das die Spotlights als //Lights// in HA abbildet und zusätzlich einen UART Server |
- | Für den UART server | + | Für den UART Server |
<code C> | <code C> | ||
Zeile 140: | Zeile 149: | ||
</ | </ | ||
- | Für die Einbindung der LEDs als Lights schreiben wir wieder ein //custom component// | + | Für die Einbindung der LEDs als Lights schreiben wir wieder ein //custom component// |
++++ garden-leds.h | | ++++ garden-leds.h | | ||
Zeile 397: | Zeile 406: | ||
Gegebenenfalls müssen die Pins '' | Gegebenenfalls müssen die Pins '' | ||
+ | |||
+ | |||
==== Hardware Gateway ==== | ==== Hardware Gateway ==== | ||
Zeile 408: | Zeile 419: | ||
| GND | GND | | | GND | GND | | ||
- | Das Ganze dann auf einer Lochrasterplatine aufgelötet und verpackt | + | Das Ganze dann auf einer Lochrasterplatine aufgelötet und in einem wasserfesten Gehäuse |
{{ : | {{ : | ||
+ | |||
==== Gesamtverdrahtung ==== | ==== Gesamtverdrahtung ==== | ||
- | Zwischen den Spotlights und dem Gateway wird ein 4-adriges Kabel benötigt. Da ich Aussen in einem wasserdichten Rohr verlege, reicht mir eine PVC-Schlauchleitung H03VV-F4G0, | + | Zwischen den Spotlights und dem Gateway wird ein 4-adriges Kabel benötigt. Da ich Aussen in einem wasserdichten Rohr verlege, reicht mir eine PVC-Schlauchleitung H03VV-F4G0, |
^ Gateway | ^ Gateway | ||
Zeile 422: | Zeile 434: | ||
| B | B | B | ... | B | | | B | B | B | ... | B | | ||
- | Je nach Anzahl der Spots brauchen wir noch ein leistungsfähigen Trafo für ~230V auf ~12V. Hier kann man z.B. einen gebrauchten Halogentrafo wiederverwenden. Die finden sich zuhauf in Gebrauchtwarenmärkten. Meinen 200W Trafo inkl. Sicherungen gab es dort für 8, | + | Je nach Anzahl der Spots brauchen wir noch einen leistungsfähigen Trafo für ~230V auf ~12V. Hier kann man z.B. einen gebrauchten Halogentrafo wiederverwenden. Die finden sich zuhauf in Gebrauchtwarenmärkten. Meinen 200W Trafo von ABB inkl. Sicherungen gab es dort für 8, |
===== Inbetriebnahme ===== | ===== Inbetriebnahme ===== | ||
- | Schliessen wir nun das fertig verdrahtete Konqlumerat an, steht uns das Licht mit DImmfunktion in Home Assistant zur Verfügung. Die Fadezeit kann dort festgelegt werden und steht standardmässig auf 1s. Durch den Stream-Server können wir aber auch mit z.B. einem PC auf die LEDs zugreifen. Dazu habe ich ein kleines Pythonprogramm geschrieben (Source Code im Downloadbereich). | + | Schliessen wir nun das fertig verdrahtete Konqlumerat an, steht uns das Licht mit DImmfunktion in Home Assistant zur Verfügung. Die Fadezeit kann auch dort festgelegt werden und steht standardmässig auf 1s. Durch den Stream-Server können wir aber auch mit z.B. einem PC auf die LEDs zugreifen. Dazu habe ich ein kleines Pythonprogramm geschrieben (Source Code im Downloadbereich). |
{{ : | {{ : | ||
Zeile 444: | Zeile 456: | ||
* {{: | * {{: | ||
* {{: | * {{: | ||
+ | * {{: | ||
* {{: | * {{: | ||
* {{: | * {{: |