In diesem Projekt beschreibe ich den Aufbau eines Winke-Roboters. Wenn man sich dem Roboter (genauer gesagt dem Ultraschall-Entfernungssensor, der wie seine "Augen" aussieht) auf eine festgelegte Entfernung nähert, dann beginnt sich ein Servo hin- und herzubewegen - der Roboter winkt. Gesteuert wird er von einem Calliope Mini.
Der Aufbau des Roboters erfolgt in drei Phasen:
- Basteln des Gehäuses
- Bestücken mit Elektronikbauteilen
- Programmieren des Calliope Mini
Basteln des Gehäuses
Für das Gehäuse benötigt man einen DinA4 Karton. Der sollte so dick wie möglich sein und gleichzeitig dünn genug, damit man ihn im Drucker bedrucken kann. Ich habe einen Karton mit 300g/qm verwendet, das klappte gut. Er wird mit der folgenden Vorlage (PDF in den Anhängen) bedruckt:
Enlang der durchgezogenen Linien muss das Schnittmuster ausgeschnitten werden. Die inneren Flächen lassen sich sehr gut mit einem Skalpell heraustrennen. Falls das nicht zur Hand ist, geht auch eine Schere.
Entlang der gestrichelten Linien muss gefaltet werden. Das kann man machen, indem man mit der Spitze der Schere unter Zuhilfenahme eines Lineals entlang der Linien in den Karton einritzt. Die beiden kleinen Kreise im Gehäuse müssen ausgestanzt werden. Das geht am einfachsten mit einer Lochzange. Falls die nicht zur Hand ist, sollte es aber auch mit einem spitzen Gegenstand klappen. Die Löcher müssen groß genug sein, damit man ein Gummiband durchziehen kann. Die mit einem kleinem Klebeflaschensymbol markierten Flächen sind die Klebeflächen.
Achtung: die Servohalterung (oben rechts) ist auf die genauen Maße des Servos ausgelegt. Bei mir ist das der "Tower Pro Micro Servo 9G, SG 90". Unter der Bezeichnung bekommt man ihn bei eBay oder Alibaba. Verwendet man einen anderen Servo mit anderen Maßen, dann muss man die Schnittvorlage anpassen.
Nach dem Ausschneiden klebt man zunächst die beiden kleinen Stücke ringförmig zusammen:
Dann klebt man die Halterung für den Servo (in der Vorlage rechts oben) in das Gehäuse. Der Schlitz in der Halterung zeigt nach oben. Die Servohalterung muss später innen sein.
Jetzt wird durch die beiden Löcher ein Gummiband gespannt. Dies soll später den Calliope Mini halten.
Im Anschluss verklebt man das eigentliche Gehäuse. Nach meiner Erfahrung ist es am einfachsten, wenn man zunächst die Laschen der Seitenflächen verklebt und zum Schluss die Laschen zur Front. Zum Halten der Klebeverbindung eignen sich Wäscheklammern.
Schliesslich klebt man die Halterung für den Ultraschallsensor (in der Vorlage oben links) bündig zur Rückseite des Gehäuses oben drauf.
Der letzte Schritt ist die Konstruktion des Winke-Arms. Dazu habe ich einen Zahnstocher zu einem Fahnenmast umfunktioniert. Die Fahne ist ein Stück Papier mit einer ungefähren Größe von 3 cm x 2 cm. Wenn man sie mit einem Motiv bedruckt, dann nimmt man das Bild zweimal nebeneinander (also ca 6 cm x 2 cm) und klebt sie um den Zahnstocher. Den Zahnstocher wiederum klebt man mit etwas Klebeband an den Aufsatz, der bei dem Servo dabei ist. Diesen gesamten Arm steckt man auf den Servo.
Bestücken mit Elektronikbauteilen
Jetzt geht es an den Einbau der Elektronik.
Zunächst muss man sich ein Spezialkabel herstellen, mit dem man sowohl den Servo als auch den Ultraschallsensor an den Calliope Mini stecken kann. Beide Bauteile können eigentlich über einen Grove-Stecker verbunden werden. Der Calliope hat auch zwei Buchsen für Grove-Stecker, allerdings kann nur eine der beiden mit analogen Signalen umgehen. Die Grove-Verbindung hat vier Leitungen: Versorgungsspannung, Erde und zweimal Daten. Der Servo und der Ultraschallsensor können sich die ersten beiden Leitungen teilen und bekommen dann jeder eine Datenleitung. Ich habe also das Grove-Kabel, das beim Ultraschallsensor dabei ist, in der Mitte durchgeschnitten. Betrachtet man nun den Grove-Stecker, der in den Calliope Mini gesteckt wird, dann erhalten wir folgende Belegung: die weisse Leitung des Steckers geht auf die Datenleitung des Ultraschall-Entfernungssensors (gelb) und die gelbe Leitung geht auf die Datenleitung des Servos (orangenes Kabel des Servos). Damit ist der Servo später mit dem Pin C16 auf dem Calliope Mini verbunden, der Ultraschall-Entfernungssensor mit dem Pin C17. Die drei roten Enden (vom Stecker, vom Sensor und vom Servo) werden ebenso miteinander verbunden wie die drei Erde-Enden (vom Stecker schwarz, vom Sensor schwarz und vom Servo braun). Am besten verlötet man die Verbindungen und sichert sie mit einem Schrumpfschlauch. Achtung: Schrumpfschlauch aufziehen bevor man verbindet! Ist kein Lötkolben zur Hand, dann kann man die Enden auch einfach verzwirbeln und ein Klebeband zur Isolation drumherumkleben.
Der Calliope Mini wird einfach auf der Vorderseite hinter das Gummi gespannt.
Der Einbau des Servos ist etwas fummelig. Erst muss man das Kabel von außen durch das Loch bei der Servo-Halterung stecken und dann den Servo vorsichtig ebenfalls hineinstecken. Das Kabel verschwindet in der Aussparung der Servo-Halterung.
Der Ultraschall-Entfernungssensor wird mit einem weiteren Gummiband an die entsprechende Halterung oben auf dem Gehäuse angebracht. Bei dem Sensor ist es wichtig, die Version 2.0 von SeeedStudio zu verwenden, weil die auch mit 3,3V (und nicht nur 5 V) umgehen kann.
Nun müssen nur noch die beiden verbleibenden Enden des Kabels mit den Grove-Steckern an den Calliope Mini (Slot B) und an Sensor angestöpselt werden. Achtung: Der Stecker, bei dem alle vier Leitungen belegt sind, kommt in den Calliope, der Stecker, bei dem die weisse Leitung nicht verwendet wird, kommt in den Sensor.
Programmieren des Calliope Mini
Mit dem Calliope Mini muss man nun den Ultraschall-Entfernungssensor und den Servo ansprechen. Für das Auslesen des Entfernungswerts aus dem Sensor gibt es bereits eine Anleitung hier: siehe dieser Link von Boris Crismancich. Zusammen mit den Kommentaren unter dem Artikel ergeben sich damit die beiden unten stehenden Code-Blöcke.
Zur Erläuterung: Um den Wert auf dem Entfernungssensor abzufragen, sendet man zunächst das digitale Muster 0-1-0. Dann wartet man auf die Antwort ("emit pulse event"). Der zweite Block hat die Aufgabe, dieses Pulsesignal aufzufangen und dessen Dauer zu messen. Die Dauer muss noch in eine Entfernung in Zentimetern umgerechnet werden (Division durch 58) und mit einem Schwellwert (hier 20 cm) verglichen werden. Ist die gemessene Entfernung kleiner als der Schwellwert, dann wird die Variable winken von 0 auf 1 umgesetzt. Diese Variable wird im ersten Block, wenn sie den Wert 1 hat, als Startschuss für das Winken verwendet. Dazu bewegt sich der Servo drei Mal von 70 auf 110 Grad und wieder zurück. Nach dem Beenden des Winkens, wird die Variable winken wieder auf 0 zurückgesetzt.
Und hier der gleiche Code in JavaScript. Diese Variante kann mit Copy-und-Paste direkt in den PXT-Editor übertragen werden.
let winken = 0
let abstand = 0
basic.forever(() => {
pins.digitalWritePin(DigitalPin.C17, 0)
control.waitMicros(2)
pins.digitalWritePin(DigitalPin.C17, 1)
control.waitMicros(5)
pins.digitalWritePin(DigitalPin.C17, 0)
pins.setEvents(DigitalPin.C17, PinEventType.Pulse)
if (winken == 1) {
for (let i = 0; i < 3; i++) {
pins.servoWritePin(AnalogPin.C16, 70)
basic.pause(300)
pins.servoWritePin(AnalogPin.C16, 110)
basic.pause(300)
}
winken = 0
}
})
pins.onPulsed(DigitalPin.C17, PulseValue.High, () => {
abstand = pins.pulseDuration() / 58
if (abstand < 20) {
winken = 1
}
pins.setPull(DigitalPin.P0, PinPullMode.PullNone)
})
Comments