Wer kennt es nicht? Man hat gerade Leerlauf und Lust auf ein lustiges Projektchen, nicht um die Welt zu retten, sondern einfach Spaß haben. Genau dafür ist Kampfroboter basteln! In dieser Anleitung erfährst du wie du ein per WLAN steuerbaren Mini-Kampfroboter bastelst. Am besten überzeugst du deine Freunde sich auch einen zu basteln, damit ihr eure Roboter gegeneinander antreten lassen könnt.

Der Bau des Battlebots teilt sich in folgende grundsätzliche Schritte auf:

Vorbereitung

Eine gewisse Grundausstattung an Werkzeugen brauchst du für dieses Projekt, jedoch nichts was über die übliche Hobbyausstattung hinausgeht:

Erforderliches Werkzeug (Mindestanforderungen):

Erforderliche Bauteile:

Prinzipiell lassen sich diese Schritte in beliebiger Reihenfolge bearbeiten, mit Ausnahme der letzten beiden. Es empfiehlt sich allerdings mit dem Servo-Hacking zu beginnen, das ist ein frickeliger Schritt, den man am besten schnell hinter sich bringt.

Servo-Hacking

Ein Servomotor ist vereinfacht gesagt ein Elektromotor, dessen Winkelposition bestimmbar und einstellbar ist. Diese Eigenschaft ist sehr nützlich, wenn man beispielsweise bei Modellflugzeugen den Anstellwinkel von Flügeln oder die Position der Landeklappen genau steuern möchte.

In der Mikroelektronik werden gerne die sogenannten „SG90“ Mikroservomotoren verwendet, da sie sehr günstig sind und problemlos direkt über einen Mikrokontroller steuerbar sind (größere Motoren ziehen zu viel Strom und lassen sich nicht ohne weiteres direkt von einem Arduino o.ä kontrollieren). Die Zusatzbezeichnung 9g bezieht sich leider nicht auf die Beschleunigung die der Servomotor erreichen kann, sondern auf seine Masse, nämlich 9 gramm. Der SG90 kann eine Position zwischen 0 und 180° einnehmen. Ein Servomotor ist als Antrieb für Battlebots erstmal also nicht hilfreich, da das Rad somit nur eine halbe Umdrehung vorwärts und eine halbe Umdrehung rückwärts machen könnte.

Der Servomotor kann aber gehackt werden. Vereinfacht gesagt wird dem Servomotor vorgegaukelt, dass er sich permanent in der gleichen Position befindet, z.B. 90°. Dann wird ihm aufgetragen sich z.B. zu 150° bewegen. Der Servomotor dreht sich und dreht sich um die 150° zu erreichen, und hält nicht an, da er denkt er befindet sich immer noch auf der 90°. So macht man aus einem 180° Servomotor, einen Motor der eine kontinuierliche 360° Bewegung ausführen kann und damit bestens geeignet ist den Battlebot anzutreiben.

Wie passiert das konkret? Der Servomotor bestimmt seine Winkelposition über ein sogenanntes Potentiometer. Das Potentiometer ist im Grunde ein Gesamtwiderstand der sich variabel in zwei Einzelwiderstände aufteilen lässt. Je nach Motorposition ergibt sich eine unterschiedliche Verteilung der zwei Einzelwiderstände, die dann erfasst wird und in eine Gradzahl/Position umgerechnet wird. Der Hack besteht darin dieses Potentiometer herauszulöten und durch zwei einfache Einzelwiderstände zu ersetzen. Da die Verteilung der Widerstände so immer gleichbleibt, denkt das Potentiometer somit, dass es sich immer auf der gleichen Position befindet und meldet dementsprechend immer die gleiche Gradzahl/Position an die Steuerung.

3D-Druck des Gehäuses und der Räder

Die Einzelteile des Battlebots sind bereits vorkonstruiert und müssen nur auf einem beliebigen FDM 3D-Drucker ausgedruckt werden. Die files sind auf Thingiverse https://www.thingiverse.com/thing:4888287 zu finden. Natürlich kann die Optik auch noch angepasst werden und zusätzliche Dekorationselemente entwickelt und gedruckt werden.

Für die slicing-Einstellungen reichen Standardeinstellungen – der Druck ist nicht anspruchsvoll. Es empfiehlt sich ein Standardprofil des präferierten Slicers zu nehmen. Die Elemente „Body“ und „Lid“ können flach auf der Druckplatte angeordnet werden. Stützstrukturen, der sogenannte Support, kann bei den Aussparungen für die Servomotoren gesetzt werden. Jedoch kann man auch darauf verzichten, wenn man Vertrauen in die „bridging“-Fähigkeiten seines 3D-Druckers hat. Der Rest der Konstruktion ist ohnehin 3D-Druck gerecht gestaltet und hat keine Überhänge, die sich schwer drucken lassen.

Ein paar Eckeinstellungen

Auch die Räder besitzen eine flache Seite, für die Auflage auf der Druckplatte ohne Stützstrukturen. Bei den Rädern gibt es eine Besonderheit. Für den maximalen Grip ist es wichtig, dass die Räder eine möglichst gummiartige Oberfläche haben. Dazu gibt es prinzipiell zwei mögliche Lösungen: Silikon oder TPU-Filament. Ambitionierte Bastler, die vor Silikonguss nicht zurückschrecken, können die innere Radstruktur in einen einhüllenden Silikonmantel gießen. Eine wesentlich sauberere, stressfreie Variante ist es einen Radmantel mit flexiblem Filament (TPU) zu drucken und über das starre Rad zu stülpen.

Zusammenlöten der Komponenten

Für den Battlebot braucht man folgende grundsätzliche Komponenten:

Der Akkumulator.

Der Akkumulator ist ein sogenannter LiPo – ein Lithium-Polymer Akkumulator. Das „Polymer“ beschreibt den Elektrolyten, denn anstelle eines flüssigen Elektrolyten wird hier ein fester Polymerelektrolyt verwendet. Diese Beschreibung ist leicht irreführend. Der Polymerelektrolyt ist eine Folie und kann besonders kompakt in beliebiger Form gewickelt werden. Diese Art Akkumulatoren sind daher im Modellbau besonders beliebt, da sie eine hohe Energiedichte erreichen können und schnell geladen werden können.

Ein Laderegler.

Ein Akkumulator kann nicht beliebig geladen werden, sondern immer nur innerhalb eines gewissen Spannungsfensters. Ein Unter- oder Überschreiten der zulässigen Spannung schädigt den Akku und führt im Zweifelsfall zu einem thermischen Durchgehen, inklusive Flammen, oder anderen unangenehmen Dingen. Ein Laderegler unterbricht z.B. den Ladevorgang beim Erreichen der maximalen Spannung. Warum ist der Laderegler dann optional, wenn er doch so wichtig ist? Wenn man ein spezielles LiPo-Ladegerät besitzt, kann man den Akkumulator auch außerhalb des Battlebots laden und dann frisch geladen wieder einsetzen.

Die Steuerung.

Für die Steuerung muss ein Mikrokontroller her: ein Minicomputer auf einem einzigen Chip, wie z.B. der bekannte und beliebte Arduino. Ein Arduino ist für diese Aufgabe jedoch überdimensioniert. Zudem muss der Battlebot ja ferngesteuert werden, z.B. über W-LAN. Die Lösung ist ein sogenannter ESP8266, ein sehr kleiner, günstiger, W-LAN fähiger Mikrokontroller. Dieser hat verschiedene Pins (Anschlussmöglichkeiten, die Eingänge oder Ausgänge zu dem Mikrokontroller darstellen). Diese Pins haben z.T. bereits festgelegte Funktionen – die verschiedenen Pinbezeichnungen sind auf der Platine neben den Pins aufgedruckt.

Die ESP8266 gibt es vielen verschiedenen Ausführungen, daher soll man sich nicht wundern wenn der eigene ESP8266 nicht genau so aussieht und unterschiedliche Pins hat. Für dieses Projekt ist die sogenannte “WemosD1 Boardform” anzuempfehlen, da sie besonders kompakt ist.

Der Step-up

Der Step-Up ist ein Spannungsbooster, der eine Gleichspannung erhöhen kann. Um die Notwendigkeit des Step-Up zu verstehen, muss man in die unterschiedlichen Spannungsbereiche der Komponenten schauen. Für die Servomotoren wird ein Betriebsspannung zwischen 4.8 V bis 6 V empfohlen. Der LiPo-Akku liefert jedoch im vollgeladenen Zustand nur 4.2 V und mit sinkendem Ladezustand sinkt auch die gelieferte Spannung. Der ESP8266 muss mit 5V betrieben werden. So oder so muss die LiPo-Eingangsspannung auf jeden Fall erhöht werden.

Grundsätzliches Schaltungsschema vor Step-up

Um die Schaltung einfacher zu verstehen, ist es besser sie getrennt zu betrachten – der Teil vor dem Step-Up und der Teil nach der Schaltung. Zunächst den Teil vor der der Schaltung:

Im Endeffekt wird der LiPo an den Step-Up Eingang angeschlossen. Der Stromkreis vom LiPo Pluspol zum Plus-Eingang wird aber durch den Schalter unterbrochen um den LiPo über den Schalter zuzuschalten oder zu trennen. Parallel zum LiPo wird die Statusanzeige (Widerstand + LED) angebracht. Wenn der Stromkreis geschlossen wird, fließt parallel ein Strom über die LED, die aufleuchtet und anzeigt, dass der LiPo angeschlossen ist. Der Widerstand schützt die LED vor zu hohen Strömen.

Bei dem Step-Up ist eine Sache wichtig zu beachten: Er hat bereits einen vorher eingestellten, unbekannten Spannungoutput. Daher ist es sinnvoll am Anfang erst einmal zu schauen, welchen Spannungsboost er hervorruft, und zwar ohne, dass Bauteile an der Ausgangsseite angeschlossen sind. Die Messung kann ganz einfach über ein Multimeter (eingestellt für Gleichspannung, in der Größenordnung bis 24 V) gemacht werden. Dafür wird der Schalter umgelegt und der Ausgang des Step-up gemessen. In dem Beispiel ist hier eine Outputspannung von 15V eingestellt. Wenn man diese aus Versehen auf ein Bauteil gibt, das dafür nicht ausgelegt ist, ist das nicht so gut.

Die Outputspannung wird dann Drehen der Schraube an dem großen blauen Bauteil justiert, bis 5,5 V erreicht werden. Diese Outputspannung ist an kein Übersetzungsverhältnis gekoppelt, sondern wird auch bei sinkender Akkuspannung konstant bleiben. Warum 5,5 V, wenn doch der ESP8266 5V braucht und die Servos zwischen 4,8 und 6? Es ist wie so oft im Leben ein Kompromiss. Einen zweiten Step-up einzubauen um einmal 5V für den ESP8266 und 6 V für die Servos zu generieren ist „over-the-top“. 5.5V ist ein guter Kompromiss um beide anzutreiben – der Mikrokontroller hält es noch aus und die Servomotoren haben genug Saft.

 

 

 

 

 

 

 

 

 

 

 

Grundsätzliches Schaltungsschema nach Step-Up

Die abgebildeten Komponenten müssen einfach dem Schaltschema entsprechend verlötet werden. Ob man mit Pins arbeitet oder ganz klassisch verlötet, ist egal, Hauptsache die Verbindungen sitzen. Da es im Kampfroboter vom Platz her auch ziemlich eng wird, solltet ihr alle offenen Drähte abisolieren, damit kein Kurzschluss entsteht.

Flashen des Codes

Kommen wir nun zum coolsten Teil der Programmierung des kleinen Roboters. Kennt ihr Arduino und habt schon ein wenig Erfahrung in C/C++? Dann könnt ihr euch auch überlegen, das was jetzt kommt einfach zu überspringen und den fertigen Code als Grundlage für eure eigene und wahrscheinlich schönere Firmware nehmen. Falls ihr euch noch nicht mit dem Programmieren auskennt, ist dieses Projekt für den moderaten Einstieg geeignet und hilft hoffentlich beim Einarbeiten. Erst einmal müsst ihr euch die Programmierumgebung von Arduino installieren. Diese Programmierumgebung nennt sich Arduino IDE. Nehmt die Version 1.8.xx nicht die Version 2, da diese sehr neu ist und noch nicht mit so vielen verschiedenen Mikrocontrollern kompatibel ist. 

 

Nach dem Installieren müsst ihr in eurem Arduino-Ordner (in der Regel unter Eigene Dateien/Arduino/) einen Ordner mit dem Namen “tools” anlegen. Anschließend müsst ihr den Arduino ESP8266 Filesystem Uploader  in den Ordner “tool” entpacken. Damit könnt ihr einfach die Website, die wir später verwenden, in den Speicher eures ESP 8266 laden. 

 

Damit das Programm aber funktioniert und ihr den ESP 8266, das ist euer WeMosD1R1 Bord, programmieren könnt, sind noch ein paar weitere Schritte erforderlich. Ihr braucht noch die Programmbibliothek für das Bord selbst. Dafür fügt ihr nach dem Starten von Eurer Arduino IDE unter dem Punkt Datei → Voreinstellungen → Zusätzliche Bordverwalter-URLs diese URL ein: https://arduino.esp8266.com/stable/package_esp8266com_index.json . Jetzt geht ihr auf den Reiter Werkzeuge → Bord → Bordverwalter und sucht da ESP und installiert die entsprechende Bibliothek. Im Anschluss könnt ihr den WeMosD1R1 unter den Bords finden und auswählen. Lasst alle Einstellungen, die jetzt zu sehen sind, unverändert. 

 

Soeben haben wir eine Bibliothek mit externem Programmcode eingebunden, die unser eigenes Programm nun benutzen kann. Allgemein funktioniert das Einbinden von Bibliotheken wie folgt: Die beliebtesten Bibliotheken könnt ihr einfach über Sketch->Bibliothek einbinden-> Bibliothek verwalten… einbinden. Wenn ihr eure Bibliothek dort nicht findet, müsst ihr googeln und einfach den Link wieder unter Datei-> Voreinstellungen -> Zusätzliche Bordverwalter-URLs einfügen. Und voilá, nun findet ihr eure Bibliothek bei der Suche über Bibliothek verwalten… Alternativ könnt ihr die Bibliothek auch als ma,e_der_bibliothek.zip herunterladen und über die Bibliotheksverwaltung einbinden (ihr dürft die Bibliothek nicht entpacken!). Als letzte Alternative könnt ihr die selbst entpackte Bibliothek auch in eurem Arduino-Ordner direkt in den Ordner “libraries” packen (in diesem Fall müsst ihr die Arduino IDE neu starten) und ihr habt das gleiche Ergebnis.

 

Seid ihr so weit und habt das Programm, welches ihr über den Thingiverse-Link von oben mit euren STLs geladen habt, kompiliert, dann könnt ihr es auf euren Mikrocontroller überspielen. Wenn ihr euch nun mit dem WLAN verbindet, das der ESP8266 aufspannt, werdet ihr feststellen, dass auf der Seite 192.168.4.1 noch nichts zu sehen ist. Das liegt daran, dass noch keine Website im Speicher des Microcontrollers liegt. Um das zu ändern müsst ihr einfach auf ESP8266 Sketch Data Upload in dem Reiter Werkzeug in der Arduino IDE klicken und schon wird alles, was im Sketchordner in dem Unterordner “data” liegt, auf den Microcontroller geschoben. Das dauert einen Moment. Wenn wir jetzt unseren seriellen Monitor öffnen (nicht vorher, sonst ist der Port belegt und wir können nichts hochladen), sollten wir auch sehen, dass das SPIFFS erfolgreich eingehängt wurde. Wenn wir uns jetzt wieder mit dem Netzwerk verbinden und die Website 192.168.4.1 aufrufen, sehen wir die Website die wir im Ordner “data” hinterlegt haben (diese Website wird auch im C Code aufgerufen).

Wenn jetzt eure Servomotoren schon drehen, ohne dass ihr etwas ansteuert, liegt das daran, dass der Nullpunkt der Servos nicht ganz sauber definiert ist. Anders als zu erwarten liegt dieser nicht bei 0°, sondern bei 90°, da Servomotoren sich in einem Bereich von 0° bis 180° ansteuern lassen. Durch unseren Mod haben wir die Winkelbegrenzung der Servos ausgehebelt und wir können jetzt mit den Abstufungen von 90+X und 90-X die Geschwindigkeit und die Drehrichtung vorgeben. Zum Beispiel beschreiben 120° eine moderate Geschwindigkeit in positiver Drehrichtung, während 70° eine etwas langsamere Geschwindigkeit in umgekehrter, negativer Drehrichtung hervorrufen. Das Programm, das wir über die Arduino IDE auf unseren Microcontroller übertragen haben, macht genau das Gleiche. Um auszuprobieren wo genau unser Nullpunkt liegt, können wir einfach schnell folgendes Programm auf dem Mircocontroller ausführen:



#include <Servo.h>

Servo servoA;

//wemos D1 Mini
//D1 ist 5
//D2 ist 4
//D3 ist 0
//D4 ist 2
int servo_pin = 2; // pin fuer servo hier D4 da 2 eingetragen
int posi = 90;    // servo mittelstellung

void setup() {
    servoA.attach(servo_pin);
    Serial.begin(115200);
    servoA.write(posi);
    Serial.println("Geschaetzten Nullwert eingeben ca. 80-100, mit Enter bestaetigen");
}

void loop() {
    while (Serial.available()){
        String in_char = Serial.readStringUntil('\n');
        Serial.print("Wert: ");
        Serial.print(in_char);
        servoA.write(in_char.toInt());
        delay(200);
    }
}

Damit können wir den Nullpunkt der angeschlossenen Servomotoren bestimmen und in unserem anderen Code eintragen. Unsere Website kann dabei die ganze Zeit im SPIFFS bleiben. Solange wir sie nicht in unserem Code aufrufen, liegt sie da nur herum. Wenn wir die Nullpunkte gefunden haben (typischerweise liegen diese im Bereich von 90°+-10°), sollte unser kleiner Bot dann auch ohne Eingaben keine Bewegung machen. Sollte er nach einiger Zeit doch ein wenig zucken, liegt das daran, dass er etwas warm geworden ist und sich dadurch der Widerstand der Spannungsteiler ändert. Gleiches gilt natürlich auch, wenn es draußen super heiß ist 😉 Happy Pushing and have FUN!

Einen saucoolen Namen für deinen Battlebot überlegen

Finaler Zusammenbau

Battlebots deiner Freunde plattmachen