Franzis Roboter Erweiterungen
von Martin
Müller
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.
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.