Innerhalb eines Gebäudes gibt es viele Sachen, die den Sensor stören (z.B. Stromleitungen, usw...)
Es gibt zumindest keine speziellen Probleme, wenn man mal einem Heizkörper vorbeifährt.
Weitere Fehlerquelle: Wir haben die Erfahrung gemacht, dass die gemessene Orientierung des Roboters nicht ganz linear von der tatsächlichen Orientierung abhängt (siehe Attachment).
Holger
zum kompassmodul cmps03.
wie kalibriert man den über i2c? ich habe zwar das datenblatt von roboter-teile.de jedoch weiß ich nicht, wie man zum beispiel "255 in Reg15" schreibt.
gibt es da ein beispielprogramm? genial wäre es wenn es in Interactive C wäre.
Hallo cauboy!Zitat von cauboy
Ich habe den schon kalibriert über I2C, habs nacher bereut, irgend etwas klappt nicht so ganz wie es soll und mein Istwert liegt jetzt bei ca. 1700-2300 aber nicht mehr bei 0 bis 3599 wie es sein sollte und davor war. Ich habe die Register aber mit einer CC2.0 geschreiben. In anderen Sprechen ist das ähnlich zu schreiben nur andere Syntax. Das Protokoll ist wie folgt:
Ich schreibe folgende Sequenz:Code:Const DevWR_CMPS03 = C0h ' Kompassmodul CMPS03 Const DevRD_CMPS03 = C1h Function KalibKompass() ' Kompass kalibrieren Define Antwort As Byte Print "Kompass kalibrieren" #DoN Print "Auf N drehen" Input Antwort IIC.Init IIC.Start IIC.Send DevWR_CMPS03 IIC.Send 15 IIC.Send 255 IIC.Stop IIC.Off #DoO Print "Auf O drehen" Input Antwort IIC.Init IIC.Start IIC.Send DevWR_CMPS03 IIC.Send 15 IIC.Send 255 IIC.Stop IIC.Off #DoS Print "Auf S drehen" Input Antwort IIC.Init IIC.Start IIC.Send DevWR_CMPS03 IIC.Send 15 IIC.Send 255 IIC.Stop IIC.Off #DoW Print "Auf W drehen" Input Antwort IIC.Init IIC.Start IIC.Send DevWR_CMPS03 IIC.Send 15 IIC.Send 255 IIC.Stop IIC.Off #DoW ' Kalibrierung flashen IIC.Init IIC.Start IIC.Send DevWR_CMPS03 IIC.Send 15 IIC.Send 0 IIC.Stop IIC.Off Print "Kalibrierung beendet" End Function Function StartSonarMeasure() ' Entfernungsmessung am Sonar starten With IIC .Init .Start ' Starten der Messung in cm .Send DevWR_SRF08 .Send 81 .Stop Pause 4 ' 65ms warten auf Messergebnis .Off End With End Function Function GetSonarDistance() ' Den Ultraschall-Sonar lesen With IIC .Init .Start ' Lesevorgang anstossen .Send DevWR_SRF08 .Send 2 .Stop .Start ' 1. Echo lesen .Send DevRD_SRF08 .Get SonarDistanzH .Get SonarDistanzL .Stop .Off End With Return SonarDistanz End Function
- Startbit
- C0 Hex (Schreiben)
- 15 Dez (Register)
- 255 Dez (Wert zum Kalibrieren)
- Stopbit
Das in jeder Richtung (N/S/O/W in unbestimmter Reihenfolge) und dann das Sichern der Kalibrierungsdaten mit:
- Startbit
- C0 Hex (Schreiben)
- 15 Dez (Register)
- 0 Dez (Wert zum Sichern der Kalibrierungsdaten)
- Stopbit
Aber aufpassen, ich hab mir meinen damit ver-kalibriert! Falls jemand den Haken sieht bitte melden, ich wäre auch dankbar für jeden Hinweis.
Grüsse Wolfgang
wenn du den neu kalibrierst über den mechanischen weg (schalter und masse) geht er wieder.
mfg pebisoft
Hallo pebisoft!
Das habe ich jetzt inzwischen sowiso gemacht. Hab auf meinem Board ja zwei Jumper vorgesehen gehabt mit der Frequenz 50/60Hz und dem Calib. Hab da einfach einen Stecker genommen und einen Taster für den Vorgang angeschlossen. Ich wollte das nur der Vollständigkeit halber auch noch über Funk anstossen können und per I2C kalibrieren. Wäre eben ein nettes Feature gewesen. Werde ich aber bei Gelegenheit noch tun. Heute muss erst noch der neue Stapellauf meines Roboters funktionieren dann ist der Start in 2006 perfeckt, dann wieder Experimente mit dem Kalibrieren.
Grüsse Wolfgang
Hallo Wolfgang,Zitat von BlueNature
Hehe, Du bist mit 2006 Deiner Zeit aber weit voraus
Na dann viel Erfolg mit deinem Roboter.
Gruß
m.artmann
hallo, das kompassmodul läuft jetzt zu 99% genauigkeit.
am besten ist wenn man den vorgeschlagenen druckschalter zwischen anschluss 6 und masse 9
legt. ich habe den druckschalter zwischen gelassen, wenn mal wieder kalibriert werden
muss. diese kalibrierung ist einfacher als über i2c, kann während der laufenden abfrage
des moduls gemacht werden. ich gebe jetzt über das easy-radiomodul vom arbeitsplatz
eine gradzahl vor und der robby hält gemäss programm die richtung innerhalb der vorgabe
(+-5, ist ca +- 0.5 grad). macht richtig spass. unter "album" roboterbilder" ist ein bild
vom küchenbrettroboter. wer fragen hat, soll fragen.
Declare Sub K_werte(byval Ee_adresse As Byte)
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 19200
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , Rs = Portc.5 , E = Portc.4
Config Lcd = 16 * 2
Config Scl = Portb.3
Config Sda = Portb.4
Dim Daten As Byte , Temp As Byte
Dim Ausgabe As Word
Dim Adresse As Byte
Adresse = 2
Do
Call K_werte(adresse)
Print Ausgabe
Waitms 500
Loop
End
Function K_werte(byval Ee_adresse As Byte)
Disable Interrupts
I2cstart
I2cwbyte &B11000000 , Ack
I2cwbyte Ee_adresse
Waitms 10
I2cstart
I2cwbyte &B11000001 , Ack
I2crbyte Daten , Ack
I2crbyte Temp , Nack
Ausgabe = Daten * 256
Ausgabe = Ausgabe + Temp
I2cstop
Waitms 10
Enable Interrupts
End Function
mfg pebisoft
hi
also wir haben derbe probleme, was der ausgeibt nachdem wir ihn über den druckschalter kalibriert ahaben ist reinster scheiß.
ich denke dass es daran leigt das man nicht sieht wie weit er bei der kalibrierung ist und das man beim drücken dann den kontakt zu lange drückt und daher dann direkt N und ost den fast gleichen wert erhält.....
was sagt ihr dazu?
gruss veloxid
Hi
wir haben ein Problem!!!!
unser kompassmodul CMPS 03 zeigt scheiße an.....
nach der kalibrierung startet er bei 170 geht auf 0 runter geht wieder hoch bis 170 geht wieder auf 0 runter und springt dann auf 3600 geht bis ca 3500 runter und srpingt dann auf 170....
Kann mri jemand helfen?
Lesezeichen