Archiv verlassen und diese Seite im Standarddesign anzeigen : BuBoter - Steuerbares Farzeug mit AntiKolision
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
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
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.
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.