PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linienfolger programmieren



Zwerwelfliescher
26.11.2009, 13:34
Hi,
ich möchte mir einen Linienfolger bauen. Dazu verwende ich 2 Fototransistoren und eine Rote LED. Außerdem bekommt er noch einen Sharp Sensor(http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=71&products_id=84) damit er Hindernissen ausweichen kann, die auf der Linie stehen. Der Antrieb des Roboters sind 2 umgebaute Servos. Nun habe ich ein paar Fragen:
1.Wie steuere ich die beiden Fototransistoren mit Basic an?
2.Wie erstelle ich mit BASCOM PWM für die Servos?
3.Wie kann ich den Sharp sensor ansteuern. Der Roboter soll ca.5-7cm vor dem Gegenstand drumrumfahren.
4.Zum Servo: Muss ich nur den PWM Anschluss an den Controller anschließen oder auch + und -?

MFG Flexxx

PS: Als Programmierumgebung verwende ich BASCOM AVR und als Controller den ATmega8.

Besserwessi
26.11.2009, 17:49
zu 1) Die Fototransistoren sollte man mit je einem Widerstand an einen AD-Eingang anschließen. Man mißt so die Helligkeit als Spannung. Zum Auslesen des AD gibt es in BASCOM einen Befehl. Wenn man viel Fremdlicht hat, muß man eventuell eine Differenzmesung machen, mit und ohne LED.

zu 2) Bei nur 2 Servos kann man noch die Hardware PWM Kanäle von Timer 1 nutzen. Die Periode wird auf etwa 20 ms Eingestellt, was mit den meisten Quarzefrequenzen auch ganz gut geht, ggf. mit Vorteiler von 8. Die Werte für Pulslänge kann man dann einfach in die PWM Register schreiben. Für 2 Servos geht es also einfacher als in Wiki beschreiben:
http://www.rn-wissen.de/index.php/Servoansteuerung

zu 4)
Die Servos brauchen zur Stromversorgung den + und - Anschluß. der - Anschluß ist dabei mit GND vom µC verbunden. An den Signalpin kommt das PWM Signal, zur Sicherheit mit einem Widerstand in Reihe.

Zwerwelfliescher
26.11.2009, 18:07
zu 4)
Wie stelle ich dann die Drehrichtung ein. So viel ich weiß, kann man mit PWM nur die Geschwindigkeit regeln.
Ich habe das Servo so umgebaut, dass es wie ein Getriebemotor funktioniert.

Bammel
26.11.2009, 18:21
nutzt du die elektronik des servos noch oder benutzt du "nurnoch" den motor mit getriebe?

Besserwessi
26.11.2009, 18:22
Bei den umgebauten (gehackte) Servos kann man über die Pulsbreite auch die Drehrichtug auswählen. Pulse von z.B. 1 ms sind für links, 1,5 ms für stop und 2 ms für rechts. Mit Einschränkungen kann man dazwischen auch noch die Geschwindigkeit verstellen. Wie gut das geht hängt vom Servo ab: eine gute Regelung im Servo kann die Geschwindigkeitsregelung verhindern.

Beim Servo wird die Pulsbreite ja nicht direkt an den Motor weitergegeben sondern nur zur Datenübermittling genutzt.

Zwerwelfliescher
26.11.2009, 18:34
Danke, das Problem mit dem Servo hat sich hiermit erledigt.
Wie heißt der Befehl in BASCOM AVR um den Fototransistor anzusteuern?
Wird die Fotodioder von +5V and den uC oder von GND an den uC?
Was für einen Widerstand soll ich zwischen Fototransistor und uC schalten?
Und wie wird der Sharp Sensor ausgelesen?

MFG Flexxx

Besserwessi
26.11.2009, 18:44
Die Fototransistoren kommen normalerweise zwischen den +5 V und einen AD Eingang. Dazu kommt dann ein Widerstand von ca. 10-100 kOhm von dem Eingang nach GND. Wie groß der Widerstand werden muß hängt von der LED, dem LEDstrom und der Ausrichtung ab. Bei einem weissen Papier sollte hier ein Spannung von etwa 2 V erreicht werden. Dann kann man den AD Wandler gut mit 2,5 V als Ref. Arbeiten. Beim Mega88 sollte die Spannung entsprechend niedriger sein.

Den ADC ließt man aus mit Getadc(kanal).

Gento
27.11.2009, 00:12
Ganz schön heftige Fragen zu Null Ahnung.

MFG Gento

Zwerwelfliescher
28.11.2009, 12:14
Das Poti im Servo hat 3 Anschlüsse. Links Mitte Rechts.
Wie bauer ich die beiden Widerstände ein? Rechts mit Mitte und Link mit Mitte???

MFG Flexxx

Besserwessi
28.11.2009, 13:55
Wenn der mittlere Anschluß beim Poti der Schieber ist, dann ist es so richtig. Eher selten ist der Schieber aber auch nicht der Mittlere Pin, sondern irgendwo abseits.

Valentin
28.11.2009, 13:59
Mess es einfach durch, für soetwas wurden Multimeter erfunden!!!
Und guck dir mal den Rest der Beiträge im Forum an, da findet sich für fast jedes deiner Probleme eine Lösung.
Valentin

Zwerwelfliescher
28.11.2009, 19:21
Danke für die Antworten. Es wäre sehr nett ,wenn einer den Quellcode einer Servoansteuerung(gehacktes servo) reinstellen würde.
Das Servo an PB1 soll sich anders drehen als das an PB2.
ein einfacher Quellcode mit voller Umdrehung also 2 und 1ms.
So weit bin ich mit meinem Quellcode:

$regfile = "m8def.dat"
$crystal = 8000000

Config Portb.1 = Output
Config Portb.2 = Output


MFG Flexxx

Gento
29.11.2009, 00:47
Deine Code beläuft sich auf 1% an Text , im Vergleich zu Deinen Fragen.

Gento

Zwerwelfliescher
29.11.2009, 10:48
Es kann sein, dass ich mich mit meinen Fragen am Anfang etwas Falsch ausgedrückt habe.
Jetzt werde ich sie mal etwas umformuliert stellen. Den Roboter, den ich bauen möchte, soll einer Linie folgen mithilfe von 2 Fototransistoren. Außerdem soll er Hindernissen ausweichen können, die auf der Linie stehen. Dafür verwerwende ich einen Sharp Sensor(der Link ist oben).
Nun zu meinen Fragen:
1. Ich möchte, dass der Roboter einem Gegenstand auf der Linie ausweicht, bei ca. 5cm Entfernung. Bei 5cm Entfernung gibt der Sensor ca.3V ab. Gibt es einen Befehl in Basic, dass wenn an PC4 3V anliegen, dass z.B. eine LED angeht(in diesem Fall soll er dem Gegenstand ausweichen. Das gleiche gilt auch für die beiden Fototransistoren. Dot muss ich die Spannung noch messen.
2. In meinem Qellcode, habe ich PB1 und PB2 auf ausgang gestellt. Jetzt möchte ich nur noch wissen, wie ein Qellcode aussieht, dass Servo1 links und Servo2 rechts rum dreht. Mit voller Geschwindigkeit, also 1,0ms und 2,0ms.

MFG Flexxx

Gento
29.11.2009, 11:28
Du bist ein ausgesprochen fauler Sack.
Die Suche im Bascom Forum zu 'Servo ansteuern' ergab 53 Treffer incl. Deinem.

Gento

Bammel
29.11.2009, 11:48
endlich spricht jemand das aus was ich die ganze zeit dachte :-)

Zwerwelfliescher
29.11.2009, 13:05
Soweit war ich auch schon mit der SuFu. Dort habe ich aber nur Servo ansteuerungen für ein "nicht" gehacktes Servo gefunden. Ich versteh nicht, wie ich das schreiben soll mit dem 1ms und 20ms Pause oder 2ms und 20ms Pause. Stopp ist doch 1,5ms und 20ms Pause?
Und dei Frage, mit dem sharp sensor und dem Fototransistor ist auch noch offen. Kann mit bitte jemand den Befehl sagen, wenn z.B. an PC4 +3V anliegen, dass dan an PD6 eine LED angeht?

MFG Flexxx

Bammel
29.11.2009, 18:32
wie schon geschreiben getadc(kanal) daraus bekommst dnan den wert? wenn eine referenz von 3 volt am aref pin anliegen hast würdest du einen wert von 1023 erhalten!

die servosteuerungen funktionieren genauso wie bei nem gehackten servo. vollausschlag recht ist volle geschwindigkeit recht und voller ausschlag links ist volle geschwindigkeit links. sollte man aber mit viel lesen und nachdenken auch rausbekommen!

vllt stellst du deine fragen auch nur falsch. wnen du schon infos hast dnan schreibe diese einfach und stelle dazu eine frage oder sowas wie. "ich hba mir das so und so gedacht. funktioniert das?" so kommt das dann nicht so rüber als ob du alles fertig serviert haben möchtest.

ich persönlich habe mir auch alles durch selbsterarbeiten angeeignet. wenn es dann mal probleme gab bei denne ich keine antwort gefunden hatte habe ich eben im forum nachgefragt. wie du den sharp abfragt findest du bestimmt noch raus. ansonst nehm dir mein post zuherzen und versuche was rauszubekommen und stelle dnan ne frage wie ich hab mir das so un so gedach....

das hilft dir auch beim lernen viel mehr als alles fertig zu bekommen!

ich hatte vor ca. einem halben jahr auch das erste mal einen sharp in der hand. und habe es auch selbstständig hinbekommen dan ans laufen zu bekommen.

mfg,
Bammel

Zwerwelfliescher
30.11.2009, 17:52
Was ist der Getadc(Kanal)?
Wie stelle ich bein ansteuern eines Servos die Periode aus 20ms(Befehl)?

Bammel
30.11.2009, 18:28
drücke mal in bascom die "F1" taste das ist ne wunderschöne hilfe denn du da nach getadc suchst findest auch das was du suchst...! suchen hilft immer!

zu deinem servo gebe ich dir keine antwort. schau einfach mal im rn-wissen rein. da wirst du fündig!

nun ist mal hirn anstrengen angesagt sonst wird das nix!!!

Zwerwelfliescher
30.11.2009, 18:40
Kann das sein, dass getadc ein A/D Wandler ist?
Wenn ja, habe ich schon etwas gefunden.
Zum servo. Ich habe Stundenlang das RN-Wissen durchgesucht, habe aber nicht gefunden, was ich suche!
Ich suche nur ein Beispiel(Code), bei dem sich ein Servo dreht(mit 1ms und 20ms Pause.)
Das was ich nicht verstehen ist, wie ich in dem Code die 20ms Pause mache, und wie ich den 1ms Impuls erzeuge.
Ist die Periode die 20ms Pause?
Bei diesem Beispiel:
Config Timer1 = Timer , Prescale = 8
Wird doch der Timer1 aktiviert. Was bedeutet dann Prescale?

MFG Flexxx

PS: Falls getadc ein A/D Wandler ist, muss ich dann die Blau makierten Pins anschließen?
http://www.info-rlp.de/lernteams/eli05/abschnitt_3_mikrocontroller/temperaturmessung/AD_Wandlung.pdf
GND an GND
AVCC an VCC(+5V)
AREF an ???

Gento
30.11.2009, 19:09
AREF am linken Bein vom Troll. *lol*

Gento

Sauerbruch
30.11.2009, 19:42
Hey Flexx,

falls Du uns hier nicht alle verscheißern willst (was mir aber langsam immer wahrscheinlicher vorkommt), gibt´s hier ´ne Super-Erklärung zu PWM:

http://www.rn-wissen.de/index.php/Bascom_und_PWM

Musste allerdings selber lesen :-)

Bammel
30.11.2009, 19:44
wenn man im rn-wissen in dem suchformular "servoansteuerung" eintipst kommt sofort folgender eintrag zum hervorscheinen:
http://www.rn-wissen.de/index.php/Servoansteuerung
damit sollten deine probleme gelöst sein.

das kann doch alles nicht so schwer sein!?
ich verstehe beim besten willen nicht was man da nicht finden kann?

ansonsten leg dir mal das buch von roland walter zu! da findest du auch was um rn-wissen zu!

Zwerwelfliescher
30.11.2009, 19:50
Das Buch von Roland Walter bekomme ich in den nächsten Tagen.
Ich versteh ja, wie man die Timer aktiviert und wie man die Ports auf Output schaltet. Nur eins versteh ich nicht. Ich seh in keinem der Codes die 1 oder 2ms Impulszeit sowie die 20ms Pause.

MFG Flexxx

PS: Keine Angst, ich will keinen verscheißern ;-)

Bammel
30.11.2009, 20:03
BITTE! BITTE! BITTE! Lese doch mal das durch was du von uns an futter bekommst! nicht nur überfliegen sondern lesen!

in dem link den ich dir gepostte habe steht alles super drinne sogar wo die pause ist! (sind zwar 12ms aber das kommt davon das es 4 servos sind 20ms minus 4 mal 2ms) so hundertprozentig muss man bei servos nicht auf die timings achten.

Zwerwelfliescher
30.11.2009, 20:20
OK OK das hab ich wohl übersehen.
Bei einer Pause von 12ms wird hier geschrieben Timer1 = 40000
Wie kommt man auf 40000?
Wenn ich zwei Servos verwende muss ich also wie viel ms Pause machen?

Bammel
30.11.2009, 20:57
och mensch.. nun les den code und den text dazu... an der pause änderst du GARNICHTS!!!
das mit dem timer findest du auch im rn-wissen. einfach mal anch timer schauen...

man denk doch mal von A nach B... wenn du nichts selber ararbeitest wird das nichts mit dem roboterbau!
langsam hab ich keine lust mehr!

Zwerwelfliescher
02.12.2009, 19:11
Ich habe jetzt versucht, mit einem ATtiny13 ein Servo an den Linken und Rechten Ausschlag zu Fahren.
Servo hängt an PB0(Timer0).
Leider funktioniert es nicht.
Ich habe alles versucht, kann den Fehler aber nicht finden.


$regfile "ATtiny13.dat"



Config Timer0 = Pwm , Pwn = 8 , Compare A Pwm = Clear Up , Timer0 = Portb.0 , Reload = 10


Config Portb = Output

Enable Interrupts

Do

Timer0 = 100 'Zum Mittelpunkt Fahren
Waitms 100
Timer0 = 150 'Nach Aussen fahren
Waitms 100
Timer0 = 50 'Nach Aussen fahren
Waitms 100

Loop

End


MFG Flexxx

Bammel
02.12.2009, 19:53
um es ganz einfach zu machen kannst du auch den befehl "servo" nutzen ;) einfach mal in der hilfe suchen. ansonsten könnte der befehl "pulseout" interesant sein.

aber so wie du das da vor hast geht es nicht. wenn du den timer schon als pwm laufen lassen willst musst du meineswissen bei einem ATmega8 den timer1 verwenden. aber dazu findest du auch was in der bascom hilfe. stichwort "CONFIG TIMER1"

du hast auch garkein quarz mit angegeben. du solltest dir wirklich mal das buch von roland walter zulegen um überhaupt erstmla grundwissen zu bekommen.

Zwerwelfliescher
07.12.2009, 13:13
Es hat sich erledigt. Endlich habe ich durch Stundnlanges ausprobieren es geschafft, die Servos anzusteuen.


$regfile = "m8def.dat"
$crystal = 8000000
Config Servos = 2 , Servo1 = Portb.1 , Servo2 = Portb.2 , Reload = 10
Config Portb = Output

Do

Servo(1) = 50
Servo(2) = 50
Waitms 100

Loop
End


Es tut mir leid, falls ich einige genervt habe :roll:
Trotzdem Danke für eure Hilfe.

MFG Flexxx