E-Book, Deutsch, 257 Seiten
Reihe: Raspberry Pi
Engelhardt Roboter mit Raspberry Pi
1. Auflage 2016
ISBN: 978-3-645-20343-2
Verlag: Franzis Verlag
Format: PDF
Kopierschutz: 1 - PDF Watermark
Mit Motoren, Sensoren, LEGO® und Elektronik eigene Roboter mit dem Pi bauen, die Spaß machen und Ihnen lästige Aufgaben abnehmen
E-Book, Deutsch, 257 Seiten
Reihe: Raspberry Pi
ISBN: 978-3-645-20343-2
Verlag: Franzis Verlag
Format: PDF
Kopierschutz: 1 - PDF Watermark
E.F. Engelhardt, Jahrgang 1975, hat bereits über 40 Computerbücher veröffentlicht - und keines dieser Bücher ist wie andere Computerbücher: Der Autor beginnt direkt mit der Praxis, ohne langatmige, weitschweifende und überflüssige Technikerläuterungen. E.F. Engelhardt ist Autor des Bestsellers 'Hausautomation mit Raspberry Pi'. Hier hat er eindrucksvoll seine große Erfahrung mit dem Raspberry Pi gezeigt. Und er hat immer noch nicht genug: Dieses Mal werden Roboter gebaut und programmiert. Wie in allen seinen Büchern hat er die Projekte komplett selbst entwickelt. Sie haben als Leser damit die Sicherheit, dass alles funktioniert.
Autoren/Hrsg.
Weitere Infos & Material
1;Roboter mit Raspberry Pi;1
1.1;Impressum;4
1.2;Vorwort;5
1.3;Zusatzinformationen zum Produkt;6
1.4;Inhaltsverzeichnis;7
1.5;1. Lenken und Steuern mit der GPIO-Schnittstelle;11
1.5.1;1.1 Betriebssystem und Treiber aktualisieren;15
1.5.2;1.2 Analog-digital-Wandler MCP3008 nachrüsten;16
1.5.2.1;Datenblatt prüfen, Funktionen verstehen;16
1.5.2.2;MCP3008 auf dem Steckboard nutzen;17
1.5.2.3;Programmierung des MCP3008 mit Python;21
1.5.2.4;SPI-Schnittstelle aktivieren;26
1.5.2.5;SPI-Nutzung ohne Umwege: py-spidev-Modul installieren;28
1.5.3;1.3 Joystick-Steuerung mit dem Raspberry Pi;30
1.5.3.1;GPIO-Eingang schalten: Risiken und Nebenwirkungen;31
1.5.3.2;Schaltungsdesign vom Steckboard auf die Rasterplatine;34
1.5.3.3;Joystick-Steuerung mit Python;35
1.5.3.4;Richtungsbestimmung mittels ADC-Werten;37
1.5.4;1.4 I2C-Bus – Schnittstelle wecken und checken;41
1.5.4.1;I2C-Geräte und Raspberry-Pi-Revision;45
1.5.5;1.5 Schalten und walten mit Touchsensor;46
1.5.5.1;Touch- und Drucksensor – Dateneingabe über den I2C-Bus;47
1.5.5.2;Flexibler Zugriff dank I2C- und MRP121-Bibliothek;48
1.5.5.3;Inbetriebnahme des MRP121-Touchsensors;50
1.6;2. Fahren und bremsen – Motorsteuerung mit dem Raspberry Pi;53
1.6.1;2.1 Die erste Schaltung – LEDs mit 10ULN2803A steuern;53
1.6.2;2.2 GPIO-Steuerung über die Konsole und Python;56
1.6.2.1;Schalten per Konsole;57
1.6.3;2.3 Motoren und Steppermotoren;59
1.6.4;2.4 Motorsteuerung versus Motortreiber;63
1.6.4.1;Mehr Kontrolle – Schrittmotorcontroller;64
1.6.5;2.5 Unipolaren Steppermotor mit ULN2803-IC steuern;65
1.6.5.1;Schaltung auf Steckboard umsetzen;65
1.6.5.2;Vollschritt- vs. Halbschrittverfahren im Detail;69
1.6.5.3;Schritt für Schritt: Vollschritt- und Halbschrittverfahren einsetzen;70
1.6.5.4;Vorwärts- und Rückwärtsbewegungen;74
1.6.6;2.6 Praktisch und sicher – USV für den Raspberry Pi;76
1.6.6.1;Pi USV in Betrieb nehmen;77
1.6.6.2;Ohne Strom nix los – Akkupack auswählen;78
1.6.6.3;Pi-USV-Software in Betrieb nehmen;79
1.6.6.4;Status der Pi USV erkennen;81
1.6.6.5;Status der Pi USV mit Python auslesen;82
1.7;3. Pan/Tilt-Kamera im Eigenbau;85
1.7.1;3.1 Raspberry-Pi-Kamera im Robotik-Einsatz;86
1.7.1.1;Kameramodul mit dem Raspberry Pi koppeln;86
1.7.1.2;Inbetriebnahme per Software;87
1.7.1.3;raspistill – Fotografieren über die Kommandozeile;91
1.7.1.4;LED abschalten und heimlich fotografieren;93
1.7.1.5;Programmierung der Raspberry-Pi-Kamera;93
1.7.2;3.2 Einzellösung: Tower-SG90-Servomotor;96
1.7.3;3.3 Hardware-PWM-Ausgang mit LED testen;99
1.7.4;3.4 Servoblaster-Treiber installieren;101
1.7.5;3.5 Motoren mit Servoblaster in Betrieb nehmen;103
1.7.6;3.6 Servomotor mit Python steuern;105
1.7.7;3.7 Pan/Tilt-Achse und Kamera steuern;106
1.7.8;3.8 Steuerung der Raspberry-Pi-Kamera;108
1.7.9;3.9 Bewegungen und Aufnahmen steuern;109
1.7.10;3.10 Hürden bei der Inbetriebnahme umgehen;114
1.7.10.1;Automatischer Log-in: pi vom Start weg;114
1.7.10.2;Autostart nach dem Einschalten;115
1.8;4. Haushaltshilfe: Staubsauger-Modding;117
1.8.1;4.1 Vorwerk vs. Neato – mehr als nur eine Kopie;118
1.8.1.1;Einrichtung und Treiberinstallation;119
1.8.1.2;Zugriff über PuTTY auf das Betriebssystem;124
1.8.2;4.2 Staubsauger über Raspberry Pi steuern;126
1.8.2.1;Staubsaugerroboter mit Raspberry Pi verbinden;126
1.8.2.2;minicom-Modemzugang zum Staubsauger einrichten;129
1.8.2.3;minicom-Steuerung für den Staubsauger;131
1.8.2.4;Staubsaugerkommandozeile im Überblick;134
1.8.2.5;Python-Programmierung über python-serial;135
1.8.2.6;Spazierfahrt mit der Kommandozeile – Staubsauger fortbewegen;138
1.8.2.7;Zeitplanung für den Staubsauger;140
1.8.3;4.3 Staubsauger und Raspberry Pi koppeln;144
1.8.3.1;Aufwecken aus dem Schlafmodus;144
1.8.3.2;USB-Geräte über GPIO schalten;146
1.8.3.3;Staubsauger mit dem Raspberry Pi verbinden;148
1.8.3.4;Schaltung über Kommandozeile prüfen;150
1.8.4;4.4 Roboter über die Webseite steuern;151
1.8.4.1;Python-Zugriff über Browser – Bottle im Einsatz;152
1.8.5;4.5 Videostreaming installieren und einbinden;158
1.8.5.1;Streaming-Werkzeug laden und installieren;159
1.8.5.2;MJPG-Streamer als Live-View-Quelle;162
1.8.5.3;Live-View und Steuerung verheiraten;165
1.8.5.4;Fotografieren mit dem Vorwerk/Neato-Staubsauger;170
1.8.6;4.6 Drahtlos-Raspberry-Pi einrichten;171
1.8.6.1;Raspberry Pi mit drahtloser Stromversorgung;172
1.8.6.2;Akkupack und USV für Raspberry Pi kombinieren;173
1.8.6.3;WLAN-Netzwerk einrichten und Verbindung aufnehmen;174
1.8.6.4;Umschalten zwischen WLAN-Verbindungen;178
1.8.6.5;WLAN-Verbindung mit Python steuern;180
1.8.7;4.7 Staubsaugerroboter mit dem Smartphone steuern;183
1.8.7.1;USB-Debugging-Modus – Smartphone einrichten;183
1.8.7.2;Staubsaugerroboter mit dem Smartphone koppeln;185
1.9;5. Schrauben, löten, programmieren: RC-Car-Modding;187
1.9.1;5.1 Basis für das RaspiRoboCAR-Projekt;188
1.9.2;5.2 Lenken und Steuern über die Tastatur;191
1.9.3;5.3 Google-Streetview-RC-Car mit der Raspberry-Pi-Kamera;203
1.10;6. LEGO® Pi mit Mindstorms EV3 und LEGO®-Technic;205
1.10.1;6.1 Viel kreativer Spielraum für Technikfantasien;205
1.10.2;6.2 LEGO®-Technic und LEGO®-Mindstorms mit Raspberry Pi aufmotzen;208
1.10.3;6.3 BrickPi: LEGO®-Mindstorms im Eigenbau;209
1.10.3.1;BrickPi-Treiber in Betrieb nehmen;210
1.10.3.2;BrickPi-Schnittstellen aktivieren;212
1.10.3.3;Python-Bibliothek für BrickPi installieren;213
1.10.3.4;Motoren und Sensoren im BrickPi-Einsatz;215
1.10.4;6.4 Legokran- und -greifer-Steuerung mit demRaspberry Pi;216
1.10.4.1;Basis, Neigung und Greifer: drei Motoren für den Kran;218
1.10.5;6.5 LEGO®-Modding: Mindstorms im Eigenbau;224
1.10.5.1;LEGO®-Steine mit LED-Birnen nachrüsten;225
1.10.5.2;Servomotor-Modding für LEGO®-Technic;226
1.10.5.3;LEGO®-Extrem-Modding: bis zu 16 Servomotoren steuern;228
1.10.5.4;Adressbelegung für den Anschluss am I2C-Bus;230
1.10.5.5;Mehrere Servomotoren im Zusammenspiel;232
1.11;Anhang;239
1.11.1;A Python-Basics auf dem Raspberry Pi;239
1.11.2;Schneller Zugriff über die Wiring-Pi-API;245
1.11.3;Raspberry-Pi-Revision 2: zusätzlicher GPIO-Sockel;248
1.12;Stichwortverzeichnis;253
Fahren und bremsen – Motorsteuerung mit dem Raspberry Pi
Egal ob manuell oder autonom – ein Fahrzeug besteht in der Regel aus mindestens einem Motor, der für die Bewegung zuständig ist. Meist sorgt ein zweiter Motor für die Richtungsänderung, und damit lässt sich schon mal experimentell starten. Für das Umsetzen einer ersten Motorschaltung über die GPIO-Schnittstelle des Raspberry Pi ist es empfehlenswert, diese Motoranschlüsse mithilfe eines Steckboards zunächst über einfache LEDs sozusagen zu emulieren, um etwaige Fehler im Schaltungsdesign von vornherein aufzuspüren. Auch ist so eine Motorersatzschaltung verhältnismäßig schnell aufgebaut, um mal schnell das Shell-Skript oder Python-Code mithilfe der GPIO-Schnittstelle zu testen, ohne den teuren Steppermotor zu beschädigen.
2.1Die erste Schaltung – LEDs mit ULN2803A steuern
Zum Einstieg in dieses Projekt wird die erste Schaltung zunächst auf dem Steckboard umgesetzt, was gerade für Einsteiger recht bequem ist, da es erst einmal ohne löten geht. In diesem Schritt wird ein GPIO-Anschluss auf die Plusleitung des Steckboards gelegt, der sich anschließend per Shell-Befehl schalten lässt. Sie haben damit einen einfachen Lichtschalter per Software realisiert.
Welcher GPIO-Anschluss ist der richtige? Grundsätzlich sind sämtliche Anschlüsse schaltbar, doch um beispielsweise das Skript oder das Programm so flexibel wie möglich zu halten, sollten Sie primär GPIO-Pins nutzen, die auf allen Raspberry-Pi-Modellen gleich implementiert sind. Dies gilt umso mehr, wenn Sie daran denken, den Quelltext für Ihre Skripte und Programme im Internet weiterzugeben oder selbst unterschiedliche Raspberry-Pi-Revisionen zu betreiben.
Achtung –Vorwiderstand für LED-Einsatz zwingend notwendig!
LEDs (Licht emittierende Dioden) dürfen nie direkt an die Stromversorgung angeschlossen werden. Bei einem direkten Anschluss sollte immer mindestens ein Vorwiderstand von 200 bis 300 O vorgeschaltet werden, damit der Strom auf einen zulässigen Wert begrenzt ist und die LED auch funktionsfähig bleibt.
Da für die Steuerung der Motoren in einem späteren Projekt ein ULN2803A-IC (NPN Darlington-Array) zum Einsatz kommt, weil es intern bereits die nötigen Widerstände in seiner Transistorschaltung integriert hat, wird dieser IC auch in diesem Beispiel für die LED-Lampen verwendet. Liegt bei dem ULN2803A-IC an den einzelnen acht Eingängen ein Signal an, wird der Schaltkreis mit der Masse geschlossen und nach dem entsprechenden Ausgang geschaltet.
Hierbei müssen Sie nur beachten, dass Sie die Masse von Eingang und Ausgang zusammenlegen, falls Eingang und Ausgang mal unterschiedliche Versorgungsspannungen verwenden. In der schematischen Darstellung sind vier LED-Dioden an den ULN2803-NPN angeschlossen, die sich jeweils per GPIO schalten lassen.
Bild 2.1: Schematische Darstellung der Schaltung mit der Steckboard-Emulation Fritzing.
Im nächsten Schritt setzen Sie die Schaltung auf dem Steckboard um. Dabei merken Sie schnell, dass das Steckboard zwar groß wirkt, es aber beim Bestücken der Widerstände und LEDs schnell eng zugeht. Der Grund ist der praktische Umstand, dass jede Leiterbahn schon mit den Nachbarpins verdrahtet ist. Wenn Sie eine Diode oder einen Widerstand mit beiden Beinchen in eine Reihe stecken, passiert erst mal gar nichts, da kein bzw. ein geringer Stromfluss durch die Diode fließt.
Das Ziel ist, auf dem Steckboard einen Stromkreis zu kreieren. Die fertige Schaltung haben wir auf dem Steckboard aus Platzgründen mit zwei LEDs an zwei Eingängen realisiert, was für Demonstrationszwecke völlig ausreicht.
Bild 2.2: Erfolgreich: Die beiden LEDs lassen sich erfolgreich mit dem IC gekoppelt über die beiden GPIO-Anschlüsse steuern.
In dieser Beispielschaltung wird das Steckboard wie folgt mit dem Raspberry Pi verbunden:
Die Ausgänge des ULN2803A werden jeweils mit einem Widerstand verbunden (200 O), das zweite Beinchen des Widerstands geht an die Kathode der LED. Wie herum der Widerstand aufgesteckt wird, ist egal, die Polung spielt bei Widerständen keine Rolle.
Die Anode der beiden LEDs wird mit der 5-V-Stromversorgung sowie mit Pin 15 des ULN2803 verbunden. Nun ist die Schaltung komplett, auf dem Schaltplan stellt sich diese wie folgt dar:
Bild 2.3: Schaltplan: Hier werden nur zwei der verfügbaren acht Eingänge genutzt, um die beiden LEDs unabhängig voneinander schalten zu können.
Im nächsten Schritt können Sie die Schaltung in der Praxis testen. Dafür nehmen Sie per SSH mit dem Raspberry Pi Verbindung auf und prüfen auf der Konsole die beiden GPIO-Anschlüsse, die Sie für die LEDs reserviert haben. In diesem Beispiel wurden dafür GPIO23 und GPIO24 verwendet.
2.2GPIO-Steuerung über die Konsole und Python
Grundsätzlich werden die GPIO-Ausgänge des Raspberry Pi über virtuelle Dateien bzw. über deren Dateimanipulation gesteuert. Vereinfacht bedeutet dies: Steht in einer solchen Steuerdatei der Wert , ist der Schalter geschlossen, und es fließt kein Strom, steht hingegen dort der Wert , ist der Stromkreis geschlossen, und die angeschlossene Schaltung wird aktiviert.
Bild 2.4: Nach dem »Aktivieren« des GPIO-Pins steht im Verzeichnis die entsprechende Steuerdatei zur Verfügung.
Die virtuellen Dateien für den GPIO-Pfostenstecker finden Sie im Verzeichnis . Mit dem Kommando
stellen Sie fest, dass sich dort die Dateien und befinden. Der Trick ist hier zunächst, den oder die gewünschten GPIO-Pins auf dem Raspberry Pi zu aktivieren, dies erledigen Sie mit dem Eintragen der entsprechenden GPIO-Nummer in die -Datei. Dadurch wird beispielsweise GPIO24 und GPIO23 mitgeteilt, dass sie womöglich bald genutzt werden:
Nun verwenden wir die vorhandene Schaltung mit den beiden LEDs an GPIO23 und GPIO24, die an Pin 17 und Pin 18 auf dem Raspberry Pi gekoppelt sind.
Schalten per Konsole
Grundsätzlich kann ein GPIO-Anschluss auf dem Raspberry als Ausgang, aber auch als Eingang genutzt werden. In diesem Fall ist der Raspberry der Aktor, denn wir wollen etwas einschalten: Um die erste Diode dauerhaft einzuschalten, müssen Sie beide GPIO-Pins zunächst als Ausgang definieren:
Im umgekehrten Fall – beispielsweise wenn an dem GPIO-Anschluss ein Sensor angebracht wäre und Sie den Wert im Raspberry Pi weiterverarbeiten wollten – würden Sie den Anschluss als Eingang definieren und stattdessen
in die Konsole eingeben. Die oben definierten GPIO-Anschlüsse 23 und 24 liegen auf 0 V, der Stromkreis ist also noch nicht geschlossen, und die gekoppelten LEDs leuchten nicht. Um diese zu schalten, nutzen Sie die Befehle:
Hier tragen Sie jeweils den Wert in die Datei mit der Bezeichnung ein. In diesem Fall werden nun sowohl Pin 16 als auch Pin 18 mit Strom versorgt, die beiden LEDs sollten jetzt dauerhaft leuchten. Um die LEDs wieder abzuschalten, setzen Sie den Pegel von HIGH auf LOW. Dies erledigen Sie, indem Sie einfach statt der den Wert in die -Datei des entsprechenden GPIO-Verzeichnisses schreiben:
Für das einmalige Experimentieren auf der Kommandozeile macht dies eine Zeit lang Spaß, auf Dauer jedoch sind lange Kommandozeilenbefehle lästig und fehleranfällig.
Bild 2.5: Vier Befehle pro genutztem GPIO-Anschluss sind notwendig, um diesen für die Schaltung ordnungsgemäß zu präparieren.
Deshalb ist es sinnvoll, sämtliche bzw. zumindest die benötigten virtuellen Dateien der entsprechenden GPIOs bereits beim Systemstart des Raspberry Pi automatisch zu starten. Erstellen Sie einfach ein Shell-Skript mit der Bezeichnung mit folgendem Inhalt:




