Franz Joseph 1.0

Ich wollte mir schon immer mal ein kleines Labor einrichten, um mit Microcontrollern zu basteln. Nach 10 Jahren habe ich es jetzt endlich geschafft, da mal einen Knopf dran zu machen. Und es ist wirklich ein großer Spaß. Mein erstes Projekt ist “Franz Joseph”, ein kleiner “autonomer” Roboter. Im folgenden möchte ich Franz Joseph kurz vorstellen:

 

Franz Joseph von der Seite
Franz Joseph - Seitenansicht

 

Auf diesem Bild sieht man Franz Joseph von der Seite. Die “Pillendose” am linken Ende dient zur Aufnahme des Funkmoduls. Mit dessen Hilfe habe ich eine bidirektionale Telemetrie realisiert, um Kommandos an den Roboter zu senden und Daten von dort zu lesen. Als Funkmodul setze ich ein RFM12 von HopeRF ein. Das bekommt man günstig bei Pollin. Das Modul kann sehr einfach per SPI an einem Atmega 1284 angebunden und betrieben werden. Ich habe mich dafür entschieden, die PDIP Variante des Controllers zu verwenden um erst mal komplizierte SMD-Arbeiten zu vermeiden. Außerdem kann man die “through hole” Bauteile auf einer einfachen Rasterplatine “fädeln”, und sich somit erst mal die Investitionen und den Aufwand zur Platinenerstellung zu sparen. Die Basis des Roboters bildet ein Kettenfahrgestell von Conrad.  Es hat zwei Motoren und kann einen Akku-Pack aufnehmen. An den großen Zahnrädern des Getriebes kann man eine Gabellichtschranke zur Odometrie anbringen. Das Ritzel hat schon ein entsprechendes Loch, dass man verwenden kann. Oben habe ich ein einfaches TEKO-Gehäuse von Reichelt aufgesetzt, um die Elektronik unter zu bringen.

 

Franz Joseph von Oben
Franz Joseph - Draufsicht

 

In der Draufsicht sieht man alle relevanten Komponenten. Ich habe das System in zwei Module geteilt. Oben im Bild ist das “Command- and Control Modul”. Dort ist das Funkmodul und der in der Mitte sichtbare Display angebunden. Die Anbindung ist über Steckverbinder realisiert. Das hat beim Funkmodul den Sinn, dass das Modul mit dem Deckel abgenommen werden kann. Der Display dient dem Debugging beim Programmieren und kann im “Produktivbetrieb” entfernt werden. Den unteren Teil bildet die “Motorstufe”. Die Motorstufe hat einen eigenen Atmega8 Controller. Dieser kümmert sich um das PWM zur Leistungsregelung der Motoren, steuert die Relais zur Schaltung der Laufrichtung der Ketten, und wertet die Odometrie-Signale der Gabellichtschranken aus. Die Anbindung an das “Command- und Control Modul” erfolgt via TWI/I2C. TWI ist ein sehr einfach zu handhabendes Protokoll um eine Kommunikation zwischen Microcontrollern zu realisieren. Das “Command- und Control Modul” kann also der Motorstrufe Kommandos senden bzw. Werte von Dieser lesen. Die Motorstufe kann dann selbstständig agieren und z.B. die Geschwindigkeit halten. Oder über einen Vergleich der Ketten-Laufzeiten sicherstellen, daß das System gerade aus fährt. Geplant ist hier noch eine “Endschalter-Logik”, die der Motorstufe die Chance gibt eine Kollision zu erkennen und abzuschalten, bis weitere Kommandos des “Command- und Control Moduls” eintreffen. Auch könnte die Motorstufe das C&C Modul via Interrupt informieren, dass ein Problem vorliegt. Ein Heartbeat stellt sicher, dass die Motorstufe nicht weiter agiert, wenn das C&C Modul abgesemmelt ist. Kommt für eine gewisse Zeit kein “ping” vom C&C Modul, schaltet die Motorstufe in Standby. Das PWM-Signal des Atmega wird über zwei BD235 Transistoren verstärkt und dann direkt auf die Motoren geführt. Die Signale der Gabellichtschranke werden mit einem Schmitt-Trigger aufbereitet und auf den Interrupt-Ports des Atmega8 gezählt. Der Baustein mit 4x Schmitt-Trigger ist auf der Motorstufe unten Links zu erkennen.

Damit der Roboter auch auf seine Umwelt reagieren kann, braucht er weitere Sensorik. Für eine grobe Erfassung von Hindernissen habe ich mich für Ultraschall-Sensoren entschieden. Zuerst habe ich versucht, auch diese Sensoren komplett selber zu bauen. Allerdings war das wesentlich komplizierter als ich dachte, und auch die Größe der selbst gebauten Lösung hat mich letztlich dazu bewogen, die Sensoren zu zukaufen. Ich habe mich für SRF02-Module entschieden. Die Sensoren haben eine TWI-Schnittstelle, mit der sie direkt an das C&C Modul angebunden werden können. Außerdem sind die Module relativ günstig. Im folgenden Bild sieht man Franz Joseph von vorne. In der Mitte ist der Sensor angebracht. Oben rechts sieht man nochmal das Display-Modul. Das kann sehr günstig bei Pollin bezogen werden.

 

Franz Joseph von Vorne
Franz Joseph - Vorderansicht

 

Hinten ist es identisch realisiert. Im Moment stecken die Sensoren noch in Papp-Ausschnitten. In  der fertigen Version werden diese dann in den Alu-Frontplatten des Gehäuses eingebaut sein. Leider hat sich heraus gestellt, dass Ultraschall nicht besonders gut geeignet ist die Umgebung detailliert zu erfassen. Vor allem weil der Roboter an sich schon relativ klein ist, stellt sie schlechte Auflösung ein Problem dar. Eine große Fläche wie eine Wand oder eine Türe zu erkennen klappt gut. Schmalere Hindernisse wie z.B. Tisch- oder Stuhlbeine, aber auch niedrige Gegenstände wie ein Buch, sind ein echtes Problem.

Um da zu einer besseren Lösung zu kommen habe ich  ein Subprojekt mit optischen Distanzscannern gestartet. Im folgenden Bild sieht man einen Versuchsaufbau mit einem Sharp GP2Y0A02YK0F. Der Sensor ist auf einem Servo montiert, mit dem er um ca. 270 Grad gedreht werden kann. Die Steuerung des Servo und die Auswertung der analogen Distanzdaten des Sensors übernimmt ein Atmega 8.

 

Versuchsaufbau optischer Distanzsensor
Versuchsaufbau optischer Distanzsensor

 

Die Anbindung an das C&C Modul soll dann wieder über TWI/I2C erfolgen. Im Bild sieht man, dass die Schaltung im Moment mit einem UART2USB Modul direkt an den Rechner angebunden ist, um ein einfache Softwareentwicklung zu ermöglichen.

Weitere Probleme sind eine “Abgrunderkennung”, damit das Fahrzeug nicht direkt in den Tod fährt, wenn es sich z.B. einer Tischkante nähert. Auch ein Beschleunigungsensor ist noch geplant um die Neigung des Fahrzeugs in 3 Achsen bestimmen zu können. GPS habe ich angedacht, aber erst mal zurück gestellt, da das Fahrzeug zu klein scheint um sinnvoll per GPS zu navigieren. Außerdem treibt es den Projektpreis deutlich in die Höhe. Last but not least soll das Ding ja auch was können, sodass noch Sensoren für Druck, Feuchtigkeit und Temperatur ggf. ein CCD-Sensor an Bord sollen, damit ich dann unentdeckte Keller oder Gärten erforschen kann 🙂

Vielleicht noch ein paar Worte zur Programmierung: Ich programmiere in C unter Linux. Es gibt dort avr-gcc und avr-lib als leistungsstarke Tools. Wer möchte kann auch Eclipse verwenden. Ich persönlich programmiere lieber ohne eine IDE, solange die Projekte noch überschaubar sind. Zum flashen der Bausteine verwende ich avrdude über die serielle Schnittstelle, sowie ein günstiges Devel-Board von Pollin. Oder ich integriere ein ISP-Schnittstelle direkt in meine Schaltungen. Schaltpläne zeichne ich mit KiCAD. Sollte ich später noch den Bedarf haben Platinen zu erstellen, kann das Layout auch mit KiCAD gemacht werden. Auf Debian oder Ubuntu können avr-gcc, avr-lib, avrdude und KiCAD einfach über APT installiert werden.

Ich möchte an dieser Stelle noch auf meinen Saleae USB-Logic-Analyzer hinweisen. Das Ding ist wirklich eine Perle. Nicht nur, dass es super Linux-Software dafür gibt. Es funktioniert auch prima und die Protokoll-Decoder sind bei der Fehlersuche auf TWI und SPI sehr hilfreich. Noch dazu ist das Gerät wirklich günstig und die Lieferung aus England unproblematisch.

Soweit für Heute. Ich schreibe sicherlich noch weitere Detail-Artikel zu diesem und anderen Atmega-Projekten, wenn ich die Zeit dazu finde. Dann auch mit Source-Code und Funktionsbeweisen. Sollte mich jemand mit der Entwicklung eines neuen Mars-Rovers beauftragen wollen bitte melden 😉

Leave a Reply