Dynamische Beleuchtung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 70: Zeile 70:
'''3. Turm(90x20x2mm & 90x16x2mm):''' Der Turm beinhaltet die LED-Lichtleiste, die mit Hilfe von Doppelseitigem Klebeband an eine der vier Wände befestigt wurde. Der Turm an sich steht genau oben drauf in der Mitte des Gehäuses.
'''3. Turm(90x20x2mm & 90x16x2mm):''' Der Turm beinhaltet die LED-Lichtleiste, die mit Hilfe von Doppelseitigem Klebeband an eine der vier Wände befestigt wurde. Der Turm an sich steht genau oben drauf in der Mitte des Gehäuses.


Softwaretechnisch wurde das Projekt mit Hilfe der Arduino IDE und der Adafruit NeoPixel Library realisiert.
 
Softwaretechnisch wurde das Projekt mit Hilfe der Arduino IDE und der Adafruit NeoPixel Library realisiert. Denn durch die benötigte externe Bibliothek war es uns nicht möglich das Projekt im Matlab/Simulink zu programmieren. Zur Filterung kam ein gleitender Mittelwert zum Einsatz, der das Signal glättet und ein zeitverzögertes (PT1) Verhalten mit sich bringt.


== Komponententest ==
== Komponententest ==
Zeile 79: Zeile 80:
[[Datei:Fotowiderstand_Test.PNG|400px]]
[[Datei:Fotowiderstand_Test.PNG|400px]]


Mit Hilfe einer einfachen weißen LED, die wir über Pulsweiten-Modulation angesteuert haben, konnten wir erkennen, wie sich der Fotowiderstand bei verschiedenen Lichtverhältnissen verhält. Dabei ist uns aufgefallen, dass der Fotowiderstand proportional zu externen Lichteinflüssen reagiert. Um den gewünschten Effekt zu erzielen, mussten wir die analogen Werte des Fotowiderstands invertieren. Da wir wissen, dass die analogen Eingänge des Arduino eine 10-Bit Auflösung besitzen, mussten wir die eingelesenen Werte mit 1023 subtrahieren. Am Ende hatten wir dann schon fast den gewünschten Effekt.
Mit Hilfe einer einfachen weißen LED, die wir über Pulsweiten-Modulation angesteuert haben, konnten wir erkennen, wie sich der Fotowiderstand bei verschiedenen Lichtverhältnissen verhält. Dabei ist uns aufgefallen, dass der Fotowiderstand proportional zu externen Lichteinflüssen reagiert. Um den gewünschten Effekt zu erzielen, mussten wir die analogen Werte des Fotowiderstands invertieren. Da wir wissen, dass die analogen Eingänge des Arduino eine 10-Bit Auflösung besitzen, mussten wir die eingelesenen Werte mit 1023 subtrahieren.  




Zeile 91: Zeile 92:


Durch die integrierte Schaltung in den LEDs mussten diese anders angesteuert werden, als normale LEDs. Denn die Besonderheit der WS2812b LEDs liegt darin, dass man über einen digitalen Eingang mehrere LEDs '''einzeln''' ansteuern kann. Dabei wird ein getaktetes Signal über den digitalen Ausgang des Arduino gesendet. Dieses Signal enthält die Zustände der einzelnen LEDs in Form von Speicher-Adressen. Durch die Taktung entsteht jedoch eine Verzögerung zwischen den einzelnen LEDs. Diese ist aber so minimal, dass sie erst bei einer Anzahl von >1000 LEDs bemerkbar wird.
Durch die integrierte Schaltung in den LEDs mussten diese anders angesteuert werden, als normale LEDs. Denn die Besonderheit der WS2812b LEDs liegt darin, dass man über einen digitalen Eingang mehrere LEDs '''einzeln''' ansteuern kann. Dabei wird ein getaktetes Signal über den digitalen Ausgang des Arduino gesendet. Dieses Signal enthält die Zustände der einzelnen LEDs in Form von Speicher-Adressen. Durch die Taktung entsteht jedoch eine Verzögerung zwischen den einzelnen LEDs. Diese ist aber so minimal, dass sie erst bei einer Anzahl von >1000 LEDs bemerkbar wird.
Um nun die LEDs ansteuern zu können, nutzten wir die Adafruit NeoPixel Library. Dabei handelt es sich um eine Programmbibliothek, die uns erweiterte Funktionen zur Steuerung der LEDs zur Verfügung stellt. Mit Hilfe dieser Programmbibliothek testeten wir das ganze erstmal an einer WS2812b 8mm LED.




'''3. Schritt: Filterung des Sensorsignals'''
'''3. Schritt: Filterung des Sensorsignals'''
Um nun den gewünschten Effekt zu verbessern, musste wir die Sensorwerte vorher erst anpassen. Dabei stellte sich uns die Frage, mit welchen Methoden der Mess- und Regelungstechnik wollen wir unseren Regelkreis optimieren? Dafür schauten wir uns die Sensorkennlinie des Fotowiderstandes an und erkannten, dass dieser relativ linear arbeitet. Ein Rauschen war jedoch klar erkennbar. Um nun dieses Rauschen zu eliminieren nutzten wir einen gleitenden Mittelwert. Der Mikrocontroller nimmt einen Messwert des Sensors auf und speichert diesen in einem Array von n Werten. Zu Beginn der Messung sind alle n Werte im Array gleich Null und während der gesamten Messung wird eine Summe der Messwerte des Arrays geteilt durch die Anzahl n der Array Elemente gebildet. Bei jedem Schleifendurchlauf wird der Index um Eins erhöht. Sobald wir das Ende des Arrays erreicht haben wird der Array-Index wieder auf Null gesetzt und der letzte Messwert von der Summe subtrahiert. Dadurch erhalten wir ein zeitverzögertes Verhalten, was einem PT1-Regler/Tiefpassfilter sehr Nahe kommt.


== Ergebnis ==
== Ergebnis ==


== Zusammenfassung ==
== Zusammenfassung ==
Mit Hilfe unseres Wissens aus der Elektrotechnik, der Informatik und der Mess- & Regelungstechnik ist es uns gelungen, eine sich selbst regulierende Lampe inkl. digitalem Filter zu erschaffen.
=== Lessons Learned ===
=== Lessons Learned ===


- Ansteuerung von WS2812b LEDs mit Hilfe der externen Adafruit NeoPixel Library.
- Ansteuerung von WS2812b LEDs mit Hilfe der externen Adafruit NeoPixel Library.
- Funktionsweise der WS2812b LED


- Digitale Filterung/Glättung von analogen Messsignalen.
- Digitale Filterung/Glättung von analogen Messsignalen.
Zeile 110: Zeile 121:
== Projektunterlagen ==
== Projektunterlagen ==
=== Projektplan ===
=== Projektplan ===
[[Datei:Dynamische Beleuchtung Projektplan.png|700px]]
=== Projektdurchführung ===
=== Projektdurchführung ===



Aktuelle Version vom 11. Januar 2022, 11:31 Uhr

Autoren: Adam Kaczmarek & Tristan Thörner
Betreuer: Prof. Göbel & Prof. Schneider


→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik (BSE)

Abb. 1: Fertige Lampe


Einleitung

In diesem Projekt soll eine dynamische, sich der Helligkeit anpassende Beleuchtung entwickelt werden. Diese Beleuchtung kann dann in Form einer Lampe auf den (Schreib-)Tisch gestellt werden. Die Beleuchtung passt ihre Helligkeit mit Hilfe eines Fotowiderstands an die gegebenen Lichtverhältnisse im Raum an. Die eigentliche "Lampe" besteht aus 8 WS2812b LEDs, die mit Hilfe von integrierter Schaltungen auf den LEDs, Signale von LED zu LED weiterreichen können. Dadurch lassen sich viele LEDs in SMD Bauweise aneinander schalten. Außerdem wird dadurch auch der Abstand zwischen den LEDs verringert.

Anforderungen

- Zum Einschalten wird ein einfacher Schalter verwendet.

- Die Helligkeit der LEDs soll mit Hilfe eines Helligkeitssensors (Fotowiderstand/LDR) geregelt werden.

- Die Beleuchtung passt sich an die gegebenen Lichtverhältnisse an. Je dunkler es im Raum wird, desto heller leuchten die LEDs.

Funktionaler Systementwurf/Technischer Systementwurf

Hellblauer Balken = LED Lichtleiste; Hellgrauer Kreis = Einschalter.

Gelbes Viereck = Helligkeitssensor (Position noch nicht genau definiert)


Komponentenspezifikation

- AZ-Delivery Prototyping Shield inkl. mini Breadboard

- NeoPixel 8x WS2812b 5V LEDs mit RGB Funktion und integrierter Treiberschaltung

- Externes 5V 0.7A Smartphone Netzteil (Marke: Samsung)

- Fotowiderstand inkl. 1kΩ Pull-Down Widerstand (aus dem Funduino Kasten)

- 330Ω Vorwiderstand für den digitalen Eingang der LEDs (300-500Ω)

- 220µF Kondensator zur Glättung von Stromspitzen (100-1000µF)

Umsetzung (HW/SW)

- Die Spannungsversorgung erfolgt durch ein altes Smartphone Netzteil (z.B. Samsung) mit 5 Volt Nennspannung und bis zu 0,7 A Ausgangsstrom. Dieses Netzteil ist in der Lage die LEDs und den Arduino selbst inkl. Sensor mit Strom zu versorgen. (Jede WS2812b LED benötigt bei maximaler Leistung [255 rot, 255 grün, 255 blau] ca. 60 mA)

- Der Fotowiderstand wird mit Hilfe eines 1kΩ Pull-Down Widerstandes an den analogen Eingang A0 des Arduino angeschlossen.

- Zu guter Letzt werden die WS2812b LEDs inklusive Treiberschaltung mit dem digitalen Eingang über einen 330Ω Widerstand an den digitalen PWM-Ausgang des Arduino angeschlossen.

- Parallel zum Eingang des Netzteils wird der 220µF Kondensator angeschlossen.


Alle Komponenten wurden auf einem Prototyping Shield verkabelt. Das Prototyping Shield erhöht die Anzahl an 5V und GND Ausgängen und sorgt dafür, dass alle Ein- und Ausgänge auf einer Ebene mit einem Mini Breadboard liegen.

Als Material für das Gehäuse hatten wir uns für ein Gehäuse aus Acrylglas mit 2mm Wanddicke entschieden. Dabei wurde jede einzelne Wand per Hand aus einer Acrylglasplatte zurechtgeschnitten. Das Gehäuse lässt sich in drei modulare Teile einteilen:

1. Grundplatte(90x90x2mm): Unter dieser Bodenplatte befinden sich vier Unterlegscheiben aus Eisen. Diese wurden an jede Ecke unter die Acrylglasplatte geklebt. Auf der Grundplatte steht der Arduino auf vier Kunststofffüßen.

2. Gehäuse(90x90x2mm & 90x60x2mm & 86x60x2mm): Das Gehäuse schützt den Arduino vor äußeren Umwelteinflüssen. Außerdem befinden sich vier Permanent-Magnete an den unteren Ecken des Gehäuses. Dadurch lässt sich das Gehäuse einfach öffnen und schließen. In der Mitte der oberen Deckplatte befindet sich ein ungefähr 5-7 mm dickes Loch. Dieses Loch wird benötigt, um die Kabel der LED-Lichtleiste durchführen zu können.

3. Turm(90x20x2mm & 90x16x2mm): Der Turm beinhaltet die LED-Lichtleiste, die mit Hilfe von Doppelseitigem Klebeband an eine der vier Wände befestigt wurde. Der Turm an sich steht genau oben drauf in der Mitte des Gehäuses.


Softwaretechnisch wurde das Projekt mit Hilfe der Arduino IDE und der Adafruit NeoPixel Library realisiert. Denn durch die benötigte externe Bibliothek war es uns nicht möglich das Projekt im Matlab/Simulink zu programmieren. Zur Filterung kam ein gleitender Mittelwert zum Einsatz, der das Signal glättet und ein zeitverzögertes (PT1) Verhalten mit sich bringt.

Komponententest

1. Schritt: Fotowiderstand mit der Arduino IDE auslesen.


Mit Hilfe einer einfachen weißen LED, die wir über Pulsweiten-Modulation angesteuert haben, konnten wir erkennen, wie sich der Fotowiderstand bei verschiedenen Lichtverhältnissen verhält. Dabei ist uns aufgefallen, dass der Fotowiderstand proportional zu externen Lichteinflüssen reagiert. Um den gewünschten Effekt zu erzielen, mussten wir die analogen Werte des Fotowiderstands invertieren. Da wir wissen, dass die analogen Eingänge des Arduino eine 10-Bit Auflösung besitzen, mussten wir die eingelesenen Werte mit 1023 subtrahieren.


2. Schritt: WS2812b LED mit der Adafruit NeoPixel Library ansteuern.


Bild der WS2812b Lichtleiste Nahaufnahme der WS2812b LED

Nahaufnahme der WS2812b LED Lichtleiste. (aufgenommen mit einem Samsung Galaxy S21 Ultra)


Durch die integrierte Schaltung in den LEDs mussten diese anders angesteuert werden, als normale LEDs. Denn die Besonderheit der WS2812b LEDs liegt darin, dass man über einen digitalen Eingang mehrere LEDs einzeln ansteuern kann. Dabei wird ein getaktetes Signal über den digitalen Ausgang des Arduino gesendet. Dieses Signal enthält die Zustände der einzelnen LEDs in Form von Speicher-Adressen. Durch die Taktung entsteht jedoch eine Verzögerung zwischen den einzelnen LEDs. Diese ist aber so minimal, dass sie erst bei einer Anzahl von >1000 LEDs bemerkbar wird.

Um nun die LEDs ansteuern zu können, nutzten wir die Adafruit NeoPixel Library. Dabei handelt es sich um eine Programmbibliothek, die uns erweiterte Funktionen zur Steuerung der LEDs zur Verfügung stellt. Mit Hilfe dieser Programmbibliothek testeten wir das ganze erstmal an einer WS2812b 8mm LED.


3. Schritt: Filterung des Sensorsignals


Um nun den gewünschten Effekt zu verbessern, musste wir die Sensorwerte vorher erst anpassen. Dabei stellte sich uns die Frage, mit welchen Methoden der Mess- und Regelungstechnik wollen wir unseren Regelkreis optimieren? Dafür schauten wir uns die Sensorkennlinie des Fotowiderstandes an und erkannten, dass dieser relativ linear arbeitet. Ein Rauschen war jedoch klar erkennbar. Um nun dieses Rauschen zu eliminieren nutzten wir einen gleitenden Mittelwert. Der Mikrocontroller nimmt einen Messwert des Sensors auf und speichert diesen in einem Array von n Werten. Zu Beginn der Messung sind alle n Werte im Array gleich Null und während der gesamten Messung wird eine Summe der Messwerte des Arrays geteilt durch die Anzahl n der Array Elemente gebildet. Bei jedem Schleifendurchlauf wird der Index um Eins erhöht. Sobald wir das Ende des Arrays erreicht haben wird der Array-Index wieder auf Null gesetzt und der letzte Messwert von der Summe subtrahiert. Dadurch erhalten wir ein zeitverzögertes Verhalten, was einem PT1-Regler/Tiefpassfilter sehr Nahe kommt.

Ergebnis

Zusammenfassung

Mit Hilfe unseres Wissens aus der Elektrotechnik, der Informatik und der Mess- & Regelungstechnik ist es uns gelungen, eine sich selbst regulierende Lampe inkl. digitalem Filter zu erschaffen.

Lessons Learned

- Ansteuerung von WS2812b LEDs mit Hilfe der externen Adafruit NeoPixel Library.

- Funktionsweise der WS2812b LED

- Digitale Filterung/Glättung von analogen Messsignalen.

- Umgang mit dem Multimeter zur Messung der Spannung.

- Kein Sekundenkleber für Acrylglas verwenden...

Projektunterlagen

Projektplan

Projektdurchführung

YouTube Video

Weblinks

Literatur

Von Erleuchtungen und Lichterketten: https://m.heise.de/developer/artikel/Von-Erleuchtungen-und-Lichterketten-3277261.html

Adafruit NeoPixel Library: https://github.com/adafruit/Adafruit_NeoPixel

WS2812 – Der einfachste Weg, viele LEDs mit Arduino steuern: https://starthardware.org/viele-leds-mit-arduino-steuern-ws2812/

Nr.17 – WS2812 – NeoPixel WS2812 bzw. „NeoPixel“ mit Arduino Mikrocontrollern ansteuern: https://funduino.de/nr-17-ws2812-neopixel

Smoothing | Arduino: https://www.arduino.cc/en/Tutorial/BuiltInExamples/Smoothing


→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik (BSE)