PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BuBoter - Steuerbares Farzeug mit AntiKolision



lowtzow
17.06.2007, 14:44
hallo.

eines meiner schon länger gedacht prokjekten ist nun in Arbeit!

derzeitiges Ziel:
steuerbares Fahrzeug mit Antikolison, also mehreren Sensoren damit Kolison nicht vorkommen.
umschaltbar auf automatik modus: Fahrzeug fährt eigenständig im Raum herum.

Mechanik
2 antriebs räder die direkt am Motor hängen
1 drehbares Rad
also insgesamt 3 räder

Steuerung
gedacht L293 für die Motorsteuerung
Sensoren sind Lichtsensoren oder abstandssensoren die ab ca 10cm ein objekt erkennen können (schon getestet, später mehr dazu)
steuerbarer Modus: entweder IR oder funk, für den anfang sollten mal taster mit kabel herhalten.
die Steuerung übernimmt ein mega8

was schon fertig ist
das grundgestell für meinen BuBoter ist schon fertig, bin schon gestern damit herumgefahren; (jedoch nur mit 2 Schalter die direkt 12V zum Motor geschalten haben; aber schon ein kleiner erfolg - die sichtbaren erfolge sind ja sehr wichtig bei solchen projekten!!!)

Material verbrauch derzeit
1 Holzplatte ca 230x15 ; aus restbestand Modellbau
2 Motoren; aus ausgeschlatetetn Geräten
3 Räder alle ausm Baumarkt so ca 5€


jetzt überleg ich mir gerade die Steuerung, will mal pwm weglassen und einfach 2 schleifen bauen um gerade aus und kurvenfahrn in einem geht.ca so

wenn taste für links & vorwärts gedrückt
dann
motor1 =1
Motor2= 1
(also geradeausfahrt)
wait 100ms
motor1=0
MOtor2=1
(also links fahrt)
loop

wird zwar bissi ruckel sollte aber gehn

mfg
piri

lowtzow
20.06.2007, 17:43
update:
so der buboter hat schon seine erste fahrversuche hinter sich.
diesmal über einen mega8 & l293D. gesteuert wurde das ganze über die Steuerungsplatine (also kann man noch von keinem roboter sprechen eher von einem steuerbaren fahrzeug, diese funktion wollt ich eh implementieren, d.h ich lieg im soll!)

Testaufbau & komponenten
der Testaufbau ist ein bisschen konfus. ein mega8 boar hab ich vor jahren von ebay geholt, dran hängt ein 08/15 Steckbrett wo der l293D hängt.
die steuerungsplatine ( 4Taser gegen masse) für vor/zurück/links/rechts

verbunden mit den 08/15 stecker für alle gängigen roboternetz boards.


Programm


derzeit halt so hingepfuscht, damit es funktioniert, wollt eigentlich alles mit pwm machen, aber da ich pwm noch nie verwendet hab und ein paar kleinere probleme beim programmieren hatte wird pwm zwar initialisiert aber nicht verwendet im programm.
schau mir das dämnächst noch genauer an, vielleicht hat wer ja tipps?!

wollt pwm hauptsächlich pwm für die kurvenfahrt verwenden
ein motor auf vollast der andere auf halber last.

Sensorik
wird der nächste punkt sein!
d.h. steuerbares fahrzeug mit antikolision! Buboter

offene fragen probleme
pwm - wie richtig initialisieren, damit die motoren solange laufen wie ich die taste drücke?!
steuerung - bei meinem derzeitigen progamm ist es derzeit so, dass ich nur eine taste gleichzeitig gedrückt werden kann. ist die einzige möglichkeit interrupst?! dann brauch ich wahrscheindlich nen größeren mega mit mehreren interrups.

aja ein video ist unter http://www.file-upload.net/download-309438/MVI_0196.AVI.html abrufbar leider bissi dunkel worden.


ich meld mich wieder

mfg
piri
$regfile = "m8def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
$hwstack = 34
$framesize = 34
$swstack = 34


Config Pinc.0 = Input
Taster_vor Alias Pinc.0

Config Pinc.1 = Input
Taster_zuruck Alias Pinc.1

Config Pinc.2 = Input
Taster_links Alias Pinc.2

Config Pinc.3 = Input
Taster_rechts Alias Pinc.3



Config Pinb.1 = Output
Motor1_pwm Alias Portb.1

Config Pind.6 = Output
Motor1_in1 Alias Portd.6

Config Pind.7 = Output
Motor1_in2 Alias Portd.7


Config Pinb.2 = Output
Motor2_pwm Alias Portb.2

Config Pinb.0 = Output
Motor2_in1 Alias Portb.0

Config Pinb.5 = Output
Motor2_in2 Alias Portb.5


'Pulup ein
Portc = &B11111111



'PWM Frequenz Initialisieren
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1


Dim I As Word



Do

Debounce Taster_vor , 0 , Vor
Debounce Taster_zuruck , 0 , Zuruck
Debounce Taster_links , 0 , Links
Debounce Taster_rechts , 0 , Rechts




Loop


Vor:
Motor1_in1 = 0 'Drehrichtung Motor 1
Motor1_in2 = 1 'Drehrichtung Motor 1
Motor2_in1 = 1 'Drehrichtung Motor 2
Motor2_in2 = 0 'Drehrichtung Motor 2
Motor1_pwm = 1
Motor2_pwm = 1
If Taster_vor = 0 Then
Gosub Vor
Else
Gosub Brems
End If

Return


Zuruck:
Motor1_in1 = 1 'Drehrichtung Motor 1
Motor1_in2 = 0 'Drehrichtung Motor 1
Motor2_in1 = 0 'Drehrichtung Motor 2
Motor2_in2 = 1 'Drehrichtung Motor 2

Motor1_pwm = 1
Motor2_pwm = 1
If Taster_zuruck = 0 Then
Gosub Zuruck
Else
Gosub Brems
End If
Return

Links:
Motor1_in1 = 1 'Drehrichtung Motor 1
Motor1_in2 = 0 'Drehrichtung Motor 1
Motor2_in1 = 1 'Drehrichtung Motor 2
Motor2_in2 = 0 'Drehrichtung Motor 2
Motor1_pwm = 1
Motor2_pwm = 1
If Taster_links = 0 Then
Gosub Links
Else
Gosub Brems
End If

Return

Rechts:
Motor1_in1 = 0 'Drehrichtung Motor 1
Motor1_in2 = 1 'Drehrichtung Motor 1
Motor2_in1 = 0 'Drehrichtung Motor 2
Motor2_in2 = 1 'Drehrichtung Motor 2
Motor1_pwm = 1
Motor2_pwm = 1
If Taster_rechts = 0 Then
Gosub Rechts
Else
Gosub Brems
End If

Return

Brems:

Pwm1a = 0
Pwm1b = 0
Waitms 2
Motor1_in1 = 0 'Drehrichtung Motor 1
Motor1_in2 = 0 'Drehrichtung Motor 1
Motor2_in1 = 0 'Drehrichtung Motor 2
Motor2_in2 = 0
Return



End

recycle
20.06.2007, 20:41
steuerung - bei meinem derzeitigen progamm ist es derzeit so, dass ich nur eine taste gleichzeitig gedrückt werden kann. ist die einzige möglichkeit interrupst?! dann brauch ich wahrscheindlich nen größeren mega mit mehreren interrups.


Ich will mich jetzt nicht streiten, ob dein Controller die 4 Befehle in der Hauptschleife bei 16 MHz nur einige hundertausendmal oder sogar mehrere Millionen mal abfragen kann.
Aber so schnell, dass er es nicht mitbekommt, wirst du den Taster sicher nicht wieder loslassen können.

Einen externen Interrupt brauchst du nur, wenn der Controller den Taster mehr oder weniger automatisch überwachen soll.
Für deinen Zweck wird es sicher reichen, wenn du die Pins an denen Taster hängen in der Schleife abfragst. Das machst du ja eigentlich auch schon.

lowtzow
23.06.2007, 14:00
hallo

wieder mal ein kleines update.

die kabelgebundene steuerung war nur eine notlösung!
hab mir heute überlegt wie ich das am einfachsten realisieren könnte via funk oder ir. hab mich für ir entschieden und die in bascom implementierte rc5 abfrage verwendet.
zum glück hab ich eine all in one fernbedienung, denn von den standard drückern kann fast keiner rc5 bei mir jedenfalls.

zur abfrage hab ich ein programm auf meinen mega8 geladen um zu schauen welcher code bei welcher taste rüberkommt und dann die richtigen cods einfach in den schleifen abgefragt.

der einzige nachteil ist:
warten bis eine taste akzeptiert wird (dürft halt so sein bei rc5)

jedenfalls hie rmal mein programm
$regfile = "m8def.dat"
$crystal = 8000000
$lib "mcsbyte.lbx" 'Quarzfrequenz
$baud = 9600
$hwstack = 34
$framesize = 34
$swstack = 34



Config Pinb.1 = Output
Motor1_pwm Alias Portb.1

Config Pind.6 = Output
Motor1_in1 Alias Portd.6

Config Pind.7 = Output
Motor1_in2 Alias Portd.7


Config Pinb.2 = Output
Motor2_pwm Alias Portb.2

Config Pinb.0 = Output
Motor2_in1 Alias Portb.0

Config Pinb.5 = Output
Motor2_in2 Alias Portb.5

Config Pind.2 = Input
Config Rc5 = Pind.2





'RC5 initialisieren
Enable Interrupts
Dim Adress As Byte , Command As Byte




Do



Getrc5(adress , Command)
Waitms 5

If Command = 80 Then
Gosub Vor
End If

If Command = 209 Then
Gosub Zuruck
End If

If Command = 85 Then
Gosub Links
End If

If Command = 214 Then
Gosub Rechts
End If

If Command = 255 Then ''keine taste gedrückt 255 d.h für bremse/stop
Gosub Brems
End If





Loop



Vor:
Motor1_in1 = 0 'Drehrichtung Motor 1
Motor1_in2 = 1 'Drehrichtung Motor 1
Motor2_in1 = 1 'Drehrichtung Motor 2
Motor2_in2 = 0 'Drehrichtung Motor 2
Motor1_pwm = 1
Motor2_pwm = 1
If Command = 80 Then
Gosub Vor
Else


End If

Return


Zuruck:
Motor1_in1 = 1 'Drehrichtung Motor 1
Motor1_in2 = 0 'Drehrichtung Motor 1
Motor2_in1 = 0 'Drehrichtung Motor 2
Motor2_in2 = 1 'Drehrichtung Motor 2
Motor1_pwm = 1
Motor2_pwm = 1
If Command = 209 Then
Gosub Zuruck

End If

Return

Links:
Motor1_in1 = 1 'Drehrichtung Motor 1
Motor1_in2 = 0 'Drehrichtung Motor 1
Motor2_in1 = 1 'Drehrichtung Motor 2
Motor2_in2 = 0 'Drehrichtung Motor 2
Motor1_pwm = 1
Motor2_pwm = 1
If Command = 85 Then
Gosub Links

End If

Return

Rechts:
Motor1_in1 = 0 'Drehrichtung Motor 1
Motor1_in2 = 1 'Drehrichtung Motor 1
Motor2_in1 = 0 'Drehrichtung Motor 2
Motor2_in2 = 1 'Drehrichtung Motor 2
Motor1_pwm = 1
Motor2_pwm = 1
If Command = 214 Then
Gosub Rechts

End If

Return

Brems:

Motor1_pwm = 0
Motor2_pwm = 0

Return



End

eventuell bau ich dann eine eigene steuerung für meinen buboter, jedoch fürn anfang ist rc5 mehr als ausreichend!!!

so gehts weiter
die sensoren werden demnächst im programm abgefragt
ein akku wir den buboter mit strom versorgen
die erste testplatine wird entwickelt

mfg
piri