Motoren 2

Du hast sicherlich schon bemerkt, dass man bis jetzt die Geschwindigkeit des Ardurobots noch nicht variieren kann. Das liegt daran, weil der Befehl, mit dem wir gearbeitet haben "digitalWrite" lautet. Hierbei bedeutet "digital" dass es nur genau zwei Zustände gibt: 0 (Low - ausgeschaltet) und 1 (High - eingeschaltet). 

 

In diesem Kapitel werden wir einen neuen Befehl lernen, den "analogWrite". Analog bedeutet, dass wir die Spannung analog verändern, also variieren können. Dadurch werden die Motoren schneller oder langsamer drehen. 

 

 

Ziel des Postens

Du kannst die Geschwindigkeit des Ardurobot verändern.

 

Material

  • Ardurobot (Arduino und DD1-1 Chassis so Verkabelt, wie es in Posten 2 gezeigt wurde)

 

Schaltung

PWM

Streng genommen ist es für den Arduino gar nicht möglich, analog die Spannung zu verändern. Die Ingenieure habe sich jedoch etwas sehr geniales ausgedacht, um dieses Problem zu beheben. Die PWM ("Pulsweitenmodulation") ist ein Verfahren, in dem man in kleinsten Zeitabständen Strom gibt und den Strom wieder abstellt.

 

Man kann sich das so vorstellen:

Gibt man für eine halbe Millisekunde 5V und für eine halbe Millisekunde 0V, dann entspricht der Durchschnitt davon pro Millisekunde 2,5 V. Gibt man für einen Viertel Millisekunde 5V und für drei Viertel Millisekunden 0V, dann entspricht das einem Durchschnitt von 1,25 V.

 

Das ist nun wirklich sehr kurz zusammengefasst. Wer noch mehr darüber wissen möchte: Im Internet findet man unglaublich viele Informationen dazu. 

 

Wichtig für uns ist, dass es die Möglichkeit von PWM gibt. Leider können nicht alle Pins vom Arduino PWM anbieten, sondern nur die, welche ein "~" vor der Zahl haben. 

 

Der Befehl für den Gebrauch vom PWM lautet: "analogWrite".

 

analogWrite

Der Befehl "analogWrite" hat folgende Terminologie: 

 

analogWrite (Pin, Wert);

 

Pin: Digitaler Pin, welcher PWM anbietet. Ist mit "~" markiert (z.B. Pin 3)

Wert: Kann ein Wert zwischen 0 und 255 sein, wobei 0 = 0V und 255 = 5V entsprechen.

 

Bsp.: Wenn du 2.5V auf dem Pin 6 ausgeben möchtest, schreibst du:

analogWrite (6, 128);

 

 

Programmieren

 

Lade folgenden Sketch auf deinen Arduino:

Link zum Sketch

 

Aufgabe 1

Verändere die Geschwindigkeit der Motoren. 

 

Aufgabe 2

Was passiert, wenn der eine Motor schneller dreht als der andere?

 

Bis jetzt haben wir die Motoren immer nur im Setup angesteuert. Das hatte den Vorteil, dass sie den Befehl nur gerade einmal durchführen und anschliessend nichts mehr tun. 

Nun wollen wir aber die Motoren für immer das gleiche tun lassen. Und zwar soll der Roboter für immer (bis die Batterien ausgehen oder wir ihn stoppen) ein Quadrat fahren. 

 

Lade dafür folgenden Sketch auf deinen Arduino:

Link zum Sketch

 

Fährt der Roboter ein Quadrat? Oder dreht der zu weit oder nicht weit genug? Allenfalls musst du das zweite Delay im Sketch noch etwas anpassen (siehe Kommentar). 

 

Vertiefungsaufgaben

Nun hast du gelernt, wie man die Geschwindigkeit der Motoren des Roboters verändern kann. Löse nun folgende Vertiefungsaufgaben:

 

Vertiefungsaufgabe 1:

Der Roboter soll für fünf Sekunden eine Rechtskurve fahren. 

 

Vertiefungsaufgabe 2:

Schreibe einen Sketch, so dass der Roboter zuerst langsam fährt und dann immer wie schneller wird. (Achtung: pass auf, dass er nicht in eine Wand fährt!)

 

Vertiefungsaufgabe 3:

Der Roboter soll schnell vorwärts fahren, sich danach um 180° drehen und anschliessend langsam wieder an seinen Ursprung zurückfahren.

 

Rückblick

In diesem Posten hast du etwas sehr praktisches gelernt, nämlich wie man die Ausgangsspannung per PWM regulieren kann. Dieses Wissen wird für einige deiner zukünftigen Projekten von grossem Nutzen sein.

 

Besprecht zu zweit oder zu dritt:

  • Wie kann ich einen Roboter langsam oder schnell fahren lassen?
  • Was muss ich verändern, damit der Roboter eine 90° oder 180° Drehung macht?
  • Wie kann ich den Roboter eine Kurve fahren lassen?
  • Was bedeutet PWM und was kann ich damit machen?
  • Was ist der Unterschied zwischen "digitalWrite" und "analogWrite" ?

 

Erweiterungsmöglichkeiten

Schneckenrennen:

Wie langsam kann der Arduino fahren? 

 

Definiert eine Start- und Ziellinie. Das Schneckenrennen funktioniert so: Wer länger für die Strecke braucht, der hat gewonnen. 

 

Man kann sogar noch einige Hindernisse in den Weg stellen, welche der Roboter nicht berühren darf. Dies macht das Rennen umso schwieriger.