Bevor ein Produkt produziert wird, ist es naheliegend zu überprüfen, ob das Konzept überhaupt durchführbar ist. Dementsprechend wurde hierzu losgelöst vom BalenaOS auf einer Raspberry Pi OS Lite Distribution die Erfassung der Sensordaten getestet. Zum Test wurde diese abgespeckte Variante vom Raspberry Pi OS gewählt, um aktiv auf dem Betriebssystem arbeiten zu können, gleichzeitig aber auch dem abgespeckten Charakter von BalenaOS möglichst nah zu kommen.

Zur Auswertung des Fahrverhaltens müssen Beschleunigung und Rotation während des Fahrens gemessen werden. Hierzu verwenden wir einen MPU6050 Sensor. Die Anbindung des Sensors wird nach dieser Anleitung durchgeführt. Das nachfolgende Bild zeigt den Aufbau der Hardware. Der Raspberry Pi wird hierbei über ein Bread Board mit dem Sensor verbunden. Eine direkte Verbindung ohne das Bread Board wäre auch möglich, allerdings müsste der Sensor dann zusätzlich fixiert werden. Durch das Gewicht des Bread Boards kann die Statik des Sensors für Testzwecke und Kalibrierung gewährleistet werden.

Auf dem Raspberry Pi OS Lite werden anschließend die Abhängigkeiten I2C und Python-smbus installiert, wodurch der Sensor adressiert werden kann. Mit Hilfe eines Python Skripts werden die Daten anschließend ausgelesen und in der Konsole dargestellt. Damit wird bestätigt, dass die Hardwarekomponenten funktionieren und die Datenerhebung möglich ist. Weiterhin kann die Hardware als Fehlerquelle für künftige Probleme (foreshadowing?) ausgeschlossen werden.

Hier der Code zum Auslesen der Sensordaten:

#!/usr/bin/python
import smbus
import math
 
# Register
power_mgmt_1 = 0x6b
power_mgmt_2 = 0x6c
 
def read_byte(reg):
    return bus.read_byte_data(address, reg)
 
def read_word(reg):
    h = bus.read_byte_data(address, reg)
    l = bus.read_byte_data(address, reg+1)
    value = (h << 8) + l
    return value
 
def read_word_2c(reg):
    val = read_word(reg)
    if (val >= 0x8000):
        return -((65535 - val) + 1)
    else:
        return val
 
def dist(a,b):
    return math.sqrt((a*a)+(b*b))
 
def get_y_rotation(x,y,z):
    radians = math.atan2(x, dist(y,z))
    return -math.degrees(radians)
 
def get_x_rotation(x,y,z):
    radians = math.atan2(y, dist(x,z))
    return math.degrees(radians)
 
bus = smbus.SMBus(1) # bus = smbus.SMBus(0) fuer Revision 1
address = 0x68       # via i2cdetect
 
# Aktivieren, um das Modul ansprechen zu koennen
bus.write_byte_data(address, power_mgmt_1, 0)
 
print "Gyroskop"
print "--------"
 
gyroskop_xout = read_word_2c(0x43)
gyroskop_yout = read_word_2c(0x45)
gyroskop_zout = read_word_2c(0x47)
 
print "gyroskop_xout: ", ("%5d" % gyroskop_xout), " skaliert: ", (gyroskop_xout / 131)
print "gyroskop_yout: ", ("%5d" % gyroskop_yout), " skaliert: ", (gyroskop_yout / 131)
print "gyroskop_zout: ", ("%5d" % gyroskop_zout), " skaliert: ", (gyroskop_zout / 131)
 
print
print "Beschleunigungssensor"
print "---------------------"
 
beschleunigung_xout = read_word_2c(0x3b)
beschleunigung_yout = read_word_2c(0x3d)
beschleunigung_zout = read_word_2c(0x3f)
 
beschleunigung_xout_skaliert = beschleunigung_xout / 16384.0
beschleunigung_yout_skaliert = beschleunigung_yout / 16384.0
beschleunigung_zout_skaliert = beschleunigung_zout / 16384.0
 
print "beschleunigung_xout: ", ("%6d" % beschleunigung_xout), " skaliert: ", beschleunigung_xout_skaliert
print "beschleunigung_yout: ", ("%6d" % beschleunigung_yout), " skaliert: ", beschleunigung_yout_skaliert
print "beschleunigung_zout: ", ("%6d" % beschleunigung_zout), " skaliert: ", beschleunigung_zout_skaliert
 
print "X Rotation: " , get_x_rotation(beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, beschleunigung_zout_skaliert)
print "Y Rotation: " , get_y_rotation(beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, beschleunigung_zout_skaliert)

SmartDrive Proof of Concept der Datenerfassung
Markiert in:     

Ein Kommentar zu „SmartDrive Proof of Concept der Datenerfassung

Schreibe einen Kommentar