E-Book, Deutsch, 344 Seiten
Reihe: mitp Professional
Kaffka LEGO®-Roboter bauen, steuern und programmieren mit Raspberry Pi und Python
1. Auflage 2021
ISBN: 978-3-7475-0312-6
Verlag: mitp Verlags GmbH & Co.KG
Format: EPUB
Kopierschutz: 0 - No protection
E-Book, Deutsch, 344 Seiten
Reihe: mitp Professional
ISBN: 978-3-7475-0312-6
Verlag: mitp Verlags GmbH & Co.KG
Format: EPUB
Kopierschutz: 0 - No protection
Zielgruppe
Alle, die gerne mit Lego und Elektronik basteln
Autoren/Hrsg.
Weitere Infos & Material
Kapitel 2:
Der Raspberry Pi stellt sich vor
Abb. 2.1: Der Raspberry Pi 3 B+ 2.1 Der Einplatinencomputer
Der ?Raspberry Pi 3 B+ hat das Format einer Scheckkarte, ist also sehr klein. Auch wenn es nicht so aussieht, er ist ein vollständiger Computer mit Betriebssystem. Es ist zumeist das ?Raspberry Pi OS, bei dem es sich um eine ?Linux-Distribution handelt. An den Raspberry Pi können eine ?USB-Tastatur, eine ?USB-Maus, ein ?HDMI-Monitor, ein ?LAN-Kabel sowie ein ?USB-Netzteil angeschlossen werden. Er verfügt aber auch über ?WLAN. Das Betriebssystem wird auf einer Mikro-?SD-Karte installiert. Das hat einen entscheidenden Vorteil. Wir verwenden den Raspberry Pi in diesem Buch sowohl zur Ansteuerung von LEGO-Komponenten als auch von sogenannten »?Fremdkomponenten« (das sind elektronische Komponenten, die auf dem Elektromarkt verfügbar sind). Dazu werden zwei verschiedene Betriebssystemumgebungen benötigt. Insbesondere verwenden wir bei der Steuerung der LEGO-Komponenten eine spezielle Distribution von Raspbian (auch ein Betriebssystem ?für den Raspberry Pi), die von ?Dexter Industries, dem Lieferanten der Schnittstelle (?BrickPi3) zu den LEGO-Komponenten, zur Verfügung gestellt wird. Beide Umgebungen halten wir jeweils auf einer eigenen ?Mikro-SD-Karte vor. Wenn wir zwischen der Ansteuerung von LEGO- und Fremdkomponenten wechseln, brauchen wir so nur die Mikro-SD-Karte auszutauschen, wirklich praktisch. Das Betriebssystem ?Raspberry Pi OS sowie das Raspbian (der Vorgänger des erstgenannten Betriebssystems) bieten eine grafische Oberfläche (?GUI, graphical user interface), ähnlich wie der von Windows, sodass man mit dem Computer komfortabel arbeiten kann. Abb. 2.2: Die GUI des Raspberry Pi OS Das Betriebssystem bringt bereits eine Installation von ?Python mit, sodass Sie mit dem Programmieren Ihrer Roboter sofort loslegen können. Dabei verwenden wir Python 3. ?Python ist eine moderne Programmiersprache, die von Guido van Rossum 1989 erfunden wurde. Es gibt eine ganze Menge Erleichterungen, die das Programmieren sehr komfortabel gestalten. Python verfügt unter anderem auch über die Möglichkeit, Programmabschnitte parallel zum Hauptprogramm verarbeiten zu lassen. Solche Programmabschnitte werden »?Threads« genannt. Diese Technologie machen wir uns etwa bei der Verwaltung der Zähler zunutze, die von den Encodern der Motoren gesteuert werden. Eine kurze Einführung in Python erfolgt in Teil II meines Buches. Den ?Raspberry Pi gibt es mittlerweile in verschiedenen Ausführungen, wie beispielsweise: Raspberry Pi 4, Modell B 4 Raspberry Pi 4, Modell B 2 ?Raspberry Pi 3, Modell B+ Raspberry Pi 3 Raspberry Pi 2, Modell B Raspberry Pi 1, Modell B+ Raspberry Pi, Modell A+ etc. Wir verwenden in diesem Buch den Raspberry Pi 3 B+, bei dem ich aber zumeist die »Drei« und das »B+« unterschlage. Leider können wir mit der neuesten Version des Raspberry Pi 4 nicht arbeiten, da er zur Zeit der Drucklegung des Buches nicht mit dem ?BrickPi3 (dem Modul zur Ansteuerung der LEGO-Komponenten) kompatibel ist. Besonders schön ist es, dass es für den Raspberry Pi auch eine spezielle, preiswerte ?Kamera gibt, die direkt auf dem Board angeschlossen werden kann. Wir werden bei unseren Robotern auch diese Kamera zur Bilderkennung verwenden. Für die ?Stromversorgung des Raspberry Pi bieten sich verschiedene Alternativen an. Wenn der Roboter programmiert wird, verwenden wir ein ?USB-Netzteil, das mindestens 2,5 Ampere liefern sollte. Damit ist es möglich, bei der Programmierung auch weitere elektronische Komponenten mit Strom zu versorgen. Die ?Motorspannung von +6 Volt (+9 Volt beim BrickPi3) entnehmen wir einem ?Batteriepack mit AA-Batterien. Wenn ein Roboter autonom laufen soll, verwenden wir zur Versorgung des Raspberry Pi einen ?USB-Akku. 2.2 Die GPIO-Schnittstelle
Die ?GPIO-Schnittstelle (general purpose input/output) ist eine 40-polige Stiftleiste am Rande der Raspberry-Pi-Platine, mit der Sie den Raspberry Pi mit verschiedenen Hardware-Komponenten verbinden können (siehe Abbildung 2.3). Abb. 2.3: Die GPIO-Schnittstelle des Raspberry Pi Diese hat die Pinbelegung, die aus Abbildung 2.4 hervorgeht. Abb. 2.4: Pinbelegung der GPIO-Schnittstelle Die Pins 3 und 5 beziehen sich auch auf die ?I2C-Schnittstelle. Dabei handelt es sich um eine Schnittstelle, die zur Kommunikation zwischen dem Raspberry Pi und ICs verwendet wird. Die Pins 11, 12, 13 können zum Anschluss von ?SPI-Bausteinen verwendet werden (Kanal 1). Auch die SPI-Schnittstelle dient zur Kommunikation mit elektronischen Komponenten. Hinweis ?ICs sind elektronische Bauteile, die sich in kleinen schwarzen Plastikboxen befinden und über verschiedene Kontaktbeinchen verfügen. Das IC ?MCP3008 wird beispielsweise in Kapitel 18 vorgestellt (siehe Abbildung 18.9). Bei SPI-Bausteinen handelt es sich zumeist auch um ICs, die über die SPI-Schnittstelle angesprochen werden. Pin 12 hat noch eine Spezialaufgabe: Die Ausgabe von Audiosignalen über den ?Audioausgang der Platine erfolgt über Pin 12. Für den SPI-Kanal 0 sind die Pins 19, 21, 23, 24 und 26 zuständig. (Mit Kanal 0 und 1 lassen sich dann zwei unterschiedliche SPI-Bausteine ansprechen.) Es gibt elektronische Komponenten, wie beispielsweise Sensoren, die über die SPI-Schnittstelle angesprochen werden müssen. Das bereits erwähnte IC MCP3008 wird beispielsweise über die SPI-Schnittstelle gesteuert. Die Aufzählung weiterer Spezialpins möchte ich an dieser Stelle nicht vornehmen, da diese für unseren Roboterbau nicht vonnöten sind. Das bedeutet, dass die übrigen Pins, die nicht Spannung oder Masse führen, uns als digitale Ein-/Ausgänge dienen können. Hinweis Mit ?Spannung ist die Stärke einer Spannungsquelle gemeint. Der Raspberry Pi arbeitet mit 3,3 und 5 Volt. Die Abkürzung ?GND steht für Ground oder ?Masse. Elektrischer Strom fließt zwischen der Spannungsquelle und Masse. Daher benötigen elektronische Komponenten immer beide Anschlüsse. Wenn Sie sich nur mit den elektrischen LEGO-Komponenten beschäftigen, brauchen Sie die Pins der GPIO-Schnittstelle nicht zu kennen, da diese von der LEGO-Schnittstelle (?BrickPi3) verwendet werden und Sie mit ihnen nicht direkt in Kontakt kommen. Nur wenn Sie mit ?Fremdkomponenten arbeiten, sind die Pins für Sie wichtig. In Tabelle 2.1 werden die Pins noch einmal einzeln erläutert. Tabelle 2.1: Bedeutung der Pins der GPIO-Schnittstelle Pin Bedeutung 1, 2, 4, 6, 9, 14, 17, 20, 25, 30, 34, 39 Verschiedene Spannungen 3, 5 I2C-Schnittstelle 11, 12, 13 SPI-Schnittstelle (Kanal 1), wobei über Pin 12 auch Audiosignale ausgegeben werden können 19, 21, 23, 24, 26 SPI-Schnittstelle (Kanal 0) 7, 8, 10, 15, 16, 18, 22, 27, 28, 29, 31, 32, 33, 35, 36, 37, 38, 40 Pins zur Steuerung elektronischer Komponenten Der Raspberry Pi verfügt nicht über ?analoge Eingangsports?. Analoge Eingangssignale können aber über einen entsprechenden ADC-Baustein (etwa den MCP3008) eingelesen werden. Ein analoges Ausgangssignal formt man mit der ?PWM (?Pulsweitenmodulation) über einen digitalen Ausgang. Hinweis ?ADC ist eine Abkürzung für ?Analog / Digital Converter. Es handelt sich um einen Baustein, der eine Spannung (analog) in eine Zahl (digital) umwandeln kann. ?Wenn bestimmte Pins der GPIO-Schnittstelle verwendet werden sollen, müssen sie zunächst initialisiert werden. In Listing 2.1 werden jeweils Pin 12 als Input und Pin 11 als Output konfiguriert. GPIO.setmode(GPIO.BOARD) GPIO.setup(11, GPIO.OUT) GPIO.setup(12, GPIO.IN) Listing 2.1: Initialisierung von Pins der GPIO-Schnittstelle Das erste Statement legt fest, dass wir ?Pin-Nummern und nicht ?GPIO-Nummern verwenden können, was ich als praktischer erachte. Hinweis Bei der GPIO-Schnittstelle hat die Pin-Nummer 37 die GPIO-Nummer 25, siehe auch Abbildung 2.4. Pin-Nummern sind daher übersichtlicher, da sie sich auf die Pins der Schnittstelle beziehen und beim Kontaktieren einfach abgezählt werden können. Im Verlaufe des Programms können die Pins als Output-Pin angesteuert oder als Input-Pin abgefragt werden (Listing 2.2). GPIO.output(11, HIGH) if (GPIO.input(12) == 0): pass Listing 2.2: Ansteuerung von Pins der GPIO-Schnittstelle 2.3 Den ?Raspberry Pi konfigurieren
Bevor der...