Neuigkeiten Das Projekt Technik RoboSpatium Unterstützung Stichwortverzeichnis Download Reaktionen Spiele Gadgets Kontakt <<< R15 Hoverboard R19 Koffer-Robot >>> R18 basierend auf ESP32 - KonstruktionDas Video zu R18Hier geht's zum Onlineshop von DFRobot, von dem ich die elektronischen Komponenten für den Roboter bezogen habe. Bemerkungen zum RoverAbbildung 1:Die Grundidee von R18 ist, einen wirklich leicht nachzubauenden Rover auf die Räder zu stellen. Meine bislang gebauten Roboter waren immer für mein RoboSpatium konzipiert und die dazu notwendigen Anpassungen sind besonders von der Softwareseite für Anfänger nur sehr schwer zu durchschauen. Diese Hürden habe ich mit R18 deutlich verringert, indem: 1.) die elektronischen Komponenten und 2.) die Software auf das nötigste reduziert sind. Beides führt außerdem dazu, dass der Preis pro Rover eher klein ausfällt, womit ich gleich 3 Stück davon gebaut habe - alle vorherigen Rover sind bis Heute Einzelstücke geblieben. ...und schließlich habe ich aus diesen Gründen auch so richtig viel Zeit in diese Nachbauanleitung gesteckt. Sollte dennoch etwas unklar geblieben sein, hinterlasst einen Kommentar oder tretet mit mir anderweitig in Kontakt. Bau der MechanikAbbildung 2:Um die mechanischen Komponenten anzufertigen, habe ich zwei meiner 3D-Drucker angeworfen. Etwa 170 Gramm Filament sind für die Mechanik in zwei Tagen pro Rover verarbeitet worden. Die Bauteile des roten Rovers sind dabei mit meinem ältesten 3D-Drucker entstanden - nicht perfekt, aber allemal ausreichend für die Mechanik. Zusammengehalten wird das Alles von 3mm Schrauben mit 20mm Gewindelänge, sowie einem 30cm langen Stück Gewindestange und vielen Muttern. Wer allzu weit herausstehende Schrauben nicht mag, kann auch zusätzlich eine Packung 3mmSchrauben mit 10mm Gewindelänge kaufen oder zur Säge greifen. Abbildung 3: Der Zusammenbau beginnt mit dem Anschrauben der Achsen für die Räder am Chassis. Dazu werden zwei 30mm lange Stücke von der Gewindestange zurechtgeschnitten, oder man nimmt gleich eine Schraube mit 30mm Länge. Die Ritzel werden mit einem Tropfen Sekundenkleber auf der Welle der Motoren fixiert. Die Welle sollte etwa 1mm hervorstehen. Die Motoren werden dann in die Aussparungen eingeschoben. Zur Verschraubung des Deckels müssen Muttern auf der oberseite des Chassis eingeschoben werden (siehe Abbildung 5) Die beiden grünen Pfeile zeigen auf Öffnungen im Chassis, an denen M3er Muttern zur Befestigung des Kameramastes (Siehe Abbilfung 7) eingeführt werden müssen. Abbildung 4: Sollten die tiefen Aussparungen, in welche M3er Muttern eingeschoben werden müssen, beim Druck etwas zu eng ausgefallen sein (was bei mir der Fall war), so kann die Mutter mit einem Feuerzeug oder Lötkolben vorsichtig ein wenig erwärmt werden. PLA, wie ich es für die Teile verwende, erweicht schon bei 60 Grad ausreichend, um die Muttern einzuführen. Erhitzt man die Mutter zu stark oder presst diese zu stark ein, so kann es passieren, dass diese auf der anderen Seite wieder herausfällt. Man muss wie so oft im Leben das richtige Gefühl für einen Vorgang entwickeln. Abbildung 5: 4 Muttern müssen zur Verschraubung des Deckels der beiden Motoren auf der Unterseite in die Aussparungen auf der Oberseite eingeführt werden. Die Räder werden mit je zwei weiteren Muttern auf der Achse gehalten. Abbildung 6: Der Schleifsporn am Heck des Rovers basiert auf einem Kronkorken. In diesen wird eine Scheibe eingeklebt, durch die eine Schraube gesteckt wird. Die Schraube darf nicht mit festgeklebt werden, sondern muss sich nach dem Verkleben der Plastikscheibe noch frei in dem Loch drehen können. Sekunden- oder Heißkleber eignen sich recht gut. Abbildung 7: Der Kameramast besteht aus zwei Teilen. Abbildung 8: Die Halterung für das Kameraservo und den Akku. Der Akkuhalter wird am Fuß nicht bündicg mit dem Chassis verschraubt. Es verbleibt ein Spalt, da der Akku ansonsten nicht eingeschoben werden kann. Erst nach Einschieben der Powerbank werden die Schrauben zo weit angezogen, biss der Akku festgeklemmt ist. Abbildung 9: Die Halterung der ESP32 Platine und des oberen Schleifkontaktes sind drehbar am Mast befestigt. Dazu müssen zwei Stücke der Gewindestange mit 65mm Länge zugeschnitten werden. Der obere Schleifkontakt wird nur benötigt, wenn der Rover nicht per Akku, sondern extern mit Energie versorgt werden soll. Abbildung 10: Die Stoßstange für den Rover ist optional, verhindert aber effektiv, dass sich die Roboter in meinem RoboSpatium verheddern oder dorthin gelangen können, wo sie nicht hin sollen... Abbildung 11: Verschiedene Perspektiven des fertigen Robers. Damit sollten die letzten Unklarheiten beseitigt sein. Teileliste:
Software Upload per Arduino UNOAbbildung 12:Um die Software auf den Rovers zu bekommen, wird ein Arduino UNO als Programmierer und die Arduino IDE als Softwarepaket benötigt. Abbildung 13: Zum Hochladen müssen Arduino Uno und ESP32 wie auf der Abbildung verkabelt werden: Arduino +5V zu ESP32 +5V Arduino GND zu ESP32 GND Arduino Pin 0 zu ESP32 Pin UOR Arduino Pin 0 zu ESP32 Pin UOT Arduino GND zu ESP32 GND Vor dem Hochladen des Codes müssen Pin GND und IO0 auf dem ESP32 Board überbrückt werden. Anschließend den Reset Knopf auf dem ESP32 Board drücken. Nach erfolgreichem Hochladen muss die Brücke entfernt und Reset erneut gedrückt werden. Der ESP32 bootet dann mit der neuen Firmware und sollte sich im WLAN anmelden. Vorbereitung der Arduino IDEDie Anweisungen gelten für die Installation unter Linux. Getestet habe ich das Ganze unter Linux Mint 20.4 und RaspberryOS.
"Es klappt net!"...ist keine Aussage, auf die ich irgendetwas antworten kann als "Ja und?"In jedem der oben angegebenen Schritte wird irgend etwas von den einzelnen Programmen ausgegeben. Lest euch diese Angaben durch, denn dafür werden die von den Programmierern geschrieben! Wenn also etwas schief läuft, so ist das an den Meldungen zu lesen. Wenn ihr von mir Hilfe erwartet, dann müsst ihr unbedingt angeben: Bei welchem Schritt ein Fehler ausgegeben wurde und Welche Meldung zu lesen war. Gut zu wissen ist auch, mit welchem Betriebssystem (Version?) ihr arbeitet - wirklich weiter helfen kann ich euch nur mit Linux. In Kontakt könnt ihr mit mir treten, in dem ihr einen Kommentar auf dieser Seite hinterlasst oder mir eine Mail schreibt. Die Addresse findet ihr in der Rubrik Kontakt. Die Meldung "Es klappt!" bedarf keiner weiteren Angaben, freut mich aber außerordentlich zu hören oder zu lesen. Meine Änderungen am Code des WebserversWenn ihr nicht nur meinen fertigen Code hochladen, sondern auch in Grundzügen verstehen wollt, was ich geändert habe, lest den folgenden Abschnitt durch. Die hier gelisteten Änderungen sind schon alle im Code des Download-Paketes implementiert und müssen nicht vorgenommen werden, um den Rover in Betrieb zu nehmen!Die Webseite "index.html" mit den Schaltflächen steht im Quellcode des Webservers nicht im Klartext, sondern in komprimierter Form. An den Quelltext kommt ihr in lesbarer Form heran, indem ihr euch mit Hilfe eines Browsers mit dem Rover verbindet und dann den Seitenquelltext aufruft. Die index.html mit den von mir vorgenommenen Änderungen ist im Download-Paket enthalten. Dort findet ihr ebenfalls die "index-Camera-Server-WITHOUT-Rover-Control.html". Das ist die originale Datei des Kameraservers aus den Beispielen der Arduino IDE. Darauf und auf dem Arduino Sketch in dem Verzeichnis "Arduino-Camera-Server-WITHOUT-Rover-Control" basieren die zu machenden Änderungen dieser Beschreibung. Checkbox für die onboard LED einfügen: Sucht in der index.html nach der Zeile: <div class="input-group" id="face_recognize-group"> und in diesem Abschnitt geht weiter, bis ihr zu der Zeile: </div> Unterhalb dieser Zeile, fügt ihr den folgenden Block ein: <div class="input-group" id="flash-group"> <label for="flash">Flash</label> <div class="switch"> <input id="flash" type="checkbox" class="default-action"> <label class="slider" for="flash"></label> </div> </div> Schaltflächen zum Vorwärts oder Rückwärts Fahren einfügen: Sucht in der index.html nach der Zeile: <section id="buttons"> Unterhalb dieser Zeile müssen die folgenden Zeilen eingefügt werden: <button id="drive_forward">Drive Forward</button> <button id="drive_backward">Drive Backward</button> Sucht dann nach der folgenden Zeile: const stillButton = document.getElementById('get-still') unterhalb derer ist einzufügen: const DriveForwardButton = document.getElementById('drive_forward') const DriveBackwardButton = document.getElementById('drive_backward') Sucht dann nach der Zeile: enrollButton.onclick = () => { und fügt darüber die folgenden Zeilen ein: DriveForwardButton.onclick = () => { DriveForwardButton.innerHTML = 'Driving...' updateConfig(DriveForwardButton) } DriveBackwardButton.onclick = () => { DriveBackwardButton.innerHTML = 'Driving...' updateConfig(DriveBackwardButton) } Nun muss die geänderte index.html komprimiert werden, damit diese im Arduino Sketch eingefügt werden kann. Das kann über die Webseite: https://gchq.github.io/CyberChef/#recipe=Gzip('Dynamic%20Huffman%20Coding','index.html.gz','',false)To_Hex('0x',16)Split('0x',',0x') gemacht werden. Der Quelltext wird dazu in das Fenster "Input" kopiert. Folgende Einstellungen müssen vorgenommen werden: Compression: "Dynamic Hoffman Coding" Delimiter: 0x Bytes per line: 16 Split delimiter: 0x Join delimiter: ,0x Durch Klicken auf die Schaltfläche "Bake" wird im Fenster "Output" das Ergebnis als Bytes im HEX Format angezeigt. Diesen Text kopieren und in der Arsuino IDE im Tab "camera_index" einfügen. Es muss der Text nach der Zeile: const uint8_t index_ov2640_html_gz[] = { bis vor dem abschließenden "}" ersetzt werden. Das allererste Komma in der Liste muss entfernt werden! Ebenfalls korrigiert werden muss der Wert für: #define index_ov2640_html_gz_len (4880) Angegeben wird darin die Anzahl Bytes der komprimierten index.html. Dieser Wert wird auf der Webseite nicht angezeigt, muss daher errechnet werden. Angegeben wird oberhalb des Output Feldes die Anzahl der Zeilen. Multipliziert mit 16 erhält man die Anzahl der Bytes. Da die letzte Zeile nicht unbedingt vollständig ist, müssen die fehlenden Bytes abgezogen werden! Nun müssen noch Änderungen im Tab "apt_http.cpp" vorgenommen werden: sucht nach der Zeile: else if(!strcmp(variable, "face_recognize")) { Oberhalb dieser Zeile fügt ihr den folgenden Block ein: else if(!strcmp(variable, "flash")) { #define LED_BUILTIN 33 pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, atoi(value)); } else if(!strcmp(variable, "drive_forward")) { #define LED_BUILTIN 4 pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, 1); } else if(!strcmp(variable, "drive_backward")) { #define LED_BUILTIN 4 pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, 0); } Der so geänderte Code muss wie oben beschrieben auf den ESP32 geladen werden. Zu beachten ist, dass die Schaltflächen "Drive Forward" und "Drive Backward" lediglich die rote LED auf der Rückseite des ESP32 Boards ein- bzw, ausschalten! ElektronikAbbildung 14:Neben dem ESP32-CAM werden nur noch zwei mini Getriebemotoren, ein Mikro Servo und eine Powerbank benötigt. Abbildung 15: Die Verkabelung kann ganz ohne Lötkolben erfolgen. Die Leitungen von Masse und +5V werden in diesem Fall in zwei Schraubklemmen zusammengeführt. Die Verbindung zu den Pins auf dem ESP32 Board erfolgt über die Steckkontakte von Servo und Getriebemotoren (Steuerleitungen) beziehungsweise über sogenannte Doupont- oder Jumperkabel (+5V und Masse). Abbildung 16: Ein Micro USB Kabel habe ich durchtrennt, da die Hälfte mit dem Typ A Stecker für die Stromversorgung per Powerbank benötigt wird. Mit einem Multimeter wird die korrekte Polung geprüft - hier liegt offensichtlich plus 5V an der leicht roten Leitung, so wie es sein sollte. DownloadDie 3D-Dateien der Mechanik, der Schaltplan und der Arduino Sketch sind im Download-Paket (2.8MB) enthalten.TestfahrtenWelche Roboter zur Zeit gesteuert werden können, seht ihr auf der Übersichtsseite meines RoboSpatiums.<<< R15 Hoverboard R19 Koffer-Robot >>> Neuigkeiten Das Projekt Technik RoboSpatium Unterstützung Stichwortverzeichnis Archiv Download Reaktionen Spiele Verweise Gadgets Kontakt Impressum |