mit Arduino & Raspberry Pi
Dogan Ibrahim
Motorsteuerung
Motorsteuerung
Motorsteuerung mit Arduino & Raspberry Pi
Ein besonders reizvolles Projekt dieses Buches ist die Fernsteuerung eines mobilen Roboters von einem Mobiltelefon aus mit dem Arduino Uno sowie dem Raspberry Pi Zero W. Dieses Projekt wird sowohl über Wi-Fi als auch über Bluetooth mit dem Handy gesteuert. Die Leser sollten in der Lage sein, einen Roboter vorwärts, rückwärts, links oder rechts zu bewegen, indem sie einfache Befehle vom Mobiltelefon aus senden. Die vollständigen Programmlistings aller Projekte sowie die detaillierten Programmbeschreibungen finden Sie im Buch. Der Leser kann die Projekte Schritt für Schritt nachbauen oder sie an die eigenen Bedürfnisse anpassen.
DESIGN SHARE
Elektor-Verlag GmbH 52072 Aachen www.elektor.de
Die Projekte im Buch umfassen die Standard-DC-Motoren, Schrittmotoren, Servomotoren und mobile Roboter. Das Buch richtet sich an Elektronik-Bastler, die Projekte mit dem Arduino Uno oder dem Raspberry Pi Zero W entwickeln und dabei Motoren einsetzen möchten.
Dogan Ibrahim LEARN DESIGN SHARE
LEARN
ISBN 978-3-89576-336-6
Dogan Ibrahim
●
Prof. Dr. Dogan Ibrahim hat einen BachelorAbschluss in Elektrotechnik, einen Master in Steuerungstechnik und hat über digitale Signalverarbeitung promoviert. Er hat in zahlreichen Industriefirmen gearbeitet, bevor er wieder eine akademische Laufbahn einschlug. Prof. Dogan Ibrahim ist Autor von über 60 Fachbüchern und von mehr als 200 Fachartikeln über Mikrocontroller, Mikroprozessoren und angrenzenden Themen.
Dieses Buch beschäftigt sich mit DC-Elektromotoren und deren Einsatz in Arduino und Raspberry Pi Zero W-Projekten. Das Buch enthält zahlreiche Motorsteuerungsprojekte, wobei jedes Projekt denselben Aufbau besitzt: • Projekttitel • Beschreibung des Projekts • Blockschaltbild • Schaltplan • Zusammenbau • Vollständiges Programmlisting • Umfassende Erläuterung des Programms
LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHA GN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHA
Motorsteuerung mit Arduino & Raspberry Pi â—? Dogan Ibrahim
LEARN DESIGN SHARE
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 3
18-10-18 15:15
●
© 2018: Elektor Verlag GmbH, Aachen.
●
Alle Rechte vorbehalten.
1. Auflage 2018
Die in diesem Buch veröffentlichten Beiträge, insbesondere alle Aufsätze und Artikel sowie alle Entwürfe, Pläne, Zeichnungen und Illustrationen sind urheberrechtlich geschützt. Ihre auch auszugsweise Vervielfältigung und Verbreitung ist grundsätzlich nur mit vorheriger schriftlicher Zustimmung des Herausgebers gestattet. Die Informationen im vorliegenden Buch werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Die in diesem Buch erwähnten Soft- und Hardwarebezeichnungen können auch dann eingetragene Warenzeichen sein, wenn darauf nicht besonders hingewiesen wird. Sie gehören dem jeweiligen Warenzeicheninhaber und unterliegen gesetzlichen Bestimmungen. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autor können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für die Mitteilung eventueller Fehler sind Verlag und Autor dankbar.
●
Erklärung
Der Autor und der Herausgeber dieses Buches haben alle Anstrengungen unternommen, um die Richtigkeit der in diesem Buch enthaltenen Informationen sicherzustellen. Sie übernehmen keine Haftung für Verluste oder Schäden, die durch Fehler oder Auslassungen in diesem Buch verursacht werden, unabhängig davon, ob diese Fehler oder Auslassungen auf Fahrlässigkeit, Unfall oder andere Ursachen zurückzuführen sind. Umschlaggestaltung: Elektor, Aachen Satz und Aufmachung: D-Vision, Julian van den Berg | Oss (NL) Druck: WILCO, Amersfoort, Niederlande Printed in the Netherlands
●
ISBN 978-3-89576-336-6
Elektor-Verlag GmbH, Aachen www.elektor.de
Elektor ist Teil der Unternehmensgruppe Elektor International Media (EIM), der weltweit wichtigsten Quelle für technische Informationen und Elektronik-Produkte für Ingenieure und Elektronik-Entwickler und für Firmen, die diese Fachleute beschäftigen. Das internationale Team von Elektor entwickelt Tag für Tag hochwertige Inhalte für Entwickler und DIY-Elektroniker, die über verschiedene Medien (Magazine, Videos, digitale Medien sowie Social Media) in zahlreichen Sprachen verbreitet werden. www.elektor.de
LEARN DESIGN SHARE
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 4
18-10-18 15:15
Inhalt Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Kapitel 1 • Elektromotoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.2 Arten von Elektromotoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3 Bürstenbehaftete Gleichstrommotoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.3.1 Permanentmagnet-Gleichstrom-Motoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.3.2 Reihenschluss-Gleichstrom-Motoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.3.3 Nebenschluss-Gleichstrom-Motoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.3.4 Doppelschluss- oder Verbund-Gleichstrom-Motoren . . . . . . . . . . . . . . . . . . . . 19 1.3.5 Fremderregte Gleichstrom-Motoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.3.6 Servomotor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.3.7 Schrittmotoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.4 Bürstenlose Gleichstrom-Motoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.5 Motorauswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.5.1 Drehmoment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.5.2 Geschwindigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.5.3 Genauigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.5.4 Betriebsspannung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.5.5 Kosten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.5.6 Physische Größe und Gewicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.6 Übertragungsfunktion eines bürstenbehafteten DC-Motors . . . . . . . . . . . . . . . . . 25 1.7 Drehmoment - Geschwindigkeitseigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.8 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Kapitel 2 • Einfache Gleichstrommotor-projekte . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2 PROJEKT 1 - Motor EIN/AUS-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2.2 Schaltplan - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.2.3 Schaltplan – Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2.4 Programmlisting - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.5 Programmlisting – Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
●5
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 5
18-10-18 15:15
Motorsteuerung mit Arduino & Raspberry Pi 2.2.6 Verwendung eines MOSFET-Schalters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.2.7 Verwendung eines Relais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.3 PROJEKT 2 - Zweistufiger Motordrehzahlsteller . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.3.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.3.2 Schaltplan - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.3.3 Schaltplan - Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.3.4 Programmlisting - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.3.5 Programmlisting – Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.4 PROJEKT 3 - Variieren der Motordrehzahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.4.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.4.2 Schaltplan - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.4.3 Schaltplan – Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.4.4 Programmlisting - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.4.5 Programmlisting - Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.5 PROJEKT 4 - Änderung der Motordrehrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.5.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.5.2 Schaltplan - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.5.3 Schaltplan - Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.5.4 Programmlisting - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.5.5 Programmlisting - Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 2.6 PROJEKT 5 – Die Verwendung einer integrierten H-Brückenschaltung . . . . . . . . . . 62 2.6.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.6.2 Schaltplan - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.6.3 Schaltplan – Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2.6.4 Programmauflistung - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 2.6.5 Programmlisting – Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 2.7 PROJEKT 6 - Drehzahl- und Richtungsregelung mit integrierter H-Brückenschaltung 69 2.7.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 2.7.2 Schaltplan - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 2.7.3 Schaltplan - Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 2.7.4 Programmlisting - Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 2.7.5 Programmlisting - Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
●6
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 6
18-10-18 15:15
2.8 PROJEKT 7 - Verwendung eines Drehgebers – Drehzahlanzeige des Motors (Arduino Uno) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 2.8.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 2.8.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 2.8.3 Programm-Listing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 2.9 PROJEKT 8 - Anzeige der Motordrehzahl auf LCD (Arduino Uno) . . . . . . . . . . . . . . 84 2.9.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 2.9.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 2.9.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 2.10 PROJEKT 9 - Identifizierung des Gleichstrommotors (Arduino Uno) . . . . . . . . . . . 89 2.10.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 2.10.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 2.10.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 2.11 PROJEKT 10 - PID-Drehzahlregelung eines Gleichstrommotors . . . . . . . . . . . . . . 92 2.11.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 2.11.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 2.11.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 2.12 PROJEKT 11 - Verwendung eines Drehgebers - Anzeige der Drehzahl eines Motors (Raspberry Pi Zero W) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 2.12.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 2.12.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 2.12.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 2.13 PROJEKT 12 - Anzeige der Motordrehzahl auf LCD (Raspberry Pi Zero W) . . . . . 102 2.13.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 2.13.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 2.13.3 Programmauflistung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 2.14 PROJEKT 13 - Verwendung von Timer-Interrupts zur Berechnung der Motordrehzahl (Arduino Uno) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 2.14.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 2.14.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 2.8.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 2.15 PROJEKT 14 - Mobile Robotersteuerung (Arduino Uno) . . . . . . . . . . . . . . . . . . 111
●7
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 7
18-10-18 15:15
Motorsteuerung mit Arduino & Raspberry Pi 2.15.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 2.15.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 2.15.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 2.16 PROJEKT 15 - Hindernis vermeidender Roboter (Arduino Uno) . . . . . . . . . . . . . 118 2.16.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 2.16.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 2.16.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 2.17 PROJEKT 16 - Nachlaufroboter (Arduino Uno) . . . . . . . . . . . . . . . . . . . . . . . . . 124 2.17.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 2.17.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 2.17.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 2.18 PROJECT 17 - Mobile Robotersteuerung (Raspberry Pi Zero W) . . . . . . . . . . . . . 132 2.18.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 2.18.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 2.18.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 2.19 PROJEKT 18 - Hindernis vermeidender Roboter (Raspberry Pi Zero W) . . . . . . . 139 2.19.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 2.19.3 Programmauflistung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 2.20 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Kapitel 3 • Einfache Schrittmotor-Projekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 3.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 3.1.1 Unipolare Schrittmotoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 3.1.2 Bipolare Schrittmotoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 3.1.3 Geschwindigkeit eines Schrittmotors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 3.1.4 Bewegung der Motorwelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 3.1.5 Motordrehzeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 3 .2 PROJEKT 1 – Basis Schrittmotorsteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 3.2.1 Blockdiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 3.2.2 Schaltplan (Arduino Uno) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 3.2.3 Schaltplan (Raspberry Pi Zero W) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 3.2.4 Steuern des Schrittmotors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
●8
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 8
18-10-18 15:15
3.2.5 Programmlisting (Arduino Uno) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 3.2.6 Programm (Raspberry Pi Zero W) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 3.3 PROJEKT 2 - Thermometer mit Zifferblatt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 3.3 .1 Blockdiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 3.3.2 Schaltplan (Arduino Uno) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 3.3.3 Schaltplan (Raspberry Pi) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 3.3.4 Programmlisting (Arduino Uno) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 3.3.5 Programmlisting (Raspberry Pi Zero W) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 3.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Kapitel 4 • Einfache Servomotor-Projekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 4.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 4.2 PROJEKT 1 - Grundlegende Servomotor-Steuerung (Arduino Uno) . . . . . . . . . . . 175 4.2.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 4.2.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 4.2.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 4.3 PROJEKT 2 - Steuerung des Servomotors mit einem Potentiometer (Arduino Uno) 180 4.3.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 4.3.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 4.3.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 4.4 PROJEKT 3 - Grundlegende Servomotorsteuerung (Raspberry Pi Zero W) . . . . . . 182 4.4.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 4.4.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 4.4.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 4.5 PROJEKT 4 - Bewegen der Motorwelle auf einen bestimmten Winkel (Raspberry Pi Zero W) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 4.5.1 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 4.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Kapitel 5 • Roboter-Fernsteuerung über Bluetooth mit Mobiltelefon und Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 5.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 5.2.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 5.2.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
●9
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 9
18-10-18 15:15
Motorsteuerung mit Arduino & Raspberry Pi 5.2.3 Android Smartphone Apps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 5.2.4 Paarung des HC-06 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 5.2.5 Steuerung des Roboters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 5.2.6 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 5.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Kapitel 6 • R oboter-Fernsteuerung über Wi-Fi mit Smartphone und Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 6.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 6.2 PROJEKT 1 - Wi-Fi-basierte Roboter-Fernsteuerung . . . . . . . . . . . . . . . . . . . . . 202 6.2.1 Blockschaltbild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 6.2.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 6.2.3 UDP oder TCP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 6.2.4 Android Smartphone-Apps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 6.2.5 Steuerung des Roboters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 6.2.6 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 6.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Kapitel 7 • Roboter-Fernsteuerung über Wi-Fi mit Smartphone und Raspberry Pi Zero W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 7.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 7.2 PROJEKT 1 - Wi-Fi-basierte Roboter Fernsteuerung . . . . . . . . . . . . . . . . . . . . . 215 7.2.1 Blockdiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 7.2.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 7.2.3 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 7.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Kapitel 8 • Roboter-Fernsteuerung über Bluetooth mit Smartphone und Raspberry Pi Zero W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 8.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 8.2 PROJEKT 1 - Bluetooth-basierte Roboter-Fernsteuerung . . . . . . . . . . . . . . . . . . 224 8.2.1 Blockdigramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 8.2.2 Schaltplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 8.2.3 Bluetooth auf Raspberry Pi Zero W aktivieren . . . . . . . . . . . . . . . . . . . . . . . . 224 8.2.4 Python-Bluetooth-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
● 10
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 10
18-10-18 15:15
8.2.5 Zugriff vom Mobiltelefon aus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 8.2.6 Programmlisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 8.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Anhang A • Raspberry Pi Zero W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 A.1 Die Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 A.2 Einrichten des Raspberry Pi Zero W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 A.3 Installation des Betriebssystems auf einer SD-Karte . . . . . . . . . . . . . . . . . . . . . 235 A.4 Starten des RASPBERRY Pi Zero W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 A.5 WiFi und Fernzugriff einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 A.6 Abschalten oder Neustart im GUI-Modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 A.7 Fernzugriff auf den Desktop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 A.8 Bluetooth aktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 A.9 Erstellen und Ausführen eines Python-Programms . . . . . . . . . . . . . . . . . . . . . . 250 A.10 GPIO-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 A.10.1 Pin-Nummerierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 A.10.2 Kanal- (I/O-Port-Pin-) Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Anhang B • Liste Der Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Anhang C • Arduino Uno Anschlussbelegung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Anhang D • Raspberry Pi Zero W Anschlussbelegung . . . . . . . . . . . . . . . . . . . . . 259 Anhang E • Verwenden der gpiozero-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . . . 260 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
● 11
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 11
18-10-18 15:15
Vorwort
Vorwort Arduino ist wahrscheinlich die am weitesten verbreitete Plattform für die Entwicklung von Mikrocontroller-basierten Projekten. Es wird von Studenten auf der ganzen Welt, von Elektronik-Bastlern und von allen anderen verwendet, die daran interessiert sind, ein mikrocontrollerbasiertes Projekt zu entwickeln. Eine der Stärken von Arduino ist die Tatsache, dass es sich um eine Open- Source-Computerhardware handelt und daher von einer großen Anzahl von Entwicklern und Anwendergruppen unterstützt wird. Arduino-Hardware basiert auf den beliebten Atmel AVR- und ARM Cortex-Prozessoren. Die Platinen sind mit diversen analogen und digitalen Ein- und Ausgangspins ausgestattet, die mit den unterschiedlichsten externen Geräten für Überwachungs- und Steuerungsanwendungen verbunden werden können. Arduino-Programme entstehen im Wesentlichen auf der Basis der integrierten Entwicklungsumgebung (Integrated Development Environment oder IDE), die einen Dialekt von Merkmalen aus den Programmiersprachen C und C ++ verwendet. Raspberry Pi Zero W ist das neueste Low-Cost- Mitglied der Raspberry Pi-Familie von Single-Board-Computern, die die grundlegenden Funktionen der Familie um Wireless LAN- und Bluetooth-Funktionen erweitert. Es ist ein kleines Board das etwa 15 US-Dollar kostet und einen 1-GHz-Single-Core-BCM2835 Prozessor enthält, dazu RAM, einen Wireless-Chip der 2,4 GHz Wi-Fi 802.11n unterstützt und Bluetooth 4.0 beherrscht. Raspberry Pi Zero W verwendet das Linux-Betriebssystem Raspbian, das speziell für den Pi entwickelt wurde. Die Platine enthält eine große Anzahl von Ein-/Ausgabe-Ports und unterstützt verschiedene Peripherie-Protokolle wie I2C, SPI, UART und so weiter. Der Prozessor kann mit der sehr populären Programmiersprache Python programmiert werden. Dieses Buch befasst sich mit Gleichstrom-Elektromotoren und deren Verwendung in Arduino- und Raspberry Pi Zero W-basierten Projekten. Es enthält viele getestete und funktionierende Projekte zur Echtzeitsteuerung von Standard-Gleichstrommotoren, Schrittmotoren, Servomotoren und mobilen Robotern. Einer der interessanten und wesentlichen Punkte dieses Buches ist die Beschreibung vollständiger Projekte für die Fernsteuerung eines mobilen Roboters mit Hilfen von Mobiltelefonen, wobei sowohl der Arduino Uno als auch der Raspberry Pi Zero W als Controller genutzt werden. Diese Projekte wurden entwickelt um mit Wi-Fi oder Bluetooth-Verbindungen zu arbeiten. Ich hoffe, Sie lesen dieses Buch gerne und nutzen es für Ihre nächste Motorsteuerung oder Ihr nächstes Roboterprojekt. Prof. Dr. Dogan Ibrahim
● 13
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 13
18-10-18 15:15
Motorsteuerung mit Arduino & Raspberry Pi
Kapitel 1 • Elektromotoren 1.1 Überblick In diesem Kapitel werden wir die Arten und Grundprinzipien der Elektromotoren betrachten, namentlich die Gleichstrommotoren, die üblicherweise in Mikrocontroller-basierten Systemen wie Robotik, Fabrikautomation, Haushalts- und Industriesteuerung, und so weiter, verwendet werden. 1.2 Arten von Elektromotoren Ein Elektromotor ist eine elektrische Maschine, die elektrische Energie in Form von linearen oder rotatorischen Bewegungen (oder Drehmomenten) in mechanische Energie umwandelt. Elektromotoren arbeiten mit magnetischen Feldern, die eine Kraft zwischen dem Magnetfeld des Motors und dem Strom durch seine Wicklungen erzeugen. Diese Kraft verursacht eine geradlinige oder umlaufende Bewegung. Elektromotoren werden wie folgt in zwei Kategorien eingeteilt: • Wechselstrommotoren (AC-Motoren) • Gleichstrommotoren (DC-Motoren) Innerhalb dieser Kategorien gibt es weitere Unterteilungen, Abbildung 1.1 zeigt einige wichtige Motortypen in diesen Unterteilungen.
Abbildung 1.1 Elektromotortypen Wechselstrom (AC) -Motoren werden in der Robotik üblicherweise nicht verwendet, da die meisten Roboter mit Batterien betrieben werden, die lediglich Gleichspannung liefern. Wechselstrommotoren werden im Allgemeinen in industriellen Automatisierungsanwendungen verwendet, in denen sehr große Drehmomente erforderlich sind, wie etwa in Förderbändern, Kränen und so weiter.
● 14
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 14
18-10-18 15:15
Kapitel 1 • Elektromotoren
In diesem Buch sind wir nur an den folgenden Arten von DC-Elektromotoren interessiert: • bürstenbehaftete Gleichstrommotoren (BDC = Brushed DC) • DC-Servomotoren • DC-Schrittmotoren Die Vorteile der bürstenbehafteten DC-Motoren sind: • Sie sind kostengünstig • Sie arbeiten mit niedrigen Gleichspannungen • Sie sind klein • Es ist einfach, ihre Geschwindigkeit zu kontrollieren • Sie sind in allen Größen erhältlich • Sie haben gute Drehmoment-Drehzahl-Eigenschaften Die Nachteile der bürstenbehafteten DC-Motoren sind: • Die Bürsten verschleißen und müssen möglicherweise ausgetauscht werden • Bürsten erzeugen elektrische Funken, die in bestimmten Umgebungen feuern oder explodieren können • Bürsten erzeugen HF-Rauschen, das benachbarte elektronische Geräte wie Fernseher, Radios usw. stören kann • Professionelle DC-Motoren sind teuer 1.3 Bürstenbehaftete Gleichstrommotoren Gleichstrommotoren mit Bürsten haben normalerweise zwei Anschlüsse. Legt man Spannung an diese Anschlüsse, dreht sich der Motor proportional zur Spannung. Bürstenbehaftete Gleichstrommotoren (BDC) sind in den meisten elektronischen Spielzeugen und in anderen kostengünstigen Motoranwendungen weit verbreitet (Abbildung 1.2). Sie sind sehr kostengünstig, leicht zu nutzen und in vielen Größen und Formen mit und ohne Getriebe erhältlich. Im Gegensatz zu anderen Motortypen (z. B. bürstenloser DC und AC) benötigen bürstenbehaftete DC-Motoren keinen Controller zum Schalten des Stroms in den Motorwicklungen. Wie in Abbildung 1.3 gezeigt, bestehen alle BDC-Motoren aus: • Einem Stator • Einem Rotor • Bürsten und einem Kommutator
● 15
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 15
18-10-18 15:15
Motorsteuerung mit Arduino & Raspberry Pi
Abbildung 1.2 Kleiner bürstenbehafteter DC-Motor
Abbildung 1.3 Ein typischer BDC-Motor Der Stator erzeugt ein stationäres Magnetfeld, das den Rotor umgibt. Dieses Statorfeld wird entweder durch Permanentmagnete erzeugt, die rings um den Rotor platziert sind, oder durch ein elektromagnetisches Feld, welches von stromdurchflossenen Drahtwicklungen stammt, die den Rotor umgeben. Der Rotor (siehe Abbildung 1.4) wird auch Anker genannt, und es besteht aus Wicklungen, das Magnetfeld erzeugen, wenn man sie durch Anlegen einer Gleichspannung mit Energie versorgt. Die Magnetpole des Rotors werden zu gegenüberliegenden Magnetpolen des Stators angezogen, wodurch der Rotor gedreht wird.
● 16
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 16
18-10-18 15:15
Kapitel 1 • Elektromotoren
Abbildung 1.4 Der Rotor Der Kommutator (Abbildung 1.5) ist auf der Achse eines BDC-Motors montiert. Wenn sich der Motor dreht, leiten Kohlebürsten die Versorgungsspannung über den Kommutator an die Rotorwicklungen. Die Bürsten kommen gleichzeitig mit verschiedenen Segmenten des Kommutators in Kontakt und stellen so die erforderliche Versorgungsspannung für verschiedene Wicklungen des Rotors bereit. Beachten Sie, dass der Kommutator ein Teil des Rotors ist und wenn sich der Rotor dreht, dreht sich auch der Kommutator.
Abbildung 1.5 Der Kommutator 1.3.1 Permanentmagnet-Gleichstrom-Motoren Beim Permanentmagnet-Gleichstrom-Motor wird das Statorfeld durch Permanentmagnete erzeugt (siehe Abbildung 1.6). Das heißt, der Stator besteht aus einem Paar Permanentmagnete. Diese Motoren haben den Vorteil, dass sie sehr klein sein können und keine Kupferverluste im Feldkreis auftreten. Sie haben den Nachteil, dass das erzeugte Drehmoment gering ist, da die Permanentmagnete im Vergleich zu elektromagnetischen Feldern nur schwache Flussdichten erzeugen. Es besteht auch die Gefahr einer Entmagnetisierung, die den Motor zum Stillstand bringen kann. Abbildung 1.7 zeigt das Schaltbild eines Permanentmagnet-Gleichstrom-Motors.
● 17
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 17
18-10-18 15:15
Kapitel 2 • Einfache Gleichstrommotor-projekte
Kapitel 2 • Einfache Gleichstrommotor-projekte 2.1 Überblick In diesem Kapitel werden einfache Gleichstrommotorprojekte vorgestellt. In allen Projekten in diesem Kapitel wird ein kleiner bürstenbehafteter Permanentmagnet-Gleichstrommotor mit einem Arduino UNO-Entwicklungsboard und mit einem Raspberry Pi Zero W-Entwicklungsboard verwendet. Die Arduino-Programme wurden mit der Arduino IDE und die Raspberry Pi-Programme mit der Programmiersprache Python entwickelt. Die Projekte werden nach Möglichkeit durch folgende Angaben für jedes Projekt beschrieben: • Projekttitel und Kurzbeschreibung • Blockschaltbild • Schaltpläne (Arduino Uno und Raspberry Pi) • Projekt-Aufbau • Programmlisting (sowohl Arduino Uno als auch Raspberry Pi) • Vorschläge (wo möglich) Der Begriff Mikrocontroller wird in diesem Kapitel für das Arduino UNO-Entwicklungsboard und auch für das Raspberry Pi Zero W-Entwicklungsboard verwendet. 2.2 PROJEKT 1 - Motor EIN/AUS-Steuerung Dies ist ein sehr einfaches Projekt, bei dem ein kleiner bürstenbehafteter Gleichstrommotor der mit 3 – 6 V betrieben werden kann, über einen Transistor als Treiber an den Mikrocontroller angeschlossen wird. Der Motor wird für 10 Sekunden eingeschaltet und dann für 5 Sekunden ausgeschaltet. Dieser Vorgang wird für solange wiederholt, bis er manuell gestoppt wird. Ziel dieses Projektes ist es, zu zeigen, wie ein bürstenbehafteter DC-Motor über einen Mikrocontroller angeschlossen und betrieben werden kann. 2.2.1 Blockschaltbild Bild 2.1 zeigt das Blockschaltbild des Projektes. Einer der Ausgänge des Mikrocontrollers ist über einen Transistor als Treiber mit dem Motor verbunden.
Abbildung 2.1 Blockschaltbild des Projekts
● 29
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 29
18-10-18 15:15
Motorsteuerung mit Arduino & Raspberry Pi
2.2.2 Schaltplan - Arduino Uno Bild 2.2 zeigt den Schaltplan des Arduino Uno. Die Basis eines NPN-Transistors vom Typ BC108 ist mit einem 3,3-k-Widerstand an Pin 3 (siehe Anhang C für die Arduino Uno-Pinbelegung) des Arduino Uno angeschlossen, wobei der Transistor als Schalter verwendet wird. Der Motor ist über den Kollektor des Transistors und die positive Spannungsversorgung angeschlossen. Der hier eingesetzte Motor arbeitet mit 3…6 V. Wenn sie einen Motor verwenden, der eine höhere Spannung als 5V benötigt (oder einen höheren Strom, als der Arduino Uno liefern kann), dann verwenden sie ein externes Netzteil zur Versorgung des Motors. Über den Motoranschlüssen ist eine Diode angeschlossen. Sie schützt den Transistor vor der Gegen-EMK des Motors: Wenn der Motor nach Abschalten der Versorgungsspannung langsam zum Stillstand kommt, entsteht in seinen Wicklungen ein Strom (Gegen-EMK), der den Transistor beschädigen kann. Die Diode muss so gewählt werden, dass sie diesen Strom ableiten kann.
Abbildung 2.2 Arduino Uno-Schaltplan Bild 2.3 zeigt den Aufbau auf einer Lochrasterplatte.
Abbildung 2.3 Arduino Uno-Projekt auf einem Breadboard
● 30
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 30
18-10-18 15:15
Kapitel 2 • Einfache Gleichstrommotor-projekte
2.2.3 Schaltplan – Raspberry Pi Bild 2.4 zeigt den Schaltplan des Projektes, bei dem Pin 2 (Anhang D zeigt die Raspberry Pi Zero W Anschlussbelegung) mit der Basis des Schalttransistors verbunden ist. Eine externe Stromversorgung (in Abbildung 2.4 als +V dargestellt) wird empfohlen, da die +5-V-Versorgungsspannung des RasPi Zero W nicht ausreicht, um solche Motoren anzutreiben. Das Breadboard-Aufbau ist in Bild 2.5 dargestellt.
Abbildung 2.4 Schaltbild Raspberry Pi
Abbildung 2.5 Raspberry Pi-Projekt auf einem Breadboard
● 31
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 31
18-10-18 15:15
Motorsteuerung mit Arduino & Raspberry Pi
2.2.4 Programmlisting - Arduino Uno Bild 2.6 zeigt das Arduino-Programm namens Motor1. Kompilieren Sie das Programm wie gewohnt und laden Sie es auf Ihren Arduino Uno hoch. Zu Beginn des Programms ist Port 3 als Motor und ON und OFF als HIGH bzw. LOW definiert. Innerhalb der Setup-Routine wird Port 3 als Ausgang konfiguriert. Das Hauptprogramm läuft in einer Endlosschleife, in der der Motor für 10 Sekunden EIN und für 5 Sekunden AUS geschaltet wird. /***************************************************************** *
SIMPLE ON/OFF MOTOR CONTROL
*
===========================
* * This is a very simple motor ON/OFF control. Pin 3 of the Arduino * is connected to a small brushed DC motor through a transistor * switch. The motor is turned ON for 10 seconds, then OFF for * 5 seconds, and then ON again for 10 seconds. This process is * repeated forever until stopped manually. * * * File
: Motor1
* Date
: August 2017
* Author: Dogan Ibrahim *****************************************************************/ #define Motor 3
// Motor pin
#define ON HIGH #define OFF LOW // // Configure pin 3 where motro is connected as output // void setup() { pinMode(Motor, OUTPUT); } // // Turn ON the motor for 10 seconds, then OFF for 5 seconds. This // process is repated forever // void loop() { digitalWrite(Motor, ON);
// Motor ON
delay(10000);
// Wait 10 sec
digitalWrite(Motor, OFF);
// Motor OFF
● 32
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 32
18-10-18 15:15
Kapitel 3 • Einfache Schrittmotor-Projekte
Kapitel 3 • Einfache Schrittmotor-Projekte 3.1 Überblick Schrittmotoren sind Gleichstrommotoren, die in kleinen Schritten rotieren. Diese Motoren haben mehrere Spulen, die nacheinander erregt werden, wodurch der Motor um einen Schritt nach dem anderen dreht. Schrittmotoren haben den Vorteil, dass eine sehr genaue Positionierung oder Drehzahlregelung der Motorwelle erreicht werden kann. Diese Motoren werden in vielen Präzisions-Positionierungsanwendungen eingesetzt. Es gibt grundsätzlich zwei Arten von Schrittmotoren: unipolare und bipolare. 3.1.1 Unipolare Schrittmotoren Unipolare Schrittmotoren haben vier Wicklungen mit einem gemeinsamen Mittenabgriff auf jedem Wicklungspaar (siehe Abbildung 3.1). Daher haben sie normalerweise 5 oder 6 Anschlußleitungen, je nachdem, ob die beiden Mittenabgriffe verbunden sind, oder nicht.
Abbildung 3.1 Unipolare Schrittmotorwicklungen Unipolare Motoren können durch Umkehrung der Reihenfolge der angelegten Impulse rückwärts gedreht werden. Unipolare Schrittmotoren können im Vollschrittmodus oder im Halbschrittmodus betrieben werden. Beliebteste Die häufigsten Betriebsarten sind 1-PhasenVollschritt, 2- Phasen-Vollschritt und 2-Phasen-Halbschritt. Im 1-Phasen-Vollschrittmodus, wie in Tabelle 3.1 gezeigt, erhält jede Motorwicklung einen Impuls pro Schritt. Dieser Modus hat den Nachteil, dass das verfügbare Drehmoment niedrig ist.
Schritt
a
c
b
d
1
1
0
0
0
2
0
1
0
0
3
0
0
1
0
4
0
0
0
1
Tabelle 3.1 1-Phasen-Vollschritmodus
● 145
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 145
18-10-18 15:17
Motorsteuerung mit Arduino & Raspberry Pi
Im 2-Phasen-Vollschrittmodus - wie in Tabelle 3.2 gezeigt - empfangen zwei Motorwicklungen Impulse pro Schritt. Dieser Modus liefert ein höheres Motordrehmoment Schritt
ein
c
b
d
1
1
0
0
1
2
1
1
0
0
3
0
1
1
0
4
0
0
1
1
Tabelle 3.2 2-Phasen-Vollschrittmodus Im Zweiphasen-Halbschrittmodus - wie in Tabelle 3.3 gezeigt - empfangen manchmal zwei Motorwicklungen Impulse, und manchmal empfängt nur eine Wicklung einen Impuls. Da der Motor im Halbschrittmodus betrieben wird, sind 8 statt 4 Schritte erforderlich, um einen Zyklus zu beenden. Dieser Modus bietet eine höhere Genauigkeit, jedoch auf Kosten eines niedrigeren Drehmoments. Schritt
ein
c
b
d
1
1
0
0
0
2
1
1
0
0
3
0
1
0
0
4
0
1
1
0
5
0
0
1
0
6
0
0
1
1
7
0
0
0
1
8
1
0
0
1
Tabelle 3.3 2-Phasen-Halbschritt-Modus 3.1.2 Bipolare Schrittmotoren Bipolare Schrittmotoren haben eine Wicklung pro Phase, wie in Abbildung 3.2 gezeigt. Die Steuerschaltungen von Bipolarmotoren sind aufwendiger, da der Strom in den Wicklungen umgepolt werden muss, damit sich der Motor anders herum dreht.
● 146
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 146
18-10-18 15:17
Kapitel 4 • Einfache Servomotor-Projekte
Kapitel 4 • Einfache Servomotor-Projekte 4.1 Überblick Servomotoren sind Gleichstrommotoren, die in vielen Anwendungen der Lageregelung eingesetzt werden, bei denen es erforderlich ist, die Motorwelle in eine gewünschte Position zu bringen. Diese Motoren nutzen zur Positionsbestimmung ihrer Welle eingebaute Positionssensoren und drehen sich dann in die richtige Richtung, um die Motorwelle in die gewünschte Position zu bringen. Servomotoren drehen ihre Wellen nicht wie normale Motoren frei im Kreis, sondern um etwa 180 Grad hin und her. Im Gegensatz zu anderen DC-Motoren haben Servomotoren 3 Anschlüsse: Spannungsversorgung, Masse und Steuersignal. Das Steuersignal ist eine positive pulsweitenmodulierte (PWM-) Spannung. Die Frequenz dieser Spannung (oder ihre Periodendauer) steht fest, aber die Impulsdauer variiert in Abhängigkeit von der gewünschten Position der Motorwelle. Beispielsweise arbeitet der Servomotor SG90 so, dass die Periode des PWM-Signals 20 ms (= Frequenz 50 Hz) beträgt, so dass der Motor die Impulsdauer alle 20 ms überprüft. Die Motorwelle befindet sich in der Mitte, wenn die Impulsdauer 1,5 ms beträgt, 90 Grad ganz nach rechts, wenn die Impulsdauer 2 ms beträgt, und -90 Grad ganz nach links, wenn die Impulsdauer 1 ms beträgt. In diesem Kapitel lernen wir, wie man einen kleinen Servomotor mit einem Arduino Uno und einem Raspberry Pi Zero W Entwicklungsboard steuert. Die beiden Projekte in diesem Kapitel sind einfach und zielen darauf ab, die grundlegende Steuerung eines Servomotors zu erklären 4.2 PROJEKT 1 - Grundlegende Servomotor-Steuerung (Arduino Uno) In diesem Projekt werden wir einen kleinen Servomotor wie folgt steuern: • Motorwelle in der Mitte positionieren (90 Grad) • Warten Sie 1 Sekunde • Motorwelle ganz nach rechts positionieren (0 Grad) • Warten Sie 1 Sekunde • Motorwelle ganz nach links positionieren (180 Grad) • Warten Sie 1 Sekunde • Bewegen der Motorwelle in 1 Grad Schritten von rechts nach links und dann von links nach rechts. • Halt Der in diesem Projekt verwendete Servomotor ist der in Bild 4.1 dargestellte Servomotor TowerPro SG90 mit seinem Anschlussplan.
● 175
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 175
18-10-18 15:17
Motorsteuerung mit Arduino & Raspberry Pi
Abbildung 4.1 Der Servomotor SG90 4.2.1 Blockschaltbild Das Blockschaltbild ist in Bild 4.2 dargestellt: Der Servomotor wird einfach an den Mikrocontroller angeschlossen. Servos werden üblicherweise mit einer gelochten Scheibe oder einem gelochten Arm geliefert. Dieses Teil sollte man auf der Motorwelle montierten, dadurch läßt sich die Drehung der Welle besser erkennen.
Abbildung 4.2 Blokschaltbild 4.2.2 Schaltplan Der Servomotor SG90 hat folgende Spezifikationen: • Betriebsspannung: 3,3 V bis 6 V • Betriebsstrom (bei +5 V): 220 ±50 mA • Haltestrom (bei +5 V): 650 ±80 mA • Leerlaufstrom (bei +5 V): 6 ±10 mA • Gewicht: 9 g • Haltemoment: 1,8 kgf.cm • Geschwindigkeit: 0,1 s/60 Grad Bild 4.3 zeigt den Schaltplan des Projektes. Der Signaleingang des Servos (braunes Kabel) ist mit dem Port Pin 3 des Arduino Uno verbunden. Der Spannungsversorgungseingang (rote Ader) wird an +5V des Arduino Uno angeschlossen. Beachten Sie, dass der +5V-Pin des Arduino Uno genügend Strom liefern kann, um so einen kleinen Motor anzutreiben. Größere Motoren müssen an ein externes Netzteil angeschlossen werden, um das Arduino Uno-Board nicht zu überlasten.
● 176
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 176
18-10-18 15:17
Kapitel 5 • Roboter-Fernsteuerung über Bluetooth mit Mobiltelefon und Arduino
Kapitel 5 • R oboter-Fernsteuerung über Bluetooth mit Mobiltelefon und Arduino 5.1 Überblick Bluetooth ist eine drahtlose Technologie im Frequenzbereich von 2,4 bis 2,485 GHz und dient dem Datenaustausch über kurze Distanzen. Bluetooth ist auf allen Smartphones und auf den meisten modernen Laptops und Desktop-Computern verfügbar. In diesem Kapitel werden wir lernen, wie man einen Roboter fernsteuern kann, indem wir Bluetooth auf einem Smartphone nutzen, um Befehle an die Arduino Uno-Robotersteuerung zu senden. Der in diesem Kapitel verwendete Roboter ist der gleiche wie in Kapitel 3. Indem wir auf unserem Handy Befehle geben, können wir den Roboter vorwärts, rückwärts, nach links oder rechts drehen, und so weiter. In diesem Projekt wird ein Mobiltelefon Android-Betriebssystem genutzt. 5.2 PROJEKT 1 - Bluetooth-basierte Roboter-Fernsteuerung In diesem Projekt nutzen wir den in Kapitel 3 beschriebenen Roboter. Zusätzlich werden wir eine vordere LED, eine hintere LED und einen Summer an unserem Roboterchassis montieren. Alle Roboterbewegungen, die LEDs und den Summer können wir unabhängig voneinander von unserem Mobiltelefon über Bluetooth mit einfachen Befehlen steuern. Die in Tabelle 5.1 angegebenen Befehle werden zur Steuerung der LEDs und des Summers verwendet. Die Befehle zur Steuerung der Roboterbewegungen sind in Tabelle 5.2 aufgeführt. In dieser Tabelle ist n die Dauer in Sekunden. Zum Beispiel bedeutet der Befehl F2, den Roboter für 2 Sekunden vorwärts zu bewegen und dann anzuhalten. Controlled part
ON command
OFF command
Vordere LED (Bug-LED)
h1
h0
Hintere LED (Heck-LED)
t1
t0
Summer
b1
b0
Tabelle 5.1 Befehle zur Ansteuerung der LEDs und des Summers Vorwärts fahren
Fnn
Rückwärts fahren
Bnn
Roboter links drehen
Lnn
Roboter rechts drehen
Rnn
Tabelle 5.2 Roboter3 Bewegungsbefehle (nn muss eine 2-stellige Ganzzahl sein) 5.2.1 Blockschaltbild Bild 5.1 zeigt das Blockschaltbild des Projektes. Ein Arduino Uno hat keine integrierte Bluetooth-Funktion. Aus diesem Grund ist ein Bluetooth-Modul mit dem Arduino Uno verbunden, so dass eine Kommunikation mit einem Mobiltelefon möglich ist.
● 189
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 189
18-10-18 15:17
Motorsteuerung mit Arduino & Raspberry Pi
Abbildung 5.1 Blockschaltbild des Projekts 5.2.2 Schaltplan In diesem Projekt wird ein Bluetooth-Modul vom Typ HC-06 mit dem Arduino Uno verbunden, so dass er über dessen Bluetooth-Verbindung kommunizieren kann. Bild 5.2 zeigt das Modul HC-06. Es ist ein kleines Modul mit einer seriellen Schnittstelle für die kommunikation mit einem Host-Prozessor. Das Modul hat 4 Anschlüsse: RXD (Receive Data), TXD (Transmitt Data), GND (Masse) und VCC (Versorgungsspannung). Wie im Schaltplan in Bild 5.3 dargestellt, sind VCC und GND mit dem +5V-Pin beziehungsweise dem GND-Pin des Arduino Uno verbunden. Beachten Sie, dass der HC-06 zwar ein 3,3-V-Modul ist, seine Spannungsversorgung aber im Bereich von 3,3 … 6 V liegen darf. Die Eingangspins des HC06 sind nicht 5-V-kompatibel und dürfen nicht direct die Arduino-Ausgänge angeschlossen werden. Der Pin TXD des HC-06 ist der serielle Ausgang und muss mit dem RXD-Pin des Arduino (Pin 0) verbunden werden. Der Pin RXD des HC-06 ist der serielle Eingang, der leiglich 3,3 V verträgt und daher nicht direkt mit dem Arduino TX-Pin (Pin 1) verbunden werden darf. Wie in Abbildung 5.3 dargestellt, wird das Ausgangssignal des Arduino (5-V-Logik) über einen Widerstandspannungsteiler auf 3,3V abgesenkt, bevor es an den RXD-Eingang des HC-06 angeschlossen wird. Die LEDs vorne und hinten (Heck) sind über 330-Ohm-Strombegrenzungswiderstände mit den Arduino Uno-Port Pins 7 und 6 verbunden. Die positive Anschluß des aktiven Summers ist an Pin 8 des Arduino und der andere an GND (Masse) angeschlossen. Die Pins 1A, 2A, 3A und 4A des Motorsteuerungs-ICs L293 sind mit den Pins 2, 3, 4 und 5 des Arduino Uno verbunden. Wie bei den vorherigen Robotersteuerungsprojekten sind der linke und rechte Motor des Roboters mit den Pins 3 und 6 beziehungsweise 11 und14 des L293 verbunden. Die Stromversorgung des Arduino erfolgt über 4 x Ni-Zn-Akkus, die an den Vin-Pin des Arduino Uno angeschlossen sind. Die beiden Radmotoren werden ebenfalls über Pin 8 des L293-Chips mit Strom versorgt. Beachten Sie, dass Sie die Motoren nicht über den 5-V-Pin des Arduino Uno mit Strom versorgen dürfen, da dieser möglicherweise nicht in der Lage ist, den erforderlichen Strom für die beiden Motoren zu liefern. Verwenden Sie immer eine externe Stromversorgung für die Motoren.
● 190
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 190
18-10-18 15:17
Motorsteuerung mit Arduino & Raspberry Pi
Kapitel 6 • Roboter-Fernsteuerung über Wi-Fi mit Smartphone und Arduino Uno 6.1 Überblick Wi-Fi ist eine der am häufigsten verwendeten Internet-Kommunikationsmethoden, die in den meisten Haushalten und Büros in entwickelten Ländern zu finden ist. Es handelt sich um eine Technologie zur drahtlosen lokalen Vernetzung, die auf den Standards IEEE 802.11 basiert. Zu den Geräten, die die Wi-Fi-Technologie nutzen können, gehören Desktop-Computer, Laptops, Smartphones, Tabletts, Digitalkameras, moderne Drucker, Smart TVs und viele weitere internetfähige Geräte. Diese Geräte greifen über einen Access Point (AP) auf das Internet zu. Ein AP hat eine typische Reichweite von 20 Metern in Innenräumen, obwohl es Extender-Geräte gibt, die diese Reichweite um etliche Meter mehr erweitern. Wi-Fi nutzt üblicherweise die UHF-Frequenzen 2,4 GHz und 5 GHz. In diesem Kapitel werden wir sehen, wie wir unseren Roboter fernsteuern können, indem wir via Wi-Fi und unserem Mobiltelefon Befehle an den Arduino Uno auf dem Roboterchassis geben. Der in diesem Kapitel verwendete Roboter ist der aus Kapitel 3. Indem wir auf unserem Handy die entsprechenden Befehle eingeben, läßt sich der Roboter vorwärts und rückwärts fahren, nach links oder rechts drehen, und so weiter. In diesem Projekt wird ein dazu ein Android-Smartphone verwendet. In diesem Projekt werden UDP-Datenpakete für die Kommunikation zwischen dem Mobiltelefon und dem Arduino Uno verwendet. 6.2 PROJEKT 1 - Wi-Fi-basierte Roboter-Fernsteuerung In diesem Projekt werden wir den in Kapitel 3 verwendeten Roboter einsetzen. Zusätzlich werden wir - wie im Projekt in Kapitel 5 - eine Front-LED, eine Back-LED und einen Summer an unserem Roboterchassis montieren. Wir werden die Roboterbewegungen, die LEDs und den Summer unabhängig voneinander von unserem Mobiltelefon steuern, indem wir UDP-Pakete senden. In diesem Projekt werden die gleichen Befehle wie in Tabelle 5.1 und Tabelle 5.2 verwendet. 6.2.1 Blockschaltbild Bild 6.1 zeigt das Blockschaltbild des Projektes. Arduino Uno hat keine Wi-Fi-Fähigkeit an Bord. Aus diesem Grund wird ein Wi-Fi-Modul an den Arduino Uno angeschlossen, so dass eine Kommunikation mit einem Mobiltelefon möglich ist.
● 202
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 202
18-10-18 15:17
Kapitel 6 • Roboter-Fernsteuerung über Wi-Fi mit Smartphone und Arduino Uno
Abbildung 6.1 Blockschaltbild des Projekts 6.2.2 Schaltplan In diesem Projekt wird ein ESP-01 Wi-Fi-Modul mit ESP8266- Prozessor eingebaut und so mit dem Arduino Uno verbunden, so dass er über die Wi-Fi Verbindung kommunizieren kann. Bild 6.2 zeigt das Modul ESP-01. Dies ist ein sehr kostengünstiges kleines Wi-Fi-fähiges Modul, das über einen integrierten Prozessor verfügt und entweder als eigenständiger Prozessor mit eingeschränkter I/O-Fähigkeit verwendet oder an einen Host-Prozessor angeschlossen werden kann, um ihm Wi-Fi-Fähigkeit zu verleihen. In diesem Projekt wird ESP-01 verwendet, um dem Arduino Uno Wi-Fi-Fähigkeit zu geben. Dazu werden AT-Befehle an das ESP-01 gesendet, um es als Wi-Fi-Gerät zu konfigurieren und dann über die Wi-Fi-Verbindung zu kommunizieren.
Abbildung 6.2 Modul ESP-0 Das ESP-01-Modul ist ein 3,3-V-kompatibles Gerät und seine I/O-Pins vertragen keine höhreren Spannungen als 3,3 V sein. Das Gerät hat 8 Pins: VCC: Stromversorgung. Muss an eine externe +3.3V Stromversorgung angeschlossen werden. GND: Masse der Stromversorgung
● 203
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 203
18-10-18 15:17
Kapitel 7 • Roboter-Fernsteuerung über Wi-Fi mit Smartphone und Raspberry Pi Zero W
Kapitel 7 • R oboter-Fernsteuerung über Wi-Fi mit Smartphone und Raspberry Pi Zero W 7.1 Überblick In diesem Kapitel werden wir unseren Roboter aus der Ferne steuern, indem wir Wi-Fi auf unserem Mobiltelefon benutzen, um Befehle an das RPi ZW-Modul zu geben, das auf dem Roboterchassis montiert ist. Der Roboter, der in diesem Kapitel verwendet wird, ist der in Kapitel 3 verwendete. Durch Befehle auf unserem Mobiltelefon können wir den Roboter vorwärts, rückwärts, nach links oder rechts bewegen. In diesem Projekt wird ein AndroidSmartphone verwendet, um Befehle an den Roboter zu senden. Dazu werden UDP-Datenpakete für die Kommunikation zwischen Mobiltelefon und RPi ZW verwendet. 7.2 PROJEKT 1 - Wi-Fi-basierte Roboter Fernsteuerung In diesem Projekt werden wir den Roboter nutzen, den wir in Kapitel 3 verwendet haben, aber zusätzlich haben wir eine Front-LED, eine Rück-LED und einen Summer am Robotergehäuse montiert. Die gleichen Befehle wie in Tabelle 5.1 und Tabelle 5.2 werden auch in diesem Projekt verwendet. 7.2.1 Blockdiagramm Das Blockdiagramm des Projekts ist in Abbildung 7.1 dargestellt. Da der RPi ZW Wi-Fi-fähig ist, muss kein externes Wi-Fi-Modul verwendet werden.
Abbildung 7.1 Blockdiagramm des Projekts 7.2.2 Schaltplan Der Schaltplan des Projekts ist in Abbildung 7.2 dargestellt. Die Pins GPIO2, GPIO3, GPIO17 und GPIO27 sind mit den Pins 1A, 2A, 3A und 4A des Motortreiber-IC verbunden. Die vordere und hintere LED sind mit den Anschlüssen GPIO9 beziehungsweise GPIO22, der Summer ist mit GPIO10 verbunden. Die Stromversorgung der Motoren erfolgt über die Batterien, da der RPi ZW die Motoren nicht mit ausreichendem Strom versorgen kann. Ein tragbares 5-V-Ladegerät wird verwendet, um den Raspberry Pi Zero W mit Strom zu versorgen.
● 215
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 215
18-10-18 15:17
Motorsteuerung mit Arduino & Raspberry Pi
Bild 7.2 Schaltplan des Projekts 7.2.3 Programmlisting Die Kommunikation zwischen dem Android Mobiltelefon und dem RPi ZW basiert auf Wi-Fi. Wie in Kapitel 6 wird die App UDP RECEIVE and SEND von Wezzi Studios (Version 4.0) auf dem Mobiltelefon verwendet, um UDP-Pakete an das RPi ZW-Modul zu senden. Das Programm ist in Abbildung 7.3 (Programm: mobile1.py) dargestellt. Das Python-Programm auf dem RPi ZW verwendet die Socket-Bibliothek. Zu Beginn des Programms wird die Socket-Bibliothek in das Programm importiert, Motortreiber-, LED- und Summer-Pins werden GPIO-Ports zugewiesen. Diese Pins werden dann als Ausgänge konfiguriert. #------------------------------------------------------------------#
REMOTE ROBOT CONTROL VIA WI-FI
#
==============================
# # In this project the RPi ZW is mounted on the robot chassis together # with the L293 motor driver IC. In addition, two LEDs are mounted on # the robot chasses: Front LED and Rear LED. Additionally, a buzzer is # mounted on the breadboard. The Raspberry Pi Zero W has on board # Wi-Fi and Bluetooth capability. In this example only the Wi-Fi is # used. # # In this project the LEDs, buzzer and the robot movements are all # controlled from a mobile phone using the Wi-Fi link to establish # communciation between the mobile phone and the RPi ZW. # # The commands are as follows (In the robot movement commands the # time must be an integer number): # # h1 Turn ON front LED, h0 Turn OFF front LED # t1 Turn ON rear LED,
t0 Turn OFF rear LED
â—? 216
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 216
18-10-18 15:17
Motorsteuerung mit Arduino & Raspberry Pi
Kapitel 8 • R oboter-Fernsteuerung über Bluetooth mit Smartphone und Raspberry Pi Zero W 8.1 Überblick Der Raspberry Pi Zero W beherrscht sowohl Wi-Fi- als auch Bluetooth-Kommunikation. In diesem Kapitel werden wir unseren Roboter fernsteuern, indem wir Bluetooth auf unserem Mobiltelefon nutzen um Befehle an RPi ZW zu senden, der auf dem Roboterchassis montiert ist. Der in diesem Kapitel verwendete Roboter ist der aus Kapitel 7. Indem wir auf unserem Smartphone Befehle eingeben, bewegt sich der Roboter dementsprechend vorwärts, rückwärts, nach links oder rechts. In diesem Projekt wird ein Android-Smartphone verwendet, um Befehle an den Roboter zu senden. 8.2 PROJEKT 1 - Bluetooth-basierte Roboter-Fernsteuerung In diesem Projekt werden wir den in Kapitel 7 verwendeten Roboter nutzen. Zur Steuerung werden die gleichen Befehle wie in Tabelle 5.1 und Tabelle 5.2 verwendet. 8.2.1 Blockdigramm Das Blockschaltbild dieses Projekts ist das gleiche wie in Abbildung 7.1, aber statt Wi-Fi wird in diesem Projekt Bluetooth für die Kommunikation zwischen Mobiltelefon und RPi ZW verwendet. 8.2.2 Schaltplan Der Schaltplan dieses Projektes ist in Bild 7.2 dargestellt. Die LEDs, der Summer und der Motortreiber-Chip sind alle mit dem RPi ZW verbunden. Die Stromversorgung des RPi ZW erfolgt über ein tragbares 5-V-Ladegerät, das auf dem Roboterchassis montiert ist. Die Stromversorgung der Radmotoren erfolgt - wie bei den bisherigen Robotersteuerungsprojekten - über vier NiZn-AA-Batterien. 8.2.3 Bluetooth auf Raspberry Pi Zero W aktivieren In diesem Projekt werden wir Befehle von einem Android-Smrtphone an unser RPi ZW-Modul senden. Wir müssen daher zunächst Bluetooth über das Menü Einstellungen auf unserem Android-Gerät aktivieren. In diesem Beispiel lautet der Name des Android Bluetooth-Geräts VFD900. Es gibt zwei Möglichkeiten, Bluetooth auf dem RPi ZW zu aktivieren: über den grafischen Desktop (GUI-Modus) oder über den Befehlsmodus. Verwendung des grafischen Desktops Der GUI-Modus ist in Anhang A.8 beschrieben und wird hier wiederholt: • Starten Sie den VNC-Server auf Ihrem RPi ZW und melden Sie sich mit dem VNC Viewer am RPi ZW an. • Klicken Sie auf das Bluetooth-Symbol auf Ihrem RPi ZW oben rechts und schalten Sie Bluetooth ein. Wählen Sie dann Make Discoverable (oder: Sichtbar machen). Sie sollten das Bluetooth-Symbol blinken sehen (Bild 8.1).
● 224
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 224
18-10-18 15:17
Kapitel 8 • Roboter-Fernsteuerung über Bluetooth mit Smartphone und Raspberry Pi Zero W
Abbildung 8.1 Bluetooth auf dem RPi ZW aktivieren • Wählen Sie raspberrypi im Bluetooth-Menü Ihres Mobiltelefons. • Akzeptieren Sie die Pairing-Anfrage auf Ihrem RPi ZW wie in Bild 8.2 gezeigt. Abbildung 8.2 Bluetooth-Paarungsanforderung • Sie sollten nun die Meldung Connected Succesfully (oder: Erfolgreich verbunden) auf Ihrem RPi ZW sehen. Verwenden des Befehlsmodus Sie können Bluetooth auf Ihrem RPi ZW auch über den Befehlsmodus aktivieren. Zusätzlich können Sie Bluetooth sichtbar machen, nach nahegelegenen Bluetooth-Geräten suchen und sich dann mit einem Bluetooth-Gerät verbinden. Die Schritte sind unten aufgeführt (die dazu nötigen Zeichenfolgen sind fett gedruckt): • Machen Sie Ihr Bluetooth mit dem folgenden Befehl sichtbar:
pi@raspberrypi: ~ $ sudo hciconfig hci0 piscan
• Starten Sie das Bluetooth-Tool auf Ihrem Rpi ZW aus dem Befehlsmodus:
pi@raspberrypi:~ $ bluetoothctl
• Schalten Sie Bluetooth ein:
[bluetooth]# power on
• Konfigurieren Sie Bluetooth für die Ausführung:
(bluetooth)# agent on [Bluetooth]# default-Agent
• Gerät sichtbar machen:
[Bluetooth]# discoverable on
• Suchen Sie nach Bluetooth-Geräten in der Nähe. Sie sollten die in der Nähe befindlichen Bluetooth-Geräte mit ihren MAC-Adressen sehen. Notieren Sie sich die MAC-Adresse des Geräts, mit dem Sie eine Verbindung herstellen möchten (hier also mit dem Android-Smartphone), da wir diese Adresse für die Verbindung mit
● 225
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 225
18-10-18 15:17
Index
Index A AC- Motoren 14 A/D-Wandler 166 ADC 45, 46 Anticlockwise 58, 60 AT+RST 208 attachInterrupt 81 B BDC-Motor 15 Bipolare 21, 54 BLDC 22 Bluetooth 188 Busmaster 84 C Clockwise 58, 66 CopperWire 167 Count 81 Counterclockwise 67 D DC-Motoren 14, 175 Delay 32, 81 DHT11 166 37, 42, 187 Duty Cycle Drehmoment 15 Drehwinkel 26 Drehzahlregelmodule 22 E 119 Echo EMK 25, 30 EncoderISR 81 Erdbeschleunigung 23 Ergebnisdrehzahl 24 Electronic Speed Control 22 ESP-01 203 ESP8266 204
G Gegen-EMK 25 GetDistance 121 GPIO 33, 38 H Halbschrittmodus 145 Hall-Effekt 78, 81 HC-SR04 119 HC-06 190 HDMI-Buchse 243 H-Brückenschaltung 53 I IP-Adresse 205 IRL540 34 I2C 13, 84 I2C-Schnittstelle 85, 102 K Keyes 5V Relay 35, 257 Kommutator 17 Kupferdrahtanschluss 167 L Laplace-Transformation 25 LDR 124 LCD 85 LEFT 127 Liniennachlaufroboter 124 LiquidCrystal_I2C 85 LMD18200 69 L293 62
M MCP3002 46 81 mills() MOSFET 93 Motordrehmoment 28 Motormomentkonstante 25 F Motorspezifikationen 22 FORWARD 114 Motorsteuerungslogik 63 FullMode 154 Motorwinkelgeschwindigkeit 25 Full-step 154
● 263
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 263
18-10-18 15:17
Motorsteuerung mit Arduino & Raspberry Pi
N NiZn 112 Noobs 236 NPN-Transistors 30 P PID 94 PID-Regler 94 PNP-Transistoren 55 Pre-Scaler-Register 107 Pull-Up-Widerstand 66 pulseIn 121 Putty 242 PWM 26 Puls Weiten Modulation 26 Proportional 38 Python 13, 33 R Raspbian 13, 235 REVERSE 114 RGB LEDs 260 RIGHT 115 Roboterchassis 112 Rollwiderstand 23 Rollwiderstandskoeffizient 23 Rotate 74 Rotor 16 RPi ZW 34 RPM 81
Strombegrenzungswiderstand 26 51, 243 sudo raspi-config T Tastverhältnis (Duty Cycle) 37 TCP 205 TCRT5000 124 Temperatursensor 164 TMP36DZ 166 Timer-Interrupts 107 Triggerimpuls 121 TTL-Pegel 129 U ULN2003 148 Ultraschallsensor 120 Unipolare 21, 145 UDP 202 V Valleft 128 Valright 128 VNC-Server 224 VNF66AFD 34 Vollschrittmodus 145 W WiFi 240 34, 105 WinSCP Write 177 writeMicroseconds 177
S Schallgeschwindigkeit 141 SCL 84 Schrittmotor 21 SDA 84 setSpeed 160 Serial Plotter 91 Servomotor 20 SG90 175 Slave-Gerät 84 Spannungsteilers 139 Spidev 51 SSH-Client-Protokoll 240 Stator 16 StopMotor 114
● 264
Motorsteuerung mit Arduino und Raspberry Pi 180912.indd 264
18-10-18 15:17
mit Arduino & Raspberry Pi
Dogan Ibrahim
Motorsteuerung
Motorsteuerung
Motorsteuerung mit Arduino & Raspberry Pi
Ein besonders reizvolles Projekt dieses Buches ist die Fernsteuerung eines mobilen Roboters von einem Mobiltelefon aus mit dem Arduino Uno sowie dem Raspberry Pi Zero W. Dieses Projekt wird sowohl über Wi-Fi als auch über Bluetooth mit dem Handy gesteuert. Die Leser sollten in der Lage sein, einen Roboter vorwärts, rückwärts, links oder rechts zu bewegen, indem sie einfache Befehle vom Mobiltelefon aus senden. Die vollständigen Programmlistings aller Projekte sowie die detaillierten Programmbeschreibungen finden Sie im Buch. Der Leser kann die Projekte Schritt für Schritt nachbauen oder sie an die eigenen Bedürfnisse anpassen.
DESIGN SHARE
Elektor-Verlag GmbH 52072 Aachen www.elektor.de
Die Projekte im Buch umfassen die Standard-DC-Motoren, Schrittmotoren, Servomotoren und mobile Roboter. Das Buch richtet sich an Elektronik-Bastler, die Projekte mit dem Arduino Uno oder dem Raspberry Pi Zero W entwickeln und dabei Motoren einsetzen möchten.
Dogan Ibrahim LEARN DESIGN SHARE
LEARN
ISBN 978-3-89576-336-6
Dogan Ibrahim
●
Prof. Dr. Dogan Ibrahim hat einen BachelorAbschluss in Elektrotechnik, einen Master in Steuerungstechnik und hat über digitale Signalverarbeitung promoviert. Er hat in zahlreichen Industriefirmen gearbeitet, bevor er wieder eine akademische Laufbahn einschlug. Prof. Dogan Ibrahim ist Autor von über 60 Fachbüchern und von mehr als 200 Fachartikeln über Mikrocontroller, Mikroprozessoren und angrenzenden Themen.
Dieses Buch beschäftigt sich mit DC-Elektromotoren und deren Einsatz in Arduino und Raspberry Pi Zero W-Projekten. Das Buch enthält zahlreiche Motorsteuerungsprojekte, wobei jedes Projekt denselben Aufbau besitzt: • Projekttitel • Beschreibung des Projekts • Blockschaltbild • Schaltplan • Zusammenbau • Vollständiges Programmlisting • Umfassende Erläuterung des Programms
LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHA GN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHA