Buchempfehlung:
Roboter-Autos mit dem Raspberry Pi

Roboter Autos mit dem Raspberry Pi

Bei einen meiner Roboter genauer gesagt bei dem GoPiGo Modell von Exter Industries hatte ich mir einen 9-DOF IMU Sensor den BNO055 von Bosch dazu gekauft. Das tolle an diesem Sensor ist das er die Orientierung als XYZ als absolute Werte ausgibt. Das vereinfacht doch einiges bei der Entwicklung der eigenen Software im Roboter. Der von mir verwendete Sensor ist unter dem folgenden Link (IMU Sensor) bei Dexter Industries zu finden.

Dexter Industries BNO055 Sensor

Dexter Industries BNO055 Sensor

Hinweis Software: Ich hatte so meine Probleme die Dexter Industries Software zum Laufen zu bekommen wenn ich eigentlich nur den Sensor verwenden wollte ohne den Roboter. So habe ich dann die Software von Adafruit zu Ihrem BNO055 Sensor installiert.

Hinweis I2C Bus: Auch erwartet der BNO055 Sensor eine spezielle I2C Konfiguration. So muss die Baudrate des I2C Bus gedrosselt werden. Das kann wiederum zu Problemen mit weiteren I2C Geräten führen. Eine Lösung wäre den BNO055 Sensor über die serielle Schnittstelle anzuschließen.

BNO055 über die I2C Schnittstelle

Im ersten Abschnitt wird die I2C Schnittstelle verwendet um mit dem BNO055 Sensor zu kommunizieren. Dazu wird die Software von Adafruit installiert und die Testprogramme ausgeführt.

Software Installation circuitpython

Wie im ersten Hinweis geschrieben habe ich die Software von Adafruit installiert. Hier bin ich auch der Anleitung Schritt für Schritt gefolgt und konnte so nach dem ich die I2C Bus Geschwindigkeit gedrosselt hatte den Sensor in Betrieb nehmen.

Befehl: sudo apt-get update

Befehl: sudo apt-get install i2c-tools

Befehl: sudo apt-get install python-smbus

Nach dem auch der I2C Bus aktiviert wurde sollte der Sensor mit dem folgenden Befehl am I2C Bus gefunden und angezeigt werden.

Befehl: i2cdetect -y 1

Die Anleitung für die Software Installation findet sich hier: Python Installation of BNO055 Library

Der Befehl um die notwendigen Pakete zu installieren lautet wie folgt.

Befehl: sudo pip3 install adafruit-circuitpython-bno055

Adafruit circuitpython bno055 installation

Adafruit circuitpython bno055 installation

Nach der Installation muss noch die Geschwindigkeit am Bus angepasst werden. Die Anleitung hat Adafruit dazu hier veröffentlicht: I2C Clock Stretching

Wichtig ist, das der I2C Bus am Raspberry Pi aktiviert ist über das Konfigurationsmenü. Dann muss in der /boot/config.txt eine kleine Änderung vorgenommen werden. Dazu die /boot/config.txt Datei mit dem folgenden Befehl öffnen und anpassen.

Befehl: sudo nano /boot/config.txt

In der config.txt Datei dann bitte nach den drei Einträgen suchen die abhängig von der eigenen Bus-Konfiguration leicht abweichend aussehen können.

  • dtparam=i2c_arm=on
  • dtparam=i2s=off
  • dtparam=spi=off

Anschließend nach diesen drei Zeilen die folgende Zeile einfügen um die Bus-Geschwindigkeit zu drosseln.

# Clock stretching by slowing down to 10KHz
dtparam=i2c_arm_baudrate=10000

I2C clock stretching

I2C clock stretching

Sehr zufrieden bin ich mit dieser Lösung nicht und werde in einem nächsten Schritt wohl die serielle Schnittstelle des BNO055 Sensors aktivieren. Dazu muss soweit ich das verstanden habe der Pin1 auf HIGH gezogen werden.

Testprogramm ausführen

Jetzt sollte die Software Installation und die Konfiguration soweit abgeschlossen sein, dass das Testprogramm laufen sollte. Dazu bitte den Programmcode von der Adafruit Webseite kopieren und als Python Programm mit dem Namen “bno055.py” speichern und mit dem folgenden Befehl ausführen.

Befehl: python3 bno055.py

BNO055 Sensor

BNO055 Sensor

Das Programm zeigt die aktuellen Werte an und der Sensor funktioniert somit am I2C Bus. Die Einstellung an der Bus-Geschwindigkeit wurden auch übernommen. Denn ohne dieser Konfiguration wird der Sensor nicht gefunden.

 

Alternative BNO055 Sensor Boards

 

BNO055 über UART serielle Schnittstelle

Im nun folgenden Abschnitt wird die serielle Schnittstelle statt des I2C Bus verwendet. Dazu muss eine andere Bibliothek von Adafruit installiert werden die nicht circuitpython verwendet sondern nativ Python.

Hinweis: Zum Zeitpunkt als ich diesen Bericht geschrieben habe deutete sich schon an, dass die Kommunikation über die serielle Schnittstelle die von mir bevorzugte Art der Kommunikation wird.

Software Installation Python Bibliotheken

Damit die UART Schnittstelle des Chips auch unter Python verwendet werden kann muss die Adafruit Software wie folgt installiert werden. Dazu erst einmal vom GitHub das Repository wie folgt herunter laden.

Befehl: git clone https://github.com/adafruit/Adafruit_Python_BNO055

Nach dem das Git Repository herunter geladen ist kann es wie folgt unter Raspbian installiert werden.

Befehl: sudo python setup.py install

Aktivieren der UART Schnittstelle

Damit die UART Schnittstelle statt der I2C Schnittstelle aktiv ist muss der PS1 Pin bzw. Pad auf HIGH gezogen werden. Dazu muss der PS1 Kontakt auf 3,3V gezogen werden. Anschließend ist die I2C Schnittstelle deaktiviert und die ehemals SDA / SCL Anschlusse fungieren jetzt als TX/RX.

Hier die Beschreibung des Chips: BNO055

Hinweis: Leider wird der Chip extrem heiß nach dem ich das Kabel angebracht habe. Zum testen ob die UART Schnittstelle geht bin ich nicht gekommen, da ich erst noch den Fehler suchen muss warum der Chip so heiß wird.

Dexter Industries IMU BNO055 UART

Dexter Industries IMU BNO055 UART

BNO055 Sensor kalibrieren

(Visited 22 times, 1 visits today)