Damit sich ein Roboter orientieren kann gibt es die unterschiedlichsten Verfahren. Bei den meisten Verfahren wäre es hilfreich wenn man wüste in welche Himmelrichtung sich der Bot gerade bewegt. Wo ist Norden oder Süden? Genau für diesen Zweck wurde das Modul CMPS03 von Devantech entwickelt. Dieses Modul ist in der Handhabung äußerst einfach, es ggibt über den I2C-Bus den genauen Winkel in Abstufungen von 0,1 Grad zum Nordpol aus, also 0 bis 360 Grad. Obwohl die ANwendung äußerst einfach ist, gibt es kaum Bascom Beispiele. Dem soll hier abgeholfen werden. Das nachfolgende Programm demonstriert die Anwendung mit dem bekannten Board RN-Control. Natürlich lassen sich die Funktionen auch einfach auf andere RN- oder AVR-Boards übertragen.
Inhaltsverzeichnis
Einfacher Anschluss an den I2C-Bus
Da RN-Control den Standard I2C-Stecker (nach RN-Definitionen) benutzt, reicht ein Kabel für das Modul aus, die notwendige Betriebsspannung kann nämlich auch gleich über das I2C-kabel erfolgen. Das ganze sieht dann angeschlossen so aus:
Man benötigt nicht alle 10 Drähte des 10 pol Kabels. Daher bastelt manb sich einfach einen entsprechenden Stecker an das Kabel und schneidet die nicht benötigte Drähte ab. Da CMPS03 bereits über eine Stiftleiste verfügt, kann der Stecker denn bequem aufgesteckt werden. Das sieht dann beispielsweise so aus:
Das Beispielprogramm in Bascom Basic
Hier das vollständig dokumentierte Beispielprogramm für RN-Control. Das Programm konn unverändert übernommen und kompiliert werden. Es gibt über die RS232 Schnittstelle, also ein Terminalprogramm, die Firmwareversion und den Winkel zum Nordpol aus.
'################################################### 'cmps03_an_rncontrol.bas.bas 'für 'RoboterNetz Board RN-CONTROL (ab Version 1.1) 'und das Kompassmodul CMPS03 für Erkennung der Himmelsrichtung 'Datenblatt zu CMPS03 siehe Downloadbereich: 'http://www.roboternetz.de 'Aufgabe: ' Gibt die Himmelsrichtung in Bezug auf Norden aus ' Die Unterfunktionen können gerne in eigenen Programmen ' genutzt werden. ' Autor: Frank (Roboternetz) ' Modul: CMPS03 Devantech/robotikhardware.de neuste Firmware ' Getestet mit CMPS Firmware 11 '####################################################### Declare Function Rn_cmps_himmelsrichtung() As Word Declare Function Rn_cmps_firmware() As Byte ' ---------- Das RN-Control übliche -------------- $regfile = "m32def.dat" $framesize = 42 $swstack = 32 $hwstack = 32 $crystal = 16000000 'Quarzfrequenz $baud = 9600 Config Scl = Portc.0 'Ports fuer IIC-Bus Config Sda = Portc.1 ' ------------------------------------------------ Dim Himmelsrichtung As Word Dim Grad As Single Dim V As Byte Wait 3 'Warte 3 Sekunde I2cinit Print "RN-Control CMPS03 Kompass Testprogramm " Print "CMPS03 Kompass Firmware Version:" ; Rn_cmps_firmware() V = 1 Do Himmelsrichtung = Rn_cmps_himmelsrichtung() Print "Himmelsrichtung in 0,1 Grad Schritten: " ; Himmelsrichtung Grad = Himmelsrichtung / 10 Print "Himmelsrichtung genau in Grad: " ; Grad V = V + 3 Wait 1 Loop End Function Rn_cmps_himmelsrichtung() As Word Local Lob As Byte Local Hib As Byte Local Cmps_slaveid As Byte Local Cmps_slaveid_read As Byte Cmps_slaveid = &HC0 Cmps_slaveid_read = Cmps_slaveid + 1 'Register auswählen I2cstart I2cwbyte Cmps_slaveid I2cwbyte 2 I2cstop I2cstart I2cwbyte Cmps_slaveid_read I2crbyte Hib , Ack I2crbyte Lob , Nack I2cstop Rn_cmps_himmelsrichtung = Makeint(lob , Hib) End Function Function Rn_cmps_firmware() As Byte Local Firmware As Byte Local Cmps_slaveid As Byte Local Cmps_slaveid_read As Byte Cmps_slaveid = &HC0 Cmps_slaveid_read = Cmps_slaveid + 1 I2cstart I2cwbyte Cmps_slaveid I2cwbyte 0 'Leseregister festlegen I2cstop I2cstart I2cwbyte Cmps_slaveid_read I2crbyte Firmware , Nack I2cstop Rn_cmps_firmware = Firmware End Function