Projekte.ctBotLiHu (Struktur)


c't-Bot Projekt

Der c't-Bot ist ein mobiler Roboter mit zwei Rädern, eine runde Grundflaeche der Größe einer CD, zahlreichen Sensoren und einem Mikrocontroller (Atmega32), der in C programmiert wird.

Ziele der Projektarbeit war der Aufbau und die Inbetriebnahme eines c't-Bots. Insbesondere sollten Routinen für die Ansteuerung der Hardwarekomponenten und eine Testprogramm für die Hardware entwickelt werden. Zusätzlich sind Demo-Programme zur Lichtverfolgung, zur Linienverfolgung und zur Steuerung des c't-Bots über die Tastatur eines Steuerrechners entstanden.

Bearbeiter: Yang Li und XingXing Hu

Inhalt:

Hardware

Mikrocontroller

Der ATmega32 von Atmel bildet das Kernstueck der Steuerung des c't-Bots. Mit seinen 32 Ein-und Ausgaengen und 32kByte Flash Speicher ist er derzeit der leistungsfaehigste Prozessor aus der AVR Reihe, der noch im Standard-DIL Gehaeuse verfuegbar ist. Falls der Speicher einmal knapp werden sollte, koennte als pin-kompatibler Mikrocontroller auch der ATmega644 eingesetzt werden. Dieser ist aber derzeit noch nicht verfuegbar.

Trotz der relativ grossen Anzahl von Ports sind alle seine Ports belegt. Deshalb werden ueber Schieberegister noch drei 8-Bit Porterweiterungen angebunden. Dort sind die LEDs und die Enable Leitungen fuer die einzelnen Baugruppen angebunden. über den dritten Erweiterungsport kann optional ein LCD-Modul angeschlossen werden.

Vom Steuer-Programm werden die Sensoren abgefragt und die Aktoren (Motoren, Servos) eingestellt. Ausserdem kuemmert er sich noch um die Kommunikation mit dem PC oder anderen c't-Bots.

Schaltbild

Schaltpläne und Datenblätter der Bauteile

Hauptplatine
[Schaltplan] D1,D2 D3 IC1 IC2 IC3 IC4,IC5,IC6 IC7,IC8 IC9 IC10 TR1-TR6 U1
Sensorplatinen
[Schaltplan] U101-U104 U105 LED101 Abstandsensor
Maussensor
[Schaltplan] U1,U2 LED1 Klammer fuer LED Linsenplatte U
LCD-Display Bausatz
LCD-Display LCD-Modul
Datenfunkmodule
[addLINK_Transceiver_868_MHz_Antenne.pdf]

Weitere Dokumentationen

Software

Entwicklungsumgebung, Kommunikation, Software

Eigene Programme

C-Datein und Makefile
[sensoren.c] [fahrgeradeaus.c] [vorbereitung.c] [fahrdrehung.c] [motor.c] [wait.c] [maus.c] [Makefile.txt] [ena.c] [uart.c] [geschwindigkeitsteuerung.c] [init.c] [timer.c] [shift.c] [adc.c] [led.c] [zusammentest.c] [display.c] [menue.c]
Header-Datein
[shift.h] [menue.h] [vorbereitung.h] [fahrgeradeaus.h] [display.h] [wait.h] [maus.h] [geschwindigkeitsteuerung.h] [motor.h] [init.h] [sensoren.h] [led.h] [fahrdrehung.h] [uart.h] [adc.h] [timer.h] [stdarg.h] [ena.h]

Weitere Weblinks

Bemerkungen

In dieser Arbeit haben wir auch einige Probleme getroffen. Unten werden alle Probleme, die wir gefunden haben, aufgezaehlt, damit man spaeter bei den Erweiterungen des c't Botes oder bei den anderen Arbeiten mit dem c't Bot darauf achten kann.

Achtung beim Zusammenbau des Botes

R19,R20 weg und R17,R18 mit 15k ersetzen , sonst kommen immer falsche Signale der Radsensoren in dem Oszillogramm.

Probleme der Testprogramme

Kollisionserkennung:
Wir wissen, dass der Abstandsensor nur zwischen 10cm bis 80cm einen richtigen Wert anbietet, muss man deswegen darauf aufpassen, dass die Motorgeschwindigkeit nicht zu gross sein soll. Wenn die Geschwindigkeit der Motoren zu gross ist, dann passiert es immer, dass der Bot die 10cm Grenze ueberschreitet. In diesem Fall bietet der Abstandsensor keine richtigen Werten mehr, damit laueft der Roboter dann blind und stoesst die Kollision vorne immer. Ausserdem weil die beiden Abstandsaensoren des Botes detektieren nur die Hindernisse, die sich vor ihm befindet, funktioniert deshalb die beiden Sensoren nicht, wenn der Bot bisschen schraeg zu dem Wand faehrt, weil er keine "Seitenaugen" hat.
Linienverfolgung:
Der Liniensensor des c't-Bots wird von zwei CNY70 gebildet, die vorne auf der Maussensor Platine sitzen. Mit den beiden Sensoren kann der Bot Linien mit einer Dicke von bis zu einige cm erkennen. Dies entspricht dem mittleren Abstand der beiden Sensoren. Der CNY70 ist ein sogenannter Reflex Optokoppler. Der CNY70 besteht aus einer IR LED und einem Foto Transistor, die im selben Gehaeuse sitzen. Das von der IR-LED ausgestrahlte Licht wird vom Fototransistor wieder empfangen. Je nach der Menge des reflektierten Lichts wird der Fototransistor mehr oder weniger leitend. Die Reichweite des Sensors betraegt dabei nur wenige mm. Da das Licht der IR-LED nicht getaktet wird, wie z.B. beim IS471F, kann eine Fremdlichteinstrahlung Stoerungen verursachen, d.h. wegen der Eigenschaft seines Aufbaus kann die Liniesensor sehr stark vom Fremdlicht gestoert werden. Deswegen ist es schwer, einen Grenzwert fuer die beiden Sensoren im Programm festzulegen. Ausserdem drehen sich die beiden Motoren auch sehr schnell, obwohl die gegebene Geschwindigkeit nicht so gross ist. Wegen der oben zwei genannten Probleme kann der Bot nicht so ideal einer Linie verfolgen. Er verliert seinen Weg immer.
Geradeausfahren und sich um bestimmten Winkel drehen:
Beim Ausfuehren des Testprogramm zum Zaehlen, wie viele braue Stuecke gibt es, haben wir gefunden, dass der Bot nicht geradeausfahren kann, obwohl wir die gleiche Geschwindigkeit fuer beide Motoren gegeben haben. Und dann habe ich wieder ein Proramm geschrieben, um den Bot geradeauszufahren lassen, aber funktioniert es auch nicht, weil die Radsensoren keine richtige Werte anbieten koennen. Das Programm fuer Radsensor soll als einen Teimerinterruput aufgeruft. Aber die beiden Radsensoren geben jedes Mal keine richtige Werte aus, die gedrehte Anzahl der Encoderscheibe erhoeht sich sogar um tausend. Wegen des Problems ist es auch nicht moeglich, den Bot sich drehen lassen.


Autor: gkemnitz, Letzte Änderung: 14.04.2011 15:10:00


 TU Clausthal 2005  Impressum