Sie sind auf Seite 1von 14

Technische Universität Berlin

FG Konstruktion von Maschinensystemen

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

Abb. 1: Überblick über Baugruppe, Elemente und Schaltung

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

parallele An- Spannungsver-


steuerung des sorgung des
Displays LCD-Displays
(5V und Gnd)

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

Abb. 6: Anschluss des LCD-Panels an das Arduino-Board

Seite 3
Technische Universität Berlin
FG Konstruktion von Maschinensystemen

Aufgabe 1: Lesen und Schaltung verstehen


Lesen Sie das Dokument bis zu diesem Punkt aufmerksam durch. Schauen Sie sich die Schal-
tung in der Realität am Platz an und versuchen Sie diese zu verstehen und nachzuvollziehen. Bei
Fragen zur Schaltung wenden Sie sich an Ihre Tutorin oder Ihren Tutor.

Aufgabe 2: der serielle Monitor

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.

Abb. 7: Zuschalten des seriellen Monitors


(Verbindung zum Arduino Board muss bereits bestehen)

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:

Anschließend gibt es zwei mögliche Befehle zum Schreiben von Nachrichten:

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:

Abb. 8: Programmcode Aufgabe 2

Ü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:

Abb. 9: Ergebnis Aufgabe 2

Aufgabe 3: Auswerten der Lichtschranke

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:

Abb. 10: Programmcode Aufgabe 3

Was passiert, wenn Sie die Lichtschranke unterbrechen?

Abb. 11: Ergebnis Aufgabe 3

Aufgabe 4: Ansteuerung des LCD-Displays

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“:

Abb. 12: Zugang zu den Programmbibliotheken

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

Abb. 13: Installation der LiquidCrystal_I2C Bibliothek

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:

Abb. 14: Programmcode Aufgabe 4

Abb. 15: Ergebnis Aufgabe 4

Seite 8
Technische Universität Berlin
FG Konstruktion von Maschinensystemen

Aufgabe 5: eigenständige Programmierung von Lichtschrankenauswertung und LCD-Dis-


play

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.

Deswegen könnte es helfen mit bool-schen Statusvariablen zu arbeiten (Variablentyp Boolean 


kann nur wahr oder falsch sein, daher entweder „true“ oder „false“):

Initialisierung Variablenname Erstbelegung

Tipps für eine sinnvolle Programmlogik:

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:

Abb. 15: Ergebnis Aufgabe 5

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:

Aufgabe 6: Button in die Schaltung einbinden mit Start/Stop-Funktion

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

Abb. 16: Platinenübersicht / Schaltplan des dritten Einführungsbeispiels

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

Zusatzaufgabe: Stoppen der Zeit / Berechnung der Frequenz

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:

Abb. 17: Ergebnis Zusatzaufgabe

Testen Sie Ihre Frequenzmessung an einem Pendel (fragen Sie Ihre Tutorin / Ihren Tutor für ein
Pendel).

Seite 14

Das könnte Ihnen auch gefallen