Chamäleonlampe mit Helligkeitsregelung: Unterschied zwischen den Versionen
(40 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Projekte]] | [[Kategorie:Projekte]] | ||
[[Kategorie:ProjekteET MTR BSE WS2022]] | [[Kategorie:ProjekteET MTR BSE WS2022]] | ||
[[Datei:Chamaeleonlampe final.jpg|rechts|mini|400px| Abbildung 1: Die fertige Chamäleonlampe]] | |||
'''Autoren: Christabelle Feunang & Christian Schwinne''' <br/> | |||
'''Betreuer: | '''Autoren: [[Benutzer:Christabelle Feunang|Christabelle Feunang]] & [[Benutzer:Christian Schwinne|Christian Schwinne]]''' <br/> | ||
'''Betreuer: [[Benutzer:Prof. Mirek Göbel|Prof. Dr.-Ing. Mirek Göbel]]''' <br/> | |||
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2022|WS 22/23: Angewandte Elektrotechnik (BSE)]] | → zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2022|WS 22/23: Angewandte Elektrotechnik (BSE)]] | ||
Zeile 62: | Zeile 63: | ||
| Christabelle Feunang | | Christabelle Feunang | ||
| 04.10.2022 | | 04.10.2022 | ||
|- | |||
| 3.2 | |||
| Die Regelung muss mittels eines Mikrocontroller '''modellbasiert mit Simulink''' implementiert werden (ersetzt Anforderung 3.1). | |||
| Christian Schwinne | |||
| 06.12.2022 | |||
| Christabelle Feunang | |||
| 06.12.2022 | |||
|- | |- | ||
| O.1.0 | | O.1.0 | ||
Zeile 85: | Zeile 93: | ||
|- | |- | ||
|} | |} | ||
{| class="wikitable" | |||
|+ style = "text-align: left"|Tabelle 2: Verwendete Hardware (BOM) | |||
! style="font-weight: bold;" | Anzahl | |||
! style="font-weight: bold;" | Komponente | |||
! style="font-weight: bold;" | Preis | |||
! style="font-weight: bold;" | Link | |||
|- | |||
| 1 | |||
| Arduino UNO-kompatibles Entwicklungsboard | |||
| 9,49 € | |||
| [https://www.az-delivery.de/en/products/mikrocontroller-board Link] | |||
|- | |||
| 2 | |||
| TCS34725 RGB Farbsensor | |||
| 7,49 € | |||
| [https://www.az-delivery.de/en/products/tcs34725-rgb-color-sensor Link] | |||
|- | |||
| 2 | |||
| LED Ring WS2812B mit 7 LEDs | |||
| 0,76 € | |||
| [https://de.aliexpress.com/item/32787336145.html Link] | |||
|- | |||
| 1 | |||
| Jumper-Kabel-Set | |||
| 6,99 € | |||
| [https://www.amazon.de/dp/B01EV70C78/ Link] | |||
|- | |||
| 1 | |||
| (optional) Lampe als Gehäuse | |||
| 19,99 € | |||
| [https://www.amazon.de/dp/B0BQ31R4DY/ Link] | |||
|- | |||
| 1 | |||
| (optional) Wemos D1 mini V3.0.0 | |||
| 1,91 € | |||
| [https://de.aliexpress.com/item/32651747570.html Link] | |||
|- | |||
|} | |||
== Theoretische Grundlagen == | |||
=== Funktionsweise des Farbsensors === | |||
Der TCS34725 ist ein Sensor, mit dem RGB-Farbwerte gemessen werden. Auf dem Modul ist auch ein LED verbaut, damit die Farben von nicht selbst leuchtenden Gegenständen ermittelt werden können. Mit dem Sensor lassen sich Gegenstände nach Farbe sortieren. Das Modul verfügt über einen IR-Sperrfilter, der die IR-Spektralkomponente des einfallenden Lichts minimimiert und somit eine genaue Farbmessung ermöglicht. Der Sensor kann zwischen 3.3V bis 5V betrieben werden und ist dementsprechend auch für Raspberry Pi und ESP8266 oder ESP32 geeignet. Die Kommunikation erfolgt über den I2C-Bus und erspart mühsames Verdrahten. Technisch besteht der Sensor im Wesentlichen aus vier Fotodioden. | |||
Davon besitzen drei einen Farbfilter, sodass die Diode jeweils nur auf rote, grüne, oder blaue Wellenlängen empfindlich ist. Die vierte Diode hat keinen Filter ("clear"), reagiert somit auf alle Wellenlängen und lässt sich etwa zur Messung der Helligkeit verwenden. <ref name="TCS34725 Datenblatt">https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf</ref> | |||
=== Gamma-Korrektur === | |||
Die Helligkeitswahrnehmung des menschlichen Auges ist nichtlinear, sondern logarithmisch, eine doppelt so helle Lichtquelle wird also nicht als doppelt so hell wahrgenommen. | |||
Bei Farb-LEDs ist dies ein Problem, da das wahrgenommene Verhältnis der drei Farbkanäle (rot, grün, und blau) dann nicht dem gewünschten entspricht und etwa beim RGB-Farbwert für Orange <code>100% R, 50% G, 0% B</code> die LEDs stattdessen gelb aussehen. Die Lösung hierfür ist die Gamma-Korrektur: | |||
<math>Ausgabe = (Eingabe/255)^{\gamma} \cdot 255</math> | |||
Der Faktor <code>255</code> skaliert für die Gamma-Korrektur das Eingangssignal im Bereich von 0-255 auf den Bereich von 0-1 und daraufhin wieder zurück. | |||
Für LED-Lampen und -Displays wird üblicherweise ein Gamma-Wert von 2 bis 3 verwendet. <ref name="LED Tricks: Gamma Correction">https://learn.adafruit.com/led-tricks-gamma-correction</ref> | |||
== Funktionaler Systementwurf/Technischer Systementwurf == | == Funktionaler Systementwurf/Technischer Systementwurf == | ||
Zeile 90: | Zeile 155: | ||
Die folgende Abbildung stellt den technischen Systementwurf der Lampe nach dem EVA-Modell (Eingabe, Verarbeitung, und Ausgabe) dar. Das System besteht aus einem Farbsensor TCS34725, einem Arduino-Mikrocontroller, und Neopixel (WS2812B) LEDs. | Die folgende Abbildung stellt den technischen Systementwurf der Lampe nach dem EVA-Modell (Eingabe, Verarbeitung, und Ausgabe) dar. Das System besteht aus einem Farbsensor TCS34725, einem Arduino-Mikrocontroller, und Neopixel (WS2812B) LEDs. | ||
[[Datei:EVA Entwurf.png|550px|thumb|left|Absatz|Abbildung | [[Datei:EVA Entwurf.png|550px|thumb|left|Absatz|Abbildung 2: Technischer Systementwurf]] | ||
[[Datei:PAP | [[Datei:PAP Chamäleonlampe2.png|250px|thumb|left|Absatz|Abbildung 3: Programmablaufplan Chamäleonlampe]] | ||
<br clear = all> | <br clear = all> | ||
Zeile 104: | Zeile 169: | ||
=== Verdrahtungsplan === | === Verdrahtungsplan === | ||
Der TCS34725-Sensor wird wie in Tabelle | Der TCS34725-Sensor wird wie in Tabelle 3 aufgelistet mit dem Arduino UNO verbunden. | ||
Für die Ansteuerung der LED wird der PWM-fähige Pin 3 des Arduino verwendet, sodass diese dimmbar ist. | Für die Ansteuerung der LED wird der PWM-fähige Pin 3 des Arduino verwendet, sodass diese dimmbar ist. | ||
Die Interrupt-Funktionalität des Sensors wird für dieses Projekt nicht benötigt. | Die Interrupt-Funktionalität des Sensors wird für dieses Projekt nicht benötigt. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ style = "text-align: left"|Tabelle | |+ style = "text-align: left"|Tabelle 3: Verdrahtung Sensor mit Arduino | ||
! style="font-weight: bold;" | Pin Farbsensor | ! style="font-weight: bold;" | Pin Farbsensor | ||
! style="font-weight: bold;" | Pin Arduino | ! style="font-weight: bold;" | Pin Arduino | ||
Zeile 130: | Zeile 195: | ||
|} | |} | ||
In Tabelle | In Tabelle 4 ist die Verdrahtung des Arduino UNO mit den WS2812B-LEDs aufgeführt. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ style = "text-align: left"|Tabelle | |+ style = "text-align: left"|Tabelle 4: Verdrahtung Arduino mit WS2812B Farb-LEDs | ||
! style="font-weight: bold;" | Pin Arduino | ! style="font-weight: bold;" | Pin Arduino | ||
! style="font-weight: bold;" | Pin Farb-LEDs | ! style="font-weight: bold;" | Pin Farb-LEDs | ||
Zeile 150: | Zeile 215: | ||
Die vollständige Verkabelung ist in Abbildung 2 dargestellt. Die Stromversorgung erfolgt über den USB-Port des Arduino. | Die vollständige Verkabelung ist in Abbildung 2 dargestellt. Die Stromversorgung erfolgt über den USB-Port des Arduino. | ||
[[Datei:Verdrahtungsplan Chamaleonlampe.png|400px|thumb|left|Absatz|Abbildung | [[Datei:Verdrahtungsplan Chamaleonlampe.png|400px|thumb|left|Absatz|Abbildung 4: Verdrahtungsplan der Chamäleonlampe]] | ||
<br clear = all> | <br clear = all> | ||
== Umsetzung (HW/SW) == | == Umsetzung (HW/SW) == | ||
=== Hardware === | |||
Zunächst werden die Komponenten wie im Verdrahtungsplan dargestellt verbunden. Dies ist der erste Testaufbau. | |||
Um die optionalen Anforderungen zu erfüllen, wurden die Komponenten fest miteinander verlötet. | |||
Zur Ermöglichung einer kabellosen Steuerung via WLAN (auch unabhängig vom Farbsensor), wurde außerdem der Arduino Uno durch einen ESP8266 ersetzt. | |||
Als Gehäuse dient eine käuflich zu erwerbende Lampe bestehend aus lasergravierter Glaskugel und Holzbasis. | |||
Die ursprüngliche Lichtquelle wurde aus der Lampe entfernt und durch den Farbsensor, ESP8266 und Neopixel-LED-Ring ersetzt. | |||
Für die Unterseite der Lampe wurde mithilfe von SolidWorks ein Deckel entworfen und mittels FDM-3D-Druck hergestellt. Dieser bettet den TCS34725-Farbsensor ein. | |||
Es wurde schwarzes PLA-Filament verwendet, um Messabweichungen durch Streulicht zu reduzieren. | |||
<gallery widths="450" heights="300"> | |||
Datei:CAD Deckel Chamaeleonlampe.png|Abbildung 5: CAD-Modell des Deckels in SolidWorks | |||
Datei:Chamaeleonlampe Zusammenbau.jpg|Abbildung 6: Die fertig gelötete Chamäleonlampe während des Zusammenbaus | |||
</gallery> | |||
<br clear = all> | |||
=== Software === | |||
Das auf dem Arduino Uno laufende Programm ist aus dem im Folgendem dargestellten Simulink-Modell kompiliert: | |||
[[Datei:Modell der Steuerung Chamäleonlampe.png|800px|thumb|left|Abbildung 7: Simulink-Modell für Test der LED-Ausgabe]] | |||
<br clear = all> | |||
Zum Auslesen der Messdaten des TCS34725-Farbsensors über I2C sowie der Ansteuerung der Neopixel sind die standardmäßig im Simulink Support Package for Arduino Hardware vorhandenen Blöcke nicht geeignet. | |||
Deshalb müssen benutzerdefinierte Blöcke hinzugefügt werden, die beliebigen C-Code ausführen können, so dass diese digitalen Komponenten über die für die Verwendung in der Arduino-IDE konzipierten Bibliotheken "Adafruit TCS34725" und "Adafruit NeoPixel" angesprochen werden können. Zur Erstellung des eigenen "MATLAB System"-Blocks gibt es ein MathWorks-Tutorial für den verwendeten TCS34725-Sensor. <ref name="Create custom blocks for Arduino support package">https://de.mathworks.com/help/supportpkg/arduino/ug/create-custom-blocks-for-arduino-support-package.html</ref> | |||
Eine Codeänderung war dennoch notwendig, da die neueste Version der "Adafruit TCS34725"-Bibliothek zusätzlich die "Adafruit BusIO"-Bibliothek benötigt. | |||
Auf Basis des im Tutorial gezeigten Schemas wurde auch ein Ausgabeblock ("Sink") zur Ansteuerung der Neopixel-LEDs entwickelt. | |||
== Komponententest == | == Komponententest == | ||
=== Test LED-Ausgabe === | |||
Zum Test der Ausgabe auf die LEDs wurde mithilfe von drei "Pulse Generator"-Blöcken ein Rechtecksignal mit einer Amplitude von 255, Periodendauer von 12 s, und einer Pulsweite von 1/3 (4 s) erzeugt. | |||
Die Blöcke sind zueinander um je 4 Sekunden phasenverschoben. Somit werden alle drei Farbkanäle (rot, grün, und blau) getestet. Die LEDs leuchten zyklisch 4 s rot, 4 s grün, und 4 s blau. | |||
[[Datei:Test LED-Ausgabe Chamäleonlampe.png|800px|thumb|left|Abbildung 8: Simulink-Modell für Test der LED-Ausgabe]] | |||
<br clear = all> | |||
Die folgende Abbildung zeigt den zeitlichen Verlauf der drei Farbkanäle am LED-Ausgang: | |||
[[Datei:Test LED-Ausgabe Scope.png|400px|thumb|left|Abbildung 9: Am LED-Ausgang anliegende Signale]] | |||
<br clear = all> | |||
=== Test Filterung === | |||
Um den PT1-Filter zu testen, wird das vollständige Modell genutzt, lediglich die Messwerte des Farbsensors werden durch die bereits im Test der LED-Ausgabe verwendeten "Pulse Generator"-Blöcke ersetzt. | |||
Diese leiten zyklisch einen Sprung ein. Wie erwartet resultiert auf den LEDs ein in der Dauer von der gewählten Zeitkonstante abhängiger, weicher Farbübergang. | |||
[[Datei:Test Filter Chamäleonlampe.png|800px|thumb|left|Abbildung 10: Simulink-Modell für Test des Filters]] | |||
<br clear = all> | |||
Die folgende Abbildung zeigt den zeitlichen Verlauf der drei Farbkanäle am LED-Ausgang. | |||
Die Gammakorrektur und Helligkeitssteuerung wurde deaktiviert (Konstanten <code>GC</code> und <code>BRI</code> 1) und als Zeitkonstante <code>T</code> für das PT-1 Filter 0.5 gewählt. | |||
[[Datei:Test LED-Ausgabe Filter Scope.png|400px|thumb|left|Abbildung 11: Am LED-Ausgang anliegendes Signal, mit Filterung]] | |||
<br clear = all> | |||
=== Test Farbsensor === | |||
Die Komponente "Farbsensor" ist in Simulink nicht unabhängig testbar, da die "Monitor & Tune"-Funktion des Arduino Support Package die Größe des Programmcodes so erhöht, dass der Flash-Speicher des Arduino Uno nicht ausreicht. Hier würde ein leistungsstärkeres Arduino-Board, z.B. der Arduino Mega, Abhilfe schaffen. Ohne "Monitor & Tune"-Funktion sind die Messwerte nicht ohne direkt an den Arduino angeschlossenes Ausgabegerät (hier LEDs) ablesbar. | |||
Daher wurde der Farbsensor im Rahmen des Gesamtsystems getestet. | |||
[[Datei:Testseite Chamaeleonlampe.png|400px|thumb|left|Abbildung 12: Ausdruck zum Test des Farbsensors]] | |||
<br clear = all> | |||
Es wurde beobachtet, dass die Genauigkeit der Farbmessung stark von dem Abstand der zu messenden Oberfläche vom Sensor abhängt. Die visuell bewertet genaueste Messung ergab sich bei einem Abstand von ca. 10 mm. Dieser Wert wurde daher für den Sensorabstand im CAD-Modell der fertigen Lampe verwendet. Weiterhin ist die Oberflächenbeschaffenheit ein Faktor mit hohem Einfluss. Bei reflektierenden Oberflächen wird ein hoher Anteil des Lichts von der LED neben dem Sensor reflektiert, sodass die Farben als zu weiß gemessen werden. | |||
== Ergebnis == | == Ergebnis == | ||
Zeile 161: | Zeile 292: | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ style = "text-align: left"|Tabelle | |+ style = "text-align: left"|Tabelle 5: Integrationtest | ||
! style="font-weight: bold;" | ID (Anforderung) | ! style="font-weight: bold;" | ID (Anforderung) | ||
! style="font-weight: bold;" | Test | ! style="font-weight: bold;" | Test | ||
Zeile 183: | Zeile 314: | ||
|- | |- | ||
| 2.1 | | 2.1 | ||
|Eine neutral weiße Lichtquelle muss vorhanden sein, um eine Farbmessung von nicht emittierenden Gegenständen durchzuführen. | |||
| Erfolgreich | | Erfolgreich | ||
| | | | ||
|- | |- | ||
| 3.0 | | 3.0 | ||
|Eine Regelung muss vorhanden sein, sodass der Einfluss von kurzen Störungen und Messunsicherheiten minimiert wird (langsamer Farbwechsel) | |||
| Erfolgreich | | Erfolgreich | ||
| | | Es wurde ein PT1-Filter gewählt. Die Zeitkonstante wurde empirisch auf 0.1 ermittelt, was eine gute Abwägung zwischen Rauschunterdrückung und schneller Reaktion auf Änderungen gewährleistet. | ||
|- | |- | ||
| 3.1 | | 3.1 | ||
|Die Regelung muss mittels eines Mikrocontroller mit der Arduino-Entwicklungsumgebung implementiert werden. | |||
| | |||
| Anforderung ist entfallen. | |||
|- | |||
| 3.2 | |||
| Die Regelung muss mittels eines Mikrocontroller modellbasiert mit Simulink implementiert werden. | |||
| Erfolgreich | | Erfolgreich | ||
| | | | ||
|- | |- | ||
| O.1.0 | | O.1.0 | ||
Zeile 202: | Zeile 340: | ||
| O.2.0 | | O.2.0 | ||
| Optionale Erweiterung: Die Lampe soll optisch ansprechend gestaltet sein. | | Optionale Erweiterung: Die Lampe soll optisch ansprechend gestaltet sein. | ||
| | | Erfolgreich | ||
| | | | ||
|- | |- | ||
| O.3.0 | | O.3.0 | ||
| Optionale Erweiterung: Die Lampe ist zusätzlich zum Sensor mittels Smartphone steuerbar (ESP32 statt Arduino Uno, [https://kno.wled.ge WLED]-Software) | | Optionale Erweiterung: Die Lampe ist zusätzlich zum Sensor mittels Smartphone steuerbar (ESP32 statt Arduino Uno, [https://kno.wled.ge WLED]-Software) | ||
| | | Erfolgreich | ||
| Das Einlesen des Sensors wurde in diesem Fall mithilfe eines sogenannten "Usermods" für WLED in C++ programmiert. Der verwendete ESP8266-Mikrocontroller ist nicht mit dem Simulink Support Package for Arduino Hardware kompatiblel. | |||
|- | |- | ||
|- | |- | ||
Zeile 216: | Zeile 352: | ||
== Zusammenfassung == | == Zusammenfassung == | ||
Das Projekt Chamäleonlampe mit Helligkeitsregelung | |||
Das Projekt Chamäleonlampe mit Helligkeitsregelung wurde großteils erfolgreich umgesetzt. Ziel des Projekts war eine Lampe zu entwickeln, welche die Farbe einer Oberfläche erkennt und entsprechend dieser Farbe leuchtet. Aus zeitlichen Gründen konnten eine optionale Erweiterung, die Berücksichtigung der Helligkeit, nicht integriert werden. | |||
=== Lessons Learned === | === Lessons Learned === | ||
Im Rahmen dieses Projekts konnten verschiedene Kompetenzen erworben und Studieninhalte in Praxis umgesetzt werden. | |||
Im Rahmen dieses Projekts konnten verschiedene Kompetenzen erworben und Studieninhalte in Praxis umgesetzt werden. Unter anderen konnte der Workflow von Simulink in Verbindung mit Arduino-Hardware erlernt werden. Dies, insbesondere die Einbindung über hardwarespezifischen C-Code, war am Anfang des Projekts eine der größten Herausforderungen, aber durch fleißige Recherche und Testproben wurde dieses Lernziel erreicht. Desweiteren konnten wir uns mit den Eigenschaften und Programmierung eines TCS34725 Farbsensor vertraut machen. | |||
Außer dem technischen Inhalt wurden wichtige Faktoren und Prozesse der Projektentwicklung wiederholt und vertieft. Zu den wichtigsten Punkten zählen die Projektplanung, das Zeitmanagement, die Projektdokumentation und eine kollaborative Teamarbeit. | |||
== Projektunterlagen == | == Projektunterlagen == | ||
Die vollständigen Unterlagen zu der Durchführung befinden sich im [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/151-175/156_Chamaeleonlampe_mit_Helligkeitsregelung SVN]. | |||
Weiterhin sind diese als ZIP-Archiv hier hinterlegt: [[Medium:156_Chamaeleonlampe_mit_Helligkeitsregelung.zip]] | |||
=== Projektplan === | === Projektplan === | ||
Das nachfolgende Gantt-Diagramm stellt die Planung des Projekts dar. | |||
[[Datei:Projektplanung Chamäleonlampe.jpg|800px|thumb|left|Absatz|Abbildung 13: Projektplanung]] | |||
<br clear = all> | <br clear = all> | ||
Zeile 235: | Zeile 376: | ||
Zunächst wurde ein Projekt sowie die Anforderungen festgelegt. Diese wurde in einem Wiki-Artikel, welcher im Laufe des Projekts stetig erweitert wurde dokumentiert. Im nächsten Schritt wurden alle Teile des Aufbaus bestellt. | Zunächst wurde ein Projekt sowie die Anforderungen festgelegt. Diese wurde in einem Wiki-Artikel, welcher im Laufe des Projekts stetig erweitert wurde dokumentiert. Im nächsten Schritt wurden alle Teile des Aufbaus bestellt. | ||
Anschließend wurden die Komponenten gemäß dem obigen Verdrahtungsplan zusammengebaut. Dann erfolgte die Programmierung in Simulink und die Software wurde auf die Hardare übertragen. | |||
Anschließend wurden die Komponenten gemäß dem obigen Verdrahtungsplan zusammengebaut. Dann erfolgte die Programmierung | |||
Durch Testen wurden einige Fehler erkannt, die Software angepasst und die Fehler behoben. | Durch Testen wurden einige Fehler erkannt, die Software angepasst und die Fehler behoben. | ||
== YouTube Video == | == YouTube Video == | ||
= | {{#ev:youtube|https://youtu.be/t_gPNd0fxdE| 650 |left|Video des Projekts Chamäleonlampe (englisch)}} | ||
<br clear=all> | |||
== Literatur == | == Literatur == | ||
https://www.bastelgarage.ch/rgb-farben-sensor-tcs34725-mit-ir-filter-und-led | |||
https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf | |||
<!-- Fügen Sie diesen Footer hinzu. --> | <!-- Fügen Sie diesen Footer hinzu. --> | ||
---- | ---- | ||
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2022|WS 22/23: Angewandte Elektrotechnik (BSE)]] | → zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2022|WS 22/23: Angewandte Elektrotechnik (BSE)]] |
Aktuelle Version vom 13. Januar 2023, 05:10 Uhr
Autoren: Christabelle Feunang & Christian Schwinne
Betreuer: Prof. Dr.-Ing. Mirek Göbel
→ zurück zur Übersicht: WS 22/23: Angewandte Elektrotechnik (BSE)
Einleitung
Bei dem vorliegenden Artikel handelt es sich um ein Projekt aus dem Praktikum Angewandte Elektrotechnik des Studiengangs Business and Systems Engineering (BSE). Ziel des Projektes ist es, eine Lampe zu erstellen, die mittels eines Farbsensors die Farbe eines Objekts misst und die Helligkeit und Farbe der Lampe regelt, um der gemessenen Farbe zu entsprechen. Als Erweiterung ist eine Messung des Tageslichts denkbar, um in Kombination mit hellen kalt- und warmweißen LEDs ein "simuliertes Fenster" zu ermöglichen, um realistisch wirkendes Tageslicht in fensterlosen Räumen zu erhalten.
Anforderungen
ID | Inhalt | Ersteller | Datum | Geprüft von | Datum |
---|---|---|---|---|---|
1.0 | Die Lampe muss verschiedene Farben im RGB-Farbraum darstellen können. | Christian Schwinne | 04.10.2022 | Christabelle Feunang | 04.10.2022 |
1.1 | Die Farbe muss mittels Mikrocontroller änderbar sein. | Christabelle Feunang | 04.10.2022 | Christian Schwinne | 04.10.2022 |
2.0 | Die Farbe einer Oberfläche muss ermittelt werden. | Christabelle Feunang | 04.10.2022 | Christian Schwinne | 04.10.2022 |
2.1 | Eine neutral weiße Lichtquelle muss vorhanden sein, um eine Farbmessung von nicht emittierenden Gegenständen durchzuführen. | Christabelle Feunang | 04.10.2022 | Christian Schwinne | 04.10.2022 |
3.0 | Eine Regelung muss vorhanden sein, sodass der Einfluss von kurzen Störungen und Messunsicherheiten minimiert wird (langsamer Farbwechsel) | Christabelle Feunang | 04.10.2022 | Christian Schwinne | 04.10.2022 |
3.1 | Die Regelung muss mittels eines Mikrocontroller mit der Arduino-Entwicklungsumgebung implementiert werden. | Christian Schwinne | 04.10.2022 | Christabelle Feunang | 04.10.2022 |
3.2 | Die Regelung muss mittels eines Mikrocontroller modellbasiert mit Simulink implementiert werden (ersetzt Anforderung 3.1). | Christian Schwinne | 06.12.2022 | Christabelle Feunang | 06.12.2022 |
O.1.0 | Optionale Erweiterung: Zusätzlich zur Messung der Farbe von Oberflächen kann die Helligkeit einer Lichtquelle (Lampe/Sonne) gemessen werden (u. U. mithilfe eines zweiten Sensors). | Christian Schwinne | 04.10.2022 | Christabelle Feunang | 04.10.2022 |
O.2.0 | Optionale Erweiterung: Die Lampe soll optisch ansprechend gestaltet sein. | Christian Schwinne | 04.10.2022 | Christabelle Feunang | 04.10.2022 |
O.3.0 | Optionale Erweiterung: Die Lampe ist zusätzlich zum Sensor mittels Smartphone steuerbar (ESP32 statt Arduino Uno, WLED-Software) | Christian Schwinne | 05.10.2022 | - | - |
Anzahl | Komponente | Preis | Link |
---|---|---|---|
1 | Arduino UNO-kompatibles Entwicklungsboard | 9,49 € | Link |
2 | TCS34725 RGB Farbsensor | 7,49 € | Link |
2 | LED Ring WS2812B mit 7 LEDs | 0,76 € | Link |
1 | Jumper-Kabel-Set | 6,99 € | Link |
1 | (optional) Lampe als Gehäuse | 19,99 € | Link |
1 | (optional) Wemos D1 mini V3.0.0 | 1,91 € | Link |
Theoretische Grundlagen
Funktionsweise des Farbsensors
Der TCS34725 ist ein Sensor, mit dem RGB-Farbwerte gemessen werden. Auf dem Modul ist auch ein LED verbaut, damit die Farben von nicht selbst leuchtenden Gegenständen ermittelt werden können. Mit dem Sensor lassen sich Gegenstände nach Farbe sortieren. Das Modul verfügt über einen IR-Sperrfilter, der die IR-Spektralkomponente des einfallenden Lichts minimimiert und somit eine genaue Farbmessung ermöglicht. Der Sensor kann zwischen 3.3V bis 5V betrieben werden und ist dementsprechend auch für Raspberry Pi und ESP8266 oder ESP32 geeignet. Die Kommunikation erfolgt über den I2C-Bus und erspart mühsames Verdrahten. Technisch besteht der Sensor im Wesentlichen aus vier Fotodioden. Davon besitzen drei einen Farbfilter, sodass die Diode jeweils nur auf rote, grüne, oder blaue Wellenlängen empfindlich ist. Die vierte Diode hat keinen Filter ("clear"), reagiert somit auf alle Wellenlängen und lässt sich etwa zur Messung der Helligkeit verwenden. [1]
Gamma-Korrektur
Die Helligkeitswahrnehmung des menschlichen Auges ist nichtlinear, sondern logarithmisch, eine doppelt so helle Lichtquelle wird also nicht als doppelt so hell wahrgenommen.
Bei Farb-LEDs ist dies ein Problem, da das wahrgenommene Verhältnis der drei Farbkanäle (rot, grün, und blau) dann nicht dem gewünschten entspricht und etwa beim RGB-Farbwert für Orange 100% R, 50% G, 0% B
die LEDs stattdessen gelb aussehen. Die Lösung hierfür ist die Gamma-Korrektur:
Der Faktor 255
skaliert für die Gamma-Korrektur das Eingangssignal im Bereich von 0-255 auf den Bereich von 0-1 und daraufhin wieder zurück.
Für LED-Lampen und -Displays wird üblicherweise ein Gamma-Wert von 2 bis 3 verwendet. [2]
Funktionaler Systementwurf/Technischer Systementwurf
Die folgende Abbildung stellt den technischen Systementwurf der Lampe nach dem EVA-Modell (Eingabe, Verarbeitung, und Ausgabe) dar. Das System besteht aus einem Farbsensor TCS34725, einem Arduino-Mikrocontroller, und Neopixel (WS2812B) LEDs.
Komponentenspezifikation
Verdrahtungsplan
Der TCS34725-Sensor wird wie in Tabelle 3 aufgelistet mit dem Arduino UNO verbunden. Für die Ansteuerung der LED wird der PWM-fähige Pin 3 des Arduino verwendet, sodass diese dimmbar ist. Die Interrupt-Funktionalität des Sensors wird für dieses Projekt nicht benötigt.
Pin Farbsensor | Pin Arduino |
---|---|
3V3 | 3.3V |
GND | GND |
LED | 3 |
SCL | SCL (A5) |
SDA | SDA (A4) |
In Tabelle 4 ist die Verdrahtung des Arduino UNO mit den WS2812B-LEDs aufgeführt.
Pin Arduino | Pin Farb-LEDs |
---|---|
5V | 5V |
GND | GND |
4 | DIN |
Die vollständige Verkabelung ist in Abbildung 2 dargestellt. Die Stromversorgung erfolgt über den USB-Port des Arduino.
Umsetzung (HW/SW)
Hardware
Zunächst werden die Komponenten wie im Verdrahtungsplan dargestellt verbunden. Dies ist der erste Testaufbau.
Um die optionalen Anforderungen zu erfüllen, wurden die Komponenten fest miteinander verlötet. Zur Ermöglichung einer kabellosen Steuerung via WLAN (auch unabhängig vom Farbsensor), wurde außerdem der Arduino Uno durch einen ESP8266 ersetzt. Als Gehäuse dient eine käuflich zu erwerbende Lampe bestehend aus lasergravierter Glaskugel und Holzbasis. Die ursprüngliche Lichtquelle wurde aus der Lampe entfernt und durch den Farbsensor, ESP8266 und Neopixel-LED-Ring ersetzt. Für die Unterseite der Lampe wurde mithilfe von SolidWorks ein Deckel entworfen und mittels FDM-3D-Druck hergestellt. Dieser bettet den TCS34725-Farbsensor ein. Es wurde schwarzes PLA-Filament verwendet, um Messabweichungen durch Streulicht zu reduzieren.
-
Abbildung 5: CAD-Modell des Deckels in SolidWorks
-
Abbildung 6: Die fertig gelötete Chamäleonlampe während des Zusammenbaus
Software
Das auf dem Arduino Uno laufende Programm ist aus dem im Folgendem dargestellten Simulink-Modell kompiliert:
Zum Auslesen der Messdaten des TCS34725-Farbsensors über I2C sowie der Ansteuerung der Neopixel sind die standardmäßig im Simulink Support Package for Arduino Hardware vorhandenen Blöcke nicht geeignet. Deshalb müssen benutzerdefinierte Blöcke hinzugefügt werden, die beliebigen C-Code ausführen können, so dass diese digitalen Komponenten über die für die Verwendung in der Arduino-IDE konzipierten Bibliotheken "Adafruit TCS34725" und "Adafruit NeoPixel" angesprochen werden können. Zur Erstellung des eigenen "MATLAB System"-Blocks gibt es ein MathWorks-Tutorial für den verwendeten TCS34725-Sensor. [3] Eine Codeänderung war dennoch notwendig, da die neueste Version der "Adafruit TCS34725"-Bibliothek zusätzlich die "Adafruit BusIO"-Bibliothek benötigt. Auf Basis des im Tutorial gezeigten Schemas wurde auch ein Ausgabeblock ("Sink") zur Ansteuerung der Neopixel-LEDs entwickelt.
Komponententest
Test LED-Ausgabe
Zum Test der Ausgabe auf die LEDs wurde mithilfe von drei "Pulse Generator"-Blöcken ein Rechtecksignal mit einer Amplitude von 255, Periodendauer von 12 s, und einer Pulsweite von 1/3 (4 s) erzeugt. Die Blöcke sind zueinander um je 4 Sekunden phasenverschoben. Somit werden alle drei Farbkanäle (rot, grün, und blau) getestet. Die LEDs leuchten zyklisch 4 s rot, 4 s grün, und 4 s blau.
Die folgende Abbildung zeigt den zeitlichen Verlauf der drei Farbkanäle am LED-Ausgang:
Test Filterung
Um den PT1-Filter zu testen, wird das vollständige Modell genutzt, lediglich die Messwerte des Farbsensors werden durch die bereits im Test der LED-Ausgabe verwendeten "Pulse Generator"-Blöcke ersetzt. Diese leiten zyklisch einen Sprung ein. Wie erwartet resultiert auf den LEDs ein in der Dauer von der gewählten Zeitkonstante abhängiger, weicher Farbübergang.
Die folgende Abbildung zeigt den zeitlichen Verlauf der drei Farbkanäle am LED-Ausgang.
Die Gammakorrektur und Helligkeitssteuerung wurde deaktiviert (Konstanten GC
und BRI
1) und als Zeitkonstante T
für das PT-1 Filter 0.5 gewählt.
Test Farbsensor
Die Komponente "Farbsensor" ist in Simulink nicht unabhängig testbar, da die "Monitor & Tune"-Funktion des Arduino Support Package die Größe des Programmcodes so erhöht, dass der Flash-Speicher des Arduino Uno nicht ausreicht. Hier würde ein leistungsstärkeres Arduino-Board, z.B. der Arduino Mega, Abhilfe schaffen. Ohne "Monitor & Tune"-Funktion sind die Messwerte nicht ohne direkt an den Arduino angeschlossenes Ausgabegerät (hier LEDs) ablesbar. Daher wurde der Farbsensor im Rahmen des Gesamtsystems getestet.
Es wurde beobachtet, dass die Genauigkeit der Farbmessung stark von dem Abstand der zu messenden Oberfläche vom Sensor abhängt. Die visuell bewertet genaueste Messung ergab sich bei einem Abstand von ca. 10 mm. Dieser Wert wurde daher für den Sensorabstand im CAD-Modell der fertigen Lampe verwendet. Weiterhin ist die Oberflächenbeschaffenheit ein Faktor mit hohem Einfluss. Bei reflektierenden Oberflächen wird ein hoher Anteil des Lichts von der LED neben dem Sensor reflektiert, sodass die Farben als zu weiß gemessen werden.
Ergebnis
Die folgende Tabelle fasst die Ergebnisse des Projekts zusammen.
ID (Anforderung) | Test | Testergebnis | Anmerkungen |
---|---|---|---|
1.0 | Die Lampe muss verschiedene Farben im RGB-Farbraum darstellen können. | Erfolgreich | |
1.1 | Die Farbe muss mittels Mikrocontroller änderbar sein. | Erfolgreich | |
2.0 | Die Farbe einer Oberfläche muss ermittelt werden. | Erfolgreich | |
2.1 | Eine neutral weiße Lichtquelle muss vorhanden sein, um eine Farbmessung von nicht emittierenden Gegenständen durchzuführen. | Erfolgreich | |
3.0 | Eine Regelung muss vorhanden sein, sodass der Einfluss von kurzen Störungen und Messunsicherheiten minimiert wird (langsamer Farbwechsel) | Erfolgreich | Es wurde ein PT1-Filter gewählt. Die Zeitkonstante wurde empirisch auf 0.1 ermittelt, was eine gute Abwägung zwischen Rauschunterdrückung und schneller Reaktion auf Änderungen gewährleistet. |
3.1 | Die Regelung muss mittels eines Mikrocontroller mit der Arduino-Entwicklungsumgebung implementiert werden. | Anforderung ist entfallen. | |
3.2 | Die Regelung muss mittels eines Mikrocontroller modellbasiert mit Simulink implementiert werden. | Erfolgreich | |
O.1.0 | Optionale Erweiterung: Zusätzlich zur Messung der Farbe von Oberflächen kann die Helligkeit einer Lichtquelle (Lampe/Sonne) gemessen werden (u. U. mithilfe eines zweiten Sensors). | Nicht bearbeitet | |
O.2.0 | Optionale Erweiterung: Die Lampe soll optisch ansprechend gestaltet sein. | Erfolgreich | |
O.3.0 | Optionale Erweiterung: Die Lampe ist zusätzlich zum Sensor mittels Smartphone steuerbar (ESP32 statt Arduino Uno, WLED-Software) | Erfolgreich | Das Einlesen des Sensors wurde in diesem Fall mithilfe eines sogenannten "Usermods" für WLED in C++ programmiert. Der verwendete ESP8266-Mikrocontroller ist nicht mit dem Simulink Support Package for Arduino Hardware kompatiblel. |
Zusammenfassung
Das Projekt Chamäleonlampe mit Helligkeitsregelung wurde großteils erfolgreich umgesetzt. Ziel des Projekts war eine Lampe zu entwickeln, welche die Farbe einer Oberfläche erkennt und entsprechend dieser Farbe leuchtet. Aus zeitlichen Gründen konnten eine optionale Erweiterung, die Berücksichtigung der Helligkeit, nicht integriert werden.
Lessons Learned
Im Rahmen dieses Projekts konnten verschiedene Kompetenzen erworben und Studieninhalte in Praxis umgesetzt werden. Unter anderen konnte der Workflow von Simulink in Verbindung mit Arduino-Hardware erlernt werden. Dies, insbesondere die Einbindung über hardwarespezifischen C-Code, war am Anfang des Projekts eine der größten Herausforderungen, aber durch fleißige Recherche und Testproben wurde dieses Lernziel erreicht. Desweiteren konnten wir uns mit den Eigenschaften und Programmierung eines TCS34725 Farbsensor vertraut machen.
Außer dem technischen Inhalt wurden wichtige Faktoren und Prozesse der Projektentwicklung wiederholt und vertieft. Zu den wichtigsten Punkten zählen die Projektplanung, das Zeitmanagement, die Projektdokumentation und eine kollaborative Teamarbeit.
Projektunterlagen
Die vollständigen Unterlagen zu der Durchführung befinden sich im SVN.
Weiterhin sind diese als ZIP-Archiv hier hinterlegt: Medium:156_Chamaeleonlampe_mit_Helligkeitsregelung.zip
Projektplan
Das nachfolgende Gantt-Diagramm stellt die Planung des Projekts dar.
Projektdurchführung
Zunächst wurde ein Projekt sowie die Anforderungen festgelegt. Diese wurde in einem Wiki-Artikel, welcher im Laufe des Projekts stetig erweitert wurde dokumentiert. Im nächsten Schritt wurden alle Teile des Aufbaus bestellt. Anschließend wurden die Komponenten gemäß dem obigen Verdrahtungsplan zusammengebaut. Dann erfolgte die Programmierung in Simulink und die Software wurde auf die Hardare übertragen. Durch Testen wurden einige Fehler erkannt, die Software angepasst und die Fehler behoben.
YouTube Video
Literatur
https://www.bastelgarage.ch/rgb-farben-sensor-tcs34725-mit-ir-filter-und-led
https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf
→ zurück zur Übersicht: WS 22/23: Angewandte Elektrotechnik (BSE)