Beruflich Dokumente
Kultur Dokumente
Aufgabenstellung Labor 5 –
Aufbau und Programmierung einer Lichtschranke
Lichtschranke mit
Reflektor
optischem Sensor
Spannungsversor- Steckbrett
gung der Licht- Übertragung 5V
schranke 9V Spannungsversor-
gung auf das
Eingangs-
Steckbrett
spannungs-
regler Spannungsversor-
gung LCD-Display
USB-Anschluss
an PC
Arduino-
Board
Spannungsver-
sorgung 9V
LCD-Display
gegebene Bauteile:
Arduino-Board UNO-R3
Steckbrett
LCD-Display (16x2 Felder, mit serieller I2C-Schnittstelle)
Eingangsspannungsregler (maximal 5V, high oder low)
Lichtschranke
Reflektor
9V-Netzteil
USB-Kabel für PC-Verbindung
Die in Abb. 1 dargestellte Schaltung dient dazu eine Lichtschranke zu betreiben. Diese besteht
aus einem Sensor, der gleichzeitig ein Infrarotlichtstrahl ausstrahlt und die Reflexion detektieren
kann. Reflektiert wird der Lichtstrahl an einem Reflektor. Der Sensor besitzt vier Kabel: blau, rot,
schwarz und weiß. Über blau und rot erfolgt die direkte Spannungsversorgung der Lichtschranke
Seite 1
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
mit der Spannung vom Netzteil an „Gnd“ und „Vin“ auf dem Arduino Board. Über die weiße Lei-
tung können an der Lichtschranke verschiedene Modi geschaltet werden, was in diesem Aufbau
ignoriert wird. Die Leitung ist nicht angeschlossen. Über die schwarze Leitung gibt der Sensor
eine Spannung in Abhängigkeit des detektierten Lichts aus, welche auf dem Arduino Board am
PIN 13 angeschlossen ist und welche dort eingelesen und ausgewertet werden kann. Da diese
Spannung höher als 5V sein kann und das Arduino Board nur Spannungen bis maximal 5V ver-
trägt, ist vor dem Eingang in das Arduino-Board noch ein Eingangsspannungsregler zwischenge-
schaltet (siehe Abb. 2 und Abb. 3).
Eingangsspan-
Ausgangsspan-
nung von der
nung 5V in
Lichtschranke
Richtung digital
Input am Ardu- Anschluss an
ino das Nullpoten-
zial (Gnd)
Abb. 2: Eingangsspannungsregler
Anschluss des
Eingangsspan-
leer ange-
nungsreglers an
schlossenes
den digitalen
Modi-Kabel des
PIN 13
Sensors
Eingangssignal
Anschluss des
von der Licht-
Eingangsspan-
schranke
nungsreglers an
das Nullpoten-
zial (Gnd)
Abb. 3: Zwischenschaltung des Eingangsspannungsreglers
Dieser Regler gibt eine maximale Spannung von 5V aus. Wenn die Lichtschranke unterbrochen
ist liegt keine Spannung an. Daher kann das Signal über den digitalen PIN 13 praktischerweise
durch die beiden Zustände „low“ (keine Spannung) und „high“ (5V Spannung) von dem auf dem
Arduino-Board laufenden Programm ausgelesen und verwertet werden muss.
Weiterhin ist an das Arduino-Board ein LCD Display zur Ausgabe und Anzeige von Informationen
mit 16 Feldern in zwei Reihen angeschlossen. Dieses Board ist an der Unterseite bereits fest
verlötet mit einer Platine, auf welcher ein Chipsatz platziert ist. Dieser Chipsatz ermöglicht eine
serielle Ansteuerung des LCD-Displays über nur zwei Datenleitungen, wohingegen die Felder
Seite 2
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
des Displays selbst an diese Platine parallel angeschlossen sind. Dies erspart einiges an Leitun-
gen. Das Display Panel, der Chipsatz und dessen Platine sowie der Anschluss an das Arduino
Board sind in den Abb. 4 bis 6 dargestellt.
parallele An-
steuerung des
Displays
Displayfläche
mit 16x2 Fel-
dern
Abb. 4: LCD-Display
serielle Daten-
leitungen
vom Arduino
Board
Abb. 5: I2C-Schnittstelle
(Umwandlung serielle Datenübertragung vom Arduino in parallele Datenübertragung an das LCD-Panel)
serielle Daten-
leitungen
vom Arduino
Board ange-
schlossen an
A4 und A5
Spannungsver-
sorgung des
LCD-Displays
angeschlossen
an 5V und Gnd
Seite 3
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Bevor es losgehen kann mit der Programmierung des eigentlichen Programms, geht es darum
einen seriellen Monitor einzubinden. Dies ist eine Art Chat-Fenster des Arduino-Boards, über
welches Informationen an den PC gesendet und auf dem Monitor dargestellt werden können.
So kann man sich z.B. vom Arduino zeigen lassen, welche Zustände gerade an den unterschied-
lichen Ein- und Ausgängen herrschen. Der serielle Monitor wird im Setup-Teil wie folgt initialisiert:
Mit Serial.print(“…“) wird in derselben Zeile des Monitors geschrieben. Mit Serial.println(“…“) wird
in einer neuen Zeile des Monitors geschrieben. Der eigentliche Text kommt zwischen die Anfüh-
rungsstriche in der Klammer. Wenn man den Inhalt einer Variable ausgeben möchte, dann wird
auf die Anführungsstriche verzichtet und nur der Variablenname in die Klammern eingetragen:
Seite 4
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Schreiben Sie folgendes kleines Programm zum Testen des seriellen Monitors:
Überprüfen Sie das Programm auf Tippfehler. Laden Sie es anschließend auf das Arduino-Board
hoch und schalten Sie danach den seriellen Monitor über das Arduino-Programm auf Ihrem PC
dazu. Der serielle Monitor sollte beginnen hochzuzählen:
Seite 5
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Definieren sie nun den PIN 13 als digitalen Eingang und lassen Sie sich den Zustand (1 = High,
0 = Low) auf dem seriellen Monitor ausgeben:
Seite 6
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
In einem neuen Programm wollen wir nun Text auf das LCD-Display schreiben. Zunächst muss
dafür aber im Arduino-Programm eine Programmbibliothek installiert werden. Dafür klicken Sie
zunächst auf „Werkzeuge“ und dann auf „Bibliotheken verwalten“:
Anschließend geben Sie oben im Suchpanel folgenden Suchbegriff ein: LiquidCrystal I2C und
installieren Sie die Bibliothek LiquidCrystal I2C by Frank de Brabander Version 1.1.2
Seite 7
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Anschließend erstellen Sie folgenden Programmcode um abwechselnd Text auf dem LCD-Dis-
play auszugeben:
Seite 8
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Nun können Sie in einem eigenen Programm versuchen, die verschiedenen Erkenntnisse zusam-
menzubringen und bspw. auf dem LCD-Display einen Zähler darstellen, der zählt, wie oft die
Schranke unterbrochen wird.
Dafür sollten Sie zunächst eine neue Zählvariable „zaehler“ als Integer (Variablentyp Integer
nur natürliche Zahlen) einfügen.
Die Herausforderung ist nun, dass bei einer Schrankenunterbrechung viele Schleifen-
durchläufe passieren, bei welchen detektiert wird, dass die Schranke unterbrochen ist. Es
soll aber nur einmal hochgezählt werden und nicht bei jedem einzelnen Schleifendurch-
lauf.
In der permanent durchlaufenden Schleife sollte zunächst die Spannung am PIN 13 überprüft
werden. Liegt dort keine Spannung an und die Schranke ist also gerade unterbrochen, sollte
einmalig hochgezählt werden. Dieses „einmalig“ wird über die Abfrage der bool-schen Statusva-
riable „geradeunterbrochen“ erreicht. Wenn also Spannung anliegt, dann sollte zunächst immer
überprüft werden, ob die Variable „geradeunterbrochen“ „wahr“ oder „falsch“ ist.
In dem Schleifendurchlauf, wo sich die Spannung am PIN 13 gerade geändert hat, weil die
Schranke nun gerade unterbrochen wurde, sollte „geradeunterbrochen“ gerade noch auf „falsch“
gesetzt sein. Deswegen sollte in diesem Schleifendurchlauf dann einmalig hochgezählt und die
Statusvariable „geradeunterbrochen“ danach einmalig auf wahr gesetzt werden.
Bei der nächsten Spannungsabfrage im nächsten Schleifendurchlauf der Loop-Schleife wird dann
zwar erneut erkannt, dass die Schranke gerade unterbrochen ist, weil weiterhin keine Spannung
am PIN 13 anliegt. Es wird aber nicht noch einmal hochgezählt, da „geradeunterbrochen“ bereits
auf „wahr“ gesetzt ist.
Wenn die Schranke das nächste Mal nicht unterbrochen ist, also am PIN 13 wieder eine Span-
nung anliegt – der Normalzustand sozusagen –, sollte „geradeunterbrochen“ immer auf „falsch“
Seite 9
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
gesetzt werden. Wird die Schranke das nächste Mal unterbrochen, kann dann wieder einmalig
hochgezählt werden.
Bei der Umsetzung könnte Ihnen die If-Then bzw. die If-Then-Else Programmstruktur helfen:
If-Then-Else-Programmstruktur:
If-Then-Programmstruktur:
Seite 10
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Versuchen Sie es zunächst einmal selber, sich das Programm zu überlegen. Falls es doch zu
schwierig sein sollte, können Sie hier nachschauen:
Erweitern Sie die Schaltung dahingehend, dass Sie einen Button entsprechend der Einführungs-
beispiels 3 einbinden. Schließen Sie den Button an den PIN 4 an.
Seite 11
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Belegen Sie den Button so, dass wenn er gedrückt ist, dass dann der Zähler zurück auf null
springt und das „Zählen“ angeschaltet ist. Wenn der Knopf wieder losgelassen wird, soll das
„Zählen“ aufhören und auf dem Display nur das Ergebnis vom letzten Zählvorgang angezeigt
werden.
Seite 12
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Die Einführung einer weiteren Statusvariable „buttongedrueckt“ könnte hier ebenfalls helfen. Die
Verwendung ist analog zu „geradeunterbrochen“ aus Aufgabe 5.
Versuchen Sie es am besten auch hier erst einmal alleine. Ansonsten finden Sie die Lösung hier:
Seite 13
Technische Universität Berlin
FG Konstruktion von Maschinensystemen
Die Funktion millis() gibt die aktuelle Systemzeit in Millisekunden aus. Wenn man die Zeit zweimal
hintereinander misst und die Differenz bildet, dann kann so die verstrichene Zeit in Millisekunden
genmessen werden. Ein Teilen durch 1000 ergibt die verstrichene Zeit in Sekunden.
Damit kann die die Frequenz berechnet werden, mit welcher die Lichtschranke in der Zwischen-
zeit unterbrochen wurde:
Wichtig ist, dass es sich bei den eingesetzten Variablen um gebrochen rationale Zahlen, also
Doubles und keine Integer vom Variablentyp her handelt:
Erweitern Sie das Programm aus Aufgabe 6 so, dass nach einer Messung nicht die erreichte
Anzahl angezeigt wird, sondern die Frequenz, mit welcher die Lichtschranke unterbrochen wurde:
Testen Sie Ihre Frequenzmessung an einem Pendel (fragen Sie Ihre Tutorin / Ihren Tutor für ein
Pendel).
Seite 14