Testaufbau am Steckbrett
Um sich dem Ampelsystem anzunähern wird zunächst eine Testschaltung aufgebaut. Dabei werden einzelne LEDs mit Pins des Raspberry verbunden und jeweils mit einem Schutzwiderstand von 100 Ohm abgesichert.
Programmierung
Zunächst zeigt Programm 01, ob grundlegende Konzepte funktionieren: Läuft der Raspberry Pi? Funktioniert der Anschuss der Pins an das Steckbrett? Sind die Teile alle ganz?
import RPi.GPIO as GPIO
import time
print("prgO1.py")
# KONFIGURATION / SETUP
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
# Eine rote LED wird am physikalischen Pin 16 angeschlossen.
GPIO.setup(16, GPIO.OUT, initial=GPIO.LOW)
# LICHT AN / AUS
GPIO.output(16, GPIO.HIGH) # "Rot an!"
time.sleep(0.5) # 0,5 Sek. warten
GPIO.output(16, GPIO.LOW) # "Rot aus!"
Am schnellsten erstellt man das Programm auf dem Raspberry Pi selbst mit der Python IDLE oder einem vorinstallierten Editor.
Programm 02 führt eine einfache For-Schleife ein, und zeigt damit, dass der elektronische Output fortlaufend wiederholbar ist. Das ist insofern wichtig, als die spätere Ampel selbstständig laufen soll und nicht nur dann, wenn die Maus auf der OS-Oberfläche des Raspberry Pi das Programm startet.
import RPi.GPIO as GPIO
import time
print("prgO2.py")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(16, GPIO.OUT, initial=GPIO.LOW)
for n in range(5):
print("Durchgang: "+str(n+1))
GPIO.output(16, GPIO.HIGH)
print("rot an")
time.sleep(1)
GPIO.output(16, GPIO.LOW)
print("rot aus")
time.sleep(1)
Programm 03 zeigt, wie LEDs im Wechsel an- und ausgeschaltet werden können. Die Ampel folgt dann später dem typischen Phasenmodell, erfordert also über den reinen Wechsel hinaus noch die Logik der Signalabfolge.
import RPi.GPIO as GPIO
import time
print("prgO3.py")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT, initial=GPIO.LOW) #gelb
GPIO.setup(13, GPIO.OUT, initial=GPIO.LOW) #rot
for n in range(5):
print("Durchgang: "+str(n+1))
GPIO.output(11, GPIO.HIGH)
GPIO.output(13, GPIO.LOW)
print('gelb')
time.sleep(1)
GPIO.output(11, GPIO.LOW)
GPIO.output(13, GPIO.HIGH)
print('rot')
time.sleep(1)
# alles aus
GPIO.output(11, GPIO.LOW)
GPIO.output(13, GPIO.LOW)
Phasen einer Ampel
Ampeln für den Straßenverkehr mit drei Signalleuchten schalten in Phasen nach immer derselben Logik.
Programm 04 setzt die Phasenschaltung der Verkehrsampel in einem imperativen Python-Skript um.
import RPi.GPIO as GPIO, time
print("prgO4.py")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(8, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(10, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(12, GPIO.OUT, initial=GPIO.LOW)
GPIO.output(8, GPIO.HIGH)
GPIO.output(10, GPIO.LOW)
GPIO.output(12, GPIO.LOW)
time.sleep(1)
GPIO.output(10, GPIO.HIGH)
time.sleep(1)
GPIO.output(8, GPIO.LOW)
GPIO.output(10, GPIO.LOW)
GPIO.output(12, GPIO.HIGH)
time.sleep(10)
GPIO.output(12, GPIO.LOW)
Weiter: Modell >>