Raspberry Pi

Aus MakerWiki
Zur Navigation springen Zur Suche springen
Raspberry Pi 3 Modell B+

Beim Paspberry Pi handelt es sich um einen Einplatinencomputer welcher neben gängigen Schnittstellen wie USB und HDMI außerdem mit einer Allzweckeingabe/-ausgabe kurz GPIO (general purpose input/output) ausgestattet ist. Die Einsatzgebiete erstrecken sich von der Lehre im Bereich von Grundkenntnissen der Informatik bis hin zu komplexen Anwendungen in Wissenschaft, Industrie und privaten Projekten. Da es rund um das Thema Raspberry Pi eine große Community gibt, welche eine Vielzahl an Dokumentationen, Tutorials, Quellcodes und sonstigen Informationsmaterialien zur Verfügung stellt, soll an dieser Stelle lediglich eine Auswahl der wichtigsten Eigenschaften des Systems aufgezeigt und ferner auf einschlägige Informationsplattformen verwiesen werden.

GPIO

Raspberry Pi GPIO Pins
Source: www.raspberrypi.org/GPIO

Da einige GPIO Pins eine direkte Verbindung zum Prozessor besitzen dürfen diese unter keinen Umständen einfach miteinander verbunden werden. Sollen Pins über ein elektronisches Bauelement (z.B. Schalter oder LED) miteinander verbunden werden, so ist immer ein Vorwiederstand zu verwenden. Andernfalls könnte das Raspberry Pi beschädigt oder vollständig zerstört werden.
Jeder GPIO Pin kann als Ein- oder Ausgang geschaltet werden, wobei Ausgänge im Logikzustand 1 eine Spannung von 3,3V und im Logikzustand 0 eine Spannung von 0V liefern. Eingänge an denen eine Spannung bis 1,7V anliegt liefern das Logiksignal 0 und bei anliegenden Spannungen im Bereich zwischen 1,7V und 3,3V das Logiksignal 1.
Neben der einfachen Ein- und Ausgangsbelegung bietet GPIO weitere Funktionen, welche entweder auf allen oder auf vereinzelten Pins verfügbar sind.

PWM
Pulse width modulation
Software PWM Alle Pins
Hardware PWM GPIO12, GPIO13, GPIO18, GPIO19
SPI
Serial Peripheral Interface
SPI0
MOSI GPIO10
MISO GPIO9
SCLK GPIO11
CE0 GPIO8
CE1 GPIO7
SPI1
MOSI GPIO20
MISO GPIO19
SCLK GPIO21
CE0 GPIO18
CE1 GPIO1
CE2 GPIO16
I2C
Inter-Integrated Circuit
Daten GPIO2
Uhr GPIO3
EEPROM Daten GPIO0
EEPROM Uhr GPIO1
Serial
TX GPIO14
RX GPIO15

Programmierung

Die GPIO Schnittstelle kann über verschiedenste Programmiersprachen und Tools angesteuert bzw. Programmiert werden. Aufgrund der verhältnismäßig einfachen Syntax ist für Einsteiger_innen die Programmierung mittels Python zu empfehlen. Wer nun jedoch vor dem lernen einer Programmiersprache zurückschreckt, sollte sich zunächst mit Scratch beschäftigen. Dabei handelt es sich um eine Programmieroberfläche welche durch die Lifelong Kindergarten group am MIT Media Lab entwickelt wurde um Menschen ohne Programmierkenntnissen einen Zugang zu diesem Werkzeug zu ermöglichen.

Tutorials und Erfahrungsberichte

Im Folgenden wird der Aufbau und die Programmierung einer einfachen Ampelschaltung unter Verwendung der GPIO Schnittstelle an einem Raspberry Pi erläutert, wobei wichtige Aspekte genauer betrachtet werden sollen. Dazu wird zunächst der Aufbau des elektronischen Schaltkreises erklärt und anschließend die Programmierung zur Steuerung beschrieben.

Elektronischer Schaltkreis

Andeutung der Leiterbahnen auf einer Steckplatine
Aufbau der Ampelschaltung

Bevor es an die Programmierung geht muss der Schaltreis für die Ampelanlage aufgebaut werden. Um beim Aufbau den verhältnismäßig aufwendigen Prozess des Lötens zu umgehen verwenden wir zunächst eine Steckplatine, welche auch häufig als breadboard bezeichnet werden. Die Funktionsweise dieses Stecksystems ist schnell erklären: Die Steckkontakte der beiden äußeren Steckreihen X und Y sind längs der Steckplatine miteinander verbunden und werden im Rahmen der Ampelschaltung als Anode (Rot) und Masseleitung (Grün) verwendet. Die zwischen den äußeren Reihen befindlichen Steckreihen (A bis E und J bis F) sind jeweils quer miteinander verbunden (Blau) und sind durch eine Lücke in der Mitte der Platine voneinander getrennt.
Wie bereits erläutert dürfen die GPIO Pins unter keinen Umständen ohne einen Vorwiederstand betrieben werden. Bevor nun also eine LED über einen GPIO Ausgang angesteuert werden kann, muss ein passender Wiederstand zwischen die Anode der LED und den GPIO Ausgang verbaut werden. Für die vorliegende Ampelschaltung wird dazu ein 220Ω Widerstand verwendet. Der Widerstandswert eines Widerstands lässt sich mittels seiner Farbcodierung entschlüsseln. Dabei geben die ersten zwei Ringe eine Zweistellige Zahl vor die mit einem Faktor, welcher sich aus der Farbe des dritten Rings ergibt, multipliziert wird. Der vierte Ring gibt lediglich eine Toleranz an und dient der Eindeutigkeit der Leserichtung der Ringe.

Farbe 1. Ring
(Zehner)
2. Ring
(Einer)
3.Ring
(Faktor)
4. Ring
(Toleranz)
Silber 10-2 = 0,01 ±10%
Gold 10-1 = 0,1 ±5%
Schwarz 0 100 = 1
Braun 1 1 101 = 10 ±1%
Rot 2 2 102 = 100 ±2%
Orange 3 3 103 = 1.000
Gelb 4 4 104 = 10.000
Grün 5 5 105 = 100.000 ±0,5%
Blau 6 6 106 = 1.000.000 ±0,25%
Violett 7 7 107 = 10.000.000 ±0,1%
Grau 8 8 108 = 100.000.000 ±0,05%
Weiß 9 9 109 = 1.000.000.000
1. Ring
(Zehner)
2. Ring
(Einer)
3.Ring
(Faktor)
4. Ring
(Toleranz)
Widerstand [Ω]
Rot Rot Braun Gold 220 ±11
Pull-Down-Widerstand

Da wir nun wissen wie die Widerstände im Schaltkreis identifiziert werden, wollen wir uns im Folgenden mit den Leuchtdioden Beschäftigen. Da Leuchtdioden, wie jede andere Diode auch, über eine Sperr- und Durchlassrichtung verfügen, ist beim Einbau darauf zu achten, dass die Einbaurichtung berücksichtigt wird. Die elektrische Durchlassrichtung von Dioden ist von der Anode (+) zur Kathode (-). Bei den meisten Leuchtdioden lassen sich Anode und Kathode dadurch unterscheiden, dass der Anschlusskontakt der Anode länger ist als der der Kathode. Ist nun der richtige Wiederstand ausgewählt und die Einbaurichtung der LED bestimmt, so können die Ausgänge entsprechend verschaltet werden. Dies bedeutet konkret, dass zwischen den GPIO Ausgängen und der Anode der Leuchtdiode ein 220Ω Widerstand verbaut wird und die Kathode mit dem Bezugspotential (Masse) der GPIO Schnittstelle verbunden wird.
Der Start des Ampeltaktes soll durch das Drücken eines Tasters initiiert werden, welcher über einen GPIO Eingang mit dem Raspberry verbunden ist. Damit der GPIO Eingang im geöffneten Zustand des Tasters den klar definierten Logikzustand 0 aufweist darf die anliegende Spannung maximal 1,7V betragen. Nach dem Öffnen des Tasters kann es allerdings zu einem nicht eindeutigen Logikzustand kommen, weshalb ein sogenannter Pull-Down-Wiederstand eingebaut werden soll. Dieser führt dazu, dass der GPIO Eingang im geöffneten Zustand des Tasters mit dem Bezugspotential verbunden ist und somit eine Spannung von 0V anliegt. Im geschlossenen Zustand des Tasters beeinflusst der im Verhältnis sehr groß gewählte Pull-Down-Widerstand (10kΩ) die Schaltung nur geringfügig.

Programmierung

#!/usr/bin/python
# -*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import time

rot   = 0
gelb  = 1
gruen = 2
f_rot = 3
f_gru = 4
taste = 5
Ampel = [18,24,8.16,20,21]

GPIO.setmode(GPIO.BCM)
GPIO.setup(Ampel[rot], GPIO.OUT, initial=0)
GPIO.setup(Ampel[gelb], GPIO.OUT, initial=0)
GPIO.setup(Ampel[gruen], GPIO.OUT, initial=1)
GPIO.setup(Ampel[f_rot], GPIO.OUT, initial=1)
GPIO.setup(Ampel[f_gru], GPIO.OUT, initial=0)
GPIO.setup(Ampel[taste], GPIO.IN)

print("Taster drücken, um Ampeltakt zu starten. Strg+C beendet das Programm")

try:
   while True:
       if GPIO.input(Ampel[taste])==1:
          GPIO.output(Ampel[gruen],0)
          GPIO.output(Ampel[gelb],1)
          time.sleep(0.5)
          GPIO.output(Ampel[gelb],0)
          GPIO.output(Ampel[rot],1)
          time.sleep(0.5)
          GPIO.output(Ampel[f_rot],0)
          GPIO.output(Ampel[f_gru],1)
          time.sleep(3)
          GPIO.output(Ampel[f_gru],0)
          GPIO.output(Ampel[f_rot],1)
          time.sleep(0.5)
          GPIO.output(Ampel[gelb],1)
          time.sleep(0.5)
          GPIO.output(Ampel[rot],0)
          GPIO.output(Ampel[gelb],0)
          GPIO.output(Ampel[gruen],1)
          time.sleep(3)
except KeyboardInterrupt:
   GPIO.cleanup()

Weblinks

Hardware
www.raspberrypi.org
www.raspberrypi.org/Help
www.raspberrypi.org/GPIO

Software
www.scratch-wiki.info

Betriebssysteme
Raspian
NOOBS
Raspberry Pi Desktop

Betriebssysteme von Drittanbietern
Ubuntu MATE
Ubuntu Core
Ubuntu Server
Windows 10 IoT Core
OSMC
LibreELEC
Mozilla WebThings
PiNet
RISC OS
IchigoJam

Nützliches
www.fritzing.org