LeoBot1, Phase 1 (alle AVR)           

von Lukas(8) und Heinz D.                       
Elektronik-Labor  Projekte   AVR   T13-Contest

 
 
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


Elektronik-Labor  Projekte   AVR   T13-Contest