ATmega8-Kamera
Kamera mit ATMEGA8.
Platine der ATmega8-Spaltenkamera
Zu sehen ist der ATmega8-Prozessor, das Kameramodul der mit 3 Transistoren
aufgebaute Verstärker und Sync-Separator sowie eine IR-LED zur Kommunikation
und eine 5x7 Anzeige.
Einführung
Kleine Roboter für Bastler sind mit einer Vielzahl von Sensoren ausgestattet.
Am häufigsten finden sich Taster, Lichtsensoren, Abstandssensoren.
Es gibt auch schon einige Kamerasysteme für Hobbyroboter [1].
Die Bilderkennung benötigt gewöhnlich hohe Rechenleistungen, bei denen selbst
PC-Prozessoren mit ihren Gigahertz-Taktfrequenzen und mehren Kernen an Grenzen
stoßen.
Dass 8Bit-Prozessoren für die Bildverarbeitung tauglich sind,
ist deshalb relativ unwahrscheinlich.
Allerdings hat die CMU-Cam1 bereits gezeigt, dass einfachste
Bildverarbeitungsalgorithmen auch schon auf 8Bit-Prozessoren möglich ist.
Idealerweise sollte er der Bildsensor zum Anschluss an ein digitales System
digitale Signale zur Verfügung stellen. Roboterbastler verwenden oft gebrauchte
Handykameras oder Gameboy-Kameras [2], die man im Internet ersteigern kann und
die eine serielle Schnittstelle haben, deren Protokoll bekannt ist.
Der Nachteil dieses Vorgehens ist allerdings, dass man Glück braucht eine solche Kamera zu finden.
Die Kameramodule mit Videosignalausgang dürften zwar im Zuge der
Digitalisierung von Bildübertragunssystemen zunehmend verdrängt werden, dafür
gibt es aber diese Kameramodule sehr günstig zu kaufen.
In diesem Artikel wird gezeigt, wie man einen kleines
Schwarz/Weiss-Bildsensormodul für ca. 10 Euro mit einer kleinen Schaltung,
die 3 Transistoren beinhaltet, an einen ATmega8-Prozessor anschließen und
Eigenschaften des Bildsignales auswerten kann.
Es gibt schon mehrfache Schaltvorschläge, wie man ein Videosignal mit einem
ATmega8 und 4 Widerständen erzeugen und einen Videomonitor damit ansteuern kann.
Der umgekehrte Weg, ein Schwarz/Weiss-Videosignal in einen ATmega8 einzulesen,
soll in diesem Artikel vorgestellt werden.
Das RAM des ATmega8-Mikrocontroller ist 1KByte groß. Bei dieser Speichergröße
kann man bei 8Bit-Auflösung ein maximal 33*33 Bildpunkte großes Bild speichern,
was ungefähr der Auflösung eines Icons auf dem Computerdesktop enspricht.
Oder man könnte z.B. 5 Spalten zu 200 Zeilen abspeichern.
Hier sind intelligente Bildverarbeitungsalgorithmen gefragt,
die mit so wenig Bildinformation arbeiten können.
Videosignal
Das Videosignal beinhaltet einen negativen Impuls zur Synchronisation des
Bildwechsels und an jedem Zeilenanfang eine negativen Impuls zur
Zeilensynchronisation.
Nach dem Impuls für die Zeilensynchronisation kommt eine Pause und danach
das Analogsignal mit der Helligkeitsinformation.
Aufbau des Videosignals eines analogen Kameramoduls.
Die Schaltung
Die Schaltung besteht aus dem Kameramodul, Verstärker Syncpulse-Separator
und einem ATmega8.
Die Sysnchronisationspulse werden auf den Komparatoreingang des ATmega8 geführt,
damit durch die Synchronisationspulse schnell Interrupts ausgelöst werden können.
Der Ausgang des Videoverstärkers wird direkt an einen AD-Wandlereingang des
Prozessors angeschlossen.
Für die Trennung der Synchronisationssignale gibt es spezielle IC's z.B. LM1881.
Dieses IC gibt es für unter 3€.
Noch günstiger geht es mit einer Schaltung aus
diskreten Transistoren und deshalb wurde der Sync-Separator mit Transistoren
aufgebaut.
Schaltung des Videosignalverstärkers und des Sync-Separators.
Sig: Signal wird direkt an einen ADC-Eingang des ATmega8 angeschlossen
Sync: Eingang des ATmega8 Komparators
SyncComp: zweiter Eingang des ATmega8 Komparators
Software
Das Programm wartet in der Hauptschleife auf den Bildwechselimpuls.
Wenn der Bildwechel detektiert wurde, wird der Interrupt zur Zeilendetektion
freigeschaltet. Danach löst jeder Zeilensynchronisationsimpuls einen Interrupt aus.
Am Anfang der Intteruptroutine befindet sich eine Warteschleife,
deren Länge abhängig von der gewünschten einzulesenden Spalte ist.
Nach der Wartezeit wird die Sample&Hold Stufe des AD-Wandlers getriggert,
damit der AD-Wandler mit der Wandlung des Spannungswertes beginnen kann.
Da die Bildwechselfrequenz bei einem Videosignal 50Hz beträgt, dauert die
Aufnahme einer Bildspalte also 20ms.
Will man mehre Spalten aufnehmen, um sie zu einem Bild zusammenzufügen,
dauert der Vorgang also n*20ms. Für ein Bild mit 350 Spalten werden nach diesem
Verfahren also 350*30=7 Sekunden benötigt.
Man muss also sehr ruhig dasitzen, damit eine Portraitaufnahme nicht verwackelt wird.
Das Bild wurde spaltenweise aufgenommen und per RS232-Schnittstelle zum PC übertragen und dargestellt.
Mögliche Anwendungen
Man könnte die Schaltung als Linienfolgesensor für einen Roboter verweden.
Die Kamera müsste dann hochkant auf den Roboter montiert werden, damit die
Horizontlinie auf eine Spalte abgebildet wird.
Ist die Linie Schwarz auf weißem Grund, sucht man einfach nach dem kleinsten
Helligkeitswert der dann als Position der Linie in der Spalte interpretiert wird.
Eine andere Anwendung wäre ein Bewegungssensor. Das Bild könnte z.B. in 10x10
Punkte unterteilt werden und eine Änderung der Helligkeit dieser Punkte zeigt
eine Bewegung an dieser Stelle an.
Roboter mit ATmega8-Kamera.
Kameramodul nach unten ausgereichtet.
Literaturliste
[1] Intelligente Kameras für Bastelroboter:
http://www.cs.cmu.edu/~cmucam/
http://www.jrobot.net/Projects/AVRcam.html
http://www.pob-technology.com/pob/crbst_4.html
http://www.seattlerobotics.org/encoder/200205/gbcam.html
[2] Jugendforscht-Roboter:
Projekt von Tobias Schlegel, Bildverarbeitungsalgorithmen für 8Bit-Mikrocontroller:
http://www.tobias-schlegel.de/?id=log
[3] Roboternavigation mit einfacher Bildverarbeitung:
http://www.erkenntnishorizont.de/ki/bildverarb/optreakthv.c.php?screen=800
[4] Erklärungen zum Videosignal:
http://de.wikipedia.org/wiki/Videosignal
Λ Seitenanfang