{"id":256,"date":"2021-05-26T20:44:09","date_gmt":"2021-05-26T18:44:09","guid":{"rendered":"https:\/\/www.iot-embedded.de\/iot-2021\/?p=256"},"modified":"2021-06-09T14:31:06","modified_gmt":"2021-06-09T12:31:06","slug":"smartdrive-proof-of-concept-der-datenerfassung","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2021\/smart-drive\/smartdrive-proof-of-concept-der-datenerfassung\/","title":{"rendered":"SmartDrive Proof of Concept der Datenerfassung"},"content":{"rendered":"\n<p>Bevor ein Produkt produziert wird, ist es naheliegend zu \u00fcberpr\u00fcfen, ob das Konzept \u00fcberhaupt durchf\u00fchrbar ist. Dementsprechend wurde hierzu losgel\u00f6st vom BalenaOS auf einer <a href=\"https:\/\/www.raspberrypi.org\/software\/operating-systems\/\">Raspberry Pi OS Lite<\/a> Distribution die Erfassung der Sensordaten getestet. Zum Test wurde diese abgespeckte Variante vom Raspberry Pi OS gew\u00e4hlt, um aktiv auf dem Betriebssystem arbeiten zu k\u00f6nnen, gleichzeitig aber auch dem abgespeckten Charakter von BalenaOS m\u00f6glichst nah zu kommen.<\/p>\n\n\n\n<p>Zur Auswertung des Fahrverhaltens m\u00fcssen Beschleunigung und Rotation w\u00e4hrend des Fahrens gemessen werden. Hierzu verwenden wir einen MPU6050 Sensor. Die Anbindung des Sensors wird nach <a href=\"https:\/\/tutorials-raspberrypi.de\/rotation-und-beschleunigung-mit-dem-raspberry-pi-messen\/\">dieser Anleitung<\/a> durchgef\u00fchrt. Das nachfolgende Bild zeigt den Aufbau der Hardware. Der Raspberry Pi wird hierbei \u00fcber ein Bread Board mit dem Sensor verbunden. Eine direkte Verbindung ohne das Bread Board w\u00e4re auch m\u00f6glich, allerdings m\u00fcsste der Sensor dann zus\u00e4tzlich fixiert werden. Durch das Gewicht des Bread Boards kann die Statik des Sensors f\u00fcr Testzwecke und Kalibrierung gew\u00e4hrleistet werden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"424\" height=\"588\" src=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/05\/Raspi_setup.jpeg\" alt=\"\" class=\"wp-image-257\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/05\/Raspi_setup.jpeg 424w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/05\/Raspi_setup-216x300.jpeg 216w\" sizes=\"(max-width: 424px) 100vw, 424px\" \/><\/figure>\n\n\n\n<p>Auf dem Raspberry Pi OS Lite werden anschlie\u00dfend die Abh\u00e4ngigkeiten I2C und Python-smbus installiert, wodurch der Sensor adressiert werden kann. Mit Hilfe eines Python Skripts werden die Daten anschlie\u00dfend ausgelesen und in der Konsole dargestellt. Damit wird best\u00e4tigt, dass die Hardwarekomponenten funktionieren und die Datenerhebung m\u00f6glich ist. Weiterhin kann die Hardware als Fehlerquelle f\u00fcr k\u00fcnftige Probleme (foreshadowing?) ausgeschlossen werden.<\/p>\n\n\n\n<p>Hier der Code zum Auslesen der Sensordaten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/python\r\nimport smbus\r\nimport math\r\n \r\n# Register\r\npower_mgmt_1 = 0x6b\r\npower_mgmt_2 = 0x6c\r\n \r\ndef read_byte(reg):\r\n    return bus.read_byte_data(address, reg)\r\n \r\ndef read_word(reg):\r\n    h = bus.read_byte_data(address, reg)\r\n    l = bus.read_byte_data(address, reg+1)\r\n    value = (h &lt;&lt; 8) + l\r\n    return value\r\n \r\ndef read_word_2c(reg):\r\n    val = read_word(reg)\r\n    if (val &gt;= 0x8000):\r\n        return -((65535 - val) + 1)\r\n    else:\r\n        return val\r\n \r\ndef dist(a,b):\r\n    return math.sqrt((a*a)+(b*b))\r\n \r\ndef get_y_rotation(x,y,z):\r\n    radians = math.atan2(x, dist(y,z))\r\n    return -math.degrees(radians)\r\n \r\ndef get_x_rotation(x,y,z):\r\n    radians = math.atan2(y, dist(x,z))\r\n    return math.degrees(radians)\r\n \r\nbus = smbus.SMBus(1) # bus = smbus.SMBus(0) fuer Revision 1\r\naddress = 0x68       # via i2cdetect\r\n \r\n# Aktivieren, um das Modul ansprechen zu koennen\r\nbus.write_byte_data(address, power_mgmt_1, 0)\r\n \r\nprint \"Gyroskop\"\r\nprint \"--------\"\r\n \r\ngyroskop_xout = read_word_2c(0x43)\r\ngyroskop_yout = read_word_2c(0x45)\r\ngyroskop_zout = read_word_2c(0x47)\r\n \r\nprint \"gyroskop_xout: \", (\"%5d\" % gyroskop_xout), \" skaliert: \", (gyroskop_xout \/ 131)\r\nprint \"gyroskop_yout: \", (\"%5d\" % gyroskop_yout), \" skaliert: \", (gyroskop_yout \/ 131)\r\nprint \"gyroskop_zout: \", (\"%5d\" % gyroskop_zout), \" skaliert: \", (gyroskop_zout \/ 131)\r\n \r\nprint\r\nprint \"Beschleunigungssensor\"\r\nprint \"---------------------\"\r\n \r\nbeschleunigung_xout = read_word_2c(0x3b)\r\nbeschleunigung_yout = read_word_2c(0x3d)\r\nbeschleunigung_zout = read_word_2c(0x3f)\r\n \r\nbeschleunigung_xout_skaliert = beschleunigung_xout \/ 16384.0\r\nbeschleunigung_yout_skaliert = beschleunigung_yout \/ 16384.0\r\nbeschleunigung_zout_skaliert = beschleunigung_zout \/ 16384.0\r\n \r\nprint \"beschleunigung_xout: \", (\"%6d\" % beschleunigung_xout), \" skaliert: \", beschleunigung_xout_skaliert\r\nprint \"beschleunigung_yout: \", (\"%6d\" % beschleunigung_yout), \" skaliert: \", beschleunigung_yout_skaliert\r\nprint \"beschleunigung_zout: \", (\"%6d\" % beschleunigung_zout), \" skaliert: \", beschleunigung_zout_skaliert\r\n \r\nprint \"X Rotation: \" , get_x_rotation(beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, beschleunigung_zout_skaliert)\r\nprint \"Y Rotation: \" , get_y_rotation(beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, beschleunigung_zout_skaliert)\r\n<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bevor ein Produkt produziert wird, ist es naheliegend zu \u00fcberpr\u00fcfen, ob das Konzept \u00fcberhaupt durchf\u00fchrbar ist. Dementsprechend wurde hierzu losgel\u00f6st vom BalenaOS auf einer Raspberry Pi OS Lite Distribution die Erfassung der Sensordaten getestet. Zum Test wurde diese abgespeckte Variante<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[17,16],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/256"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/comments?post=256"}],"version-history":[{"count":4,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/256\/revisions"}],"predecessor-version":[{"id":393,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/256\/revisions\/393"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/media?parent=256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/categories?post=256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/tags?post=256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}