Projekt 20b: Smarte Tischleuchte: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 270: Zeile 270:
Eine Vorgabe an das Projekt war es, die Programmierung in [https://de.wikipedia.org/wiki/Simulink Simulink ]durchzuführen. Dabei kamen für uns unüberwindbare Schwierigkeiten auf. Dies lag vor allem darin, die LEDs anzusteuern. Dazu steht in der Arduino IDE eine Bibliothek des Herstellers des LED-Streifens zur Verfügung, um den Helligkeits- und Farbwert an jede LED einzeln digital übermitteln zu können. Die Implementierung in Simulink wurde versucht, führte aber zu keinem zufriedenstellenden Ergebnis. Eine Lösung der auftretenden Probleme war ebenfalls im Rahmen der Durchführungszeit des Projektes nicht zu erwarten. Um das Projekt doch zu einem Ergebnis führen zu können, wurde die Programmierung mit der Arduino IDE und [https://de.wikipedia.org/wiki/Visual_Studio Visual Studio] durchgeführt.
Eine Vorgabe an das Projekt war es, die Programmierung in [https://de.wikipedia.org/wiki/Simulink Simulink ]durchzuführen. Dabei kamen für uns unüberwindbare Schwierigkeiten auf. Dies lag vor allem darin, die LEDs anzusteuern. Dazu steht in der Arduino IDE eine Bibliothek des Herstellers des LED-Streifens zur Verfügung, um den Helligkeits- und Farbwert an jede LED einzeln digital übermitteln zu können. Die Implementierung in Simulink wurde versucht, führte aber zu keinem zufriedenstellenden Ergebnis. Eine Lösung der auftretenden Probleme war ebenfalls im Rahmen der Durchführungszeit des Projektes nicht zu erwarten. Um das Projekt doch zu einem Ergebnis führen zu können, wurde die Programmierung mit der Arduino IDE und [https://de.wikipedia.org/wiki/Visual_Studio Visual Studio] durchgeführt.
<br/>   
<br/>   
=====Programmierung des Microcontrollers=====<br/>
=====Programmierung des Microcontrollers=====
Zunächst wurden die Grundfunktionen der Leuchte programmiert, also der manuelle- und der automatische Betrieb.
Zunächst wurden die Grundfunktionen der Leuchte programmiert, also der manuelle- und der automatische Betrieb.
Im manuellen Betrieb wird die Leuchte über einen Drehgeber gesteuert. Dieser ist mit dem Arduino über zwei digitale Eingänge verbunden. Der Drehgeber liefert zwei Rechtecksignale (Signal A und B), wenn man an ihm dreht. Bei der Drehrichtung nach rechts eilt Signal A dem Signal B um 90° voraus. Eine Drehung nach links lässt Signal A nacheilen. Um die Rechtecksignale zu verarbeiten und die Positionen zu zählen, wurde in einer externen Bibliothek eine neue Klasse namens Encoder erstellt. Diese Bibliothek wurde in C++ mit Visual Studio geschrieben, sodass sie auch für andere Projekte nutzbar ist. <br/>
Im manuellen Betrieb wird die Leuchte über einen Drehgeber gesteuert. Dieser ist mit dem Arduino über zwei digitale Eingänge verbunden. Der Drehgeber liefert zwei Rechtecksignale (Signal A und B), wenn man an ihm dreht. Bei der Drehrichtung nach rechts eilt Signal A dem Signal B um 90° voraus. Eine Drehung nach links lässt Signal A nacheilen. Um die Rechtecksignale zu verarbeiten und die Positionen zu zählen, wurde in einer externen Bibliothek eine neue Klasse namens Encoder erstellt. Diese Bibliothek wurde in C++ mit Visual Studio geschrieben, sodass sie auch für andere Projekte nutzbar ist. <br/>

Version vom 17. Dezember 2018, 14:46 Uhr

Abb.1: Leuchte im Einsatz mit Windows App

Autoren: Felix Bruchhage, Luca Di Lillo:
Betreuer: Prof. Schneider

→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)

Einleitung

Das Modul Mechatronische Systeme 2 im 5. Semester des Studiengangs Mechatronik beinhaltet das GET-Fachpraktikum, das die angewandte Elektrotechnik zum einen in vier Laborversuchen vertiefen soll. Zum anderen werden diverse mechatronische Projekte in Kleingruppen behandelt, sodass die Studierenden erste Erfahrungen in der Planung und Umsetzung von technischen Projekten sammeln können und ihr theoretisches Wissen in der Praxis anwenden können. Es bestand die Möglichkeit aus vorgegebenen Projekten auszuwählen oder sich ein eigenes Projekt zu wählen, dass in den zeitlichen Rahmen des Praktikums passt und die fachlichen Inhalte abdeckt. Dieser Artikel beschäftigt sich mit einem selbst definierten Projekt, bei dem eine intelligente Schreibtischleuchte entwickelt und gebaut werden soll, die sich selbstständig an die Lichtverhältnisse auf dem Schreibtisch anpasst. Dazu wurden die folgenden Anforderungen als Aufgabe gestellt:

Erwartungen an die Projektlösung

  • Planung und Konstruktion der Leuchte
  • Darstellung der regelungstechnischen Theorie
  • Beschaffung der Bauteile (Miniaturisierung z.B. Arduino Nano)
  • Systemidentifikation (Übertragungsfunktion der Regelstrecke bestimmen)
  • Realisierung des Aufbaus
  • Vergleichen und bewerten Sie verschiedene Regleransätze (P, PI, PID und andere).
  • Modellbasierte Programmierung der Hardware via Simulink
  • Machen Sie ein tolles Videos, welches die Funktion visualisiert.
  • Test und wiss. Dokumentation
  • Live Vorführung während der Abschlusspräsentation

Kür: Steuerung über eine Windows App.

Aufgabe

Es soll eine RGB-LED-Tischleuchte gebaut werden, die zum einen manuell über einen Schalter ein- und ausgeschaltet und einen Drehgeber gedimmt werden kann. Außerdem soll ein Automatikmodus zur Verfügung stehen, bei dem sich die Leuchte automatisch an die Beleuchtungssituation im Raum anpasst. Dazu wird die Beleuchtungsstärke auf dem Arbeitsplatz über einen Helligkeitssensor gemessen und die Leuchte entsprechend eines Regelungsalgorithmus automatisch gedimmt. Weiterhin soll die Steuerung der Leuchte mit Hilfe einer Windows - Applikation über einen PC möglich sein. Dieses Projekt deckt alle Facetten der Mechatronik ab. Es können Kenntnisse in der mechanischen Fertigung, des elektrischen Schaltungsentwurfs, der Umsetzung der elektronischen Schaltung sowie der Programmierungen von Mikrocontrollern gewonnen werden. Auch die Programmierung einer Windows Applikation wird eine Herausforderung an das Projekt stellen.

Projekt

Projektplanung


Projektmanagement

Zu Beginn des Projektes wurde zunächst nach einer geeigneten Projektmanagementmethode gesucht, um die Aufgaben im Team aufzuteilen, Fristen für die Aufgabenpakete zu definieren und um einen Überblick über die auszuführenden und abgeschlossenen Tätigkeiten für alle Gruppenmitglieder zu gewährleisten.
Es wurde sich für die Kanban Methode entschieden. Umgesetzt wurde Projektmanagement mit der web-basierten Software Trello. Der aktuelle Stand des Projektes ist nicht nur für die Gruppenmitglieder sichtbar, sondern wurde veröffentlicht, um eine transparente Vorstellung unseres Projekts zu ermöglichen. Trello Kanban Projekt 20b Smarte Tischleuchte
Bei der Kanban-Methode wird eine Tafel mit drei Spalten erstellt. Die erste Spalte erhält den Namen „To Do“. In diese werden zu Beginn des Projektes alle Aufgaben in Form von einzelnen Karten geschrieben, die aus den Projektanforderungen abgeleitet werden. Diese Karten sollten mit absteigender Priorität in der Spalte geordnet werden. Außerdem werden die Verantwortlichen für jede Aufgabe definiert und die Bearbeitungsfristen festgelegt. Die zweite Spalte wird als „In Bearbeitung“ bezeichnet. Jeder Mitarbeiter kann selbstständig die Aufgabenkarten von der Liste „To Do“ in die Liste „In Bearbeitung“ ziehen. Ist die Bearbeitung einer Aufgabe abgeschlossen wird die jeweilige Karte in die letzte Spalte „Abgeschlossen“ gezogen. [1]
Mit dieser Methode hat jedes Gruppenmitglied eine gute Übersicht über den Projektfortschritt und über die Aufgaben, die in den jeweiligen Fristen fertig gestellt sein müssen. Am Ende einer jeweiligen Frist wurde in unserer Gruppe ein Meilensteintermin angehalten, in der die jeweiligen Ergebnisse vorgestellt, überprüft und verbessert wurden. Durch diese Methode konnten Probleme schnell erkannt und behoben werden. Außerdem war es uns möglich durch eng gesetzte Fristen, das Projekt weit vor dem eigentlichen Präsentationstermin fertigzustellen.

Planung der Umsetzungsmöglichkeiten

Bei der Planungstätigkeit wurde ein morphologischer Kasten (s. Abb. 2) aufgestellt, um aus den Projektanforderungen konkrete Lösungsvarianten abzuleiten und um sich für einen Lösungsweg für die Projektumsetzung zu entscheiden.

Abb.2: Morphologischer Kasten

Auf einige Punkte des morphologischen Kastens soll kurz eingegangen werden:
Ein ArduinoUno wurde ausgewählt, da dieser bereits durch den dritten Versuchstermin zur Verfügung stand. Für die Umsetzung hätte ein Arduino Nano in Bezug auf die Ein- und Ausgänge gereicht. Dieser wurde allerdings aufgrund von unnötigen Zusatzkosten nicht beschafft.
Der Lichtsensor mit Photodioden wurde gewählt, da Dioden als Halbleiterbauelement schneller auf Veränderungen der Helligkeit reagieren als ein Photowiderstand. Dadurch war es uns möglich in Kombination mit dem Regelungsalgorithmus schnell auf Änderungen zu reagieren und keine Verzögerungen durch einen trägen Sensor in Kauf nehmen zu müssen. Außerdem ist der gewählte TSL2591-Sensor mit IC und ADCs ausgestattet. Damit wird direkt der Strom der Photodiode in einen digitalen Wert umgerechnet. Mit diesem kann über eine I2C-Verbindung zum Arduino direkt die Beleuchtungsstärke in Lux ermittelt werden, ohne im Programm einen analogen Wert umrechnen zu müssen.
Ein Drehgeber wurde einem Potentiometer vorgezogen, damit es zu keinen Helligkeitsänderungen kommt, wenn aus dem Automatikbetrieb in den manuellen Betrieb umgeschaltet wird. Ein Potentiometer hätte einen festen Widerstandswert unabhängig von der eingestellten Helligkeit im Automatikbetrieb behalten. Mit dem Drehgeber war es möglich, den Helligkeitswert aus dem Automatikbetrieb ohne Differenz in den manuellen Betrieb zu übernehmen.
Die Verbindung der Leuchte über Bluetooth mit dem Computer wurde nicht gewählt, da ein Bluetooth-Modul einen zusätzlichen Kostenpunkt dargestellt hätte, was das Budget zu sehr ausgelastet hätte.


Materialplanung

Nachdem die Planung des Projektes abgeschlossen war, wurde ein Materialplan erstellt, um möglichst schnell die Bauteile bestellen zu können und mit der Umsetzung anfangen zu können. Die Bauteile sind in folgender Liste zu finden:

Pos. Anzahl Bezeichnung Preis Link
1. 1 Digitaler RGB-LED Flexi-Streifen 60 LED 19,95 € Conrad
2. 1 DEBO LIGHT SENSE3 7,80 € Reichelt
3. 1 Arduino - Grove Encoder 4,99 € Reichelt
4. 1 Streifenrasterplatine 0,69 € Reichelt
5. 1 Kippschalter 1,85€ Reichelt
6. 1 Potikappe -- --
7. 1 Handynetzteil (5V DC, 2A) 7,99 € Conrad
8. 1 10kΩ Widerstand 0,154 € Reichelt
9. 1 220Ω Widerstand 0,154 € Reichelt
10. 1 470µF Kondensator 0,12 € Conrad
11. 1 Verdrahtungsmaterial (Litzen, Lötzinn, ...)


Die Positionen 5 - 11 waren bereits als privater Eigentum vorhanden und mussten daher nicht bestellt werden.

Projektdurchführung


Bereits bevor die Bauteile geliefert wurden, konnten anhand der Datenblätter CAD-Daten der Leuchte mit Solid Works und Beschaltungspläne mit Multisim angefertigt werden.

Konstruktion und Bau des Leuchtengehäuses

Durch die Wahl eines additiven Fertigungsverfahrens, das Lasersintern, war ein hohes Maß an Freiheiten bei der Konstruktion gegeben, sodass nicht auf die Umsetzbarkeit einiger Konstruktionselemente mit konventionellen Fertigungsverfahren, wie beispielweise das Fräsen, geachtet werden musste. Die einzige Einschränkung durch das Fertigungsverfahren war der Bauraum der Sintermaschine. Daher wurde die Leuchte aus mehreren Teilen konstruiert.
Bei der Konstruktion des Leuchtenkopfes wurde darauf geachtet, dass eine möglichst große Lichtaustrittsfläche zur Verfügung steht, um möglichst viele LEDs verwenden zu können und eine gute Ausleuchtung des Arbeitsplatzes zu gewährleisten. Die LEDs werden an den inneren Seitenflächen des Leuchtenkopfes platziert (s. Abb. rot) und strahlen in die Mitte. Durch die Reflexion im weißen Gehäuse wird das Licht nach unten geleitet und zusätzlich durch die satinierte Kunststoffscheibe gebrochen. Für diese Abdeckungsscheibe wurde ebenfalls seitlich eine Auflagefläche geschaffen (s. Abb. blau), damit sie sich in dem Leuchtenkopf einpasst und bündig mit der äußeren Kante sitzt. Zunächst wurde geplant, den Lichtsensor auf die Oberseite des Leuchtenkopfes zu platzieren (s. Abb. 2 blau), um nicht von dem Licht der Leuchte beeinflusst zu werden und nur das Umgebungslicht zu detektieren. Dies stellte sich im Nachhinein als der Regler entworfen wurde allerdings als Fehlplanung heraus.
Der Leuchtenkopf wird mit zwei Säulen mit dem Leuchtenfuß verbunden. Beide Säulen sind hohl konstruiert, um Drähte vom Arduino zu den LEDs dadurch verlegen zu können. Die obere Säule wird mit dem Leuchtenkopf über vier M4 Senkkopfschrauben verbunden (s. Abb. 2 , lila), um eine ausreichende Stabilität vor allem in Hinblick auf Biegebelastungen durch das Gewicht des Kopfes und durch eine mögliche externe Last zu gewährleisten.
Die Säulen werden untereinander über eine Steckverbindung über gesinterte Stifte verbunden (s. Abb.3). Diese Verbindung ist als eine Übergangspassung ausgelegt. Das bedeutet, dass die Stifte nur mit großem Druck in die Bohrungen in den Säulen passen und dadurch eine sehr starke Verbindung ermöglichen, die nur schwer gelöst werden kann. Um überhaupt die Verbindung herstellen zu können, mussten kleine Bohrungen seitlich in den Aufnahmebohrungen der Stifte vorgesehen werden, damit die Luft beim Eindrücken der Stifte aus den Aufnahmebohrungen entweichen kann.
Die untere Säule wird ebenfalls über eine Schraubverbindung mit dem Fuß verbunden. Dabei wird die Säule zusätzlich durch einen Durchbruch im Fuß geführt, um weitere Biegebelastungen abfangen zu können und die Schraubverbindungen zu entlasten.
Der Fuß wurde weiterhin so ausgelegt, dass genügend Platz für alle benötigten Komponenten und die Platine vorhanden ist und damit er durch seine Größe ein Kippen der Leuchte verhindert.
Nachdem alle CAD-Teile erstellt wurden, konnte mit diesen Daten der Laser-Sinterprozess bei einer externen Firma gestartet werden. Der nachträgliche Zusammenbau der Teile war aufgrund der hohen Maßgenauigkeit des Fertigungsverfahren kein Problem.

Schaltplanentwurf und Aufbau der Schaltung

Der Schaltplan konnte mit der Software Multisim, die durch einen Versuchstermin erlernt wurde, einfach erstellt werden.

Abb.3:Schaltplan Leuchte

Die Bestromung des Systems erfolgt über ein externes Handynetzteil über 5 V DC mit einem maximalen Strom von 2A. Die Leuchte kann über einen Kippschalter ein- und ausgeschaltet werden. Dabei unterbricht der Schalter den Stromkreis zur Hauptplatine, an die alle weiteren Komponenten angeschlossen sind.
Aufgrund der geringen Komplexität der Schaltung haben wir uns dazu entschieden, eine standardmäßige Lochrasterplatine zu nutzen und keine Platine extra für unsere Anforderungen zu fräsen.
Auf der Platine wird eine Reihe als 5V Anschluss und eine weitere als Ground-Reihe genutzt. Von dort aus werden Arduino, Drehgeber, Lichtsensor und LED-Streifen bestromt.
Alle Signalleitungen (als flexible Drähte ausgeführt) der Sensoren werden ebenfalls auf einzelnen Reihen verlötet und von dort aus mit starren Drähten auf die jeweiligen Arduino-Ports geführt. Es wurde ebenfalls darauf geachtet, sowohl die Versorgungs- als auch die Datenleitungen der Komponenten zunächst auf Klemmen zu führen und von der Klemme aus den Kontakt zur Platine herzustellen. Damit ist es möglich jede einzelne Komponente aus dem Aufbau herauszunehmen, was vor allem bei Beschädigungen der Bauteile hilfreich ist, da dann keine Lötverbindungen gelöst werden müssen.
In die digitale Datenleitung des LED-Streifens wird zusätzlich ein 220Ω Widerstand eingebracht. Dies wird durch den Hersteller des Streifens vorgegeben, um eine sichere Signalübertragung zu ermöglichen und einen zerstörungsfreien Betrieb zu gewährleisten.
Ein weiterer Schalter dient dazu, zwischen dem manuellen und dem automatischen Modus der Leuchte zu wechseln. Dieser wird zum einen auf einen digitalen Eingang des Arduinos gezogen, aber die Ausgangsseite wird außerdem über einen Pulldown-Widerstand auf Ground gezogen. Durch den Pulldown-Widerstand wird das Signal des Schalters gezielt auf das jeweilige Potential gezogen und vermieden, dass Störungen das System beeinflussen.
Später wurde bei einem ersten Test der Leuchte ein flackern der LEDs festgestellt. Wir führten dies auf Spannungsschwankungen in unserem System oder sogar durch das Netzteil zurück. Abhilfe wurde durch einen 470µF Kondensator zwischen +5V und Ground geschaffen, der Schwingungen ausgleicht. Der Kapazitätswert wurde durch Ausprobieren mit verschiedenen Kondensatoren herausgefunden.

Einarbeitung in die Regelungstechnik des Systems

Dadurch, dass die Leuchte sich automatisch der Raumbeleuchtung anpassen soll, und für eine konstante Schreibtischbeleuchtung sorgen soll, musste ein Regler entworfen werden, der später im Programm die Helligkeit der Leuchte reguliert. Zunächst wurde ein Blockschaltbild des Reglers aufgestellt, in dem die systemtechnischen Größen bestimmt werden. Zu diesem Zeitpunkt fiel wie bereits oben geschildert auf, dass die Positionierung des Lichtsensors geändert werden musste. Es wurde beschlossen, ihn auf dem Fuß zu montieren, damit er stets den Beleuchtungs-Istwert auf dem Arbeitsplatz misst, und somit auch Änderungen durch die eingestellte Helligkeit der Leuchte erkennt. Nur so war ein geschlossener Regelkreis realisierbar. Wäre nur die Raumbeleuchtung erfasst worden, hätte nur ein Steller entwickelt werden können.
Um die Systemgrößen ermitteln zu können, wurde zunächst aus dem allgemeinen Blockschaltbild eines Regelkreises, ein systemspezifisches Schaltbild erstellt (s. Abb. )

Abb.4:Regelkreis Blockschaltbilder


Daraus ergeben sich folgende Größen:

Formelzeichen Beschreibung Systemgröße
w(t) Führungsgröße Soll-Helligkeit (80 Lux)
e(t) Regelabweichung Helligkeitsdifferenz
u(t) Stellgröße Digitalsignal (0-255)
y(t) Regelgröße Ist-Helligkeit













Aus dem Datenblatt des Sensors wurde ebenfalls das Messverfahren grafisch dargestellt.

Abb.5:Messverfahren Lux Sensor










Im nächsten Schritt, wurde mit Hilfe eines Experiments die quantitativen Zusammenhänge unseres Systems bestimmt. Dazu wurde ein Testprogramm geschrieben, bei dem der LED-Streifen bitweise von 0-255 gedimmt wird und die jeweiligen Luxwerte unter der Lichtaustrittsfläche ermittelt werden. Der Test hat in einem dunklen Raum stattgefunden, um Störeinflüsse zu eliminieren.
Die aufgenommenen Werte wurden in einer Excelliste dokumentiert und in einem Diagramm geplottet. Dabei konnte ein linearer Zusammenhang zwischen Digitalsignal und Beleuchtungsstärke herausgefunden werden. Des Weiteren wurde festgestellt, dass das System nur ein sehr geringes Eigenschwingverhalten aufweist, da sich der gemessene Luxwert bei konstanter Dimmstufe der Leuchte nur in Wertebereich von wenigen Milli-Lux ändert, der die weitere Regelung nicht stört. Außerdem wurde eine maximale Beleuchtungsstärke unserer Leuchte von 80 Lux ermittelt. Dieser Wert wurde als Führungsgröße des Systems festgestellt.
Um die Formel zur Berechnung der Stellgröße aufstellen zu können, mussten im Anschluss verschiedene Regleransätze bewertet werden. [2]

P-Regler

Ein proportionalwirkender Regler multipliziert die Regelabweichung mit einem Verstärkungsfaktor KP. Das Ergebnis wird dabei unverzögert weitergegeben. Der Regler ist mittelschnell aber, gleicht keine Regelabweichungen aus. Die Reglergleichung lautet:

I-Regler

Ein integrierender Regler summiert die Regelabweichung über die Zeit auf und multipliziert das daraus entstehende Integral mit dem Faktor KI. Je länger also die Regelabweichung besteht, desto größer wird die Stellgröße. Er ist langsam im Vergleich zu anderen Reglern, ermöglicht es aber, Abweichungen vollständig zu eliminieren. Die Reglergleichung lautet:

PI-Regler

Der PI-Regler kombiniert den P- mit dem I-Regler und somit deren Vorteile. Daher reagiert er schnell auf Änderungen und kann diese exakt ausregeln. Die Reglergleichung lautet:

PD-Regler

Der PD-Regler ist ein proportional-differential wirkender Regler. Dabei berechnet der D-Anteil die Änderung der Regelabweichung, also die Änderungsgeschwindigkeit. Damit reagiert der Regler bereits auf Ankündigungen von Veränderungen und ist sehr schnell im Vergleich zu anderen Reglern. Das Problem der bleibenden Regelabweichung eines P-Reglers wird allerdings nicht eliminiert. Ein weiterer Nachteil kann entstehen, wenn das Sensorsignal unsauber, also verrauscht ist. Durch die Differentiation würde dieses Rauschen weiter verstärkt und in den Kreis hereingegeben. Damit kann es zu einer so großen Stellgröße kommen, die der Aktuator nicht mehr verarbeiten kann. Durch das Regeln in die Begrenzung des Aktuators würde die schnelle Reaktion des D-Anteils ungenutzt bleiben und das Einschwingverhalten würde verlangsamt. Da unser Sensorsignal allerdings sehr stabil ist, sollte dieses Phänomen keinen Einfluss auf unser System haben. Die Reglergleichung lautet:

PID-Regler

Dieser Regler ist der wohl am meisten eingesetzte, da er alle Vorzüge der eben genannten Regler vereinigt. Er ist sehr genau und sehr schnell. Daher haben wir uns in unserem Projekt auch für die Umsetzung mit diesem Modell entschieden. Die Reglergleichung lautet:

Grafischer Vergleich der Regler

In der Grafik ist ein Vergleich aller aufgeführten Regler zu sehen.

Abb.6:Vergleich der Regler


In der Grafik wird ein Sollwert von 1.0 angenommen. Der P- und PD-Regler können ohne einen I-Anteil nicht auf denn Sollwert regeln. Dabei ist der PD-Regler allerdings schneller als der P-Regler. Bei einem reinen I-Regler wird der geforderte Endwert zwar erreicht. Dies geschieht jedoch so langsam, dass es nicht mehr in der Grafik abbildbar ist. Der PI-Regler regelt schnell, führt jedoch zu einem Überschwinger über den Sollwert, sodass die Schnelligkeit ungenutzt bleibt. Der Sollwert wird auch hier erreicht. Der schnellste Regler ist der PID-Regler. Ohne Überschwinger kommt er als erstes auf den Sollwert.









Programmierung

Die Programmierung lässt sich in zwei Teile unterteilen, die Programmierung der Hardware und die des Windowsprogramms. Eine Vorgabe an das Projekt war es, die Programmierung in Simulink durchzuführen. Dabei kamen für uns unüberwindbare Schwierigkeiten auf. Dies lag vor allem darin, die LEDs anzusteuern. Dazu steht in der Arduino IDE eine Bibliothek des Herstellers des LED-Streifens zur Verfügung, um den Helligkeits- und Farbwert an jede LED einzeln digital übermitteln zu können. Die Implementierung in Simulink wurde versucht, führte aber zu keinem zufriedenstellenden Ergebnis. Eine Lösung der auftretenden Probleme war ebenfalls im Rahmen der Durchführungszeit des Projektes nicht zu erwarten. Um das Projekt doch zu einem Ergebnis führen zu können, wurde die Programmierung mit der Arduino IDE und Visual Studio durchgeführt.

Programmierung des Microcontrollers

Zunächst wurden die Grundfunktionen der Leuchte programmiert, also der manuelle- und der automatische Betrieb. Im manuellen Betrieb wird die Leuchte über einen Drehgeber gesteuert. Dieser ist mit dem Arduino über zwei digitale Eingänge verbunden. Der Drehgeber liefert zwei Rechtecksignale (Signal A und B), wenn man an ihm dreht. Bei der Drehrichtung nach rechts eilt Signal A dem Signal B um 90° voraus. Eine Drehung nach links lässt Signal A nacheilen. Um die Rechtecksignale zu verarbeiten und die Positionen zu zählen, wurde in einer externen Bibliothek eine neue Klasse namens Encoder erstellt. Diese Bibliothek wurde in C++ mit Visual Studio geschrieben, sodass sie auch für andere Projekte nutzbar ist.
Im Hauptprogramm, das mit der Arduino IDE realisiert wurde, werden dann zwei Funktionen der Klasse genutzt. Die setPosition-Funktion erhält eine gewünschte Position, also einen Wert zwischen 0 und 255, aus dem Hauptprogramm und setzt diese in der Bibliothek als neue Position für die Drehgeberstellung. Wird die Leuchte eingeschaltet, ist die Initialposition auf null. Die Funktion dient primär dafür, um die Encoder-Position mit dem Digitalwert aus dem Automatikprogramm zu beschreiben, damit beim Übergang vom Automatikmodus in den manuellen Betrieb die Helligkeit der LEDs erhalten bleibt und nicht auf einen anderen Wert springt.
Die getPosition-Funktion gibt die berechnete Drehgeberposition zurück. Dieser Wert wird an die LEDs weitergeleitet, um sie zu dimmen. Die Position wird dadurch berechnet, dass zunächst geprüft wird, welches Signal (A oder B) vor- und welches nacheilt. Durch eine Addition oder Subtraktion auf die vorherige Drehgeberposition wird die neue Position berechnet. Beim Testen des manuellen Betriebs fiel auf, dass das manuelle Dimmen sehr lange dauert, wenn die Drehgeberposition lediglich um eins inkrementiert oder dekrementiert wird. Daher wurde die Position quadriert an die LEDs als Dimmwert übergeben.
Im Automatikbetrieb wird der Regelungsalgorithmus programmiert. Der Lux-Sensor wird dabei zur Detektion der Beleuchtungsstärke auf dem Arbeitsplatz genutzt. Dieser erfasst die Ist-Helligkeit. Zwischen diesem Wert und dem Soll-Helligkeitswert wird die Differenz, die Regelabweichung, gebildet. Die Differenz wird in die Reglergleichung des PID-Reglers als xe eingesetzt, womit der Stellwert berechnet wird, der an den LED-Streifen gesendet wird. Durch Tests wurden die KP, KD und KI Werte ermittelt, damit der Regler schnell auf Helligkeitsänderungen reagiert, durch kleine Helligkeitsschwankungen wenig beeinflusst wird und optimal die Soll-Helligkeit hält. Auch der Regelungsalgorithmus wurde nicht im Hauptprogramm implementiert, sondern in einer ausgelagerten Klasse. Dadurch bleibt das Hauptprogramm sehr übersichtlich.
Zwischen den beiden Modi kann mit einem Kippschalter gewechselt werden. Die Abfrage des Schalterstatus erfolgt mit einer Interrupt-Funktion, sodass nur bei einer Änderung des Schalterstatus der jeweilige Status abgefragt wird und nicht bei jedem Durchlauf des Hauptprogramms.

Programmierung der Windows Applikation

Windows Applikation Datei:Smarte Tischleuchte.zip
Nachdem die Software heruntergeladen wurde, muss diese entpackt werden und kann dann ausgeführt werden.

Ergebnis

Zusammenfassung

Lessons Learned

Projektunterlagen

Direktlink zum SVN-Ordner: Projekt 20b: Smarte Tischleuchte

YouTube Video

Direktlink zum Youtube Video: Kanal Luca Di Lillo

Weblinks

Technische Daten LED-Streifen: WS2813B LED-Stripe
Datenblatt Lux-Sensor: TSL2591
Technische Daten Drehgeber: Grove-Encoder

Literatur



→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)