NIBObee mit Bluetooth Modul HC-06
Startseite

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 Männerspielzeug 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 I2C Schnittstelle verwendet werden.

Der mitgelieferte ATmega16 Mikrocontroller ist mit 16 kB Programmspeicher (Flash) und 1 kB RAM angemessen ausgestattet. Die größte Upgrade-Option wäre der ATmega1284P mit 128 kB Programmspeicher und 16 kB RAM.

Vergleich NIBObee mit Asuro

Im Vergleich zum Asuro fallen mir folgende Vorteile auf:

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 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, die Doku ist in der 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:

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.