Der Beschleunigungssensor

Vielleicht können sich einige Leser ja noch an den Beschleunigungssensor, den wir letztes Jahr mit dem NXT nicht zum Laufen gekriegt haben, erinnern. Wir haben ihn wieder gefunden und da momentan alles ganz gut klappt, haben wir uns dazu entschlossen, ihn an den RP6 zu bauen. Gesagt, getan. Das Datenblatt angeguckt, die I²C Register und Adressen ins Programm eingetragen… Fertig! Nach dem ersten Programmupload kam im Terminal ständig die Meldung ,,I2C Error“, nach einem kurzen, genaueren Lesen des Datenblattes war der Fehler dann schnell gefunden. Programm geändert, geuploadet und es funktioniert! Unglaublich! Jetzt haben wir innerhalb von 30min einen super genauen, digitalen Beschleunigungssensor für nur 6€ (als wir ihn gekauft haben, hat er noch 5,95€ gekostet) an den RP6 gebaut und programmiert. Hier ein Bild:

und ein kurzer Programmausschnitt:

void get3DBS(void)
{
I2CTWI_transmitByte(I2C_3DBS_ADR,I2C_REG_3DBS); //Senden 0x02 (define; I2C_REG_3DBS) an die Schreibeadresse 0x70 (define; I2C_3DBS_ADR)
   I2CTWI_readRegisters((I2C_3DBS_ADR+1),I2C_REG_3DBS, sensorBuf, 6); //Lese 6 Bytes von der Leseadresse (71; (I2C_3DBS_ADR+1)) vom Register 2 (define; I2C_REG_3DBS) und schreibe diese in das I²C Empfangsarray sensorBuf
threedbs_x = sensorBuf[0]; //übertragen der empfangenen Daten aus sensorBuf in Variablen
threedbs_y = sensorBuf[2];
threedbs_z = sensorBuf[4];
}

Eigentlich ganz einfach nachzuvollziehen, oder? Man kann jetzt Neigungen in die X-Achse und Neigungen in die Y-Achse erkennen. Außerdem kann man erkennen, ob und wie schnell sich der Roboter nach oben oder nach unten bewegt. Für unseren Roboter ist das aber überflüssig. 😀
Nützlich kann so ein Beschleunigungssensor in unserem Einsatzfall zum Erkennen der Rampe sein. Dazu aber noch mehr, wenn es so weit ist. Der Wallfollower funktioniert jetzt übrigens nahezu perfekt, die Lichtsensoren am Boden des Roboters können auch schon ausgelesen werden.