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