Lärm-O-Meter fürs Klassenzimmer

Seite 2: Motor und Servo steuern

Inhaltsverzeichnis

Für die Motorsteuerung löten wir zunächst Anschlusspins an die Motorschnittstelle, die sich zwischen Prozessor und Batteriestecker befindet. Normalerweise reichen die 3 Volt des Calliope nicht für einen Motor aus – für dieses Projekt habe ich einen kleinen Motor eines defekten Mini-Quadrokopter genommen, der mit 3 Volt auskommt. Die Spannungsversorgung muss allerdings von einem Batteriepack kommen, da die Versorgung über den USB-Port des Computers nicht ausreicht. Für andere Motoren muss über VM und GND eine separate Spannungsquelle angeschlossen werden.

Da wir den Motor im Vorwärts- und Rückwärtsbetrieb verwenden wollen, verbinden wir seine beiden Anschlüsse mit den PINs Motor A und Motor B (siehe Bild unten). Alternativ kann man zwei Motoren nutzen, die jeweils an einen Motorpin und GND angeschlossen werden – in diesem Fall kann die Motorrichtung allerdings nicht geändert werden.

Anschluss des Motors an den Calliope mini

Um die Ansteuerung des Motors zu testen, wählen wir im PXT-Editor aus dem Menüpunkt "Motoren" erst den Befehl Motor an mit 50 und ziehen ihn auf die Arbeitsfläche. Für 50 kann eine Zahl zwischen 0 (Motor ist aus) und 100 (Motor läuft mit 100% Leistung) eingetragen werden. Auch negative Zahlen sind möglich, sie lassen den Motor rückwärts laufen. Nachdem der Motor eingeschaltet wurde (Motor an mit 100) soll er eine halbe Sekunde laufen, daher wird das Programm mit dem Befehl pausiere (ms) 500 für 500 ms angehalten, der Befehl steht im Menüpunkt "Grundlagen". Die Farbe der Programmzeilen entspricht übrigens den Menüpunkten.

Programmsketch der Motorsteuerung

Schließlich wird der Motor mit dem Befehl Motor Pause ausgeschaltet (im Menüpunkt "Motoren" erst Motoren auslaufen wählen und auslaufen zu Pause ändern). So bauen wir einen Ablauf aus Vorwärts ein – Pause – Rückwärts ein – Pause. Die kleinen Pausen bauen wir ein, um den kleinen Motortreiber nicht zu überlasten, wenn er abwechselnd volle Vorwärts- und Rückwärtsbewegungen ausführt. Die bestmöglichen Antriebs- und Pausenlängen müssen je nach Pendel ausprobiert werden.

Der bisher programmierte Ablauf soll viermal wiederholt werden, daher fassen wir die Befehle in eine Schleife mit einer festgelegte Anzahl Durchläufe ein: der Befehl 4-mal wiederholen befindet sich im Menüpunkt "Schleifen". Schließlich soll der Ablauf bei Drücken des Knopfs A gestartet werden. Die Schleife wird daher in die Aktion Wenn Knopf A gedrückt (Menüpunkt "Eingabe") eingefasst.

Hat ihr Servo für den Befindlichkeitszeiger einen Grove-Stecker, kann er an A1 eingesteckt werden. Ansonsten müssen sie den Stecker abschneiden und die nötigen Anschlusspins anlöten: Der Servo wird an mit + an 3,3V, mit - an GND und mit Impuls an Pin C17 angeschlossen. Da es bei Servos keine einheitliche Belegung der Anschlüsse gibt, hilft unsere Tabelle oder der Blick ins Datenblatt weiter. Zum Testen lassen wir den Zeiger schrittweise von der linken Seite auf die rechte wandern, so als ob die Klasse eine Weile ruhig arbeitet.

Die Tabelle zeigt eine Übersicht der gebräuchlichsten Servo-Modelle und deren Belegung. Im Zweifelsfalll hilft der Blick ins Datenblatt.

Um den Servo anzusteuern, wählen wir unter "Fortgeschritten" "Pins" erst schreibe Servo an Pin P1 auf 180. Dann wählen wir statt P1 den richtigen Pin C17 aus. Die Zahl steht für die Drehbewegung des Servos in Grad und kann je nach Servo für die gleiche Rotation variieren. In unserem Beispiel ist der Servo bei 160 ganz links (wütendes Gesicht) und bei 00 ganz rechts (glückliches Gesicht). Dabei gilt: verringert man die Zahl um 40, dreht der Servo den Zeiger etwa 45° weiter nach rechts.

Anschluss des Servos an den Calliope mini

Statt einen festen Wert anzugeben, soll die aktuelle Position des Befindlichkeitszeigers eingetragen werden, die wir vorher in einer Variablen speichern. Dazu wählen wir im Menü "Platzhalter" den Button "Neuen Platzhalter anlegen" und geben der Variablen den Namen BravZustand. Den Namen tragen wir in den Befehl ein: Schreibe Servo an Pin C17 auf BravZustand. Setzen wir davor den Befehl Ändere BravZustand um -40 (ebenfalls aus dem Menü "Platzhalter"), wird der Servo nun nach rechts bewegt. Da der Servo nur angesteuert werden soll, wenn er noch nicht ganz rechts ist, werden die Befehle in eine wenn-dann Klammer eingefasst (Menüpunkt "Logik") und aus dem gleichen Menüpunkt die Abfrage 0 < 0 hinzugefügt und auf BravZustand > 0 geändert.

Programmsketch der Servosteuerung
Calliope mini

Der Mikrocontroller Calliope mini wurde in Deutschland entwickelt und soll bereits in der Grundschule Programmierkenntnisse vermitteln.

Darum herum setzen wir eine weitere wenn-dann-Klammer, die später mit der Lärmpegelmessung überpüfen soll, ob die Kinder leise waren. Erstmal nutzen wir sie aber nur, um den Zeiger alle 15 Sekunden (Variable BravLimit) anzusteuern. Die Zeit der letzten Zeigerbewegung speichern wir, indem wir die Variable BravStart am Ende der Klammer auf die aktuelle Systemzeit (Laufzeit (ms) aus dem Menüpunkt "Eingabe mehr") ändern. Mit BravDauer speichern wir außerdem, wieviel Zeit seither vergangen ist: Aus dem Menüpunkt "Mathematik" nehmen wir 0 - 0 und ersetzen dies zu Laufzeit (ms) - BravStart. Solange BravDauer kleiner ist als BravLimit, also keine 15 Sekunden vergangen sind, passiert nichts, anschließend unsere innere wenn-dann-Abfrage.

Zum Testen soll dann zum Programmstart (beim Start) und beim Drücken des Knopfes A der Zeiger in die linke Position gefahren und alle Variablen auf den Startwert gesetzt werden. In den Klammern setzen wir also BravZustand auf 160, BravStart auf die Systemzeit, BravLimit auf 15 Sekunden und steuern den Servo nach links mit Schreibe Servo an Pin C17 auf BravZustand.