{"id":139,"date":"2017-04-16T16:13:49","date_gmt":"2017-04-16T14:13:49","guid":{"rendered":"https:\/\/bayer-in.de\/wordpress\/?page_id=139"},"modified":"2018-05-17T15:37:15","modified_gmt":"2018-05-17T13:37:15","slug":"wall-e","status":"publish","type":"page","link":"https:\/\/bayer-in.de\/blog\/wall-e\/","title":{"rendered":"WALL-E"},"content":{"rendered":"<p>Im Februar 2016, in einem Workshop f\u00fcr Kinder haben Michael und ich einen Roboter gebaut.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-79\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/roboter-workshop.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p><!--more-->An einem <a href=\"https:\/\/www.raspberrypi.org\/products\/raspberry-pi-3-model-b\/\" target=\"_blank\" rel=\"noopener\">Raspberry Pi<\/a> haben wir zun\u00e4chst mittels <a href=\"https:\/\/camjam.me\/?page_id=1035\" target=\"_blank\" rel=\"noopener\">CamJam Motor-Controller<\/a>\u00a0zwei Elektromotoren angeschlossen. Das ist eine sogenannte\u00a0<a href=\"http:\/\/jenniskens.livedsl.nl\/Technical\/Tips\/Pics\/HVAC%20h-bridge1.gif\" target=\"_blank\" rel=\"noopener\">H-Br\u00fccke<\/a>, diese erlaubt uns die Motoren in beide Richtungen anzusteuern und mit <a href=\"http:\/\/trampicturebook.de\/mc\/media\/pwm-ani.gif\" target=\"_blank\" rel=\"noopener\">PWM<\/a>-Signal auch die Drehzahl, bzw. die Geschwindigkeit zu regeln (das kann zwar die <a href=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_gpio.jpg\" target=\"_blank\" rel=\"noopener\">GPIO<\/a>-Schnittstelle des Raspberry Pi auch, hat aber nicht genug\u00a0Leistung). Die Steuerung haben wir in Python programmiert &#8211;\u00a0<a href=\"https:\/\/github.com\/CamJam-EduKit\/EduKit3\/blob\/master\/Code\/4-driving.py\" target=\"_blank\" rel=\"noopener\">hier<\/a> ein Code-Beispiel.<\/p>\n<p>So kann unser Roboter nun fahren. Um ihn fernzusteuern kann man die App <a href=\"https:\/\/appsto.re\/de\/HslnW.i\" target=\"_blank\" rel=\"noopener\">Blynk<\/a>\u00a0verwenden (daf\u00fcr muss der Raspberry Pi mit WLAN verbunden sein). <a href=\"https:\/\/github.com\/erfindergarden\/robots\/tree\/master\/smartphone_controller\" target=\"_blank\" rel=\"noopener\">Hier<\/a> gibt es eine Anleitung. <a href=\"https:\/\/www.piborg.org\/rpi-ps3-help\" target=\"_blank\" rel=\"noopener\">Eine weitere M\u00f6glichkeit<\/a>, die wir auch umgesetzt haben, ist ein PS3-Joystick \u00fcber Bluetooth.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-81\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/roboter-ps3.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Als N\u00e4chstes haben wir an unseren Roboter verschiedene Sensoren angeschlossen.\u00a0Mit dem <a href=\"https:\/\/301o583r8shhildde3s0vcnh-wpengine.netdna-ssl.com\/wp-content\/uploads\/2014\/05\/IRsensor.jpg\" target=\"_blank\" rel=\"noopener\">Infrarot-Sensor<\/a> haben wir einen Linefollower programmiert. Dieser kann eine schwarze, auf dem Boden gemalte Linie folgen. Die Logik ist ganz einfach: solange der Sensor \u00fcber die Linie ist, werden beide Motoren in eine Richtung angesteuert und der Roboter f\u00e4hrt gerade aus. Wenn er aber die Linie verliert, greift ein Such-Programm zu: die Motoren drehen in entgegengesetzte Richtungen (so dass der Roboter sich an der Stelle dreht) bis er die Linie wieder &#8222;sieht&#8220;. Die Drehrichtung wird im Such-Programm festgelegt, z. B. Motor A &#8211; vorw\u00e4rts, Motor B &#8211; r\u00fcckw\u00e4rts. In manchen F\u00e4llen kann es aber dazu f\u00fchren, dass man sich von der Linie dreht und schlie\u00dflich in falsche Richtung zur\u00fcckf\u00e4hrt. Das Problem wird gel\u00f6st, wenn das erste Drehen begrenzt wird und in der anderen Richtung gesucht wird, d.h.\u00a0Motor A &#8211; r\u00fcckw\u00e4rts, Motor B &#8211; vorw\u00e4rts. <a href=\"https:\/\/github.com\/CamJam-EduKit\/EduKit3\/blob\/master\/Code\/8-linefollower.py\" target=\"_blank\" rel=\"noopener\">Hier<\/a> ist der Code.<\/p>\n<p><iframe loading=\"lazy\" title=\"Linefollower\" width=\"525\" height=\"295\" src=\"https:\/\/www.youtube.com\/embed\/YLds7HO6qLY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>Mit dem <a href=\"https:\/\/2.bp.blogspot.com\/-QXXEzERAIQ0\/VsOXhrViqDI\/AAAAAAAAATU\/UXV7BgATzwo\/s1600\/HC-SR04%2BFuncionamiento.gif\" target=\"_blank\" rel=\"noopener\">Ultrasonic-Sensor <\/a>kann der Roboter den Abstand zu einem Objekt messen und so beim Fahren den Hindernissen ausweichen. In regelm\u00e4\u00dfigen Abst\u00e4nden sendet er eine Reihe von Impulsen aus, indem wir den Trigger ansteuern und auf ein Echo h\u00f6ren. Sobald das Echo empfangen wird, wird die Zeit zwischen dem Aussenden und dem Empfang berechnet. Die Zeit mal Schallgeschwindigkeit geteilt durch Zwei (der Impuls geht den Weg zwei mal) ergibt den Abstand zum Objekt. Bei einem definierten Mindestabstand geben wir dem Roboter das Kommando zu stoppen, bzw. sich in eine andere Richtung zu bewegen. Den Code dazu gibt es <a href=\"https:\/\/github.com\/CamJam-EduKit\/EduKit3\/blob\/master\/Code\/9-avoidance.py\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/p>\n<p><iframe loading=\"lazy\" title=\"Obstacle Avoidance\" width=\"525\" height=\"295\" src=\"https:\/\/www.youtube.com\/embed\/_RzMoJSdnD4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>Nun wollten wir unserem Roboter eine gute Figur geben. Wegen zwei separat angetriebenen Motoren, dachten wir sofort an einen Kettenantrieb, wie bei einem Bagger\u00a0oder einer Pistenraupe. Nur sind diese seelenlos, deshalb haben wir uns f\u00fcr <a href=\"http:\/\/filme.disney.de\/wall-e\" target=\"_blank\" rel=\"noopener\">WALL-E<\/a> entschieden. Der Korpus wird nach <a href=\"http:\/\/paper-replika.com\/index.php?option=com_content&amp;id=54\" target=\"_blank\" rel=\"noopener\">dieser Vorlage<\/a> (etwas vergr\u00f6\u00dfert) aus Pappelsperrholz gebaut (mit Leim zusammengeklebt) und mit bedrucktem Papier angeklebt.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-96\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_body.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Auch eine\u00a0<a href=\"http:\/\/www.waveshare.com\/product\/rpi-camera-e.htm\" target=\"_blank\" rel=\"noopener\">Kamera<\/a> hat ihren\u00a0Platz im Korpus gefunden und jetzt\u00a0k\u00f6nnen wir sehen, was der WALL-E gerade tut. Die Infrarot-LEDs wandern in die Augen.\u00a0Mit der\u00a0Kamera \u00a0k\u00f6nnen nicht nur Fotos geknipst, sondern auch Videos aufgenommen oder sogar live gestreamt werden.<\/p>\n<p><iframe loading=\"lazy\" title=\"Camera Test\" width=\"525\" height=\"295\" src=\"https:\/\/www.youtube.com\/embed\/9dSoAwJPwVU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>Dabei war uns\u00a0wichtig, eine geringere Latenz (Verz\u00f6gerung) zu haben. Nach einigen Versuchen mit unterschiedlichen Software-L\u00f6sungen haben wir uns f\u00fcr den <a href=\"https:\/\/www.linux-projects.org\/uv4l\/\">uv4l<\/a> entschieden.<\/p>\n<p>Die Arme und der Kopf wurden zun\u00e4chst fest montiert (sp\u00e4ter bauten wir die Servomotoren ein). Jetzt sieht unser WALL-E so aus:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-85\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Am 05.06.2016 haben wir unseren WALL-E auf dem <a href=\"https:\/\/www.eventbrite.de\/e\/raspberry-pi-summer-jam-munchen-2016-tickets-25798257282\" target=\"_blank\" rel=\"noopener\">Raspberry Pi Summer Jam M\u00fcnchen 2016<\/a> vorgestellt und an einem\u00a0Roboter-Wettbewerb\u00a0teilgenommen. Hier ein Linefollower-Parkur:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-82\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_linefollower.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Eine Stimme sollte WALL-E auch nicht fehlen. Daf\u00fcr hat er einen <a href=\"https:\/\/www.adafruit.com\/product\/2130\" target=\"_blank\" rel=\"noopener\">Verst\u00e4rker<\/a> und einen Lautsprecher aus einem alten Kassettenrekorder bekommen.<br \/>\nSeine aus dem Film bekannten Spr\u00fcche wurden gleich auf die SD-Karte kopiert:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-100\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_speaker.jpg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Den Lautsprecher bauten wir dann in den &#8222;Werkzeugkoffer&#8220; ein:<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-67 size-full\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_speaker.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Das etwas optimierte Kettenlaufwerk (immer noch aus LEGO):<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-76\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_powertrain.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Ein OLED-Display sollte uns den Status von WALL-E zeigen, z. B. mit welcher IP-Adresse wir auf ihn zugreifen k\u00f6nnen (wir nutzen DHCP, weil wir in unterschiedlichen Netzwerken unterwegs sind) und ob der PS3-Joystick verbunden ist. Au\u00dferdem leuchtet hier das Logo \ud83d\ude09<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-63 size-full\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_oled.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Um die Arme und den Kopf bewegen zu k\u00f6nnen, bekommt WALL-E ein paar <a href=\"http:\/\/www.towerpro.com.tw\/product\/mg90d-2\/\" target=\"_blank\" rel=\"noopener\">Servo-Motoren<\/a>. Diese werden \u00fcber einen\u00a0<a href=\"https:\/\/www.adafruit.com\/product\/2928\" target=\"_blank\" rel=\"noopener\">I2C-Servo-Controller <\/a>angeschlossen.<\/p>\n<p><iframe loading=\"lazy\" title=\"Servo Test\" width=\"525\" height=\"295\" src=\"https:\/\/www.youtube.com\/embed\/WcpzVCMz360?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>3 Servo-Motoren landen im Oberteil, der 4. im linken Auge.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-74 size-full\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_servo.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Die Stromversorgung des Raspberry Pi&#8217;s besteht aus einer\u00a0<a href=\"https:\/\/www.olimex.com\/Products\/Power\/BATTERY-LIPO6600mAh\/\" target=\"_blank\" rel=\"noopener\">LiPo-Batterie mit 6600mAh<\/a>, einem\u00a0<a href=\"https:\/\/www.adafruit.com\/product\/2030\" target=\"_blank\" rel=\"noopener\">PowerBoost<\/a>,\u00a0&#8230;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-68 size-full\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_batterie.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>&#8230;einem\u00a0<a href=\"https:\/\/www.adafruit.com\/product\/390\" target=\"_blank\" rel=\"noopener\">USB\/Solar-Charger<\/a>,\u00a0&#8230;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-73 size-full\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_powerboost.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>&#8230; und einer\u00a0<a href=\"https:\/\/www.seeedstudio.com\/1W-Solar-Panel-80X100-p-633.html\" target=\"_blank\" rel=\"noopener\">Solarpanel<\/a>:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-71 size-full\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_solar.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Die Elektromotoren werden von 4x AA-Akkus separat versorgt:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-72 size-full\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_batterie_2.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Linefollower Duo: mit einem 2. Infrarot-Sensor kann WALL-E viel besser eine Linie folgen.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-77\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_bottom.jpeg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Die Erkennung funktioniert hier nach einem anderen Prinzip: befindet sich die Linie zwischen den beiden Sensoren, f\u00e4hrt WALL-E gerade aus. Biegt die Linie ab, kommt sie unter einen der Sensoren und WALL-E dreht sich etwas in die entsprechende Richtung. Das funktioniert auch dann, wenn sich die Linie gar nicht zwischen den\u00a0Sensoren befindet und erst &#8222;gefunden&#8220; werden soll.<\/p>\n<p><iframe loading=\"lazy\" title=\"Linefollower Duo\" width=\"525\" height=\"295\" src=\"https:\/\/www.youtube.com\/embed\/MmEAzJ0Gb1Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>PS: WALL-E auf der FORSCHA am 05.11.2016 in M\u00fcnchen M.O.C.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98\" src=\"https:\/\/bayer-in.de\/blog\/wp-content\/uploads\/2017\/04\/wall-e_forscha.jpg\" alt=\"\" width=\"800\" height=\"600\" \/><\/p>\n<p>Quellen:<\/p>\n<ol>\n<li><a href=\"https:\/\/www.raspberrypi.org\/documentation\/installation\/installing-images\/README.md\" target=\"_blank\" rel=\"noopener\">Installing operating system (Raspbian OS)<\/a><\/li>\n<li><a href=\"https:\/\/www.raspberrypi.org\/documentation\/configuration\/raspi-config.md\" target=\"_blank\" rel=\"noopener\">raspi-config<\/a><\/li>\n<li><a href=\"http:\/\/www.pabr.org\/sixlinux\/sixlinux.en.html\" target=\"_blank\" rel=\"noopener\">Using the PlayStation 3 controller in Bluetooth mode with Linux<\/a><\/li>\n<li><a href=\"https:\/\/www.linux-projects.org\/uv4l\/\" target=\"_blank\" rel=\"noopener\">Video streaming (WebRTC)<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Im Februar 2016, in einem Workshop f\u00fcr Kinder haben Michael und ich einen Roboter gebaut.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-139","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/pages\/139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/comments?post=139"}],"version-history":[{"count":3,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/pages\/139\/revisions"}],"predecessor-version":[{"id":240,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/pages\/139\/revisions\/240"}],"wp:attachment":[{"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/media?parent=139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}