Wenn dass nicht immer ein und dieselbe Himmelrichtung ist, scheinen Abschirmung und Kompassmodul ja zu funktionerenIch habe einen Kleinen Nadelkompass verwendet, der jetzt das selbe wie der CMPS03 anzeigt.![]()
Ich habe einen Kleinen Nadelkompass verwendet, der jetzt das selbe wie der CMPS03 anzeigt.Zitat von recycle
Das kann ich aber nicht machen, da noch Aufsätze drauf sollen. Da kann ich keinen langen Mast daranbauen.Zitat von recycle
jon
Wenn dass nicht immer ein und dieselbe Himmelrichtung ist, scheinen Abschirmung und Kompassmodul ja zu funktionerenIch habe einen Kleinen Nadelkompass verwendet, der jetzt das selbe wie der CMPS03 anzeigt.![]()
Ich habe jetzt nochmal experimentiert, und kam zum Ergebnis, dass der Kompass 2,5cm höher montiert sein muss. Also habe ich nochmal eine Etage von diesen Abstandshaltern montiert, und jetzt stimmen die Messergebnisse.
Nun hoffe ich nur noch, dass der Kompass morgen noch so funktioniert, wie er jetzt funktiniert.
An den Algo zum Geradeausfahren habe ich mich jetzt noch nicht gemacht. Dafür müsste ich raus gehen, und das ist es mir zu dunkel. Wenn ich die Beleuchtung habe, dann kann ich auch mit dem Bot nach draußen gehen.
Viele Grüße,
jon
Hab mich mal an den Algo gesetzt, habe aber im Moment das Problem, dass die rechte Seite immer langsamer wird. Sollte doch nach dem Programm nicht so sein, oder?
Kann sich jemand das mal bitte anschauen?
jonCode:'############################################################################### 'Programm zum Geradeausfahren mit Hilfe des Kompass CMPS03 ' 'Geht nicht! Warum?? 'Wert für Servo_1 wird die ganze Zeit nur erhöht, nicht erniedrigt. ' 'Autor: RN_jon 'Datum: 16.08.2007 '############################################################################### Declare Function Cmps_himmelsrichtung() As Word $regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 $framesize = 42 $swstack = 32 $hwstack = 32 'I2C Config Scl = Portc.0 Config Sda = Portc.1 'Variablen für Kompass Dim Himmelsrichtung As Word Dim Grad As Single 'LEDs Config Portd.4 = Output 'rot Config Portd.5 = Output 'gelb Config Portd.6 = Output 'grün 'Motoren: Config Servos = 2 , Servo1 = Portc.2 , Servo2 = Portc.3 , Reload = 5 Config Portc.2 = Output 'rechts Config Portc.3 = Output 'links Enable Interrupts Dim Servo_1 As Byte Dim Servo_2 As Byte '192 = Stopp '128 = Vollgas vor '255 = Vollgas rück 'Variablen für Geradeausfahrt Dim Start_cmps As Single '+++++++++++++++++++++++++ Portd.4 = 1 Portd.5 = 1 Portd.6 = 1 Portd.4 = 0 Waitms 500 Portd.4 = 1 Portd.5 = 0 Waitms 500 Portd.5 = 1 Portd.6 = 0 Waitms 500 Portd.6 = 1 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Wait 1 Servo_1 = 140 Servo_2 = 140 Himmelsrichtung = Cmps_himmelsrichtung() Start_cmps = Himmelsrichtung / 10 Print "Startausrichtung: " ; Start_cmps Do Servo(1) = Servo_1 Servo(2) = Servo_2 Himmelsrichtung = Cmps_himmelsrichtung() Grad = Himmelsrichtung / 10 Print "Fahrtausrichtung: " ; Grad If Grad < Start_cmps Then 'nach rechts drehen Servo_1 = Servo_1 + 2 End If If Grad > Start_cmps Then 'nach links drehen Servo_1 = Servo_1 - 2 End If Waitms 200 Print "Servo_1: " ; Servo_1 Print "Servo_2: " ; Servo_2 Loop End '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Function Cmps_himmelsrichtung() As Word Local Lob As Byte Local Hib As Byte I2cstart I2cwbyte &HC0 I2cwbyte 2 I2cstop I2cstart I2cwbyte &HC1 I2crbyte Hib , Ack I2crbyte Lob , Nack I2cstop Cmps_himmelsrichtung = Makeint(lob , Hib) End Function
P.S.: Es ist im Moment so, dass es nicht funktionieren würde, wenn der Bot über die 360° fährt. Wenn er also meinetwegen bei 359° startet und dann nach 1° abdriftet. Dass habe ich im Moment noch nicht in ein Programm umgesetzt.
Ich habe es nur so getestet, dass ich den Bot vor dem Programmstart nach Süden ausgerichtet habe.
Hallo,
kleiner Tip: Declariere alle Kurse als byte und frage auch den Kompass entsprechend ab. Höhere Genauigkeit bringt eh nichts.
Also z.B.
Dim Kurs As Byte , Kursdif As Byte , Kurssoll As Byte
Declare Function Kompass() As Byte
Function Kompass() As Byte
I2cstart
I2cwbyte &HC0
I2cwbyte 1
I2cstop
I2cstart
I2cwbyte &HC1
I2crbyte Kompass , Nack
I2cstop
End Function
Alle Operationen wie z.B.
Kursdif=Kurs-Kurssoll
sind dann immer richtig, auch wenn der Robo durch N dreht, da alle Operationen modulo 256 sind.
Gruß
Christian H
Ich habe das Programm jetzt ein klein wenig geändert, und jetzt fährt er schon mal etwas gerader. Ein Video hier.
@Christian H,
ich werde mal versuchen, deinen Vorschlag in ein vollständiges Programm um zu setzen.
jon
Gegenüber dem Bogen, den den der Robby auf den vorherigen Videos gefahren ist, ist das ja schon ein enormer Fortschritt.Ich habe das Programm jetzt ein klein wenig geändert, und jetzt fährt er schon mal etwas gerader. Ein Video hier.
Auf dem Video kann man das schlecht abschätzen, kann es sein, dass du hier schon langsam an die Grenzen des Kompassmoduls kommst?
Ich habe gestern mal in das Datenblatt von irgendeinem Kompassmodul geguckt und da lag die Genauigkeit bei ca. 4Grad.
Das ist wirklich schon wesentlich besser, wie sieht es mit der Kraft der Motoren beim Ausgleich aus?Zitat von Jon
Wie meinst du das? Was verstehst du unter Grenzen des Kompass?Zitat von recycle
Das stimmt. Deswegen mache ich im Moment drei Messungen, und rechne dann den Durchschnitt aus. So ist das Ergebnis um einiges genauer.Zitat von recycle
I don't know. Wie könnte ich das Testen, oder ausrechnen? Der Motor, der langsamer läuft wird auf jeden Fall etwas weniger Kraft haben.Zitat von Reeper
jon
Mal einfach auf unebeneren Gelände probieren.
Geht aber wirklich schon jetzt ordentlich!
Lesezeichen