Sie sind auf Seite 1von 30

Rechts

Abbildung 4-7-3: Der Schaltungsaufbau für 6 Potentiometer

Die jeweils äußeren Anschlüsse der Potentiometer werden mit Masse bzw. +5V der
Spannungsquelle verbunden, wobei der Mittelabgriff zu den analogen Eingängen
des Arduino führt. Somit entsteht ein variabler Spannungsteiler, den du schon ken-

4-7
nengelernt hast.

Was sagt der Schaltplan?


Schauen wir uns den Schaltplan zu diesem Aufbau an.

Max. Abbildung 4-7-4: Schaltplan für die Abfrage der Potentiometer (hier 6 Potentiometer) Max.
Linie Linie
Analog-Monitoring | 165
Links
Das Scratch-Skript
Ich zeige dir das Skript für einen einzigen Kanal, denn für alle weiteren Kanäle
ändern sich lediglich die Abfrage des analogen Eingangsports und die Farbe des
Kanalschreibers. Natürlich musst du für jeden Kanal einen eigenen Anzeigepunkt
erstellen, dem du später das Skript zuweist. Als Hintergrundbild habe ich eine
kleine Grafik mit einer Legende der Kanalfarben erstellt, wie du das am Anfang die-
ses Kapitels schon gesehen hast. Natürlich kannst du auch ein Raster erstellen, das
der jeweiligen gemessenen Spannung entspricht.

Skript

Abbildung 4-7-5: Die Abfrage des analogen Eingangs A0 und die Positionierung des Punktes

Was passiert bei der Ausführung der einzelnen Blöcke:

A Zu Beginn wird der Punkt auf die angegebenen Koordinaten mittels Gehe-zu-Block positioniert.
B Um alle vorherigen Malspuren zu entfernen, verwenden wir nach dem Skript-Start den Wische-Malspuren-weg-Block.
C Mit dem Setze-Stiftfarbe-auf-Block legst du die Farbe des jeweiligen Kanals fest. Sie sollte nach Möglichkeit auch der Farbe
des erstellten Punktes entsprechen.

D Die Breite der zu zeichnenden Linie wird über den Setze-Stiftdicke-auf-Block mit dem angegebenen Wert definiert. Spiel
ein wenig mit unterschiedlichen Werten.

E Damit beim Zeichnen auch etwas zu sehen ist, musst du den Stift absenken, denn bloß einen Stift in die Hand zu nehmen,
bringt noch keine Farbe aufs Papier. Wir erreichen das über den Senke-Stift-ab-Block.

Max. Max.
Linie Linie
166 | Projekt 4-7: Analog-Monitoring
Rechts
F Innerhalb der Endlosschleife über den Wiederhole-fortlaufend-Block wird über den Gleite-Block eine sanfte Bewegung des
Stiftes durchgeführt. Die Parameter sind einerseits der x-Wert für die horizontale Positionierung über x-Position und ande-
rerseits der y-Wert für die vertikale Positionierung, die in Abhängigkeit des gemessenen Wertes am analogen Eingang
erfolgt. Die Formel für die Umrechnung hast du schon kennengelernt.

G Über den Gehe-Schritt-Block erfolgt eine Weiterpositionierung nach rechts in x-Richtung um den angegebenen Wert.
H Damit der Punkt am rechten Rand der Bühne nicht einfach im Nirwana verschwindet und niemals wieder in Erscheinung
tritt, erfolgt eine Abfrage über den Falls-Block. Wird der angegebene Wert überschritten, werden die beiden nachfolgen-
den Blöcke ausgeführt.

I Über den Setze-x-auf-Block wird der Punkt am linken Rand positioniert.


J Damit alle zuvor gezeichneten Linien gelöscht werden, rufen wir den Wische-Malspuren-weg-Block auf.

Möchtest du einen weiteren Kanal hinzufügen, musst du das komplette Skript nicht
noch einmal neu eingeben. Du kannst von einem bereits bestehenden Skript eine
Kopie über den Menüpunkt Duplizieren erstellen:

Schritt 1: Vorhandenes Objekt auswählen und das Kontextmenü öffnen

Über den Menüpunkt Duplizieren erstellst du über ein schon vorhandenes Objekt

4-7
ein neues.

Schritt 2: Dem neuen Objekt eine Verbindung zuweisen


Dem neuen Objekt musst du im zweiten Schritt eine Verbindung zuweisen. Natür-
lich wollen wir eine schon vorhandene Verbindung nutzen, denn das gleiche
Arduino-Board soll als Quelle der Information dienen.

Aus diesem Grund wählst du die untere Einstellung Use connection of sprite über ein
schon vorhandenes Grafikobjekt. In meinem Fall habe ich Kanal 0 genommen.
Max. Passe dies deiner Namensgebung entsprechend an. Max.
Linie Linie
Analog-Monitoring | 167
Links
Info! Wenn du mehrere Arduino-Boards mit der Firmware versiehst, kannst du alle diese
Boards individuell ansprechen. Wähle dann einfach die Option New Connection.

Schritt 3: Farben und analogen Kanal anpassen


Im letzten Schritt änderst du die Farbe des Punktes über den Reiter Kostüme und
klickst auf die Bearbeiten-Schaltfläche. Die Farbe der Linie wird über den Setze-Stift-
farbe-auf-Block angepasst. Ändere den analogen Eingang über den Value-of-Sensor-
Block und vergib einen analogen Eingang, den du überwachen möchtest.

Riskiere einen Blick


Auf meiner Internetseite unter dem Link
http://www.erik-bartmann.de/scratch-projekt-kapitel-7.html
findest du weitere Informationen zu den Themen, die in diesem Kapitel angespro-
chen wurden.

Max. Max.
Linie Linie
168 | Projekt 4-7: Analog-Monitoring
Rechts
Projekt 4-8:
Der Robot-Tank 4
8
Im Kapitel Wir steuern einen Roboter bist du das erste Mal mit
der Aufgabe in Berührung gekommen, ein Roboterfahrzeug zu
steuern. Du hast die Bewegung des Roboters über die Tastatur
beeinflussen können, was sowohl per Kabel als auch per Funk
funktioniert. Nun wollen wir eine Steuerung programmieren,
die vollkommen eigenständig ein Fahrzeug über einen Unter-
grund manövriert und Hindernissen ausweicht. Auf den ersten Blick eine sportliche
Angelegenheit, doch mit dem richtigen Equipment recht leicht zu realisieren.

Das autarke Roboterfahrzeug


Auf der folgenden Abbildung sehen wir den sogenannten Robot-Tank von der Firma

4-8
Makeblock. Es handelt sich um ein Kettenfahrzeug, das aus zwei Motoren, einem
Ultraschall-Sensor und dem schon angesprochenen Baseboard inklusive Chassis
besteht. Für die Funksteuerung wurde das Fahrzeug von mir zusätzlich mit einem pas-
senden Bluetooth-Modul ausgerüstet. Wir kommen später noch darauf zu sprechen.

Max. Max.
Linie Abbildung 4-8-1: Der Robot-Tank von Makeblock Linie
Das autarke Roboterfahrzeug | 169
Links
Stellen wir zunächst einige Vorüberlegungen an. Der Robot-Tank verfügt über zwei
Motoren, die über die gezeigten Motorblöcke unabhängig voneinander angesteuert
werden können. Von oben sieht das Ganze wie folgt aus:

Abbildung 4-8-2: Der Blick von oben auf den Robot-Tank

Je größer der Wert für Speed ist, desto schneller dreht sich ein Motor. Der Werte-
bereich erstreckt sich von -255 bis +255, wobei negative Werte die Drehrichtung
umkehren und der Wert 0 den Motor stoppt. Wenn du den Wert sehr klein wählst,
dreht sich der Motor sehr langsam und kommt irgendwann in einen Bereich, in dem
er nicht mehr über genügend Kraft verfügt, um das Fahrzeug fortzubewegen. Du
kannst ein wenig mit den Werten spielen, um die Minimalgeschwindigkeit zu ermit-
teln. Wenn sich ein Fahrzeug sehr langsam bewegen soll, ist eine entsprechende
Untersetzung mit einen Getriebe sicherlich sinnvoll.

Jetzt Du!
Werfen wir zuerst einen Blick auf die Bauteilliste.

Benötigte Bauteile
Für dieses Beispiel benötigen wir die folgenden Bauteile.

Max. Max.
Linie Linie
170 | Projekt 4-8: Der Robot-Tank
Rechts
Benötigte Bauteile

1 x Starter Robot-Kit v2.0 with Electronics

1 x Bluetooth-Modul (z.B. SparkFun Bluetooth Mate Silver) –


Bildquelle: Sparkfun

Vorüberlegungen
Bevor wir uns der Programmierung des Robot-Tanks zuwenden, sollten wir uns
Gedanken darüber machen, wie das Fahrzeug überhaupt reagieren soll, denn die
Steuerung erfolgt diesmal nicht über die Tastatur, sondern eigenständig. Das kann
jedoch nur dann funktionieren, wenn das Fahrzeug während des Fahrens eine

4-8
Rückmeldung darüber erhält, was sich in einer bestimmten Entfernung vor ihm
befindet. Um das zu realisieren, gibt es unterschiedliche Ansätze. Du kannst dir ein
Roboterfahrzeug mit Sensoren in Form von kleinen Schaltern bauen, die beim Errei-
chen eines Hindernisses Kontakte schließen, so dass die Programmierung entspre-
chend reagiert, wodurch eine festgelegte Ablaufsequenz eingeleitet wird, um ein
Hindernis zu umfahren. Das kann wie folgt aussehen:
• Fahrzeug stoppen + Pause einlegen
• Fahrzeug um eine Fahrzeuglänge rückwärts fahren + Pause einlegen
• Fahrzeug um 450 nach rechts bzw. links drehen
• Fahrzeug vorwärts fahren
Wir benutzen zur Erkennung eines Hindernisses einen Ultraschall-Sensor, der konti-
nuierlich den Abstand zum nächsten Hindernis in Fahrtrichtung ermittelt. Wird die-
ser Abstand kleiner und unterschreitet einen bestimmten Schwellenwert, stoppt das
Fahrzeug und leitet die o. g. Ablaufsequenz in leicht modifizierter Form ein. Das ist
Max. natürlich nur ein Beispiel für unzählige weitere Varianten einer quasi intelligenten Max.
Fahrzeugsteuerung; du kannst auch hier deiner Kreativität wieder freien Lauf lassen.
Linie Linie
Das autarke Roboterfahrzeug | 171
Links
Das Scratch-Skript
Sehen wir uns das Scratch-Skript genauer an. Zu Beginn lege ich wieder die erforder-
lichen Variablen an, die wir im Skript benutzen werden. Zudem zeige ich dir eine
Möglichkeit, bestimmte Blöcke zu einem übergeordneten Block zusammenzufas-
sen, was einem in der Programmierung sogenannten Unterprogramm gleich kommt.
Dazu gleich mehr.

Skript
Lege in der Kategorie Daten&Blöcke die folgenden Variablen über die Neue Variable-
Schaltfläche an. Die Erläuterungen folgen gleich bei der Besprechung des Skripts:

Abbildung 4-8-3: Die Ansteuerung des Robot-Tanks über Scratch

Was passiert bei der Ausführung der einzelnen Blöcke:


Max. Max.
Linie Linie
172 | Projekt 4-8: Der Robot-Tank
Rechts
A Über die drei Setze-auf-Blöcke werden die genannten Variablen initialisiert, so dass die Fahrgeschwindigkeit über DriveS-
peed, die Drehgeschwindigkeit über TurnSpeed und die Wartezeit über Pause im Skript recht einfach abgerufen werden
können.

B Kommen wir nun zu einem Block, der standardmäßig nirgendwo in einer der zur Verfügung stehenden Kategorien zu fin-
den ist. Der RobotForward-Block wurde von mir selbst erstellt, und er soll bei der Ausführung den Robot-Tank geradeaus
fahren lassen. Die Erstellung ist ganz einfach. In der Kategorie Daten&Blöcke findest du u.a. die hier rot umrandete Neuer
Block-Schaltfläche:

Wenn du darauf klickst, öffnet sich ein weiteres Fenster, in das du zum einen den Namen des neuen Blocks eingeben
kannst und zum anderen natürlich die Aktionen, die beim Aufruf des Blocks zur Ausführung gebracht werden sollen. Tippe
hier RobotForward ein und klicke auf die OK-Schaltfläche:

Nun wird erstens der von dir erstellte RobotForward-Block in der Kategorie Daten&Blöcke erscheinen:

4-8
Zweitens taucht im Skript-Bereich ein Block auf, der wie folgt aussieht:

Es handelt sich um einen sogenannten Hat-Block mit der Bezeichnung Definiere und dem von dir vergebenen Namen. Beim
Aufruf des Blocks würde jedoch nicht allzu viel passieren, denn du hast noch keine Aktionen definiert, die ausgeführt wer-
den sollen. Für das Geradeausfahren müssen sich beide Motoren M1 und M2 in die gleiche Richtung mit der gleichen
Geschwindigkeit drehen, so dass wir den Block wie folgt definieren:

Die Drehgeschwindigkeit ist in der Variablen DriveSpeed gespeichert. Ändere ggf. diesen Wert nach deinen Wünschen.
Max. C Die nachfolgenden Blöcke werden über den Wiederhole-fortlaufend-Block kontinuierlich ausgeführt. Max.
Linie Linie
Das autarke Roboterfahrzeug | 173
Links
D Damit die Entfernung zum nächsten Hindernis in die Variable Distance übernommen wird, führen wir den Setze-auf-Block
für die genannte Variable mit dem Entfernungswert des Ultraschall-Sensors aus. Dazu verwenden wir den Ultraschall-Sen-
sor-Entfernung-Block und wählen den Port aus, an dem der Sensor angeschlossen wurde. Bei mir ist das Port 3.
E Nun muss wiederum kontinuierlich überprüft werden, ob die Entfernung einen bestimmten Schwellen- bzw. Grenzwert
unterschreitet. Wir erreichen das über den Wiederhole-bis-Block mit der genannten Bedingung. Frei übersetzt bedeutet
das: Wiederhole den Wiederhole-bis-Block und die in ihm enthaltenen Blöcke solange, bis die Entfernung wieder größer als
25cm ist. Die auszuführenden Blöcke F, G, H, I und J erläutere ich jetzt näher.
F Beim RobotStop-Block handelt es sich wiederum um einen selbst erstellten Block, der wie folgt definiert werden muss:

Über den Speed-Wert 0 erreichst du, dass die Motoren stoppen.

G Über den Wait-Secs-Block wird eine kurze Wartezeit eingelegt, die in der Variable Pause definiert wurde.
H Beim RobotTurnRight-Block handelt es sich wiederum um einen selbst erstellten Block, der von dir wie folgt definiert wer-
den muss:

Die Drehgeschwindigkeit der Motoren wird aus der Variablen TurnSpeed abgerufen, wobei das negative Vorzeichen (-1) an
M1 dafür sorgt, dass sich der Motor M1 entgegengesetzt zu Motor M2 dreht. Der Robot-Tank führt eine Drehbewegung
nach rechts um seinen Mittelpunkt aus.

I Über den Warte-Sek-Block wird eine kurze Wartezeit eingelegt, die in der Variable Pause definiert wurde.
J Am Ende des Schleifendurchlaufs muss natürlich die Variable Distance neu mit dem Entfernungswert vom Ultraschall-Sen-
sor initialisiert werden, denn die Bewertung, ob die Schleife erneut ausgeführt werden soll, findet im Schleifenkopf statt.
Würden wir diesen Schritt nicht durchführen, hätten wir beim Eintritt in die Verarbeitung eine Endlosschleife program-
miert, aus der es kein Entrinnen gäbe.

J
K
Ist kein Hindernis in unmittelbarer Entfernung vor dem Robot-Tank zu sehen, erfolgt über den RobotForward-Block eine
Geradeausfahrt. Die Abarbeitung des Skripts in der Wiederhole-fortlaufend-Schleife beginnt von vorne.

Die Bluetooth-Verbindung
Sehen wir uns nun die Bluetooth-Verbindung vom Rechner zum Robot-Tank an.
Die Voraussetzungen sind natürlich folgende:
Max. • Bluetooth-Modul an deinem Robot-Tank Max.
Linie • Vorhandene Installation des Bluetooth-Adapters auf deinem Rechner Linie
174 | Projekt 4-8: Der Robot-Tank
Rechts
Wir haben in einem früheren Kapitel, in dem wir uns ein Roboterfahrzeugt selbst
gebaut haben, schon erste Erfahrungen mit dem Bluetooth-Adapter gesammelt; wirf
bei Bedarf noch einmal einen Blick hinein.

Das Bluetooth-Modul
Das Bluetooth-Modul an deinem Robot-Tank muss je nach Baseboard mit dem
richtigen Port verbunden werden, denn die Signale des Adapters müssen über die
serielle Schnittstelle auf das Board gelangen. Da ich ein Leonardo-basierendes
Board habe, muss ich Port 4 verwenden. Dort befinden sich die beiden Leitungen
RX (Empfangsleitung) und TX (Sendeleitung), die hier mit blauen Labels versehen
sind:

Für ein Uno-basierendes Board findest du weitere Hinweise auf der folgenden Inter-
netseite:
http://wiki.makeblock.cc/index.php?title=Me-Baseboard
Von Makeblock wird ein fertiges Bluetooth-Modul mit dem Zusatz Dual Mode
angeboten.

Abbildung 4-8-4: Me Bluetooth-Modul (Dual Mode)


4-8
Es darf jedoch auf keinen Fall das Bluetooth-Modul mit der Zusatzbezeichnung BLE
verwendet werden, da es in dieser Konstellation nicht funktioniert. Ich habe einen
anderen Weg gewählt und mein vorhandenes Bluetooth-Modul SparkFun Bluetooth
Mate Silver über ein entsprechendes Adapter-Modul von Makeblock mit dem Base-
board verbunden.

Max. Max.
Linie Linie
Das autarke Roboterfahrzeug | 175
Links

Abbildung 4-8-5: Das Bluetooth-Modul ist über das Adapter-Modul mit dem Baseboard verbunden

Die Verkabelung der beiden Module mit dem Baseboard schaut dann wie folgt aus:

Abbildung 4-8-6: Die Verbindungen zwischen Bluetooth- und Adapter-Modul

Das Bluetooth-Modul muss so konfiguriert werden, dass es eine Baudrate von


115200 hat. Die Konfigurationsanleitung bzw. weiterführende Links findest du auf
der SparkFun-Seite unter:
https://learn.sparkfun.com/tutorials/using-the-bluesmirf

Der Bluetooth-Adapter
Kommen wir nun zu MBlock, denn dort musst du die entsprechenden Verbindungs-
parameter einstellen. Du kannst über die Menüzeile erkennen, ob MBlock deinen
Bluetooth-Adapter erkannt hat. Die möglichen Einträge habe ich rot umrandet:
Max. Max.
Linie Linie
176 | Projekt 4-8: Der Robot-Tank
Rechts

Wir gehen jetzt davon aus, dass der Adapter erkannt wurde, und teilen dem Pro-
gramm mit, über welchen Adapter die Kommunikation erfolgen soll. Klicke dazu
auf den Menüpunkt Bluetooth, wobei der folgende Dialog erscheint:

Es dauert eine kleine Weile, und dann erscheint der gefundenen Adapter mit seinem
Namen bzw. seiner Mac-Adresse:

Wenn du auf den Eintrag klickst, ändert sich der Menüpunkt und es erscheint:

Bedenke, dass der Name bzw. die Mac-Adresse bei dir natürlich anders lautet. Von

4-8
nun an erfolgt die Kommunikation zwischen MBlock und dem Robot-Tank über
eine Funkstrecke mittels Bluetooth. Auf diese Weise kannst du nicht nur den
Robot-Tank ansteuern, sondern alle erdenklichen Scratch-Projekte, die über eine
Funkfernsteuerung verfügen sollen.

Der Robot-Tank-Hack
Wenn du im Moment über keinen Robot-Tank verfügst, kannst du trotzdem die
Steuerung des Fahrzeuges inklusive Ultraschall-Sensor nachbauen. Ich habe das mit
einem Fahrzeug gemacht, das ich mit Hilfe von Lego-Technik nachgebaut habe. Das
funktioniert jedoch auch mit jedem anderen Chassis, das über zwei Gleichstrommo-
toren (am besten ca. 9V) verfügt.

Max. Max.
Linie Linie
Der Robot-Tank-Hack | 177
Links

Abbildung 4-8-7: Der PiRover

Jetzt Du!
Werfen wir zuerst einen Blick auf die Bauteilliste

Benötigte Bauteile

Benötigte Bauteile

1 x Motortreiber L293DNE (nur den erwähnten Typ verwenden,


denn er besitzt sogenannte Freilaufdioden, die die Schaltung bzw.
Bauteile schützen.)

1 x 4-fach NAND 4011 (CMOS) – möglich ist auch 74HC00

1 x Elektrolyt-Kondensator 10 F
Max. Max.
Linie Linie
178 | Projekt 4-8: Der Robot-Tank
Rechts
Benötigte Bauteile

Ein beliebiges Fahrgestell mit 2 x Gleichstrommotor (z.B. Lego-


Motor oder ähnliche Motoren mit z.B. 9V)

2 x NPN-Transistor BC547C

2 x Widerstand 1K

2 x Widerstand 10K

2 x Batterieclip für 9V-Batterie + 1 x 2,1mm-Hohlstecker + 2 x 9V-


Batterie (Arduino-Spannungsversorgung + externe Spannungsver-
sorgung)

4-8
1 x Bluetooth-Shield oder 1 x Bluetooth-Modul von Sparkfun (siehe
Anfang des Kapitels)
Auf meiner Internetseite http://www.erik-bartmann.de/down/
download-arduino1.html findest du ein Tutorial namens BTShieldI-
TeadsStudio.pdf, das die Konfiguration des Bluetooth-Shields
erklärt.

Mehrere Steckbrücken in unterschiedlichen Farben bzw. Längen

Da das Baseboard schon über eine entsprechende Ansteuerung der Gleichstrommo-


toren über Treiberbausteine verfügt, ein Leonardo-Board jedoch nicht, müssen wir
uns das über eine eigene Schaltung nachbauen. Ich muss dazu ein wenig ausholen,
denn dir fehlen eventuell noch ein paar Grundlagen. Schauen wir uns die Ansteue-
rung eines einzelnen Motors genauer an. Wenn du ihn fest mit einer Spannungs-
Max. quelle verbindest, gibt es nur zwei Zustände:
Max.
Linie Linie
Der Robot-Tank-Hack | 179
Links

Abbildung 4-8-8: Die Ansteuerung eines Motors

Du siehst, dass der Motor fest in der Schaltung verdrahtet wurde und die beiden
Zustände »Motor dreht sich« bzw. »Motor steht« annehmen kann. Auf diese Weise
kann sich ein Motor jedoch nur in eine Richtung drehen, denn ein Anschluss ist
immer mit +12V und der andere mit 0V verbunden. Damit er sich in die entgegen-
gesetzte Richtung dreht, müsstest du entweder die Spannungsquelle oder den
Motor umpolen. Das ist jedoch nicht praktikabel, deshalb verwenden wir eine
besondere Schaltung, die das Umpolen ermöglicht.

Abbildung 4-8-9: Die Ansteuerungsschaltung eines Motors über eine H-Bridge

Du siehst in dieser Schaltung den Motor in der Mitte, der von vier Schaltern umge-
ben ist. Je nachdem, in welcher Kombination die Schalter betätigt, also geschlossen
werden, dreht sich der Motor entweder links- oder rechtsherum. Wenn du die An-
ordnung der Schalter bzw. der Anschlüsse aus der Ferne betrachtest, siehst du, dass
sie den Buchstaben H bilden. Daher hat diese Schaltung ihren Namen bekommen:
H-Schaltung oder H-Bridge. Welche Schalterkombinationen kommen für eine sinn-
Max. volle Ansteuerung in Frage? Max.
Linie Linie
180 | Projekt 4-8: Der Robot-Tank
Rechts

Abbildung 4-8-10: Die sinnvolle Ansteuerung eines Motors über eine H-Bridge

Du siehst, dass je nach gewünschter Drehrichtung des Motors die Schalter S1 bis S4
entsprechend geschlossen werden müssen. Es ist jedoch darauf zu achten, dass kein
Kurzschluss entsteht, denn durch das Schließen von S1 + S2 bzw. S3 + S4 werden
die beiden Pole der Spannungsquelle unmittelbar verbunden. Ich fasse die Schalter-
kombinationen in einer Tabelle zusammen; dabei bedeutet 0 = offener und 1 =
geschlossener Schalter.

S1 S2 S3 S4 Motorverhalten

4-8
1 0 0 1 Rechtsdrehung des Motors

0 1 1 0 Linksdrehung des Motors

1 0 1 0 Bremsung (Motoranschlüsse werden kurzgeschlossen)

0 1 0 1 Bremsung (Motoranschlüsse werden kurzgeschlossen)

0 0 0 0 Motor läuft ungebremst aus

1 1 0 0 Verbotene Schalterstellung (Kurzschluss!)

0 0 1 1 Verbotene Schalterstellung (Kurzschluss!)

Natürlich könnten wir für die gezeigten Zustände Schalter und Relais einsetzen,
doch es ist am sinnvollsten, einen Treiberbaustein dafür zu verwenden. Er nennt
sich L293DNE, besitzt vier Ein- bzw. Ausgänge und kann demnach zwei separate
Motoren ansteuern. Schauen wir uns diesen Baustein genauer an:
Max. Max.
Linie Linie
Der Robot-Tank-Hack | 181
Links

Abbildung 4-8-11: Ein Motor am Treiberbaustein L293DNE

Durch die Eingänge A bzw. B, die vom Arduino gesteuert werden, wird die Polarität
am Motor beeinflusst.

A B Motorverhalten

0 0 Motor stoppt

0 1 Linksdrehung des Motors

1 0 Rechtsdrehung des Motors

1 1 Motor stoppt

Für die Ansteuerung des Motors, der sich an Output1 bzw. Output2 befindet, muss
zusätzlich noch der Eingang 1,2EN (Enable-Signal) mit einem HIGH-Pegel versehen
werden. Natürlich benötigen wir neben der Spannungsversorgung +5V für den Trei-
berbaustein L293DNE, die an Vcc1 bzw. GND anliegt, noch eine weitere Span-
nungsversorgung (z.B. +9V) für den Motor, die an Vcc2 bzw. GND anliegt. Eine ent-
sprechende Schaltung schaut wie in Abbildung 4-8-12 gezeigt aus:

Wichtig! Beachte, dass lediglich die Masse der beiden Spannungsquellen miteinander
verbunden werden muss. Stell auf keinen Fall eine Verbindung zwischen den
positiven Polen der Spannungsquellen her! Ansonsten wirst du deinen Arduino
zerstören!

Max. Max.
Linie Linie
182 | Projekt 4-8: Der Robot-Tank
Rechts

Abbildung 4-8-12: Der Arduino steuert über den Treiberbaustein L293DNE einen Motor an

Du kannst diese Schaltung schon mit einem angeschlossenen Motor testen, indem
du die beiden digitalen Ausgänge (Pin 6 und Pin 7) mit den Pegeln aus der vorheri-
gen Tabelle versiehst. Für eine Ansteuerung aus MBlock heraus ist das jedoch nicht
möglich, denn MBlock geht davon aus, dass du ein Baseboard verwendest, auf dem
sich schon ein derartiger Motortreiberbaustein und eine vorgeschaltete Logik befin-
den, auf die wir nun zu sprechen kommen. Sehen wir uns wieder nur die Ansteue-
rung eines einzelnen Motors an (siehe Abbildung 4-8-13). MBlock verwendet zur

4-8
Ansteuerung des Motors M1 genau die von mir gezeigten Pins.
Mit dieser Schaltung werden folgende Zustände realisiert:
• IN1 = HIGH-Pegel + IN2 PWM-Signal
• IN2 = HIGH-Pegel + IN1 PWM-Signal
An Pin 6 wird ein PWM-Signal an die Schaltung geschickt, um darüber die
Geschwindigkeit des Motors zu beeinflussen. Über den digitalen Ausgang D7 wird
einerseits der Transistor angesteuert, der bei 5V an seiner Basis durchschaltet und
darüber quasi einen Masse-Pegel an das untere NAND-Gatter (siehe Logik-Tabelle
in der Abbildung) liefert. Das bedeutet, dass der Ausgang des Gatters X2 immer auf
HIGH-Pegel liegt. Andererseits liefert der digitale Ausgang D7 den HIGH-Pegel an
das obere NAND-Gatter, was nun in Abhängigkeit des PWM-Signals von Pin 6 sein
Ausgangssignal an X1 zwischen HIGH- bzw. LOW-Pegel wechselt und darüber die
Motorgeschwindigkeit reguliert.

Max. Max.
Linie Linie
Der Robot-Tank-Hack | 183
Links

Abbildung 4-8-13: Der Arduino steuert einen Transistor und zwei NAND-Gatter an (für einen Motor)

Liegt am digitalen Pin 7 ein LOW-Pegel an, kehrt sich die Situation um, so dass das
obere NAND-Gatter an seinem Ausgang X1 einen ständigen HIGH-Pegel vorweist
und das untere NAND-Gatter in Abhängigkeit des PWM-Signals an Pin 6 sein Aus-
gangssignal an X2 zwischen HIGH- und LOW-Pegel wechselt. Wenn du nun beide
Schaltungen miteinander kombinierst, kannst du über MBlock einen Motor ansteu-
ern. Für den zweiten Motor zur Ansteuerung eines Fahrzeugs musst du lediglich
einen zusätzlichen Transistor und die beiden Widerstände hinzufügen. Die digitalen
Ausgänge des Arduino sind wie folgt zu verwenden:

Abbildung 4-8-14: Welcher Scratch-Block steuert welche digitalen Pins des Arduino an?

Info! Im Elektronik-Kapitel ist die Funktionsweise eines Transistors detaillierter erklärt.


Falls du Probleme mit dem Verständnis hast, schau dir noch einmal das Mit Bautei-
len experimentieren-Kapitel an. Dort haben wir ein erstes Experiment mit einem
Transistor durchgeführt.
Max. Max.
Linie Linie
184 | Projekt 4-8: Der Robot-Tank
Rechts
Der integrierte Schaltkreis 4011 besitzt 4 NAND-Gatter, so dass du keinen weiteren
Baustein benötigst. Hier zeige ich dir die Beschaltungen der beiden ICs L293DNE
und 4011 bzw. des NPN-Transistors BC547C:

Abbildung 4-8-15: Die Bausteine und ihre Pin-Belegungen

Info! Wenn sich nach dem Verbinden der Schaltung mit der Spannungsquelle ein
Motor ständig dreht, hast du möglicherweise die digitalen Ausgänge D4 mit D5
bzw. D6 mit D7 vertauscht. Dreht sich nach der Ansteuerung durch Scratch ein
Motor in die falsche Richtung, pole ihn einfach am Motortreiber L293 um.

Wenn du Lust und genügend Geduld aufbringst, bau doch die beiden gezeigten
Schaltungen auf je einer kleinen Platine auf. Schauen wir uns zunächst das Block-
schaltbild an und anschließend die beiden Platinen:

4-8
Abbildung 4-8-16: Das Blockschaltbild zur Ansteuerung der beiden Gleichstrommotoren

Auf der linken Seite haben wir den Arduino, der mit der MBlock-Firmware versehen
wurde. Wie das funktioniert, habe ich dir im Was ist Scratch-Kapitel schon gezeigt.
Achte darauf, dass du das richtige Arduino-Board beim Firmware Upgrade ausge-
wählt hast. MBlock steuert nun die beiden digitalen Ausgänge D4 bzw. D5 und D6
bzw. D7 an. Diese Signale werden an die Vorschaltplatine geleitet, die mithilfe der
Max. eben gezeigten Logik die auf dem originalen Baseboard vorhandene Schaltung nach- Max.
Linie Linie
Der Robot-Tank-Hack | 185
Links
bildet. Die Ausgänge der Vorschaltplatine gelangen nun weiter zur Motortreiberpla-
tine, die die beiden Gleichstrommotoren ansteuert.

Vorschaltplatine
Die Vorschaltplatine dient zur Ansteuerung der beiden Motortreiber. Du musst die
eben gezeigte Schaltung natürlich verdoppeln, denn es werden ja zwei Motoren
angesteuert.

Abbildung 4-8-17: Die Vorschaltplatine

Die Motortreiberplatine
Die Motortreiberplatine steuert die beiden Gleichstrommotoren an.

Max. Max.
Linie Abbildung 4-8-18: Die Motortreiberplatine Linie
186 | Projekt 4-8: Der Robot-Tank
Rechts
Die Spannungsversorgung der beiden Motoren erfolgt über eine 9V-Batterie mit ent-
sprechendem Clip. Da dein Arduino-Board während des Fahrens nicht über ein
USB-Kabel mit dem Rechner verbunden ist, ist auch hier eine eigene Spannungsver-
sorgung erforderlich. Das Arduino-Board (Uno bzw. Leonardo) verfügt über eine
spezielle Buchse, an die du mit einem passenden Stecker eine externe Spannungs-
quelle anschließen kannst:

Abbildung 4-8-19: Die Spannungsversorgung des Arduino-Boards über eine 9V-Batterie

Auf den folgenden Seiten findest du die erlaubten bzw. vorgeschlagenen Eingangs-
spannungen für die beiden erwähnten Arduino-Boards:
http://arduino.cc/en/pmwiki.php?n=Main/arduinoBoardUno
http://arduino.cc/en/pmwiki.php?n=Main/arduinoBoardLeonardo

4-8
In der folgenden Abbildung siehst du den Robot-Tank im Eigenbau mit den selbst
erstellten Platinen, dem Arduino-Board und dem Bluetooth-Shield:

Max. Max.
Abbildung 4-8-20: Der Robot-Tank im Eigenbau
Linie Linie
Der Robot-Tank-Hack | 187
Links
Du kannst deiner Kreativität freien Lauf lassen und ein richtig cooles Fahrzeug
bauen. Für einen Prototypen eignet sich Lego hervorragend.
Kommen wir schließlich zum Ultraschall-Sensor, den du ebenfalls separat kaufen
und anschließen kannst. Der von Makeblock verwendete Sensor entspricht dem
Ping-Sensor von Parallax.

Abbildung 4-8-21: Der Ultraschall-Sensor von Parallax

Deutlich zu erkennen sind zwei zylinderförmige Objekte auf einer kleinen Platine.
Es handelt sich um den Sender bzw. den Empfänger. Sehen wir uns das Funktions-
prinzip in der folgenden Abbildung genauer an:

Abbildung 4-8-22: Der Ultraschall-Sensor in Funktion

Das Sende-Modul schickt ein Signal aus (1), das von der Fliege reflektiert (2) wird
und als Echo (3) vom Empfangs-Modul aufgenommen wird. Die Entfernung zum
Objekt wird nicht anhand der reflektierten Intensität des Signals gemessen, sondern
aufgrund einer Laufzeitmessung des Schalls. Du kannst den Signal-Pin des Sensors
mit dem Arduino-Pin D9 verbinden und über MBlock dann den Port 3 auswählen.

Max. Max.
Linie Linie
188 | Projekt 4-8: Der Robot-Tank
Rechts
Auf diese Weise wird der Ultraschall-Sensor korrekt angesprochen und liefert die
Entfernungswerte zurück. Hier siehst du die Beschaltung von Port 3 des Baseboards
und u.a. den digitalen Pin D9, den wir am Arduino-Board benötigen:

Verbinde also den Sig-Pin (Signal) des Ultraschall-Sensors mit dem digitalen Pin D9
deines Arduino-Boards und schreibe zum Test das folgende kleine Scratch-Skript.
Erzeuge dir zuvor die Variable Distance, die den Entfernungswert aufnimmt:

Abbildung 4-8-23: Der Ultraschall-Sensor wird abgefragt

Mit diesen Informationen bist du in der Lage, deinen eigenen Robot-Tank zu bauen
und zu steuern.

Info! Günstige Elektronik-Komponenten findest du unter www.pollin.de/. Dort gibt es

4-8
auch die Lochrasterplatinen (auch Punktrasterplatine genannt). Achte auf das rich-
tige Rastermaß von 2,54mm. Die beiden ICs würde ich nicht direkt auf die Platine
löten, sondern über passende IC-Fassungen (14-polig und 16-polig) sockeln. Um
die Anschlüsse auf einer Platine sauber nach außen zu führen, schlage ich Leiter-
platten-Anschlussklemmen vor. Du siehst sie auf den beiden selbst hergestellten
Platinen an den Außenkanten.

Steuerung über das Android-Smartphone


Makeblock bietet zur Steuerung des Robot-Tanks und anderer Komponenten eine
gleichnamige Android-App an, die über den Google Play Store zu installieren ist. In
der folgenden Abbildung siehst du die unterschiedlichen Module, die über Blue-
tooth angesteuert werden können:

Max. Max.
Linie Linie
Steuerung über das Android-Smartphone | 189
Links

Abbildung 4-8-24: Module der Android-App von Makeblock (Quelle: http://app.makeblock.cc/)

Riskiere einen Blick


Auf meiner Internetseite unter dem Link
http://www.erik-bartmann.de/scratch-projekt-kapitel-8.html
findest du weitere Informationen zu den Themen, die in diesem Kapitel angespro-
chen wurden.

Max. Max.
Linie Linie
190 | Projekt 4-8: Der Robot-Tank
Rechts
Projekt 4-9:
Sound-Machine 4
9
Was hältst du davon, wenn wir Scratch in diesem Kapitel dazu
bewegen, etwas Musik zu spielen? Natürlich nicht von alleine,
sondern über eine kleine selbstgebaute Tastatur. Scratch bringt
von Haus aus schon einige Instrumente mit, über die wir nette
Sounds erzeugen können. Wir werden über 12 Taster die ein-
zelnen Sounds ansteuern und nicht einen einzigen digitalen
Eingang dafür verwenden. Unmöglich? Sicherlich nicht! Du wirst dich möglicher-
weise fragen, wie das funktionieren soll, denn einige Taster müssen doch hinsicht-
lich ihres Status – gedrückt oder nicht gedrückt – abgefragt werden. Wie sollen die
entsprechenden HIGH- oder LOW-Pegel zum Arduino übertragen werden, wenn

4-9
nicht über die digitalen Eingänge? Werfen wir zuvor einen Blick auf die Tastatur.

Die Sound-Machine
In der folgenden Abbildung siehst du auf der linken Seite die selbst hergestellte Tas-
tatur mit den 12 kleinen Tastern und auf der rechten Seite das Arduino-Board:

Max. Max.
Linie Abbildung 4-9-1: Die Sound-Machine-Tastatur und der Arduino Linie
Die Sound-Machine | 191
Links
So wie es aussieht, ist keiner der digitalen Eingänge beschaltet, und es gibt lediglich
drei Leitungen zwischen Tastatur und Arduino. Wenn du dir die Platine, auf der
sich die Taster befinden, genauer anschaust, wirst du einige Widerstände erkennen.
Und das ist genau der Punkt, auf den ich jetzt zu sprechen komme. Die Steuerung
erfolgt über einen der analogen Eingänge des Arduino. Ich mache dir das mithilfe
des folgenden Bildes etwas deutlicher:

Abbildung 4-9-2: Ein Widerstandsregler

Wir haben es hier mit einem regelbaren Widerstand zu tun, der in Form eines Schie-
bereglers realisiert wurde. Du kannst seinen Widerstandswert vergrößern oder ver-
kleinern, indem du den Regler nach oben oder nach unten schiebst. Rechts daneben
befindet sich eine Skala, die die einzelnen Ziffern anzeigt, bei denen du den Regler
positionieren musst, um einem bestimmten Widerstandswert zu erzielen. Da es hier
keine festen Raster gibt, die an den markierten Stellen den Regler festhalten, ist
diese Lösung natürlich sehr ungenau. Die Tastatur für die Sound-Machine arbeitet
in ähnlicher Weise. Drückst du eine Taste, dann wird ein bestimmter Gesamtwider-
stand aus einer diversen Zahl von Einzelwiderständen zusammengesetzt, der natür-
lich maßgeblich davon abhängt, welche Taste du drückst.

Jetzt Du!
Du kannst die Schaltung auch auf einen Breadboard aufbauen und musst nicht die
von mir gezeigte Platine im Eurokartenformat verwenden.

Benötigte Bauteile
Für dieses Beispiel benötigen wir die folgenden Bauteile.
Max. Max.
Linie Linie
192 | Projekt 4-9: Sound-Machine
Rechts
Benötigte Bauteile

12 x Taster

12 x Widerstand 220

2 x Widerstand 10K

Mehrere flexible Steckbrücken in unterschiedlichen Farben und


Längen

Was sagt der Schaltplan?


An dieser Stelle möchte ich dir einen Schaltplan zeigen, der dir das Prinzip verdeut-
licht:

4-9
Abbildung 4-9-3: Der Schaltplan für die Sound-Machine

Die Widerstände mit dem Wert 220 Ohm bilden mit dem Widerstand R15 von
10K einen Spannungsteiler, bei dem je nach gedrückter Taste von rechts nach links
gesehen ein Widerstand hinzugeschaltet wird. Wir haben Spannungsteiler schon im
Was ist Scratch-Kapitel beim Thema S4A und die Ports des Arduino behandelt; dort
kannst du ggf. noch einmal nachlesen.
Max. Max.
Linie Linie
Die Sound-Machine | 193
Links

Abbildung 4-9-4: Das Ersatzschaltbild für die ersten drei Taster ( 1, 2 und 3)

Drückst du Taster 1, wird der erste 220-Ohm-Widerstand dem Spannungsteiler hin-


zugefügt, bei Taster 2 kommt ein weiterer 220-Ohm-Widerstand hinzu und so wei-
ter und so fort. Je mehr untere Widerstände hinzugefügt werden, desto größer wird
das Spannungspotenzial, das dem analogen Eingang des Arduino zugeführt wird.
Der untere Widerstand R16 im Schaltplan bzw. Ersatzschaltbild für die Sound-
Machine arbeitet übrigens als Pull-down-Widerstand, um bei geöffneten Tastern
einen definierten Pegel von 0V am analogen Eingang zu gewährleisten. In der nach-
folgenden Tabelle siehst du die Werte, die dir Scratch auf der Bühne anzeigt, wenn
du die einzelnen Taster nacheinander drückst.

Taste 1 2 3 4 5 6 7 8 9 10 11 12
Wert 15 32 48 64 79 93 108 122 136 149 162 175

Diese Werte können bei dir etwas abweichen, da die Widerstände eine bestimmte
Bauteiltoleranz aufweisen. Teste es einfach aus und passe sie ggf. an, das sollte kein
allzu großes Problem darstellen. Du kannst erkennen, dass die gemessene Spannung
von rechts nach links kontinuierlich zunimmt, wobei die Differenz zwischen benach-
Max. barten Werten im Schnitt 15 beträgt. Über die Variable Value, die wir gleich noch Max.
Linie anlegen werden, habe ich mir die einzelnen Werte auf der Bühne anzeigen lassen.
Linie
194 | Projekt 4-9: Sound-Machine