Ardubot heisst mein aktuelles Roboterprojekt. Benannt wurde er nach dem Sparkfun Ardubot PCB, welches das Chassis bildet. Als Prozessor Board kommt ein Seeeduino V328 mit ATmega328 zum Einsatz. Dieses ist voll kompatibel zum Arduino Duemilanove, hat aber noch einige sinnvolle Erweiterungen. Die Stromversorgung bildet ein 7,4V 1100mAh LiPo Akku. Der Motor Controller besteht aus einem L293D. Angetrieben wird der Ardubot von 2 Pololu Micro Metal Gearmotoren mit einer 100:1 Übersetzung und den passenden Pololu 42×19 Rädern mit Quadratur Encodern. Dazu kommt noch ein DOGM163 16×3 Zeichen LCD Modul.
Aufbau:
Der Ardubot ist modular aufgebaut. Alle Module werden nur einfach aufeinander gesteckt oder verschraubt. Die Verbindungen zwischen den Modulen sind mit Drähten bzw. Kabel steckbar ausgeführt. Auf dem Trägerplatine bzw. dem Seeeduino sind alle Steckverbinder angebracht die zum Verbinden der Module benötigt werden. Durch diese flexible Verkabelung lassen sich leicht unterschiedliche Varianten zum Anschluß der Hardware mit dem Arduino ausprobieren.
Die bisher vorhandenen Module sind im einzelnen:
- Trägerboard mit Motor Treiber, Motoren, Radencoder
- Prozessor Modul
- I2C LCD Modul
- Liniensensor
Als Erweiterungen sind geplant bzw. befinden sich im Bau:
- Asuro Erweiterungs Modul. Ermöglicht das Anschließen von Asuro Erweiterungen wie SnakeVision, US Sensor.
- Sensor Modul für verschiedene Ultraschall bzw Infrarot Entfernungssensoren, Lichtsensoren
- Gyro/Acceleration Board um den Ardubot auf den Hinterrädern balancieren zu lassen
- Funk Kamera Modul mit Schwenk/ Neige Servo
- Bluetooth oder ein anderes drahtloses Kommunikations Modul
Trägerboard:
Das Ardubot PCB ist das Trägerboard für den Ardubot. Wie beim Asuro bildet die Platine zugleich das Chassis für den Roboters. Die Ardubot Platine besteht aus:
- Lochrasterflächen und Strom Versorgungs Reihen,
- einem Arduino konformen Steckplatz und Bohrungen,
- Bohrungen für die Motor Halterungen und das Bugrad
- Anschluß für Batterie und Schalter
- der Anschluß für den L293D Motor Halter und die Motoren
Leider ist einiges nicht so verdrahtet, wie ich mir das gewünscht hätte. Im Nachhinein hätte ich auch gleich eine fertige doppelseitig kontaktierte Lochraster Platine verwenden können. Folgende Änderungen wurden deshalb an der Ardubot Platine vorgenommen:
- Motor Controller Eingänge von den Arduino Steckplatz durchtrennt und auf eine eigene Buchsenleiste geführt
- Enable Pins des Motor Controller waren mit VCC verbunden. Durchtrennt und ebenfalls auf die Buchsenleiste geführt
- Die beiden Reihen für Batteriespannung und GND getauscht. Damit sich Sensoren oder Servos mit 3pol Standard Anschlüssen anschließen lassen
- alle Arduino Pins sind nochmals vorne an den Seiten auf Stiftleisten geführt
Trotz aller Umbauten ist die Ardubot Platine immer noch nicht perfekt.
- Durch die verwendeten größeren Räder kann man den USB Stecker am Arduino nicht mehr anstecken, ohne das er am Rad schleift.
- Ich hätte gerne auch das Seeeduino Mega Board ausprobiert. Von den Abmessungen kaum größer als das Seeeduino V328 aber die Steckverbinder sind leider etwas versetzt. Darum paßt es nicht. Auf einem etwas größeren Board (Standard EuoPlatine 100x160mm) müßte es gehen oder mit längeren Steckverbindern.
- Dadurch, dass das Arduino Baord mit den Steckverbindern nach unten auf die Ardubot Platine gesteckt wird, kann man kein Standard Arduino Shield verwenden. Außer es ist ein Shield mit ’stackable Headers‘.
Ardubot Unterseite:
Die Unterseite der Ardubot Platine enthält eine Menge an zusätzlichen Drähten und Bauteilen. Neben dem L293D Motor Controller, einem weiteremPCF8574 Port Expander für den Liniensensor auch ein 74AC14 Hex Inverter C. Derzeit werden 2 Inverter für die Motor Steuerung verwendet, was 2 Arduino IOs einspart.
Dieses Bild mit Notizen auf Flickr anschauen.
Ardubot Oberseite:
Auf der Oberseite sieht man neben den neu verdrahteten Verbindungen eine Menge an SMD Widerständen. Da alles so flexibel wie möglich sein soll, sind alle Eingänge der Chips mit Pulldown Widerständen versehen. Zudem sind alle Ein-und Ausgänge auf die unten zu sehenden Front Steckverbinder geführt. So kann relativ schnell die Hardware neu verdrahtet werden ohne zum Lötkolben greifen zu müssen.
Dieses Bild mit Notizen auf Flickr anschauen.
Quadratur Encoder:
Das folgende Bild zeigt ein Pololu Rad mit dem Quadratur Encoder. Über 2 Trimmer kann man die beiden Ausgangssignale anpassen, damit diese ein perfektes Rechteck Signal und ein 90° phasenverschobenes Signal ausgeben.
Prozessor Modul:
Als Gehirn für den Ardubot kommt ein Seeeduino V328 Board zum Einsatz. Ein Arduino Duemilanove clone. Das Seeeduino wurde von mir nicht nur wegen der zum Trägerboard passenden Farbe ausgewählt. Es hat zudem einige wichtige Vorzüge gegenüber dem Duemilanove:
- 2 extra A/D pins
- seperate Anschlüsse für I2C und UART
- separate Arduino IOs auf der Rückseite mit Lochraster konformen Abmessungen
- Arbeitet mit 5V oder 3,3V (über Schalter umschaltbar)
- Auto oder Manueller Reset (über Schalter umschaltbar)
Dieses Bild mit Notizen auf Flickr anschauen.
I2C LCD Modul:
Das LCD Module ist ein DOGM 163 3×16 Zeichen Display von lcd-module.de. Es kann im 8-bit, 4-bit und SPI Mode betrieben werden. Aufgrund der Limitierung der Arduino IOs wird das LCD im 4-Bit Mode über einen I2C Port Expander betrieben. Die Standard LiquidCrystal Arduino Bibliothek wurde entsprechend angepasst. Über Jumper und einen separaten Steckverbinder kann man das Modul auch im SPI Mode betrieben. Über die hinteren Steckverbinder ist auch ein 4-Bit Betrieb möglich. I2C ist natürlich aufgrund des Bussystems natürlich die Methode die die wenigsten Pins benötigt, allerdings auch sehr langsam (100µs pro Zeichen bei 100kHz I2C Bustakt).
Dieses Bild mit Notizen auf Flickr anschauen.
Erster Test, schreibe ‚LMR‘:
Der erste Test für den Ardubot gilt den Rad Encodern. Diese sind zwar mit einer Auflösung von 48 Impulsen pro Rad Umdrehung nicht sehr exakt. Um einfache Figuren zu zeichnen, sollte es aber allemal reichen. Bei letsmakerobots gibt es schon seit einiger Zeit einen Wettbewerb, in dem es darum geht, die Buchstaben ‚LMR‘, die Abkürzung für letsmakerobots, mit einem Roboter darzustellen. Das ist doch schon mal eine echte Herausforderung.
Als fauler Programmieren baut man natürlich auf etwas, was man schon kennt. In diesem Fall den Asuro und die Asuro Library. Der Asuro hat ja auch Radencoder mit einer ähnlichen Auflösung und in der Asuro Lib gibt es die passenden Funktionen für Go und Turn zum Fahren unter Zuhilfenahme der Radencoder. Die beiden Funtkionen bzw. die aktuelle GoTurn Funktion ist schnell für den Ardubot in ein Arduino Sketch umgewandelt. Aber irgendwie funktioniert das ganze noch nicht so richtig. Es ist scheinbar egal ob ich die Korrektur der Geschwindigkeit durch Vergleich von linkem und rechtem Encoder drinhabe oder nicht. Es kommt fast immer zu einer leichten Abweichung. Wenn ich die Korrektur weglasse, sieht das Ergebnis genauso aus. Da steckt noch irgendwie der Wurm drin. Trotzdem bin ich mit dem ersten Ergebnis soweit zufrieden.
Hier gibt es das Video zu diesem ersten Test.
Wie man beim letzten Buchstaben dem ‚R‘ sehen kann ist der Halbkreis doch sehr klein geworden. Das liegt diesmal aber nicht an der Software, sondern an der Hardware. Die Räder bewegen sich erst ab einem PWM Wert von ca. 80. Unter 80 geben die Motoren nur pfeifende Geräusche vonn sich. wenn sich die Räder dann drehen, schafft man es einfach nicht mehr engere Kurven zu fahren. Der Kreis wird gleich zu groß (ca 30cm) wenn sich das innere Rad zu drehen beginnt oder zu klein, wenn es stehen bleibt (ca 9cm). Für den perfekten Halbkreis wären aber 15cm richtig.
Des weitern erkennt man in dem Video, das der Stift bei jeder Drehung einen kleinen Bogen beschreibt. Ist natürlich logisch, da der Stift ja versetzt von der Drehachse des Roboters angebracht ist. Abhilfe könnte hier ein Servo schaffen, der den Stift auf Kommando absetzt oder anhebt. Zudem müßte man dann mit dem Roboter vor jeder Drehung:
- den Stift anheben
- ein kleines Stück zurückfahren
- drehen
- wieder ein kleines Stück vorfahren
- Stift absenken
Daran bastele ich gerade als nächstes.
Weitere Tests:
Für die Zukunft sind weitere Test geplant:
- Zeichnen mit Stift und Servo
- Liniensensor Test
- Enrfernungs Sensoren testen
- IR Fernbedienung
- Balancieren auf den Hinterrädern
Sehr schönes Projekt!
Alternativ könnte man auch die Buchstaben wesentlich größer schreiben. Dann würden die kleinen Bögen auch nicht mehr so stören.
Viel Erfolg noch…