Optische Steuerung von Bewegungen
Im Modul "Mikroprozessortechnik" im Studiengang "Bachelor Multimedia Engineering" der Hochschule Wismar ist dieser kleine Roboter, der komplett selbst entwickelt, zusammengebaut und mit Assembler programmiert wurde, entstanden.
Bauteile
- ATMEL ATMega8 PDIP
- bipolare Schrittmotoren (5V)
- Fotowiderstände A906011
- Treiber ICs (SN754410)
- LC-Display
- Spannungsregler
- 9V Batterie
- Widerstände, Kondensatoren, Kabel,...
Kurzreferat
Dieses Roboterfahrzeug ist in einer Projektarbeit unter dem Thema "Optische Steuerung von Bewegungen" enstanden. Es soll ein Fahrzeug entwickelt werden, das einer Lichtquelle (z.B. Mensch mit Taschenlampe) folgt. Als Prozessor wird ein ATMEL ATMega8 PDIP verwendet (8 Bit, 10 Bit ADU, 3 Ports, max. 16 MHz, jedoch auf 1 MHz getaktet), als Sensoren kommen 2 Fotowiderstände vom Typ A906011 zum Einsatz. Angetrieben wird das Fahrzeug von zwei bipolaren Schrittmotoren (5V), die sich jedoch im Nachhinein als zu schwach erwiesen, sodass das Fahrzeug sich nur auf abschüssiger Fläche bewegt. Die Schrittmotoren werden von zwei Treiber ICs (SN754410) angesteuert. Ein LC-Display der Firma ElectronicAssembly dient als Anzeige für die Fahrtrichtung und die Helligkeitswerte der Sensoren. Die Stromversorgung wird von einem 9V-Block übernommen (durch Spannungsregler auf 5V geregelt). Die Programmierung des Prozessors erfolgt über die ISP-Schnittstelle mit Hilfe des Programmiergerätes ICprog-AVR 1.1. Als Programmiersprache wird Assembler in der Entwicklungsumgebung AVR Studio 4 benutzt.
Realisierung
Zur Auswertung der Helligkeit werden an der Vorderseite (jeweils rechts und links) des Roboters zwei Fotowiderstände über einen Spannungsteiler an den AD-Wandler angeschlossen. Je höher die Helligkeit ist, desto geringer ist der (Foto-)Widerstand, desto geringer ist die abgegriffene Spannung, desto geringer ist der vom AD-Wandler ausgegebene Wert. Der Widerstand wurde dabei so ausgewählt, dass er ca. in der Mitte zwischen dem dunkelsten und hellsten Fotowiderstandswert in einem „normalen“ Zimmer liegt. Dabei darf man nicht von den im Datenblatt angegebenen Minimal- und Maximalwerten ausgehen, da diese in einem „normalen“ Zimmer selten erreicht werden und somit den Messbereich unnötig vergrößern, was zu einer enormen Ungenauigkeit führen kann. Es müssen also vorab Testmessungen vorgenommen werden um den Wertebereich möglichst genau anpassen zu können. Zur Fortbewegung werden zwei Schrittmotoren verwendet, da sich diese präzise (schrittgenau) steuern lassen. Die Betriebsspannung sollte dabei der Betriebsspannung des Prozessors entsprechen. Da der Prozessor nicht den erforderlichen Strom liefern kann, müssen entsprechende Treiber-ICs zwischengeschaltet werden.
Um dem Roboter die Fähigkeit zu verleihen, einem Lichtsignal folgen zu können, muss er es erstmal „sehen“. Die Fotowiderstände liefern dabei in Verbindung mit dem Spannungsteiler einen Spannungswert, der mit der Helligkeit korrespondiert (je heller, desto kleiner ist die Spannung). Dieser Wert wird nun auf den ADWandler gegeben. Im ersten Schritt wird nun die Umgebungshelligkeit eingelesen (Summe der beiden Helligkeitswerte durch zwei dividiert) und die entsprechende Toleranz ermittelt. Als Toleranzwert haben sich 12,5% (2er Potenz -> durch 8 teilen = 3 mal shift right = 12,5%) als praktisch erwiesen, da dies bei einer Maximaldunkelheit von 255 32 Stufen wären. Bei mehr Helligkeit wird auch die (absolute) Toleranz kleiner. Dies ist so gewollt, da der Fotowiderstand bei Dunkelheit wesentlich empfindlicher auf Helligkeitsänderungen reagiert als bei Helligkeit. Die Toleranz ist notwendig, damit der Roboter bei leicht unterschiedlichen Werten zwischen dem rechten und linken Sensor trotzdem geradeaus fährt bzw. erst beginnt loszufahren, wenn er eine Lichtquelle „gesehen“ hat, die um den absoluten Toleranzwert heller als das Umgebungslicht ist. Wenn der rechte Sensor den deutlich kleineren (helleren) Wert anzeigt, soll nach rechts gefahren werden. Analog dazu funktioniert der linke Sensor. Dabei ist, wie bereits erwähnt, der Toleranzwert zu beachten. Um nach rechts zu fahren, muss sich der linke Motor bewegen, um nach links zu fahren der rechte, und um geradeaus zu fahren müssen sich beide Motoren synchron bewegen. Schrittmotoren besitzen jeweils 2 Spulen (mit je zwei Anschlüssen) die nacheinander so gepolt werden müssen, dass eine Bewegung des Rotors (und damit der Achse) erfolgt. Beim Ansteuern der Motoren können ruckartige Sprünge auftreten, wenn man sich nach dem Ausschalten bzw. nach jedem Schritt nicht die aktuelle Schrittposition (1 bis 4) merkt (ROM). Um dieses Problem einfach zu umgehen, wird bei jedem Bewegungsbefehl (z.B. „nach rechts“) immer um einen Zyklus, d.h. vier Schritte gedreht. Somit beginnen beide Motoren nach jedem Befehl wieder an Schrittposition 1. Da die Motoren nur eine gewisse Maximalfrequenz aushalten (ganz abgesehen davon, dass der Roboter sich sonst viel zu schnell bewegen würde), muss nach jedem Schritt eine Pause eingefügt werden. Dazu wird sich des Timers/Counters und des TimerOverflow-Interrupts bedient.
Ergebnisse
Der Roboter funktioniert den Erwartungen entsprechend. Es wurden keine Fehler festgestellt. Ein kleines Manko ist die Schwäche der Schrittmotoren, da sie es nur auf leicht abschüssiger Fläche schaffen, das Fahrzeug zu bewegen.
Kommentare
Noch keine Kommentare.
