RASPBERRY PI Physical Computing

Werbung
RASPBERRY PI
Physical Computing
Mit dem Raspberry Pi kann man Leuchtdioden aber auch Geräte steuern. Man braucht
dazu eine geeignete Programmierumgebung. Python und Scratch sind solche geeigneten
Programmiersprachen. Scratch ist die einfachere Programmiersprache. Mit dieser
können wir Leuchtdioden z.B. zum Blinken bringen.
Wir brauchen dazu:
1) ScratchGPIO
Das ist eine kleine Erweiterung für Scratch um damit die GPIO-Pins des Raspberry Pi
zum Steuern unter Scratch verwenden zu können.
Wie können wir ScratchGPIO einrichten?
Wir öffnen das LXTerminal unseres Raspberry Pi-Desktops und tippen in die
Kommandozeile:
wget http://bit.ly/1wxrqdp -O isgh7.sh
Nachdem wir mit Enter bestätigt haben, wird der Installer heruntergeladen.
Danach tippen wir in die Kommandzeile:
sudo bash isgh7.sh
ScratchGPIO7 wird installiert. Auf dem RasPi-Desktop erscheinen zwei Icons mit den
Namen ScratchGPIO7 und ScratchGPIO7plus. Die Scratch-Oberfläche hat sich nicht
verändert, aber einige zusätzliche Scripts ermöglichen Scratch nun mit den GPIO-Pins
des Raspberry Pi zu kommunizieren. Beim Starten von Scratch erscheint als Erstes ein
Dialog, der meldet, dass die Remote Sensor Extensions nun aktiviert sind. Dies
quittieren
wir
mit
OK!
(ScratchGPIO7
ist
die
Standartversion
während
ScratchGPIO7plus für kompliziertere Projekte verwendet wird.)
Heerdegen-Leitner & Heerdegen, 2016
Seite 1
2) Benötigte elektronische Bauteile
.) eine Steckplatine (Breadboard) - damit ersparen wir uns das Löten; die beiden
äußeren (rot, blau) Längsreihen sind mit Kontakten miteinander verbunden. Sie werden
oft als Plus- und Minuspol zur Stromversorgung genutzt. Bei den inneren (grün) Reihen
sind jeweils 5 Kontakte miteinander verbunden.
.) Leuchtdioden - oder LEDs leuchten, wenn Strom in einer Richtung durch sie fließt.
Sie haben zwei Anschlussdrähte, einen längeren, das ist der Pluspol oder die Anode und
einen kürzeren, das ist der Minuspol oder die Kathode. LEDs haben nur einen sehr
geringen Widerstand, d.h. sie lassen beliebig viel Strom durch. Damit sie nicht sofort
durchbrennen, muss zwischen dem GPIO-Pin und dem Pluspol der LED ein Widerstand
(VORwiderstand) eingebaut werden.
.) elektrische Widerstände (220 Ohm, 20 MOhm) - sie begrenzen den Strom, der
durch eine Leitung fließt. Die Maßeinheit für den Widerstand ist Ohm. Auf ganz alten
Widerständen sieht man noch den Widerstandswert in ganz kleinen, sehr schwer
lesbaren Zahlen. Heute wird der Widerstandswert mit Farbcodes (verschiedene farbige
Ringe auf den Widerständen) angegeben.
.) Jumper-Kabel (male - male) - sie werden als Steckbrücken auf dem Steckbrett
gebraucht. Man kann sich auch mit kleinen Drahtstücken solche Steckbrücken bauen.
Heerdegen-Leitner & Heerdegen, 2016
Seite 2
.) Jumper-Kabel (female - male) - mit ihnen wird die Verbindgung zwischen GPIO-Pin
des Raspberry Pi und der Steckplatine hergestellt.
3) GPIO-Schnittstelle
Der Raspberry Pi hat eine Ein- und Ausgabeeinheit, die GPIO-Schnittstelle (General
Purpose Input/Output). Es handelt sich dabei um zwei Reihen mit insgesamt 40 Pins
(beim älteren Modell B sind es nur 26 Pins). An diese Pins können wir mit Jumper-Kabeln
elektrische Schaltkreise anschließen.
Hier eine Übersicht über die 40 Pins und deren Aufgaben:
Die mit einer Zahl bezeichneten Pins (z.B. GPIO17) können sowohl als Eingang als auch
als Ausgang verwendet werden. An ihnen liegt entweder die Spannung 0 Volt oder +3,3
Volt an! Es gibt je zwei Pins mit +3,3 Volt Spannung und +5 Volt Spannung. Außerdem
gibt es acht Pins mit Masseanschluss (Ground)!
4) Projekt 1: Eine blinkende LED
Für unser erstes Beispiel verwenden wir Pin# 06 (Ground), also einen Masseanschluss
und Pin# 11 (GPIO17).
Heerdegen-Leitner & Heerdegen, 2016
Seite 3
Wir bauen die abgebildete Schaltung auf unserem Steckbrett auf: eine LED, ein
Widerstand (220 Ohm), zwei Jumper-Kabeln
Wir wollen Pin# 11 (also GPIO17) als Ausgang verwenden, wir kreieren in SCRATCH
folgenden Befehlsblock und klicken ihn an:
Heerdegen-Leitner & Heerdegen, 2016
Seite 4
Danach brauchen wir noch folgende Befehlsblöcke:
Klicken wir den on-Befehlsblock an, fließt Strom, die LED leuchtet, klicken wir den offBefehlsblock an, fließt kein Strom, die LED leuchtet nicht.
Statt "on" und "off" können wir auch "high" (Strom fließt) und "low" (Strom fließt nicht)
schreiben. Statt "gpio17" können wir auch "pin11" verwenden.
Wir können aber auch "1" (Strom fließt) oder "0" (Strom fließt nicht) verwenden. Dann
müssen wir aber in Scratch mit dem Operator "verbinde" arbeiten.
Mit folgendem kleinen Script können wir unsere LED bereits blinken lassen:
Heerdegen-Leitner & Heerdegen, 2016
Seite 5
5) Das Projekt 1 in Python
Die Bibliothek RPi.GPIO muss zuerst installiert werden, um die GPIO-Ports des
Raspberry Pi nutzen zu können.
Wir gehen dazu in das LXTerminal und geben folgende Befehle ein:
sudo apt-get update
sudo apt-get install python-dev
sudp apt-get install python-rpi.gpio
Die notwendigen und vor allem aktuellen Module werden installiert.
Nur mit Administratoren-Rechten können wir auf die GPIO-Schnittstelle zugreifen. Im
LXTerminal geben wir folgenden Befehl ein:
sudo idle3
Wir importieren das Modul RPI.GPIO mit dem Befehl
from RPi import GPIO
Mit setmode() geben wir an, mit welcher Art von Pin-Nummerierung wir arbeiten.
GPIO.setmode(GPIO.BOARD)
Nun können wir mit den Pin-Nummern arbeiten, die bei der etwas weiter oben stehenden
Übersicht mit Pin# bezeichnet sind.
Wir machen Pin#11 zum Ausgabekanal!
GPIO.setup(11, GPIO.OUT)
Mit dem Befehl
GPIO.output(11, True)
oder
GPIO.output(11, 1)
leuchtet die LED! Der Wahrheitswert "True" bedeutet, dass am Pin 11 ein
Spannungspegel von 3,3 Volt anliegt. Es fließt also Strom. (1 = Strom fließt)
Heerdegen-Leitner & Heerdegen, 2016
Seite 6
Mit dem Befehl
GPIO.output(11, False)
oder
GPIO.output(11, 0)
wird die LED ausgeschaltet! Der Wahrheitswert "False" bedeutet, dass am Pin 11 ein
Spannungspegel von 0 Volt anliegt. Es fließt also kein Strom. (0 = Strom fließt nicht)
Das fertige Programm wird folgendermaßen erstellt:
.) Wir öffnen das LXTerminal und geben ein
nano LED1.py
.) Der Texteditor öffnet sich und wir tippen das Programm ein!
from RPi import GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
while True:
GPIO.output(11, True)
time.sleep(0.5)
GPIO.output(11, False)
time.sleep(0.5)
while True: leitet eine Endlosschleife ein. Der eingerückte Block wird ewig
wiederholt, weil die Bedingung der while-Anweisung immer wahr (True) ist. Das
Programm
wird
mit
der
Tastenkombination
Strg+C
abgebrochen
(Keyboard-
Interrupt)!
.) Mit der Tastenkombination STRG+X und anschließendem Bestätigen mit ENTER
speichern wir die Datei ab!
.) Aufrufen können wir die Datei im LXTerminal mit dem Befehl
sudo python LED1.py
.) Oder wir rufen im LXTerminal den Befehl
Heerdegen-Leitner & Heerdegen, 2016
Seite 7
sudo idle3
auf und wählen in der Python Shell File - Open und öffne die Datei LED1.py.
Anschließend wählen wir Run - Run Module und das Programm wird ausgeführt
6) Projekt 2: Zwei blinkende LEDs
Zwei LEDs sollen nach einem bestimmten Muster blinken. Zuerst sind beide LEDs
ausgeschaltet. Jetzt soll die erste LED leuchten, dann sind beide wieder ausgeschaltet.
Dann soll die zweite LED leuchten. Wieder sind danach beide LEDs ausgeschaltet. Zum
Schluss sollen alle beiden LEDs blinken. Danach beginnt das Blinkmuster wieder von
vorne. Mit dem Wiederhole-Befehl können wir entscheiden, wie oft das Blinkmuster
aufgerufen werden soll. Für dieses Beispiel verwenden wir Pin# 01 (3,3 V), Pin#10
(GPIO15) und Pin#12 (GPIO18).
Wir bauen die abgebildete Schaltung auf unserem Steckbrett auf: zwei LEDs, zwei
Steckbrücken, zwei Widerstände (220 Ohm), drei Jumperkabeln (female - male)
Pin#10 und Pin#12 sollen als Ausgang verwendet werden. Wir programmieren in
Scratch:
An Pin#01 ist immer ein Spannungspegel von 3,3 Volt vorhanden.
Heerdegen-Leitner & Heerdegen, 2016
Seite 8
Wenn wir nun programmieren
dann ist auch an Pin#10 ein Spannungspegel von 3,3 Volt vorhanden. Beide Pins (Pin#01
und Pin#10) haben das gleiche elektrische Potenzial, zwischen ihnen gibt es keine
Spannung und es fließt deshalb kein Strom. Die LED leuchtet nicht.
Wenn wir aber programmieren
dann ist an Pin#10 eine Spannung von 0 Volt. Damit wird dieser Pin gegenüber Pin#01
zum Minuspol, weil an Pin#1 immer noch 3,3 Volt anliegen. Es fließt also Strom, die LED
leuchtet.
Somit programmieren wir der Reihe nach:
Beide LEDs leuchten nicht!
LED 1 leuchtet eine halbe Sekunde, danach erlischt sie! Es wird eine halbe Sekunde
gewartet.
LED 2 leuchtet eine halbe Sekunde, danach erlischt sie! Wieder wird eine halbe
Sekunde gewartet.
Heerdegen-Leitner & Heerdegen, 2016
Seite 9
Beide LEDs werden eingeschaltet. Sie leuchten eine halbe Sekunde.
Beide LEDs werden wieder ausgeschaltet.
Das ganze wiederholen wir 10 mal.
Das ganze Script sieht folgendermaßen aus:
Heerdegen-Leitner & Heerdegen, 2016
Seite 10
7) Das Projekt 2 in Python
Die Module GPIO und time werden imortiert:
from RPi import GPIO
import time
Es wird die Pin-Nummerierung BOARD eingestellt
GPIO.setmode(GPIO.BOARD)
Wir definieren PIN#10 und Pin#12 als Ausgang!
GPIO.setup(10, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)
PIN#10 und Pin#12 werden in den Zustand True versetzt. An beiden Pins liegt nun eine
Spanung von 3,3 Volt. Es fließt kein Strom durch die LEDs. Beide LEDs leuchten nicht.
GPIO.output(10, True)
GPIO.output(12, True)
Das Programm wartet eine halbe Sekunde
time.sleep(0.5)
Pin#12 wird zuerst in den Zustand False versetzt, es fließt Strom, die LED leuchtet.
Nach einer halben Sekunde wird Pin#12 in den Zustand True versetzt, es fließt kein
Strom, die LED leuchtet nicht.
GPIO.output(12, False)
time.sleep(0.5)
GPIO.output(12, True)
time.sleep(0.5)
Das selbe machen wir mit Pin#10:
GPIO.output(10, False)
time.sleep(0.5)
Heerdegen-Leitner & Heerdegen, 2016
Seite 11
GPIO.output(10, True)
time.sleep(0.5)
Nun werden beide LEDs eingeschaltet, PIN#10 und Pin#12 werden in den Zustand False
versetzt! Strom fließt. Nach einer halben Sekunde werden sie wieder in den Zustand
True versetzt, es fließt kein Strom, LED 1 und LED 2 sind ausgeschaltet.
GPIO.output(12, False)
GPIO.output(10, False)
time.sleep(0.5)
GPIO.output(12, True)
GPIO.output(10, True)
Das fertige Programm wird folgendermaßen erstellt:
.)Wir öffnen das LXTerminal und geben ein
nano LED2.py
.) Der Texteditor öffnet sich und wir tippen das Programm ein!
from RPi import GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(10, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)
while True:
GPIO.output(10, True)
GPIO.output(12, True)
time.sleep(0.5)
GPIO.output(12, False)
time.sleep(0.5)
GPIO.output(12, True)
time.sleep(0.5)
GPIO.output(10, False)
time.sleep(0.5)
GPIO.output(10, True)
time.sleep(0.5)
GPIO.output(12, False)
Heerdegen-Leitner & Heerdegen, 2016
Seite 12
GPIO.output(10, False)
time.sleep(0.5)
while True: leitet eine Endlosschleife ein. Der eingerückte Block wird ewig
wiederholt, weil die Bedingung der while-Anweisung immer wahr (True) ist. Das
Programm
wird
mit
der
Tastenkombination
Strg+C
abgebrochen
(Keyboard-
Interrupt)!
.) Mit der Tastenkombination STRG+X und anschließendem Bestätigen mit ENTER
speichern wir die Datei ab!
.) Aufrufen können wir die Datei im LXTerminal mit dem Befehl
sudo python LED2.py
.) Oder wir rufen im LXTerminal den Befehl
sudo idle3
auf und wählen in der Python Shell File - Open und öffne die Datei LED2.py.
Anschließend wählen wir Run - Run Module und das Programm wird ausgeführt.
8) Projekt 3: Einfache Verkehrsampel
Es soll eine Verkehrsampel mit ihrem typischen Leuchtzyklus - Grün über Gelb nach Rot
und dann von
einer Leuchtkombination Rot-Gelb wieder auf Grün - aufgebaut und
programmiert werden.
Wir wollen Pin#06 als Masseanschluss und die Pins #7 (also GPIO04), #12 (also
GPIO18) und #18 (also GPIO24) als Ausgänge verwenden. Wir konfigurieren die Namen
der Pins in Scratch also folgendermaßen:
Wir bauen die abgebildete Schaltung auf unserem Steckbrett auf: drei LEDs (rot, gelb,
grün), drei Widerstände (220 Ohm), vier Jumperkabeln (female - male)
Heerdegen-Leitner & Heerdegen, 2016
Seite 13
Das fertige Programm sieht dann folgendermaßen aus: Der Leuchtzyklus soll dreimal
wiederholt werden! Der zweite Wiederhole-Block lässt die grüne LED 5 mal blinken ehe
die gelbe eingeschaltet wird.
Heerdegen-Leitner & Heerdegen, 2016
Seite 14
Wir können aber auch die Nummern der Pins (#7, #12 und #18) konfigurieren
und unsere Verkehrsampel so programmieren:
Heerdegen-Leitner & Heerdegen, 2016
Seite 15
9) Das Projekt 3 in Python
.)Wir öffnen das LXTerminal und geben ein
nano Verkehrsampel1.py
.) Der Texteditor öffnet sich und wir tippen das Programm ein!
from RPi import GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
while True:
GPIO.output (7, True)
time.sleep (4)
GPIO.output (12, True)
time.sleep (2)
GPIO.output (7, False)
GPIO.output (12, False)
GPIO.output (18, True)
time.sleep (4)
GPIO.output (18, False)
time.sleep (0.3)
GPIO.output (18, True)
time.sleep (0.3)
GPIO.output (18, False)
time.sleep (0.3)
GPIO.output (18, True)
time.sleep (0.3)
GPIO.output (18, False)
time.sleep (0.3)
GPIO.output (18, True)
time.sleep (0.3)
GPIO.output (18, False)
GPIO.output (12, True)
time.sleep (2)
GPIO.output (12, False)
Heerdegen-Leitner & Heerdegen, 2016
Seite 16
while True: leitet eine Endlosschleife ein. Der eingerückte Block wird ewig
wiederholt, weil die Bedingung der while-Anweisung immer wahr (True) ist. Das
Programm
wird
mit
der
Tastenkombination
Strg+C
abgebrochen
(Keyboard-
Interrupt)!
.) Mit der Tastenkombination STRG+X und anschließendem Bestätigen mit ENTER
speichern wir die Datei ab!
.) Aufrufen können wir die Datei im LXTerminal mit dem Befehl
sudo python Verkehrsampel1.py
.) Oder wir rufen im LXTerminal den Befehl
sudo idle3
auf und wählen in der Python Shell File - Open und öffne die Datei Verkehrsampel.py.
Anschließend wählen wir Run - Run Module und das Programm wird ausgeführt.
10) Projekt 4: Einen Schalter verwenden
Ein GPIO-Pin kann auch als Eingang benutzt werden, der einem Computerprogramm 0
oder 1 schickt. Das hängt davon ab, welches Signal am Eingang liegt. Man unterschiedet
hier zwischen Low (niedrig) und High (hoch). Dabei bedeutet Low, dass der Eingang mit
der Masse verbunden ist (Wert 0) und High, dass am Eingang eine positive Spannung
anliegt (Wert 1).
ScratchGPIO nutzt interne Pullup-Widerstände im Raspberry Pi, sodass GPIO-Eingänge,
an denen ein nicht gedrückter Schalter angeschlossen ist, immer den Wert 1 haben.
Verbindet man einen solchen GPIO-Eingang über einen Schalter mit Ground, indem man
den Schalter drückt, nimmt er den Wert 0 an. Ein gedrückter Schalter schaltet in
ScratchGPIO einen Eingang also nicht ein sondern aus.
Mit Hilfe eines Schalters soll eine LED ein- und wieder ausgeschaltet werden.
Wir bauen die abgebildete Schaltung auf unserem Steckbrett auf: eine LED, ein
Widerstand (220 Ohm), drei Jumperkabeln (female - male), ein Schalter
Heerdegen-Leitner & Heerdegen, 2016
Seite 17
Wir konfigurieren Pin#26 als Eingang und Pin#11 als Ausgang. (Das rote Kabel kommt an
Pin#26, das grüne Kabel an Pin#11, das blaue Kabel an Pin#6.)
Unser Programm in Scratch sieht dann so aus:
Wird der Schalter gedrückt, nimmt der GPIO-Eingang an Pin#26 den Wert 0 an! In
diesem Fall leuchtet die LED, die am Pin#11 angeschlossen ist 0.5 Sekunden. Danach
wird sie wieder ausgeschaltet. Durch Anklicken des roten Stopp-Schildes in der
Programmierumgebung Scratch (rechts oben) kann das Programm abgebrochen werden.
11) Projekt 5: Fußgängerampel und Verkehrsampel
In diesem Projekt wird eine einfache Verkehrsampel mit einer Fußgängerampel
kombiniert.
Die Ampelschaltung soll während der Rotphase der Verkehrsampel eine
Heerdegen-Leitner & Heerdegen, 2016
Seite 18
Grünphase für die Fußgänger anzeigen. Mit einem Schalter soll die Ampel in Betrieb
gesetzt werden.
Wir bauen die abgebildete Schaltung auf unserem Steckbrett auf: zwei Steckbretter,
zwei LEDs (rot), zwei LEDs (grün), eine LED (gelb), ein Schalter, fünf Widerstände
(220 Ohm), sieben Jumperkabeln (female - male), zwei Steckbrücken
Das eine Steckbrett enthält die Verkehrsampel für die Autofahrer, das andere die
Fußgängerampel mit dem Schalter. Beide Steckbretter brauchen für die LEDs eine
Masseleitung. Deshalb brauchen wir die lange Steckbrücke!
Auf dem Raspberry Pi werden folgende Pins für die LEDs, den Schalter und die Masse
verwendet:
pin#16 - Verkehrsampel/grün
pin#13 - Verkehrsampel/gelb
pin#12 - Verkehrsampel/rot
pin#15 - Fußgängerampel/rot
pin#18 - Fußgängerampel/grün
pin#26 - Schalter
pin#6 - Masse
Heerdegen-Leitner & Heerdegen, 2016
Seite 19
Das fertige Script sieht dann folgendermaßen aus:
Am Beginn zeigt die Verkehrsampel grün (Pin#16) für die Autofahrer und die
Fußgängerampel zeigt rot (Pin#15). Wird der Schalter gedrückt, nimmt der GPIOEingang an Pin#26 den Wert 0 an! In diesem Fall blinkt die grüne LED der
Verkehrsampel dreimal. Danach wird sie ausgeschaltet und die gelbe Verkehrsampel
(Pin#13) leuchtet eine Sekunde. Dann zeigt die Verkehrsampel rot (Pin#12), das rote
Licht der Fußgängerampel erlischt, das grüne Licht der Verkehrsampel (Pin#18) wird für
drei Sekunden eingeschaltet. Dann wieder rot der Fußgängerampel. Nach zwei Sekunden
gelb der Verkehrsampel beginnt das Programm wieder von vorne. Durch Anklicken des
roten Stopp-Schildes wird das Programm abgebrochen.
Heerdegen-Leitner & Heerdegen, 2016
Seite 20
Herunterladen