Platine der ATmega8-Spaltenkamera:

Kamera mit ATmega8

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 x 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&middot20=7 Sekunden benötigt. Man muss also sehr ruhig dasitzen, damit eine Portraitaufnahme nicht verwackelt wird.

Screenshot 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 ATmeaga8-Kamera

Kameramodul als Liniensensor ausgerichtet

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