====== Lemming Robo ======
{{ :lemming:dsc_0183_2_c.jpg?direct&300|}}
In der [[http://kirchdorfer-talentewoche.at/|Kirchdorfer Talente-Woche 2015]] durfte ich 20 Kindern im Alter zwischen 9 und 14 Jahren die Faszination der Robotik näher bringen.
Die herausfordernde Aufgabe war, einen "Mini-Segway" Namens Lemming-Robo nach Anleitung aufzubauen. Dabei wurde modernste Mikroelektronik verbaut und verdrahtet. Die Kinder waren mit voller Begeisterung bei der Sache und haben insgesamt sogar mehr als 8 Überstunden investiert, um endlich ihren eigenen Roboter balancieren zu sehen.
{{:lemming:tiz-kirchdorf.jpg?nolink&150|}}
{{:lemming:mkz_logo_y128.png?nolink&150|}}
----
===== Material-Sponsoren =====
^ IDC-Buchsenleisten \\ 4-polig, BestNr. 661 004 151 922 \\ 8-polig, BestNr. 661 008 151 922 | [[http://www.we-online.com|{{ :wifi-sensor:we.png?nolink&200 | Würth Elektronik}}]] |
^ Lithium-Batterien \\ 18650, 3.7V | [[http://nordfels.com/|{{ ::logo-nordfels.png?nolink&300 |Nordfels }}]] |
===== Videos =====
Hier sieht man ein wenig den Werdegang - von sehr tollpatschig bis ziemlich stabil
- [[https://www.youtube.com/watch?v=3CNYhJHdaK0|Erste Fahrversuche mit PD-Regler]] \\
- [[https://www.youtube.com/watch?v=XMCWuw4DAeM|Mit Hochachsenregler, d.h. er hält die Fartrichtung bei]] \\
- [[https://www.youtube.com/watch?v=MAHxbi71Rjc|Verbesserte Reglerstruktur (PDD²) zur Bedämpfung des Schwingens um die Sollposition]]
===== Komponenten des Robos =====
==== Holzrahmen ====
Der Grundkörper des Robos besteht aus 2 Stückchen 19mm 3-Schichtplatte mit je 200x40mm.
Das vertikale Holz muss gebohrt werden, sodass die Befestigungsschrauben der Motoren passen, und dass die zur Mitte gerichteten Antriebsstummel, die am Getriebe beitseitig herausgeführt sind, Platz haben.
{{:lemming:01-body-rechts.jpg?direct&200x300|}} {{:lemming:01-body-vorne.jpg?direct&200x300|}} {{:lemming:01-body-links.jpg?direct&200x300|}} {{:lemming:01-body-hinten.jpg?direct&200x300|}} \\
==== Lithium-Batterie ====
{{ :lemming:02-batterie.jpg?direct&200x200|}}
Als Energiequelle bzw. -speicher dienen gebrauchte 18650er-Zellen aus Notebookakkus. Davon sind 2 Stück parallel geschaltet. Deren Nennspannung ist üblicherweise 3.7V. 4.2V ist die Ladeschlussspannung und entladen werden kann die Batterie bis ca. 3V. Tiefentladung muss unbedingt verhindert werden. Hat die Zelle über längere Zeit (einige Tage) eine Spannung von weniger als 2.7V, so bilden sich metallische Kristalle. Diese führen dann zu einer Art internem Kurzschluss, wenn die Zelle wieder auf 4.2V geladen wird. Das artet dann unter Umständen in einem heftigen Feuerwerk aus.
==== Laderegler ====
{{:lemming:03-laderegler.jpg?direct&200x200 |}} {{:lemming:03-usb-kabel.jpg?direct&200x200 |}}
Der Laderegler sorgt für ein kontrolliertes Laden der Batterie. Hier wird ein USB-Kabel vom Typ Mini-B angeschlossen.
==== Batterie-Management-System (BMS) ====
{{ :lemming:04-bms.jpg?direct&200x200|}}
Ein BMS sorgt dafür, dass die Batterie in ihren Betriebsgrenzen betrieben wird. Es hat Anschlüsse für den Laderegler (Charge), die Batterie (Batt) und die Last (+5V). Es schützt die Batterie vor Überladung und auch Tiefentladung. \\
Das besondere an den hier verwendeten Modulen ist, dass sie zusätzlich gleich auch noch einen Hochsetzsteller integriert haben, der aus der variablen Batteriespannung von 3-4.2V konstante 5V erzeugt. Ein elektronischer Hochsetzsteller ist vom Prinzip her dem mechanischen [[https://de.wikipedia.org/wiki/Hydraulischer_Widder|Wasserwidder]] sehr ähnlich.
Weil die Motoren so viel Strom brauchen, werden zwei Module parallel geschaltet. Am Ausgang werden zwei 0.1Ω-Widerstände verwendet, sodass sich der Strom zwischen den beiden Modulen gleichmäßig aufteilt.
Stellt das BMS einen Kurzschluss fest, wird der Ausgang deaktiviert. Eingeschaltet kann er wieder werden indem man entweder die Batterie kurz abklemmt, oder man den USB-Laderegler mit einem Kabel an eine USB-Buchse ansteckt.
==== Stromverteiler ====
{{:lemming:04-stromverteiler.jpg?direct&200 |}}
Die Stromverteilung zu all den verschiedenen Platinen erfolgt über einfache Schrauben, die als Lötstützen verwendet werden. Hier sind auch zwei Kondensatoren angebracht. Einerseits ein Aluminium-Elektrolyt-Kondensator zur Stützung der Spannungsversorgung bei Stromspitzen und außerdem noch ein kleiner Keramikkondensator zur Entstörung.
==== Antrieb ====
{{ :lemming:05-motoren.jpg?direct&200x200|}}
Den Antrieb übernehmen zwei Getriebemotoren, mit einer Untersetzung von 48:1. Nominell können sie mit 6V betrieben werden, hier werden sie mit 5V angesteuert. Der Elektromotor muss vor dem verbauen aus dem Getriebegehäuse genommen werden, und umgedreht werden. Dadurch schauen die elektrischen Kontakte dann zum Reifen, und sind daher leicht zugänglich. Dies ist notwendig, weil ansonsten der Reifen auf jene Halb-Antriebswelle gesteckt werden würde, die mit der anderen Hälfte nur durch eine Steckverbindung gefügt ist. Nach längerem Betrieb lockert sich diese Verbindung, und rutscht durch. Die andere Hälfte bildet ein Spritzgussteil mit dem Zahnrad im Inneren des Getriebes, ein durchrutschen ist daher ausgeschlossen. \\
Es empfiehlt sich, die Reifen auf der Getriebewelle mit einem Tupfen Superkleber zu fixieren.
{{:lemming:05-motorentstoerung.jpg?direct&200x200 |}} Beim Prototypen hat sich herausgestellt, dass die Kombination aus den Hochsetzstellern und den Motoren starke elektromagnetische Störungen verursacht, sodass sich der Mikrocontroller aufhängt, und nur mehr durch einen Reset wieder zur Vernunft gebracht werden kann. Als Abhilfe wurden mehrere Maßnahmen getroffen. Unter anderem wurden Entstörkondensatoren direkt an den Gleichstrommotoren angebracht, je zwei Stück pro Motor.
==== Motortreiber ====
{{ :lemming:06-h-bruecke.jpg?direct&200x150|}}
Um die Motoren in beide Richtungen drehen lassen zu können, wird ein [[https://de.wikipedia.org/wiki/Vierquadrantensteller|Doppel-H-Brücken-Modul]] verbaut. Es wird einerseits direkt mit 5V versorgt, und andererseits hat es 4 Eingangspins, mit denen jede der 4 Halbbrücken angesteuert wird. Der Arduino steuert diese mit einer [[https://de.wikipedia.org/wiki/Pulsweitenmodulation|Pulsweitenmodulation]] mit einer Frequenz von 1kHz an. Dadurch können die Motoren nicht nur schnell nach vorne und schnell nach hinten, sondern quasi stufenlos jede Geschwindigkeit fahren. Auch hier wurde eine Entstörmaßnahme verbaut: Die Ansteuerleitungen haben je einen Reihenwiderstand von 1kOhm integriert. Die H-Brücken sind nicht gerade besonders Rückwirkungsfrei, d.h. energiereiche Störungen von der Motorseite gelangen zurück auf die Ansteuerpins.
==== Lagesensor ====
{{:lemming:08-imu.jpg?direct&200x200 | }}
Dieses Sensormodul hat in einem Mikrochip gesamt 6 Sensoren integriert. Es kann in je 3 Achsen die Beschleunigung (Veränderungsrate der Geschwindigkeit, F=m*a oder a=dv/dt) und die Drehgeschwindigkeit messen. Es wird benötigt, um einerseits den aktuellen Kippwinkel zu berechnen, und andererseits um den Roboter auch geradeausfahren lassen zu können. Denn lenken tut der Robo ja durch unterschiedliche Drehgeschwindigkeiten der beiden Antriebsräder. Die laufen aber von hausaus schon ungleich, was dazu führt, dass der Robo ständig leichte Kurven fährt, wenn er geradeaus fahren soll. Ein einfacher Regelalgorithmus sorgt dafür, dass dies kompensiert wird, sodass die Drehgeschwindigkeit um die Hochachse ca. Null ist. 100 mal pro Sekunde werden die Messwerte erfasst und in der Software dann so weiterverarbeitet, dass der Robo aufrecht stehen bleibt, und auf Lenkbefehle richtig reagiert.
==== Ultraschallsensoren ====
{{ :lemming:09-sonar.jpg?direct&200|}}
Diese Sensoren haben einen Lautsprecher und ein Mikrophon. Es wird ein Piepton, den man nicht hören kann, weil dessen Frquenz höher ist, als das menschliche Ohr wahrnehmen kann, ausgesendet, und nach einer gewissen Zeit wieder am Mikrophon empfangen. Durch die Schallgeschwindigkeit in der Luft kann man daraus dann die Entfernung des reflektierenden Gegenstandes berechnen. In dieser Anwendung reagiert der Robo z.B. auf eine vorgehaltene Hand auf einer Seite mit einer Drehbewegung, und kann somit gelenkt werden.
==== Arduino Nano ====
{{:lemming:07-arduino.jpg?direct&200 |}}
Als Herzstück, das all die Berechnungen und Steuerungen übernimmt, wird ein Arduino Nano verwendet. Man kann sich vorstellen, dass das ein ganzer Computer in klein ist. Er hat Ein- und Ausgabefähigkeiten, eine CPU (16MHz), Arbeitsspeicher (RAM, 2kByte) und quasi eine Festplatte (Flash-Speicher, 32kByte). Programmiert wird er über die USB-Schnittstelle. Auf dem PC braucht man die Arduino-IDE, um das Programm runterspielen zu können.
===== Der Zusammenbau =====
==== Anleitung ====
{{ ::lemming-anleitung-2020.pdf |Bauanleitung 2020 als PDF zum Ausdrucken}} \\
{{ ::lemming-anleitung-2019.pdf |Bauanleitung 2019 als PDF zum Ausdrucken}} \\
{{ ::lemming-anleitung-2017.pdf |Bauanleitung 2018 als PDF zum Ausdrucken}} \\
[[:lemming:fotos-anleitung|Foto-Galerie für den Zusammenbau (V3.3, veraltet)]]
==== Werkzeugliste ====
^ Seitenschneider | für Draht, Widerstände, Kondensatoren, Schrumpfschlauch |
^ Abisolierzange | es sind viele Drahtstücke zu verlöten |
^ Kombizange | ist zusammen mit einem starken Gummiring eine dritte Hand |
^ Lötkolben | min. 20 Watt, Meißelspitze mit 2-3mm Breite |
^ Lötkolbenständer | am besten fixierbar am Tisch und mit Lötschwamm |
^ Schraubendreher, PH1 | zum fixieren der Motoren am Holz |
^ Schraubendreher, flach 3mm | für die Klemmen am Motortreiber |
^ Heißklebepistole | zum fixieren der Module auf dem Holz |
^ Messer | zum Aufschneiden der Rohrisolierung |
^ Ständerbohrmaschine | für das vertikale Holzstück für die Motoraufnahmen |
^ Bohrer | 2.5mm für M3-Schrauben und einen 7.5mm für Auslässe |
^ Heißluft | 200°C für Schrumpfschläuche |
^ Computer | mit Arduino IDE für die Programmierung |
^ Schraubstock | zum Verpressen der Steckverbinder |
^ Labornetzgerät | für die Inbetriebnahme |
==== Verbrauchsmaterialien ====
^ Heißklebesticks | 10mm, ca. eine viertel Stange |
^ Lötzinn | 1mm, 1m |
^ Kabelbinder | 2x 350mm, 2x 200mm |
^ Drähte | Radox 125, Litzendraht 0.25mm² grün, 0.5mm² schwarz \\ Radox 125 ist ein recht temperaturbeständiger Draht, sodass die Isolierung nicht schmilzt beim verlöten |
===== Downloads =====
==== Schaltplan ====
{{::lemming:lemming_robo_v3-color.pdf|V3.0}}
{{:lemming:lemming_robo_schaltplan_3.1.pdf|V3.1}}
{{:lemming_robo_schaltplan_3.3.pdf|V3.3}}
==== Quellcode ====
Die Firmware ist nun auf GitLab zu finden: https://gitlab.com/KarlZeilhofer/LemmingRobo \\
Zum programmieren und konfigurieren braucht man nur noch die kostenlose Entwicklungsumgebung [[https://www.arduino.cc/en/Main/Software|Arduino IDE]] \\
===== Software aufspielen =====
Schritt für Schritt Anleitung, wie du deine Firmware auf dem Lemming Robo aktualisieren kannst:
* Arduino IDE installieren (Linux, Windows oder Mac)
* Lemmings Arduino Nano mit einem USB-Kabel am PC anstecken
* evt. Treiber installieren (enfällt jedenfalls auf Linux)
* Arduino IDE starten
* [[https://gitlab.com/KarlZeilhofer/LemmingRobo/repository/archive.zip?ref=Firmware|akutelle Firmware herunterladen]]((ACHTUNG: seit Juni 2016 wird der Lagesensor anders montiert! Daher funktioniert ein Robo aus 2015 nicht mehr mit der aktuellen Software. Minimale Änderungen im Code sind notwendig.)) und entpacken.
* mit der Arduino-IDE die Datei lemming-firmware.ino öffnen
* unter Tools-Board: **Arduino Nano** auswählen
* unter Tools-Processor: **ATmega328** auswählen
* unter Port: den richtigen COM-Port auswählen (evt. ausprobieren), auf Linux: /dev/ttyUSB0
* auf den Pfeil "upload" klicken, und zusehen, wie alles klappt.
* Wenn du Lust hast, kannst du versuchen, den Quellcode zu verändern, und sehen, wie der Robo sich dann anders verhält. Dazu empfehle ich den Editor **Sublime-Text**, den Git-Client **GitKraken** und einen Account bei GitLab. Für Fortgeschrittene empfehle ich **Eclipse CDT mit dem Arduino-Plugin**.
===== Paramterjustierung =====
Der Lemming Robo speichert seine Parameter im EEPROM des Arduinos ab. \\
Diese können über Arduino Serial Monitor (Tools -> Serial Monitor, Text-basierte Ein-/Ausgabe) verändert werden. \\
- Stromversorgung des Robos einstecken.
- USB-Kabel an Lemming-Robo (am Arduino, nicht am Laderegler) und PC anstecken
- Arduino IDE starten
- "richtigen" COM-Port auswählen, das ist evt. eine Probiererei
- Tools -> Serial Monitor
- Baudrate auf 115200 einstellen
Nun können Befehle gesendet werden.
* **L** \\ Listet alle Parameter auf. Parameter die mit einem Unterstrich beginnen, können nich verändert werden, und dienen nur der Information. Hier eine beispielhafte Ausgabe:
[<] dtMin=9.95e-3 s
[r] phiNull=175.00 deg
[t] _phiSteuer=6.25 deg
[z] phiLimit=8.00 deg
[u] _phiKalman=92.29 deg
[i] _phiFehler=-55.70 deg
[q] phiReg_P=285.16e-3 pwm/deg
[w] phiReg_I=3.84e-6 pwm/deg.s
[e] phiReg_D=937.51e-3 pwm/ deg/s
[o] Qangle=999.46e-6
[p] Qbias=2990.76e-6
[f] Rmeasure=29.91e-3
[g] _omegaKalman=-100.91e-3 deg/s
[h] _pwmMotor=-1000.00e-3 pwm
[j] pwmFilter_ta=3.13 s
[k] kMotor=636.72e-3 m/s /pwm
[l] _vMotor=-455.25e-3 m/s
[y] _pos=-1577.41e-3 m
[x] _posSoll=0.00e-9 m
[c] _posFehler=1577.41e-3 m
[a] posReg_P=1312.53e-3 deg/m
[s] posReg_I=500.00e-3 deg/m.s
[d] posReg_D=6.19 deg/ m/s
[D] posReg_DD=1464.10e-3 deg/ (m/s)
[v] motorEin=1000.00e-3 binaer
[b] _phiBeschl=92.57 deg
[n] _omegaGyro=-126.11e-3 deg/s
[m] _phiGyro=92.27 deg
[#] _phiSelekt=107.95 deg
* Mit den Buchstaben in eckigen Klammern kann man den jeweiligen Parameter auswählen. \\ Mit **r** kann man z.B. phiNull auswählen.
* nun kann man mit **+** oder **-** den Wert des aktuell ausgewählten Parameters verändern. \\ In unserem Beispiel stellt sich nun ein neuer Sollwinkel des Robos ein. Der Winkel wird in 0.2° Schritten verändert. Man kann auch z.B. 5 Plus-Zeichen in einer Zeile eingeben, und erst dann mit Enter bestätigen.
* Passen die Parameter, müssen diese mit dem Befehl **S** gespeichert werden.
* Nun USB-Kabel trennen, und den Robo resetten.
{{tag>lemming robotik kicad segway arduino regelung video deutsch}}