Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
LEGO®-Steine – sei es als selbstgebaute LEGO®-Fahrzeuge, -Roboter oder als LEGO®-Fertigmodelle – lassen sich hervorragend mit Elektronikkomponenten zum Leben erwecken und programmieren. Hierfür ist der Mikrocontroller Raspberry Pi besonders gut geeignet. Anhand konkreter Projekte zeigt Ihnen der Autor, wie Sie Sensoren und Motoren von LEGO® sowie weitere Elektronikkomponenten mit dem Raspberry Pi verbinden und Ihre Roboter programmieren. Durch den Einsatz der Programmiersprache Python können die Roboter einfache und komplexe Aufgaben lösen bis hin zu Linienverfolgung mit einem neuronalen Netz oder Bilderkennung.
Im ersten Teil des Buches erhalten Sie eine kurze Einführung in den Mikrocontroller Raspberry Pi sowie den BrickPi, der für die Verbindung von LEGO®-Sensoren mit dem Raspberry Pi benötigt wird. Außerdem vermittelt der Autor die Grundlagen zu allen Elektronikkomponenten, mit denen Sie Ihre LEGO®-Modelle oder -Roboter ausstatten können. Dazu zählen unter anderem mittlere und große LEGO®-Motoren sowie folgende Komponenten: Color-Sensor, Touch-Sensor und Infrarot-Sensor von LEGO®, Kompass-Sensor und Gyro-Sensor von Hitechnic, Raspberry-Pi-Kamera, Fototransistor, LEDs und Motoren.
Im zweiten Teil des Buches finden Sie eine kurze Einführung in die Grundlagen der Programmierung mit Python, gefolgt von einem umfangreichen Projektteil mit 11 spannenden Robotern, die diverse Aufgaben lösen, wie zum Beispiel:
Bei allen Projekten erläutert der Autor sowohl den Bau der Roboter als auch die entsprechende Programmierung.
Hardware:
Für die Projekte im Buch werden sowohl die LEGO®-eigenen Komponenten als auch günstige handelsübliche Motoren und Sensoren eingesetzt. Sie können einen eigenen Roboter bauen, die LEGO®-Roboter im Buch nachbauen oder als Grundlage ein LEGO®-Fertigmodell verwenden. Für alle im Buch verwendeten LEGO®-Roboter gibt es die Bauanleitungen zum kostenlosen Download.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 282
Veröffentlichungsjahr: 2021
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
für Viorica
Thomas Kaffka
Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über <http://dnb.d-nb.de> abrufbar.
ISBN 978-3-7475-0312-6 1. Auflage 2021
www.mitp.de E-Mail: [email protected] Telefon: +49 7953 / 7189 - 079 Telefax: +49 7953 / 7189 - 082
© 2021 mitp Verlags GmbH & Co. KG
LEGO®, das LEGO Logo, die Konfiguration der Noppen und die Minifigur sind Marken der LEGO Gruppe, durch die das vorliegende Buch weder gesponsert noch autorisiert oder unterstützt wird.
Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Lektorat: Janina Bahlmann, Rebecca Saalfeld Sprachkorrektorat: Petra Heubach-Erdmann Coverbild: Thomas Kaffka Covergestaltung: Christian Kalkertelectronic publication: III-satz, Husby, www.drei-satz.de
Dieses Ebook verwendet das ePub-Format und ist optimiert für die Nutzung mit dem iBooks-reader auf dem iPad von Apple. Bei der Verwendung anderer Reader kann es zu Darstellungsproblemen kommen.
Der Verlag räumt Ihnen mit dem Kauf des ebooks das Recht ein, die Inhalte im Rahmen des geltenden Urheberrechts zu nutzen. Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheherrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und Einspeicherung und Verarbeitung in elektronischen Systemen.
Der Verlag schützt seine ebooks vor Missbrauch des Urheberrechts durch ein digitales Rechtemanagement. Bei Kauf im Webshop des Verlages werden die ebooks mit einem nicht sichtbaren digitalen Wasserzeichen individuell pro Nutzer signiert.
Bei Kauf in anderen ebook-Webshops erfolgt die Signatur durch die Shopbetreiber. Angaben zu diesem DRM finden Sie auf den Seiten der jeweiligen Anbieter.
Die Robotertechnologie wird in unserem alltäglichen Leben immer präsenter. Es gibt Roboter, die unseren Boden kehren, die unseren Rasen mähen oder uns in einem gewissen Umfang bedienen können. In der Industrie werden schon seit Längerem Roboter zur Fertigung eingesetzt. Es werden von ihnen dort aber auch Überwachungs- und Serviceleistungen erbracht. Es spannt sich schon jetzt ein weites Feld auf, in dem Roboter eingesetzt werden können.
Abb. 1: Roboter, die beispielsweise in der industriellen Fertigung eingesetzt werden können (mit freundlicher Genehmigung der Firma KUKA AG, Augsburg)
Und die Einsatzmöglichkeiten werden immer ausgefeilter. Es befinden sich Roboter in der Entwicklung, die kranke und alte Menschen versorgen können, oder Roboter, die uns eine echte Küchenhilfe sein können.
Außerdem wäre die Erforschung anderer Planeten, wie beispielsweise des Mars, ohne Roboter nicht denkbar. Aktuell befindet sich der NASA-Roboter »Perseverance« (Ausdauer) auf dem Mars, um diesen nach Lebensspuren zu erkunden.
Abb. 2: Der Roboter Perseverance (Quelle: NASA-Webseite)
Wegen der großen Entfernung zwischen Mars und Erde sind die Signale, die der Roboter und das Kontrollzentrum der NASA austauschen, etwa drei Minuten unterwegs (der Mars ist zurzeit etwa 56 Mio. km von der Erde entfernt und die Lichtgeschwindigkeit beträgt etwa 300.000 km/sec). Diese Zeit ist zu lang, als dass die NASA den Roboter in Echtzeit steuern könnte. Es ist nur möglich, dem Roboter generelle Befehle zu senden, die er dann autark ausführt.
Abb. 3:
Kapitel 1
LEGO als Grundlage für unsere Roboter
Kapitel 2
Der Raspberry Pi stellt sich vor
Kapitel 3
Die elektronischen Komponenten
Es ist eine gute Idee, LEGO-Komponenten zum Roboterbau zu verwenden. Ein aufgebauter Roboter kann immer wieder zerlegt werden und ein neuer erfunden und gebaut werden. Der eigenen Fantasie sind dabei grundsätzlich keine Grenzen gesetzt. Daher verwende ich in meinem Buch LEGO-Komponenten, um ein Roboterchassis zu erstellen. Ich lege dabei die Bauteile des LEGO-EV3-Baukastens zugrunde.
Leser, die diesen Baukasten nicht besitzen, aber über LEGO-Bausteine verfügen oder gewillt sind, sich diese anzuschaffen, können auch ganz entspannt sein. Denn ich gebe bei jedem Roboter eine Teileliste über die LEGO- oder Fremdkomponenten an, die ich für den jeweiligen Roboter verwende. Diese Teilelisten sind im Download zum Buch (www.mitp.de/0310) sowie in den einzelnen Kapiteln zu finden.
Sie könnten sich natürlich, wenn Sie sich mit der Robotik beschäftigen möchten, auch einen Bausatz zu einem fertigen Roboter anschaffen, statt eigene Roboter aus LEGO zu bauen. Diese Roboter haben aber den Nachteil, dass es sich um fertige Maschinen handelt, die in ihren Freiheitsgraden eben deshalb beschränkt sind. Wenn man ihre Motoren und sonstigen Aktoren programmiert hat, ist es nicht mehr interessant, sich mit ihnen weiter zu beschäftigen.
Dazu hier einige Beispiele von Robotern, die ich mir unter anderem angeschafft habe (Abbildung 1.1 bis Abbildung 1.3).
Der YETI (Abbildung 1.1) ist ein einfacher Roboter, der über zwei Beine verfügt. Er ist mechanisch so aufgebaut, dass er mit zwei Servomotoren gesteuert werden kann. Um zu gehen, verlagert er sein Gewicht auf eines der beiden Beine und bewegt das andere vor. Danach wird das gegenüberliegende Bein belastet. Ich habe für den Roboter zusätzlich ein Vier-Segment-Display angeschafft und eingebaut. Damit kann er Meldungen oder seinen Status mitteilen.
Abb. 1.1: Der YETI von AREXX Engineering
Abb. 1.2:
Abb. 2.1: Der Raspberry Pi 3 B+
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
Roboter arbeiten mit Motoren, die sie antreiben, und Sensoren, mit denen sie sich in ihrer Umgebung orientieren. Ich stelle in meinem Buch sowohl vollkommen aus LEGO-Komponenten gebaute Roboter als auch aus LEGO und Fremdkomponenten gebaute Roboter vor. Die nächsten beiden Abschnitte zeigen diese Komponenten und geben jeweils eine kurze Beschreibung. Außerdem stelle ich mit »Codeschnipseln« die Verwendung der Komponenten vor. Dabei werden die Klassen (siehe Kapitel 9 für mehr Informationen über Klassen) verwendet, die ich zu den einzelnen Komponenten entwickelt habe. Die Codeschnipsel nehmen hier natürlich die Themen des Teils II meines Buches vorweg. Sie sollen Ihnen später als Nachschlagewerk dienen, wenn Sie sich mit der Programmierung des Raspberry Pi vertraut gemacht haben.
Im zweiten Teil dieses Buches möchte ich Ihnen grundsätzlich die Grundlagen des Programmierens näherbringen. Wenn Sie dazu eine vollständige Einführung lesen möchten, dann empfehle ich Ihnen »Raspberry Pi programmieren mit Python« von Michael Weigend, erschienen im mitp Verlag.
In den folgenden Kapiteln erhalten Sie einen Einstieg in die Programmierung mit Python, damit Sie die in den Projekten vorgestellten Roboter verstehen und selbst programmieren können. Ich erläutere, was Variablen in Programmen sind, um was es sich bei Verzweigungen handelt, wozu Schleifen in Programmen dienen und warum Funktionen verwendet werden. Außerdem gebe ich Ihnen einen kurzen Einblick in die objektorientierte Programmierung.
In den Kapiteln 6 bis 9 werden Sie jeweils ein kleines Experiment finden, mit dem Sie das Wissen aus dem Kapitel praktisch anwenden können. Alle Experimente beziehen sich auf die Steuerung von Hardware durch den Raspberry Pi. Für die Experimente benötigen Sie die elektronischen Komponenten der Tabelle T.1. Die jeweiligen Bezugsquellen finden Sie im Anhang.
Kapitel
Komponente
6
1 x Steckplatine
1 x rote LED
1 x 220-Ohm-Widerstand
2 x Patchkabel für den Raspberry Pi
7
Siehe Kapitel 6
8
1 x Steckplatine
1 x ADC MCP3008
1 x Fototransistor SFH300
1 x rote LED
1 x Widerstand 220 Ohm
1 x Widerstand 22 kOhm
Roter Draht (Litze)
Schwarzer Draht (Litze)
7 x Patchkabel in verschiedenen Farben
9
1 x Steckplatine
1 x Piezo-Schallgeber
2 x Patchkabel
Kapitel 4
Die Programmiersprache Python
Kapitel 5
Variablen
Kapitel 6
Verzweigungen
Kapitel 7
Schleifen
Kapitel 8
Funktionen
Kapitel 9
Klassen und Objekte
Die Programmiersprache Python wurde so gestaltet, dass man mit ihr im Vergleich zu anderen Programmiersprachen auf einfache Weise Computerprogramme erstellen kann. Daher verwende ich Python in meinem Buch, um Ihnen den Einstieg in die Programmierung möglichst zu erleichtern.
Python wurde von Guido van Rossum am »Centrum voor Wiskunde en Informatica« in Amsterdam erfunden. Heute wird sie durch die »Python Software Foundation« als Freeware weiterentwickelt. Die integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) von Python beinhaltet einen Interpreter. Das bedeutet, dass die eingegebenen Programme direkt verarbeitet werden und der Computer durch den Interpreter gesteuert wird. Im Gegensatz dazu sind auch sogenannte Compiler im Einsatz, die den Programmtext zunächst in die Maschinenbefehle des Prozessors umsetzen (das wird Kompilieren genannt). Diese werden dann vom Prozessor direkt verarbeitet. Ein Interpreter hat den Vorteil, dass es auch möglich ist, Programmbefehle (sogenannte Statements) direkt ausführen zu lassen, wie Sie noch sehen werden.
Wenn Sie die IDE von Python auf dem Raspberry Pi aufrufen, ergibt sich das Bild von Abbildung 4.1. Die IDE ist bereits vorinstalliert und wird aktiviert durch einen Klick auf Menü (Himbeerbutton) / Programming/ Thonny Python IDE.
Abb. 4.1: Die IDE von Python (Thonny Python IDE) auf dem Raspberry Pi
Die Python-IDE des Raspberry Pi gliedert sich in eine Buttonleiste und zwei Fenster. In der Buttonleiste sind die folgenden Buttons für uns relevant:
New – Editor für ein neues Programm aufrufen
Load – Ein Programm in den Editor laden
Save – Ein Programm speichern
Run – Ein Programm ausführen
Im Editor befindet sich ein noch nicht gespeichertes Programm (oberes Fenster) und im unteren Fenster wird die sogenannte Shell angezeigt. Dabei handelt es sich um den Python Interpreter. In ihr wird ein sogenanntes Promptzeichen >>> angezeigt. Dieses Zeichen kennzeichnet die Zeile, in der Statements eingegeben werden können.
Wenn ein Programm mit Load geladen wird, öffnet sich ein neues Editorfenster und das Listing (der Programmtext) wird angezeigt. Sie können ein Python-Programm über den Button Run starten. Das Programm wird dann in der Shell ausgeführt und seine Ausgaben angezeigt.
Um sich mit der IDE von Python (Thonny Python IDE) vertraut zu machen, geben Sie in der Shell nach dem Prompt das Statement aus Listing 4.1 ein.
Listing 4.1: Das erste Statement
Betätigen Sie danach Enter und Sie erhalten eine Ausgabe wie in Abbildung 4.2 in der Shell.
Abb. 4.2: Das erste Statement
Hinweis
Die Anführungszeichen zeigen Python, dass es sich bei den eingeschlossenen Zeichen um einfachen Text handelt, und nicht um Python-Statements.
Sie können anstelle des doppelten auch das einfache Anführungszeichen verwenden, sehen Sie selbst in Abbildung 4.3.
Abb. 4.3: Verwendung des einfachen Anführungszeichens
Gratulation, Sie haben nun Ihre ersten Statements erfolgreich eingegeben und der Computer hat gemacht, was Sie wollten. Wie Sie in der Shell sehen, färben sich die Statements entsprechend der Bedeutung der einzelnen Bestandteile ein, um Ihnen die Übersicht zu erleichtern. Das geschieht so auch im Programmeditor.
Sie können die Anführungszeichen auch mischen, wenn Sie innerhalb Ihres Textes Anführungszeichen benötigen.
Abb. 4.4: Verwendung von Anführungszeichen im Text
Außerdem kann die Shell auch zum Rechnen benutzt werden. Geben Sie die Zeilen aus Abbildung 4.5 ein und betätigen Sie jeweils Enter.
Sie können Rechenaufgaben direkt eingeben oder diese mit print ausgeben lassen, wie es in Programmen Anwendung findet.
Nun haben Sie schon einen guten Eindruck von Python erhalten. Wir beschäftigen uns im nächsten Abschnitt mit Ihrem ersten Python-Programm.
Abb. 4.5:
Variablen sind wichtige Konstruktionen in Programmen, in denen Daten gespeichert werden und aus denen Daten abgerufen werden können. Stellen Sie sich Variablen als eine Reihe von Briefkästen vor, die jeweils mit einem Namen beschriftet sind. Man kann Briefe in sie hineingeben und diese Briefe wieder gezielt herausholen. Nur, dass es sich bei den Briefen um Zahlen, Zeichenketten oder Wahrheitswerte handelt. Man sagt dann, eine Variable hat einen bestimmten Typ.
In diesem Abschnitt behandeln wir die Datentypen Zahlen, Zeichenketten (Strings) und Wahrheitswerte, die u.a. in Variablen gespeichert werden können.
Wie in der Mathematik unterscheidet man auch bei der Programmierung zwischen ganzen Zahlen und Dezimalzahlen (man verwendet den Dezimalpunkt), die auch in Gleitkommadarstellung vorkommen können. Außerdem können Zahlen als binäre, oktale und hexadezimale Zahlen dargestellt werden (außerdem sind auch noch komplexe Zahlen möglich, auf die ich in meinem Buch aber nicht eingehen möchte). Das folgende Programm zeigt die verschiedenen Datentypen (siehe Abbildung 5.1).
Abb. 5.1: Die verschiedenen Datentypen
Die erste Berechnung wendet die ganzzahlige Division an. Das Ergebnis ist also ganzzahlig. Wenn Sie den ganzzahligen Divisionsrest bestimmen möchten, verwenden Sie den Operator %.
Die nächste Berechnung verwendet die normale Division. Das Ergebnis ist eine Dezimalzahl.
Bei der Exponentialdarstellung wird ein Exponent zur Basis 10 verwendet. Eigentlich steht dort: 2.3*104.
Die Binärdarstellung einer Zahl beginnt mit 0b gefolgt von Einsen und Nullen. Die oktale Darstellung beginnt mit 0o gefolgt von den Ziffern Null bis Sieben. Bei der hexadezimalen Darstellung beginnt die Zahl mit 0x gefolgt von den Ziffern 0 bis 9 und den Buchstaben A bis F. Damit können auf einer Stelle 16 Ziffern definiert werden. Unter Windows können Sie die Rechner-App im Menü auf Programmierer stellen und so die verschiedenen Zahlendarstellungen eingeben und ineinander umwandeln.
Abb. 5.2: Der Rechner unter Windows
Jetzt werden Sie sich fragen, wozu die verschiedenen Zahlentypen eigentlich verwendet werden. Binärzahlen kommen in Programmen oft zum Einsatz, wenn man sich bestimmte Dinge merken möchte. Dann wird in einer Binärzahl einfach eine Ziffer auf 1 gesetzt. In einem Byte, das aus acht Bits besteht, können somit acht Ereignisse gespeichert werden. Man nennt solche Ziffern auch »Flags«.
Wenn nun längere Bitfolgen betrachtet werden, werden diese gerne in die hexadezimale Schreibweise umgewandelt, da diese kürzer ist und ein ungefährer Eindruck entsteht, wie groß die Bitzahl ist.
Wenn das Programm aus Abbildung 5.1 ausgeführt wird, ergibt sich das Ergebnis aus Abbildung 5.3.
Abb. 5.3: Die errechneten Datentypen
Bei Berechnungen können Klammern verwendet werden. Die in den Klammern eingeschlossenen Berechnungen werden zuerst ausgeführt.
Abb. 5.4: Klammern bei der Berechnung
Mit Zahlen können die folgenden Operationen durchgeführt werden:
2 + 3 Addition
2 – 3 Subtraktion
2 * 3 Multiplikation
2 ** 3 Potenz
2 / 3 Division
2 // 3 ganzzahlige Division
2 % 3 ganzzahliger Divisionsrest
Zahlen können in
