LeoBot1, Phase 1 (alle AVR)
von Lukas(8)
und Heinz D.
Der Name LeoBot setzt sich zusammen aus Leonardo (Arduino)
und Roboter. Die noch folgenden Geschwister von LeoBot1 werden mehr Sensoren
haben. Im Modellbau ist der Arduino zum quasi Standard geworden. Deshalb fiel
unsere Wahl auf den zukunftssicheren Leonardo. Damit soll sichergestellt
werden, das neue Programme problemlos auf alle LeoBots übertragbar sind, auch
wenn die Hardware geringfügig abweicht.
LeoBot1 besteht nur aus einem Batteriekasten, 2 Servos,
Ketten und Zahnräder von Lego, Blumendraht, 2 Biderhaken (Büroklammern) und
Klebstoff, mit dem alles am Batteriekasten befestigt ist. Incl. Tiny13 für
weniger als 30€.
Die Antriebe sind zwei umgebaute Servos. Umbauanleitungen
findet man im Netz reichlich. (Nicht alle Servos sind geeignet!)
Servo-Umbau:
Servo öffnen, vorsichtig an der Platine ziehen.
Kommt der Motor und das Poti mit heraus, wird das Poti nach
aussen verlegt.
Bewegt sich nichts, Motor ablöten.
Bewegt sich immer noch nichts Poti ablöten.
Poti nach aussen verlegen
(bei manchen Servos ist die Potiachse=Antriebsachse und
lässt sich nicht entfernen - Pech gehabt).
Motor wieder anlöten.
An der Antriebsachse (vorn) ist noch eine 'Nase' oder eine
Sperre, die den Drehwinkel auf 180°
begrenzt. Sie muss vorsichtig entfernt werden.
Nach dem Zusammenbau dreht der (Getriebe-) Motor je nach
Servosignal (Servotester) vorwärts, rückwärts oder bleibt stehen. Mit der Mittelstellung des
Servo-Poti wird der Stillstand eingestellt (kann ggf. durch 2 Festwiderstände 4k7-10k
ersetzt werden, wg. Erschütterungen).
Beim verwendeten Servo (VSD-5E-HS) ist das Poti (4k7=2x2k2)
eingeclippst und kann ohne Löten herausgenommen werden. Das Abdremeln der Begrenzungsnase hat
länger gedauert.
Das Fahrwerk:
Die sehr häufig anzutreffenden 2-Rad-Antriebe funktionieren
in einem Kinderzimmer nicht wirklich (haben wir mit Asuro3, Conrad und 'Real
Robots' ausprobiert). Der Kettenantrieb kommt über kleine Kanten und hat mit
kleinen Steigungen nicht solche Probleme. Die Geometrie Kettenlänge und
Spurbreite sollte etwa ein Quadrat bilden. Längere Ketten scheren in Kurven
stark, eine zu breite Spur kippt an Teppichkanten stark. (Die Servos müssen
Schwerarbeit leisten, wählen Sie deshalb keine zu kleinen Servos und machen Sie
das Modell nicht unnötig schwer.) Nun höre ich die Einwendung: da sind ja keine
Odometer realisiert! Tatsache ist das die o.g. Bots mit Odometer NICHT in der
Lage waren, einen Parcours abzufahren und zum Startpunkt zurück zu kehren.
Deshalb verzichten wir darauf und verlassen uns auf Sensoren.
Die Anstoß-Sensoren:
Sie müssen so hoch angebracht sein, das Kanten überfahren
werden können, also halbe Kettenhöhe. Und so breit und hoch sein, wie das
Modell, sodass rechte, linke und frontale Hindernisse auslösen. 2 Bilderhaken
und etwas Blumendraht (Eisen, Kupfer ist zu weich) bilden die Sensoren. Ein
Stück Pappe ist die Stoßstange.
Das Programm (Pflichten-Heft Phase1):
Der LeoBot soll durch ein beliebiges Labyrinth (Kinderzimmer
mit und ohne Teppichboden) fahren, bis die Batterien (Akkus) leer sind, ohne
sich festzufahren!
State0: Stillstand bis Sensoren aus (nach Reset, Potis auf
Stillstand einstellen)
State1: Geradeaus fahren + Sensoren abfragen
State5: Zurücksetzen
State2: Hindernis links -> ~30°-45° nach rechts
ausweichen
State3: Hindernis rechts -> ~30°-45° nach links
ausweichen
State4: Hindernis frontal -> 90°-Drehung
State 6-12 sind weitere Sensoren: Heck-, US-, IR-, Farb-
PIR, Gas-, Linien-Sensor.
Später sind an jeder Seite des LeoBot LED's angebracht.
rot=hinten, geLb= Links, blau=vorn und grün=Rechts. Weiß ist für den Farbsensor schlecht zu
erkennen (ggf. Liniensensor).
Die Platine ist mit den fünf Servo-kompatiblen Anschlüssen
vom Servo-Voltmeter bekannt. Sie sollten die Geschwindigkeit nicht erhöhen! Der ungekühlte
Conntroller im Servo geht sonst schnell
kaputt. Wird ein Sensor nach dem Einschalten (Reset)
festgehalten, kann man mit den Potis die
Ketten auf Stillstand einstellen.
Video zum LeoBot1: http://youtu.be/0UszzkshE40
Download: Leobot1-bas-hex-bin.zip
' Oster-Contest, LeoBot1 (mit Tiny13)
'-------------------------------------------------------------------------------
' pb0=servo, pb1=servo, pb2=T1, pb3=T2, pb4=duoLED rot/weiss
'-------------------------------------------------------------------------------
$regfile = "attiny13.dat"
$prog &HFF , &H7A , &HFF , &H00
$crystal = 9600000
$hwstack = 8
$swstack = 16
$framesize = 24
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 256
' PWM-Frequenz 9600000Hz / 256 / 510 = 74Hz entspricht nicht genau 50Hz, geht aber
Ddrb = &B10011 'pwma, pwmb, t2, t3, LED
Portb = &B01100 'pullup
Dim Tasten As Byte
Const Warte1 = 2 '30° Drehung
Const Warte2 = 6 '90° Drehung
Const Stopab = 24 '1,5ms
Const Avor = 22 '1,6ms
Const Aruck = 26 '1,4ms
Const Bvor = Aruck 'invers
Const Bruck = Avor 'überkreuz
Do 'Hauptprogramm
State0:
Portb.4 = 1 'rot
Pwm0a = Stopab 'A-stop
Pwm0b = Stopab 'B-stop
Tasten = Pinb '0=beide, 4, 8, 12=keine
Tasten = Tasten And 12
If Tasten <> 12 Then Goto State0
State1: 'geradeaus
Portb.4 = 0 'weiss
Pwm0a = Avor 'A-vor
Pwm0b = Bvor 'B-vor
Tasten = Pinb '0=beide, 4, 8, 12=keine
Tasten = Tasten And 12
If Tasten = 12 Then Goto State1
State5: 'zurück setzen
Portb.4 = 1 'rot
Pwm0a = Aruck 'A-rück
Pwm0b = Bruck 'B-rück
Wait Warte1
State4: 'frontal Hindernis
If Tasten = 0 Then
Pwm0a = Aruck 'A-rück
Pwm0b = Bvor 'B-vor
Wait Warte2 : End If
State2: 'Hindernis links
If Tasten = 4 Then
Pwm0a = Stopab 'A-stop
Wait Warte1 : End If
State3: 'Hindernis rechts
If Tasten = 8 Then
Pwm0b = Stopab 'B-stop
Wait Warte1 : End If
Loop
' End Program