Franzis Roboter Erweiterungen         

                       von Martin Müller                                             
Elektronik-Labor  Literatur  Projekte  Lernpakete  

Teil 1 - Mechanik    




Beim Betrieb des Roboters aus dem Adventskalender kann man feststellen, dass man ihn mit recht einfachen Mitteln noch etwas verbessern kann. Nach dem Zusammenbau fiel auf, dass der Stützdraht wegen der Beschaffenheit seiner Isolierung nur schlecht über glatte Oberflächen (Laminat, Tischplatte) gleitet. Eine Möglichkeit dies zu verbessern wäre ihn abzuisolieren, und den blanken Kupferdraht über den Untergrund rutschen zu lassen.


 
Im 1€-Shop bekommt man für wenig Geld (24 Stk./ 1 €) diese Plastikkugeln. Sie haben einen Durchmesser von 16 mm und verfügen über eine ø 3mm Bohrung. Eine solche Kugel ist leicht ,wie im Bild zu sehen, als Stützrad auf dem Draht zu montieren. Dadurch wird die Reibung zum Untergrund deutlich vermindert.



Gemäß der Bauanleitung wird der Batteriekasten auf dem in Fahrtrichtung rechts befindlichen Motor montiert. Dadurch erhält das an diesem Motor montierte Rad deutlich mehr Traktion als das des andern Motors. Bei der Verwendung als „Linienfolger“ ist das sicher akzeptabel. Möchte man den Roboter perspektivisch auch für andere Aufgaben verwenden, ist es günstig den Schwerpunkt in die Mittellinie der Konstruktion zu verlagern.



Man kann den Batteriekasten an die schmale Seite des Steckbretts anschrauben. Am besten verwendet man dafür kleine Linsenkopfschrauben (2,2 x 6,5 mm). In die Seite des Batteriekastens neben der die Anschlussdrähte herausgeführt werden, werden zwei Löcher ø 2,3 mm gebohrt. Hier ist im Kasten genug Platz, damit die Schraubenköpfe nicht in Konflikt mit den Batterien geraten.



Zwei Bohrungen ø 1 – 1,5 mm in der Seitenleiste des Steckbretts ermöglichen dort das Verschrauben des Batteriekastens.



Mit verbesserter Rollfähigkeit und in die Mitte verlagerten Schwerpunkt ist die Roboterkonstruktion nun bereit für weitere Aufgaben.



Teil 2 - Fernsteuerung              

            


Mit einem weiteren Steckbrett, einem Raspberry Pi Pico W und einigen weiteren elektronischen Bauteilen kann man den Roboter fernsteuern.



Um die beiden Motoren anzusteuern, wird ein Motortreiber benötigt. Dafür werden insgesamt 4 Transistoren vom Typ BC327-25 und 8 Transistoren BC337-25 verbaut. Der Motortreiber wird mit 4,5 V betrieben und kann mit den 3,3 V-Signalen des Pico W angesteuert werden. Die beiden Schottkydioden verhindern, dass beide Stränge der H-Brücke gleichzeitig durchschalten können.




Programmiert wird der Pico W mit der Arduino-IDE. Die GPIOs 14- 17 werden zur Ansteuerung der Motoren verwendet. Der Pico W stellt ein eigenes Netzwerk (SSID: ROBOT, PWD: 12345678) zur Verfügung und ist über die IP-Adresse 192.168.42.1 per Browser mit jedem WLAN-fähigen Smartphone, Tablet oder Laptop erreichbar. Ist der Roboter betriebsbereit, leuchtet die LED auf der Platine.
 

//RobotPicoW.ino
#include <AsyncWebServer_RP2040W.h>
#include "WebPage.h"

AsyncWebServer server(80);

void setup() {
Serial.begin(115200);

WiFi.mode(WIFI_AP);
WiFi.softAP("ROBOT", "12345678");

pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);

pinMode(14, OUTPUT);//rechts zurück
pinMode(15, OUTPUT);//rechts vor

pinMode(16, OUTPUT);//links vor
pinMode(17, OUTPUT);//links zurück

Serial.println(WiFi.softAPIP());

server.on("/", [](AsyncWebServerRequest * request) {webpage(); request->send(200, "text/html", webpageCont);});
server.on("/vor", [](AsyncWebServerRequest * request) {vor(); webpage(); request->send(200, "text/html", webpageCont);});
server.on("/sta", [](AsyncWebServerRequest * request) {stand(); webpage(); request->send(200, "text/html", webpageCont);});
server.on("/zur", [](AsyncWebServerRequest * request) {ruck(); webpage(); request->send(200, "text/html", webpageCont);});
server.on("/lin", [](AsyncWebServerRequest * request) {links(); delay(400); stand(); webpage();request->send(200, "text/html", webpageCont);});
server.on("/rec", [](AsyncWebServerRequest * request) {rechts(); delay(400); stand(); webpage(); request->send(200, "text/html", webpageCont);});

server.begin();
}

void loop() {}

void stand(){analogWrite(14, 0); analogWrite(15, 0); analogWrite(16, 0); analogWrite(17, 0); delay(500);}
void vor(){stand(); analogWrite(14, 0); analogWrite(15, 250); analogWrite(16, 255); analogWrite(17, 0);}
void ruck(){stand(); analogWrite(14, 255); analogWrite(15, 0); analogWrite(16, 0); analogWrite(17, 255);}
void rechts(){stand(); analogWrite(14, 255); analogWrite(15, 0); analogWrite(16, 255); analogWrite(17, 0);}
void links(){stand(); analogWrite(14, 0); analogWrite(15, 255); analogWrite(16, 0);analogWrite(17, 255);}


Der Webserver wird mit der AsyncWebServer_RP2040W-Library erstellt. Sie muss in der Arduino-IDE installiert sein. Über einen einfachen HTTP-Request werden die Steuerbefehle übertragen.


//WebPage.h

String webpageCont;

void webpage(){
webpageCont = "<!DOCTYPE HTML>";
webpageCont += "<html>";
webpageCont += "<title>Pico W</title>";
// CSS
webpageCont += "<style>";
webpageCont += "h1 {font-size: 40px; color: blue; text-align: center;}";
webpageCont += "h2 {font-size: 25px; color: red; text-align: center;}";
webpageCont += ".button {background-color: lime; border: none; color: white; width: 6em; height: 4em; text-align: center; font-size: 20px; cursor: pointer;}";
webpageCont += ".button1 {background-color: green; color: black; position:absolute; top:7em; left:50%; margin-left: -3em;}";
webpageCont += ".button2 {background-color: red; position:absolute; top:12em; left:50%; margin-left: -3em;}";
webpageCont += ".button3 {background-color: blue; position:absolute; top:17em; left:50%; margin-left: -3em;}";
webpageCont += ".button4 {background-color: violet; position:absolute; top:12em; left:30%; margin-left: -3em;}";
webpageCont += ".button5 {background-color: orangered; position:absolute; top:12em; left:70%; margin-left: -3em;}";

webpageCont += "</style>";
// HTML
webpageCont += "<body>";
webpageCont += "<h1>PicoW - Robot</h1>";
webpageCont += R"~(<h2 id="klistat">bereit<h2>)~";
webpageCont += R"~(<button class="button button1" id="btn1" onclick="vor()">VOR</button>)~";
webpageCont += R"~(<button class="button button2" id="btn2" onclick="sta()">STOP</button>)~";
webpageCont += R"~(<button class="button button3" id="btn3" onclick="zur()">ZURUECK</button>)~";
webpageCont += R"~(<button class="button button4" id="btn4" onclick="lin()">LINKS</button>)~";
webpageCont += R"~(<button class="button button5" id="btn5" onclick="rec()">RECHTS</button>)~";
webpageCont += "</body>";
// JavaScript
webpageCont += "<script>";
webpageCont += R"~(function vor(){ButtonDisable(); window.location.href = "/vor";})~";
webpageCont += R"~(function sta(){ButtonDisable(); window.location.href = "/sta";})~";
webpageCont += R"~(function zur(){ButtonDisable(); window.location.href = "/zur";})~";
webpageCont += R"~(function lin(){ButtonDisable(); window.location.href = "/lin";})~";
webpageCont += R"~(function rec(){ButtonDisable(); window.location.href = "/rec";})~";
webpageCont += R"~(function ButtonDisable(){document.getElementById('klistat').innerHTML = "Bitte warten";)~";
webpageCont += R"~(document.getElementById("btn1").disabled = true;  document.getElementById("btn2").disabled = true; document.getElementById("btn3").disabled = true;document.getElementById("btn4").disabled = true;document.getElementById("btn5").disabled = true;})~";
webpageCont += "</script>";
webpageCont += "</html>";
}

Download: RobotPicoW.zip

Der Inhalt der Webseite ist in die Datei WebPage.h ausgelagert. Sie muss sich im gleichen Verzeichnis wie RobotPicoW.ino befinden. Die Übertragung der Steuersignale ist mit einer gewissen zeitlichen Latenz behaftet. Dies ist der recht einfachen einsteigerfreundlichen Art und Weise der Programmierung geschuldet.


Teil 3 - Fahrgestell



Mit wenig Aufwand erhält der Roboter ein wesentlich stabileres Fahrgestell, und auch sein Erscheinungsbild ändert sich deutlich.


 
Das Fahrgestell wird aus Schrauben (4 Stück M3 x 25, 1 Stück M3 x 45), Distanzhaltern (2 Stück M3 x 15) und Muttern (3 Stück M3) konstruiert.


 
Das Stützrad besteht auch hier wieder aus einer Kunststoffkugel (ø 16 mm) mit einem 3 mm - Loch. Um es mit dem Steckbrett zu verbinden werden Schrauben (2 Stück M3 x 20) und Muttern (2 Stück M3) benötigt. Ein Drahtbügel der die Kunststoffkugel trägt wird aus Installationsdraht (H07V-U 1,5 mm²) angefertigt.



Die Fahrgestellkonstruktion wird mir der selbstklebende Unterseite eines Steckbretts verbunden. Die Schutzfolie des Klebepads wird so zugeschnitten, dass nur die Auflageflächen der Motoren verklebt werden. Die Löcher des Steckbretts werden zum Befestigen des Stützrads verwendet.



Um ein zweites Steckbrett mit dem ersten zu verbinden, benötigt man Distanzhalter (2 Stück M3 x 15), Schrauben (2 Stück M3 x 30) zwei Muttern M3 und zwei Unterlegscheiben.



Der Batteriekasten kann mit Gummibändern am Steckbrett befestigt werden.



Der Pico W befindet sich auf dem oberen Steckbrett. Der Motortreiber wurde auf dem unteren Steckbrett aufgebaut, wobei dessen 4,7 kOhm-Widerstände aufs obere Steckbrett ausgelagert wurden.  Beim Verbinden der Steckbretter mit den Distanzhaltern ist darauf zu achten, dass alle Schrauben mittels Muttern fest und wackelfrei mit den Steckbrettern verbunden sind.




Teil 4 - Breitreifen und Li-Power




Um dem Roboter mehr Bodenhaftung und Geschwindigkeit zu verleihen, kann man die sehr schmalen und kleinen Räder durch die im Bild gezeigten ersetzen. Die Räder passen zu den verwendeten Motoren und werden einfach auf die Achsen aufgesteckt.



Wie an anderer Stelle im Elektronik-Labor (Autonome Stromversorgung) beschrieben, kann man aus Einmal-E-Zigaretten günstig Li-Akkus gewinnen. Auch damit kann man den Roboter betreiben. Der Pico W wird aus einem eigenen 3,7V Akku (400 mAh) versorgt. Er wird von einem Gummiband auf dem oberen Steckbrett gehalten. An seine Kontakte werden Jumperwire angelötet um ihn elektrisch zu verbinden.



Zwei Akkus, die in Reihe geschaltet werden, liefern die Energie für die Motoren. Um sie mechanisch und elektrisch mit dem unteren Steckbrett zu verbinden, kann man sie zusammen mit einem Pfostenstecker auf einem Stück Lochrasterplatine auflöten.

Die Verwendung der Li-Akkus erfordert eine gewisse Sorgfalt. Die Akkus können sehr hohe Ströme abgeben. Bei einem Kurzschluss besteht Brandgefahr. Auch zum Aufladen der Akkus ist ein besonderer Lademodus zu verwenden.


Dieses Bild zeigt schematisch, wie die einzelnen Komponenten des Roboters elektrisch miteinander verbunden werden müssen.


Elektronik-Labor  Literatur  Projekte  Lernpakete