NIBObee Roboter
An dieser Stelle möchte ich jungen und erwachsenen Spielkindern einen spannenden Roboter-Bausatz vorstellen.
Der NIBObee Roboter Bausatz von Nicai Systems richtet sich an Menschen, die ein bischen basteln wollen und vor allem Interesse an der Programmierung eines solchen Gerätes haben. Für nur 50 Euro erhalten Sie mit dem NIBObee ein lehrreiches Spielzeug mit sehr guter Aufbauanleitung.
Der NIBObee wird normalerweise mit dem AVR-GCC Compiler in C programmiert, für den es zahlreiche kostenlose grafische Oberflächen gibt. Laut Verpackung kann man den Roboter auch in Java programmieren, dazu liefert der Hersteller jedoch keine Anleitung.
An technischer Ausstattung hat der Roboter folgendes zu bieten:
Mit zwei Getriebemotoren fährt er etwas schneller als 1 Meter pro Sekunde. Zwei Lichtschranken erfassen die Rotation der Räder, sie dienen der Messung von Strecke, Richtung und Geschwindigkeit.
Zwei Fühler erkennen Kollisionen mit Hindernissen. Drei Infrarot Sensoren auf der Unterseite erkennen Markierungen auf dem Boden.
Die Platine hat vier Leuchtdioden und zehn I/O Pins zur freien Verwendung übrig. Davon können vier Pins als analoger Eingang verwendet werden. Zwei I/O Pins können als serielle Schnittstelle verwendet werden, und zwei andere können als I²C Schnittstelle verwendet werden.
Der mitgelieferte ATmega16 Mikrocontroller ist mit 16 KiB Programmspeicher (Flash) und 1 KiB RAM angemessen ausgestattet. Die größte Upgrade-Option wäre der ATmega1284P mit 128 KiB Programmspeicher und 16 KiB RAM.
Vergleich NIBObee mit Asuro
Im Vergleich zum Asuro fallen mir folgende Vorteile auf:- Die langen biegsamen Fühler vertragen Kollisionen viel besser, als die harten Taster des Asuros.
- Die Odometrie-Sensoren in dem Getriebe arbeiten zuverlässiger, sie reagieren weniger auf Fremdlicht.
- Beim Asuro braucht man einen großen 100 Watt Lötkolben zum Anlöten der Getriebe-Achsen, was beim NIBObee entfällt.
- Der Mikrocontroller hat doppelt so viel Flash Speicher und viel mehr freie I/O Leitungen.
- Man kann den Mikrocontroller durch Modelle mit viel mehr Speicher austauschen, ohne dabei auf vorprogramierte Chips (mit Bootloader) vom Hersteller angewiesen zu sein.
- Im Gegensatz zum Asuro ist der USB Programmieradapter im Lieferumfang enthalten.
- Der NIBObee enthält ein primitives Ladegerät für die Akkus (über USB).
All diese Vorteile bekommt man quasi ohne Aufpreis.
Zusammenbau
Achte beim Zusammenlöten der Getriebe-Kästen und des Liniensensors darauf, dass die Teile nicht zu heiß werden und exakt im rechten Winkel zueinander ausgerichtet sind. Eine nachträgliche Korrektur ist nämlich problematisch, weil sich dabei die Lötflächen von den Platinen ablösen.
Im Auslieferungs-Zustand ist der Mikrocontroller bereits mit einem Programm bestückt, welches die Grundfunktionen des Roboters testet:
- Wenn man einen Fühler drückt, dreht sich der Motor an dieser Seite in die entsprechende Richtung.
- Dabei flackert die gelbe LED der jeweiligen Seite, um die Funktion des Odometrie-Sensors anzuzeigen.
- Die roten LEDs zeigen den Zustand des linken und rechten Liniensensors an (hell/dunkel).
Wenn das alles soweit funktioniert, hast du wahrscheinlich alles korrekt zusammen lötet und nichts kaputt gemacht.
Programmierung
Der Hersteller stellt nur eine sehr knappe Programmieranleitung bereit. Wie man die LEDs blinken lässt, wird noch ausführlich erklärt. Wie man den Antrieb regelt, so dass er ordentlich geradeaus fährt, wird jedoch gar nicht erklärt. Das ist der Punkt, wo man sich selbst mit Regel-Algorithmen und den Eigenarten der nicht perfekten Hardware auseinandersetzen muss - was der eigentliche Sinn dieses Lehrbausatzes ist.
Als ich mich 2009 zum ersten mal mit dem NIBObee beschäftigte, steckte die mitgelieferte C Library noch in den Kinderschuhen. Sie war stellenweise unnötig kompliziert und viele Leute hatten Schwierigkeiten, sie in ihre Entwicklungsumgebung einzubinden. Inzwischen eignet sie sich laut Dokumentation nur noch für veraltete Entwicklungsumgebungen.
Da ich aber bereits mit dem Mikrocontroller vertraut war, schrieb ich kurzerhand meine eigene Library. Sie ist umfangreich kommentiert und funktioniert (immer noch) mit allen mir bekannten Entwicklungsumgebungen in jeder Version.
Inhalt meiner Library
| nibobee.h, nibobee.c | Enthält alle Funktionen der NIBObee Platine, incl. Kommunikation mit Zubehör via UART und I²C. Die Doku befindet sich in der Datei nibobee.h |
| fahren.h, fahren.c | Erweiterung um einen PI-Regler für präzise Fahrmanöver |
| servo.h, servo.c | Erweiterung für bis zu 5 Modellbau Servos |
| test1.c | Erstes Testprogramm, demonstriert den PI-Regler |
| test2.c | Zweites Testprogramm, enthält weitere Funktionen |
| Makefile | Konfigurationsdatei für den make Befehl |
In den Dateien findest du zahlreiche erklärende Kommentare. Anwendungsbeispiel:
#include "nibobee.h"
#include "fahren.h"
int main() {
// Zeige den Batterie-Status an
batterie_status();
// Der Roboter soll 4 Meter mit mittlerer
// Geschwindigkeit fahren
vorwaerts(400*CM,MITTEL);
// Hier beginnt die Regelung
while (fahrstatus() < ZIEL_ERREICHT) {
fahren_regeln();
// Bei Kollision anhalten
if (SENS_ANY) {
stop();
break;
}
}
}
Erste Schritte
Installiere eine AVR Toolchain, mitsamt dem make Befehl und avrdude. Packe meine ZIP Datei aus. Falls du Linux verwendest, kopiere die Datei 80-nibobee.rules nach /etc/udev/rules.d. Falls du Windows verwendest, installiere den libusb-win32 Treiber gemäß dieser Anleitung.
Öffne eine Eingabeaufforderung und gehen mit dem cd Befehl in das nibobee Verzeichnis. Gebe make clean code ein, um das Programm zu übersetzen. Schließe das USB Kabel des Roboters an und gebe make program um es auf den Roboter zu übertragen.
Wenn du das zweite Testprogramm ausprobieren möchten, must du das Makefile editieren und dort den Dateinamen test1.c durch test2.c austauschen. In dieser Datei stellt man auch die Baudrate der seriellen (Bluetooth) Kommunikation ein, welche vom zweiten Testprogramm verwendet wird.
Die Dokumentation der avr C Library findest du hier.
Nachdem du ein bisschen erfolgreich programmiert hast, empfehle ich dir, einen eigenen Regel-Algorithmus (ohne meine fahren.h) zu entwickeln. Das ist eine anspruchsvolle lehrreiche Aufgabe.
Erweiterungsvorschläge
Mit einem Bluetooth Modul kann der Roboter drahtlos mit dem PC oder einem Smartphone kommunizieren. Wenn du meine Library einsetzt, benutze dazu ganz einfach die Funktionen der stdio Library, z.B. println(), puts(), gets() und scanf(). Im Handel werden "HC-06 Module for Arduino" angeboten, die zufälligerweise exakt auf den Anschluss X5 passen.
Wer nicht gegen Hindernisse fahren möchte, kann einen Ultraschall Entfernungs-Sensor (z.B. den SRF02 oder den chinesischen HC-SR04) auf den Roboter montieren. Alternativ bieten sich besonders für den Nahbereich auch optische Entfernungs-Sensoren von Sharp an.
Wenn man den Entfernungs-Sensor auf einen mini Servo aus der Modellbau-Abteilung montiert, kann man ihn sogar hin und her drehen, ohne den ganzen Roboter bewegen zu müssen. Das sieht dann so aus:
Wenn du noch mehr I/O Leitungen für Erweiterungen benötigst, dann schaue dir mal die Datenblätter dieser Chips an:
- 74HCT165 Schieberegister für mehr Eingänge
- 74HCT595 Schieberegister für mehr Ausgänge
- PCF8574 Mehr I/O über I²C Bus
- PCF8591 4x8 Bit A/D Wandler mit I²C Bus
Verbesserungsvorschläge
Wenn die Biene frontal gegen einen schmalen Gegenstand fährt (z.B. ein Stuhlbein), erkennt sie das Hindernis nicht. Das obige Foto zeigt einen Umbau der Fühler, der dieses Problem weitgehend behebt.
Die Schalthebel der Fühler waren bei mir zu schwergängig. Offensichtlich hätte ich sie an der markierten Stelle nicht fest löten sollen:
Ich hatte das Problem damals gelöst, indem ich die Fühler ohne Schalthebel mit einem dicken Klecks Heißkleber direkt an der Platine befestigte. Das klappte einwandfrei:
Auf staubigen Böden rutschen die Reifen leicht durch. Klemme ein zusätzliches Gewicht (z.B. einen flachen Stein) mit einem Gummiband an den Batteriehalter, so kommt mehr Gewicht auf die Räder. Man kann das Problem natürlich auch programmatisch beheben, indem man sanft beschleunigt und bremst.
Die Zahnräder des Getriebes schauen unten heraus und enden sehr dicht über dem Fußboden. Sie sammeln daher fleißig Staubflocken und Haare ein, die dann das Getriebe blockieren. Abhilfe schafft hier die Abdeckung aus einem halbierten Deckel von einer Haarspray-Dose, mit Heißkleber angeklebt.