PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Dringend!] Kamera auslesen



Elektronik303
27.03.2008, 15:38
Hi all,

Ich habe eine billige eine Kamera finden können
(dazu hab ich leider nur folgende Informationen:
Techn. Daten:
Spannung / Strom 5VDC (+/-5%) 10mA
Brennweite f=4,9mm
Öffnungswinkel 36° x 27°
Blende F=2,8
Bildwandler 1/4" CMOS
Video Ausgang 1Vpp / 75 Ohm
Auflösung = 260 TV-Linien
Pixelanzahl EIA Mode = 320(H) x 240(V)

Sie hat auf der einen Seite 2 auf der anderen 3 Pins
)
Bei einem beistehenden Text ist die Rede von einem LM1881 (http://ee.usc.edu/library/ee459/datasheets/LM1881.pdf) um das Signal zu wandeln, ich denke danach erhalte ich durch diesen Chip ein PAL Kompatibles Signal, doch wie funktioniert dieses PAL Verfahren? Was ich später haben will ist eine Bildverarbeitung um mit meinem Roboter Linien zu fahren (Ich will das verfahren sehr einfach halten, mein Programm soll später erkennen ob die Linie eher Rechts oder eher Links ist). Dafür würde ich gerne an jedem Pixel eine Graustufe haben, 8 Bit reichen da völlig aus. Ich will also Quasi bei einer Auflösung von 320*240 Pixel an jeden Pixel einen Grauwert abrufen können.

Erstmal die Frage, ist das möglich oder nicht? Ich will eine Hardware mit einem Mega128 mit externem RAM, doch erstmal die Frage, wie viel brauch ich? Mit meiner sehr simplen Rechnung bin ich auf 75kB gekommen, könnte das hinkommen? Und wo krieg ich einen passenden, der Mega128 unterstützt die ja von Haus aus, hat ja extra Anschlüsse fürn Externen RAM, brauch also kein I2C sein, hauptsache schnell. Laufen soll das ganze auf 16 Mhz.

Hört sich das realistisch an?

Also nochmal alle Fragen auf einem Haufen:
- Wie krieg ich aus dem Videoformatkrams die Informationen die ich haben will (für 320*240 Pixel jeweils eine Grauabstufung von 8 bit)
- geht das alles mit dem Hradware Setup?
- Wäre es schnell genug um damit auf Linie zu fahren?

So, genug Fragen, ich will antworten \:D/

Mfg

Christian

chr-mt
27.03.2008, 16:22
Hi,

LM1881 um das Signal zu wandeln, ich denke danach erhalte ich durch diesen Chip ein PAL Kompatibles Signal
Nö. Gerade andersrum...
Der LM 1881 ist ein Sync-Separator, holt also aus einem "Pal kompatiblen" Videosignal die Synchronimpulse raus.



doch wie funktioniert dieses PAL Verfahren?

http://de.wikipedia.org/wiki/Phase_Alternating_Line

Gruß
Christopher

Elektronik303
27.03.2008, 16:55
Hmm, die Kamera ist ja aber Schwarz Weiß, also hat PAL letzten Endes nix mehr damit zu tun oder? Und was mach ich nun mit den Synchronimpulsen? Wie verarbeite ich die?

vklaffehn
27.03.2008, 17:14
Moin!
Ich mache selber sowas, und Radbruch hat eigentlich schon alles rausgefunden zu dem Thema, schau mal hier
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=33228&highlight=kamera

Elektronik303
27.03.2008, 20:50
Ah cool, vielen Dank für den Link, ich werds mal mit nem externen ADC nachbauen, ma sehn wie weit ich komme!

Mfg

Christian

radbruch
27.03.2008, 22:56
Hallo Christian

Für echte Bildverarbeitung sind die AVRs nicht besonders gut geeignet. Ob das mit einem Mega128 mit externem Speicher und schnellerem ADC über I2C viel besser als mit meinem 8MHz-Mega32 funktioniert kann ich nicht sagen. Aber um eine Linie zu erkennen und ihr folgen zu können benötigt man auch keine 320X240 Bildpunkte mit 8-Bit Auflösung. Man muss auch nicht jedes Halbbild auswerten dass die Kamera liefert.

Der ADC hat laut Atmel-Spezifikation sowieso keine Chance das Bas-Bild einzulesen, aber wie ich in meinem Kamera-Thread gezeigt habe, wenn man ihn etwas "quält" kann er es schon. Um zu verstehen, wie das funktioniert solltest du dich etwas in den Aufbau des Signals einlesen. Im Wesentlichen sieht das so aus:

Jede Zeile startet mit einem Syncronimpuls dem die Bilddaten folgen. Jede Seite startet mit einem besonders langem Syncronimpuls. Schwarz wird mit ca. 0,3V dargestellt, weiss mit ca. 1V. Spannungen kleiner 0,3V bedeutet Syncronimpuls.

Um nun das Bild einzulesen muss man zuerst die Sycronimpulse erkennen. Dazu schaltet man den ADC auf superschnellen Dauerlauf mit linksbündigem Ergebniss von dem man nur das High-Byte (ADCH) einliest und auswertet. Bei meinem 8MHz-Mega32 hatte ich prescaler /2 verwendet, möglicherweise muss man bei 16MHz einen größeren Teiler wählen. Als Referenzspannung nimmt man die internen 2,56V (sofern vorhanden). Da nur die oberen 8 Bit ausgewertet werden erhält man einen Wertebereich von 0 bis 255 für 0V bis 2,56V. (Das der ADC mit der Wandlung nicht immer fertig ist wird im Folgenden missachtet!)

Den Start des Syncronimpulses erkennt man nun daran, dass der eingelesenen Wert deutlich unter 0,3V (also unter 30) ist, der optimale Wert ist etwas von der Hardware abhängig. Dann wartet man bis der Wert wieder über 0,3V ist und zählt dabei die Anzahl der ADC-Messungen im Dauerlauf. Das ergibt die Länge des Sync. Dann zählt man die Anzahl der Messungen bis zum nächsten Sycronimpuls, das ist die Zeilenlänge. Der Code dazu sieht etwa so aus:

syncdauer=0;
zeilendauer=0;
while(ADCH>30); // warten auf Anfang Syncimpuls
while(ADCH<30) syncdauer++; // Synclänge messen
while(ADCH>30) zeilendauer++; // Zeilenlänge messen

Anstelle der Zeilendauer kann man auch die Messwerte speichern:

uint8_t werte[255]; // ich schaffte 63 Werte
uint8_t *speicherzeiger;
speicherzeiger=&werte[0];
syncdauer=0;
while(ADCH>20); // warten auf Anfang Syncimpuls
while(ADCH<30) syncdauer++; // Synclänge messen
do *speicherzeiger=ADCH; while (*speicherzeiger++ > 20); // Werte einlesen

Das wäre der Einstieg. Anhand der Syncdauer kann man dann noch den Bildstart erkennen. Bei mir war das länger als 40:

do
{
syncdauer=0; while (ADCH > 20); while (ADCH < 30) syncdauer++;
} while (syncdauer < 40);

Zu Beginn jeder Seite kommen einige Zeilen Schrott die man überlesen sollte:

zeile=10; // 10 Zeilen überspringen
while(zeile--) { while(ADCH > 20); while(ADCH < 30); }

(20/30 ergibt eine kleine Hysterese um die Flanken besser zu erkennen)

So kann man nun jede beliebige Zeile einlesen, allerdings nur eine pro Halbbild und nur mit geringer x-Auflösung. Wie man diese x-Auflösung deutlich erhöhen kann beschreibe ich später mal auf Nachfrage (Man kann es auch im Kamera-Thread nachlesen).

Gruß

mic

Elektronik303
27.03.2008, 23:15
Cool, schonmal Danke für die Antwort, das bringt mich schonmal ein Stückchen weiter.
Mit deinem Text habe ich jetzt auch das Bild hier verstanden

http://upload.wikimedia.org/wikipedia/commons/f/fb/BAS_Zeilensignal_unmoduliert.PNG

Das heißt, da wo dieser Balken nach unten geht beginnt die Zeile, dann kommen 5,8mS Pause, danach werden die Informationen übertragen, undzwar so lange bis der Balken wieder nach unten geht (also unter 0,3 V).
Soweit richtig?
Dann ist die Zeile fertig, kommt die nächste Zeile, und immer weiter, bis ich dann irgendwann (bei meiner Auflösung) bei der 320ten Zeile bin (geh ich jetzt von aus wegen 320*240 Pixel auflösung) da gehts dann wieder von vorne los?
Aber ich kann mir irgendwie nicht vorstellen dass jede Pixel Zeile einzeln übertragen wird, oder doch? Also ist irgendwie die Frage, was ist eine Zeile überhaupt? Hört sich jetzt ein wenig dumm an die Frage, aber ich weiß es echt nicht.

Und wenn es nach Zeilen geht, wie merk ich dass er die nächste "Zelle" ausliest. Im Bild z.b. erst Grau dann hellgrau, wie merk ich dass er da dann n anderen Punkt grade ausliest?

Also man merkt, ein paar Verständnisschwierigkeiten gibts schon noch. Ich werd mir das ganze mal morgen anschauen, vllt. ist es auch einfach zu spät :-({|=


Aber auf jeden Fall Danke für deine Hilfe!

radbruch
28.03.2008, 00:03
Hallo

In der Grafik sieht man von links nach rechts: Der Rest der vorherigen Zeile, die Schwarzschulter (wenn ich mich recht erinnere), den Sync, zweite Schwarzschulter und dann die "Daten". Diese würden auf einem Bildschirm eine Linie erzeugen, je 25% der Bildschirmbreite schwarz, grau, hellgrau und weiss. Abschluss bildet dann der Sync für die nächste Zeile.

Echte "Daten" sehen aus wie eine wilde Zickzack-Linie mit allen Werte zwischen 0,3 und max. Wenn auf dem Bildschirm in der Mitte eine senkrechte schwarze Linie dargestellt würde, wären die Daten am Anfang und Ende der Zeile eher weiss, in der Mitte eher Schwarz. Bei einem total schwarzen Bild (Optik abgedeckt) sind alle Daten nahe 0,3V, bei Gegenlicht nahe max. Die Werte schwanken, weil der Weissabgleich der Kamera reinspuckt.

Gruß

mic

Elektronik303
28.03.2008, 16:14
Das heißt am Anfang messe ich den Wert von einem Sync zum anderen, das sind dann z.B. 80µs. Und alle Zeilen danach sind dann also 80µs lang, oder kann das schwanken? Ich meine im Prinzip, die 56µs die da stehen, sind dass dann immer 56µs oder kann sich das ändern? (Hoffe du verstehst was ich meine)

Und auch noch nicht verstanden habe ist wie ich herausfinde wann das Bild "fertig" ist, wann also alle Zeilen übertragen sind.
Bei Wikipedia steht:

In der gebräuchlichen analogen Video- und TV-Technik werden die sogenannten HSYNC- und VSYNC-Signale verwendet. Der HSYNC dient der horizontalen Synchronisation der in einer Zeile wiedergegebenen Bilddaten. Der VSYNC koordiniert dagegen den Start der ersten Zeile in der vertikalen Richtung
Das verwirrt mich jetzt vollkommen. Wenn ich das jetzt wissen würde könnte ich das ganze System verstehen, so kompliziert wie ich erst dachte ist es ja eig garnicht

Aber dann jetzt mal wieder zur Hardware, brauche ich den LM1881 eig? Weil auf deinem Thread hast du die Cam direkt drangeschlossen. Mich verwirrt jetzt ein wenig dass an dem Kamera Modul 5 Anschlüsse sind, auf einer Seite 2 auf der anderen 3. Da wo die 2 sind kommt VCC und GND hin, das ist ja einfach, aber was mach ich mit den 3 anderen Pins? Ich muss mal den Anbieter auf ein Datenblatt ansprechen...


EDIT: Noch ne Frage, wieviel XRAM kann der AVR verarbeiten, schafft der nur 64kb? Das steht jedenfalls in der Bascom Hilfe, im Datenblatt hab ich aber keine Begrenzung finden könne. Ich wollte jetzt 512 Kb (Ich weiß... Aber lieber zu viel als zu wenig ^^) rangeben, wollt aber erst fragen, nicht das ich unnötig Geld ausgebe...

radbruch
28.03.2008, 17:13
Hallo

Die Zeiten sind sehr konstant, aber die kann man mit dem AVR nicht messen weil die Abtastrate zu niedrig ist. Man liest Werte ein bis der nächste Sync erkannt wird. Die Messungen in den Beispielen oben sind eher relativ zu bewerten, kurzer Sync- langer Sync. Diese Zeiten kann man nicht ändern, denn sie passen zu der Geschwindigkeit mit der ein Elektronenstrahl über die Rückseite der Mattscheibe düst. Deshalb gibt es auch keine definierten Bildpunkte wie bei einem Computerscreen.

Das Halbbild endet mit dem langen Seitensync, danach startet das nächste Halbbild. Halbbild bedeutet, es wird nur jede zweite Zeile gesendet, der Bildschirm stellt beide Halbbilder ineinander da (*würks*)

V-sync und H-sync habe ich auch noch nie richtig gecheckt, offensichtlich bin ich da nicht der einzige. Ich glaube, der V-Sync ist der Seitenstart und H-Sync der Zeilenstart (unverbindlich) Auf jeden Fall startet die Seite nach dem langen Sync...

Wenn du die Versorgungspins kennst kannst du da mal 5V anschliesen und an den anderen Pins die Spannung messen. Der Signalausgang hat bei dunkel ca. 0,3V, bei sehr hell irgendwas bei 1,5V (unbelastet). Ein zweiter Pin könnte ein Gain-Eingang sein, das ist die Verstärkung, der dritte vielleicht der Weisabgleich? Datenblatt wäre natürlich optimal.


nicht das ich unnötig Geld ausgebe...
Egal wieviel, es ist unnötig! Was willst du mit 320X240 8-Bit-Werten anfangen? Dein Mega128 wird total überlastet sein. Und du vermutlich auch...

Gruß

mic

Elektronik303
28.03.2008, 18:05
Jo hab ihm ne Mail geschrieben (Dem Besitzer des Shops von dem ich die Cam hab).

Also du denkst dass kein weiterer Ram nötig wäre? Weil damals bei den Threads zur Gameboy Cam gab es so massig viele Beiträge ihn denen die Rede von zu wenig Ram wäre, ist ja auch nur 4Kb beim M128.
Soll ich also den XRAM ganz weglassen?

Und ich hab das jetzt so verstanden:
Ein kurzer Impuls, vllt. 5µs lang, bei unter 0,3V beginnt die Zeile, dann kommen Schwarzschultern die ich übergehen kann. Dann werden die Daten gesendet, 0,3V sind schwarz, 1V sind weiß. Irgendwann nach ca. 60µs ist die Datensendezeit vorbei, das signalisiert mir ein wieder ca. 5µs langer Sync der schon der nächsten Zeile angehört, also folgen direkt auf diesen Sync wieder Daten. Irgendwann kommt ein längerer Sync (wie lang?) der Signalisiert dass das nächste Halbbild übertragen wird. Jetzt mal ne Skizze dazu damit ich nicht falsch verstehe was ein Halbbild ist:

Erst werden alle blauen Zeilen übertragen, dann alle Roten (Oder umgekehrt, geht ja nur ums Prinzip)?
ist das soweit richtig?

radbruch
28.03.2008, 19:45
Jepp, du hast es.

Es wird dir vermutlich nicht gelingen zwischen Sync und Schwarzschulter zu unterscheiden, interpretiere einfach beides zusammen als Sync. Der Seitensync ist bei mir über 40 mal länger als der Zeilensync.

Ob du wirklich mehr Speicher benötigst wirst du selbst merken. Ich bin auch nur ein Cam-Newbee und hatte bescheidene 32*32 Bildchen gemacht, verteilt auf mehrere Halbbilder. Aber dann waren für mich andere Dinge interessant und ich habe die Cam eingelagert. Vielleicht gelingt dir ja mehr. Ich mache vermutlich selbst nochmal irgendwann einen neuen Anlauf...

Noch die Methode für höhere x-Auflösungen: Nach dem Zeilensync wartet man kurz und liest dann zweimal den ADC aus. Erster Wert ist Schrott, der Zweite ist gültig. So kann man zwar nur einen Punkt pro Zeile auslesen, aber die Auflösung ist dann der maximale Zählwert pro Zeile:

delay=123; // 123. Pixel einlesen
while(ADCH>20); // warten auf Anfang Syncimpuls
while(ADCH<30); // warten auf Ende Syncimpuls
while(delay--); // warten bis gewünschtes Pixel kommt
*speicherzeiger=ADCH; // Schrott wegwerfen
*speicherzeiger++=ADCH; // 123. Pixel einlesen

Den maximalen Wert ermittelt man indem man delay solange vergrößert bis der eingelesene Wert kleiner 0,3V ist, also der nächste Sync beginnt. Das hängt dann vom Takt des Kontrollers ab.

Viel Erfolg

mic

Elektronik303
28.03.2008, 21:00
Ok, dann bin ich schon ein großes Stück weiter.

Und ich schlussfolgere jetzt einfach mal: Ich brauche kein LM1881, ich schliese die Cam direkt an ADC an, richtig?

Als ADC benutz ich dann den ADC0820, wie ich den anschliese kommt später, das blick ich bisher nämlich auch noch nich soganz, aber das ist was anderes.

Ich kann das Signal der Cam auch einfach (übern Cinch auf der einen Seite mit GND) mit dem Fernseher verbinden?

Mit dem Ram werd ich mal gucken, dazu auch noch ne Frage, macht es nen Geschwindigkeitsunterschied ob ich 32kb XRAM hab oder 64kb? Geht das dann deutlich langsamer drauf zuzugreifen oder ist das scheißegal wie viel XRAM ich nehme von dem Speed her?


Wenn die Cam da ist werde ich versuchen sie so zu programmieren dass sie auf einer Linie fahren kann, ich bin gespannt!

radbruch
28.03.2008, 21:14
Hallo

Ja, die Cam direkt am ADC, eventuell noch ein Lastwiderstand gegen GND. (Bei mir waren es 10K) )Ich hatte parallel noch eine Cinch-Buchse angeschlossen und darüber ein Kontrollbild zum TV gesendet.

Warum ein externer ADC? Für den Anfang tuts der im Mega128 auch.

Mein RP6 hat mit 2KB-SRam die Linie erkannt, ich glaube nicht das mehr Speicher Vorteile bringt. Aber das hatte ich wohl schon erwähnt...

Gruß

mic

Elektronik303
28.03.2008, 21:41
Ja, erstmal kann mans ja auch so probieren, ich werd sehen sobald alles aufgebaut ist. Bis dahin erstmal vielen vielen Dank für deine Hilfe!

Elektronik303
29.03.2008, 17:44
So, ich hab was schönes gefunden, den PCF8591. Ein I²C IC mit 4 Channel ADC und 1 Channel DAC.
Im Datenblatt (http://www.selectronic.fr/includes_selectronic/pdf/Philips/PCF8591.pdf) steht dass die Wandlungsgeschwindigkeit vom Quarz abhängt, der kann maximal 1,25Mhz haben (So wie ich das in der Tabelle auf Seite 17 verstanden habe). Wie schnell führt der ADC dann eine Umwandlung durch (in µs)? Bzw. wie lange braucht es dass mein Mega128 den Wert dann auch weiß (Also einschließlich I²C Zeit)? So könnte man abwegen ob es sich lohnen würde den PCF8591 statt dem internen ADC zu nutzen.

Und auch habe ich noch eine Verständnissfrage zum ADC des AVR's. Im Wiki steht dass eine Geschwindigkeit bis 1000Khz möglich ist. Aber warum nicht mehr? Wenn ich 16Mhz habe, den Prescaler 8 verwende komme ich auf 2000000Hz das entspricht dann schon 2000Khz. Zwar ist es dann nicht sehr genau, aber doch das doppelte von 1000Khz. Warum steht dann im Wiki dass nur 1000Khz möglich sind?

Besserwessi
29.03.2008, 18:57
Beim externen RAM ist es egal wie viel man nimmt, solange man zwischen 512 bytes und 64 kBytes bleibt. Für mehr als 64 K müßte man wohl noch eine extra Bankumschatung nehmen.

Man kann den ADC takt auch höher als 1 Mhz wählen, aber dann ist mit deutlich größeren Fehlern zu rechnen. Bei 1 MHz ADC takt kann man noch etwa 8 Bit erwarten. Wenn man mehr nimmt, sollte man wenigstens auf einen Eingangswiderstand von unter 5 KOhm achten, denn die Sampling Periode wird ja mit verkürtzt.
Wenn schon ein externer AD Wandler, dann wohl gleich ein ADS820 oder was ähnliches. Mit etwas Glück sollte man den auch gleich an den Datenbus zum XRAM anschließen können.

Elektronik303
29.03.2008, 21:07
Ich hab jetzt bei Analog ein gefunden, http://pdf1.alldatasheet.com/datasheet-pdf/view/48312/AD/AD7822.html
mit Parallel Interface, wies funktioniert muss ich noch sehen, ist aber verdammt schnell das Teil, 420ns für eine Umwandlung, das sollte wohl reichen. Sieht das vernünftig und brauchbar aus? Ich kanns ja an jeden beliebigen Port anschliesen oder? Denn PC und PA brauch ich für den XRAM.
Und geht der AD7822 leicht anzusteuern oder ist das mit Bascom kaum zu schaffen?

Besserwessi
30.03.2008, 09:42
Das Auslesen eines paralleln ADC sollte an jedem port gehen. Es sollte nur ein ganzer Port sein, damit man die 8 Bits auch gleich zusammen hat.
Die Ansterung solle auch in BASCOM gehen, aber um den Wandler voll auszunutzen baucht man wohl Assembler. Soweit ich weiß kann man ja auch in BASCOM inline Assembler nutzen um die kleine Einleseschleife zu beschleunigen.

Als alternativer Wandler wäre auch ein ADS820 möglich, der ist recht gut zu bekommen. Den hatte ich oben eigentlich gemeint.

Thoralf
31.03.2008, 09:00
wenn es nur um einen Linienfolger gehen soll, würde ich mir über die RAM-Größe überhaupt keine Gedanken machen. Es genügt, wenn man nur eine Zeile - sagen wir mal - knapp oberhalb der Bildmitte und ein knapp unterhalb der Mitte digitalisiert und abspeichert. Man bildet den Betrag der Differenz der beiden Zeilen und speichert diesen wieder im RAM ab (meinetwegen ab der Adresse der ersten Zeile. Nun sucht man das Maximum in der Differenzzeile. Dessen Adresse ist die Posiotion und damit die Lageabweichung der schwarzen oder weißen Linie.
Die Digitalisierung würde ich auch mit einem parallelem ADC machen. Damit wäre der µC weitgehendnd entlastet und der RAM-Verbrauch minimal.

Elektronik303
31.03.2008, 14:16
Cool, danke für die Idee, ich wollte eig erst ein Array aus allen Daten erstellen, aber einfach eine Differenz zu erechnen... Das Problem werden dann nur die Aufgeklebten "Opfer" die es zu erkennen gilt, da muss ich mir dann was einfallen lassen, aber das sollte dann auch gehen.
Danke, hast mich echt weitergebracht!

Elektronik303
02.04.2008, 16:02
So, jetzt ist die Cam da, hat auch ne ganz gute Auflösung wenn sie weit genug entfernt und die Linse richtig eingestellt ist (Undzwar soweit vom Chip weg dass das Linsengewinde nicht mehr "drin" ist..). Das Problem: Die Kamera muss ziemlich weit vom Boden weg um die Linie scharf zu erkennen (Und überhaupt vollständig drauf zu haben). Müssten schon so um die 20 cm sein. Ich will die Cam aber nicht so weit vom Boden weg haben,kanns auch nicht weil der Roboter dann zu groß wird.

Die Frage jetzt ist, wie kriege ich mehr Sichtbereich in die Kamera, also so dass die Kamera nicht mehr soweit vom Boden weg muss und möglichst auch nicht den Roboter sondern die Linie filmt. Ich hatte mir überlegt das geht mit einer Streulinse, aber geht das echt? Und ist es dann auch noch scharf?

Bitte schnell antworten, in 3 Wochen muss der Roboter schon fahren *hilfe*

Besserwessi
02.04.2008, 18:23
Für einen kürzeren Abstand könnte man eine Linse mit kleinerer Brennweite nehmen. Bei einer Sensorgröße im Bereich von etwa 2 mm sollte man bis etwa 5 mm Brennweite gehen können. Bei sehr kleiner Brennweite gibt es verzerrungen, aber für die Linienerkennung sollte das imme noch reichen. Eventuell könnte sogar eine Linse aus einem alten CDROM Laufwerk gehen. Die sind recht klein aber von sehr guter optischer Qualität.

Eine Streulinse sollte nicht gehen, eher schon eine 2 te Sammellinse zur Orginallinse.

Sonst kann man den Strahlengang mit Spieglen falten, so wie man es in den alten Scannern gemacht hat. So eine Einheit aus einem alten Scanner wäre auch eine Alternative zur Kamera. Der Sensor liefert nur eine Zeile (ca. 1000-4000 Pixel) (oder ggf. 3 ) und läßt sich zur Not sogar direkt vom AVR Controller auslesen.

Elektronik303
02.04.2008, 18:58
ja, n alten scanner hab ich, aber der ccd sensor ist größer als der ganze roboter in der länge ^^. Die CDROM Linse probier ich gleich mal aus

Elektronik303
02.04.2008, 19:11
ok, mein Laufwerk musste dran glauben, ich kann mit der Cam jetzt fast schon mikroskopieren, aber leider nur ganz kleine Bereiche, ich brauch ja quasi viel Bereich auf wenig Distanz

Frank E.
02.04.2008, 21:03
Hallo,

- wenn die Brennweite kürzer ist, (die Linse ist "dicker" oder weitere Sammellinse dazu), kommt mehr aufs Bild, nennt man "Weitwinkel"

- wenn die Kamera näher ans Objekt soll, muss die Linse weiter weg von der Kamera ("Auszug verlängern")

Frank

Elektronik303
02.04.2008, 21:09
ok, mach ich mal das andere Laufwerk auch kaputt ^^

Elektronik303
02.04.2008, 21:35
Klappt nicht... Keine Chance, was für Linsen ich auch nehme, es ist entweder so dass es wie n Mikroskop ist, aber nur wenn das Objekt ganz (ganz ganz) nah dran ist oder dass ich wie gesagt 15 cm (hab jetzt nachgemessen) Abstand brauche um es richtig drauf zu haben (scharf ist es schon vorher, aber ich brauch ja die ganze Linie)...

Frank E.
02.04.2008, 23:24
Hmm ...

- wie groß ist in Etwa die Diagonale des Kamerachips?
- welche Brennweite und welchen Durchmesser haben deine Linsen?

In der Fotografie gibt es eine einfache Faustregel: Liegt die Brennweite in der Größenordung der Diagonale der Aufnahmefläche (Film oder Chip), spricht man vom Normalobjektiv - d.h. der Blickwinkel entspricht ungefähr dem des Auges.
Ist die Brennweite kürzer, gibt es einen größeren Bildwinkel (Weitwinkel), ist sie länger, wird es ein Tele ...

Der Durchmesser der (Front-) Linse eines Weitwinkelobjektives ist auch nicht ganz unwichtig und sollte mindestens das Doppelte der Brennweite betragen, sonst gibt es eine Art "Tunnelblick".

Der Abstand Linse-Chip muss immer kleiner sein als der Abstand Linse-Objekt, sonst hast du tatsächlich die Verhältnisse eines Mikroskops.

Frank

mare_crisium
03.04.2008, 00:19
Elektronik303,

die Brennweite der Linse, die Du verwendest, ist zu klein. Im Anhang findest Du ein Rechenblatt (Excel-Format) mit dem Du bei gegebener Brenn- und Gegenstandsweite (Abstand von der Linsenmitte zum Gegenstand) den Abstand vom Sensor zum Gegenstand und den Abbildungsmasstab ausrechnen kannst. In die hellgelben Felder musst Du Daten eingeben, die Ergebnisse erscheinen dann in den farblosen Feldern in blauer Schrift.

Damit die Linse den Gegenstand abbildet und kein virtuelles Bild erzeugt, muss die Gegenstandsweite grösser sein als die Brennweite der Linse. Liegt die Gegenstandsweit zwischen der Brennweite und der doppelten Brennweite, dann bekommst Du ein vergrössertes Bild (Mikroskop), liegt sie über der doppelten Brennweite, ist das Bild verkleinert.

Gute, billige Linsen verschiedener Brennweiten kannst Du bei

www. astromedia.de

kaufen. Die haben sowohl einfache Linsen aus PMMA (Plexiglas), als auch Achromaten (bestehen aus zwei verkitteten Einzellinsen, machen Bilder ohne Farbränder) aus Glas.

Die Brennweite kannst Du frei nach Deinen Anforderungen an die Gegenstandsweite und den Abbildungsmasstab auswählen. Mit der Grösse des Sensors hat das überhaupt nichts zu tun.

mare_crisium

Frank E.
03.04.2008, 07:26
So fundiert diese Ausführungen auch sind, in einem Punkte irrt der Meister:


Mit der Grösse des Sensors hat das überhaupt nichts zu tun.


Hallo,

DAS, mit Verlaub, ist Quark. Auf die Größe des reellen Bildes ansich hat der Sensor freilich keinen Einfluss. Aber dessen Größe bestimmt, welcher Ausschnitt davon weiterverarbeitet wird.

Kleiner Sensor = kleiner Bildausschnitt = wirkt wie Tele
Großer Sensor = großer Bildausschnitt= wirtt wie Weitwinkel

Das kann dir jeder halbwegs technisch informierte Digitalkamera-Besitzer erklären und vorführen. Weil der Sensor einer Canon 20D z.B. nur APS-Format statt KB-Format hat, wirken alle verwendeten Objektive so, als ob deren Brennweite um den Faktor 1,6 größer wäre ...

Gruß, Frank


[/quote]

Elektronik303
03.04.2008, 15:53
Also die Diagonale des Chips dürfte so 5mm betragen, heißt ich brauch eine Linse mit 10 mm Durchmesser, mit 1 mm Brennweite (nach Frank). Mit dem Formular mit dem Abstand 10mm von Cam zu Boden habe ich ausgerechnet 0,111-Periode Fache Vergrößung, wäre ja eig perfekt, aber Brennweite 1mm? Hört sich nach sehr wenig an...

Aber eig würde ich auch eher zu der Chipgrößenrechnung dendieren, da die "Strahlen" (also das Bild) ja irgendwo drauftreffen muss, und das ist ja der Chip. Aber ich hab keine Ahnung ^^

Elektronik303
03.04.2008, 16:07
So, ich hab mal so aus langeweile bei einer "Linsenfirma" angerufen, eine passende Linse, also einen Prototypen zu erstellen kostet so um die 400€. Das ist natürlich für mich unbezahlbar, also 50 bis 70 ist wirklich die Grenze.

Jetzt brauch ich ne Lösung...

Besserwessi
03.04.2008, 18:39
Ein Sensor mit 5 mm größe ist ziehmlich groß für eine kleine Camera, das ist schon fast die Größe bei normalen Video Kameras.
Eine Linse mit 10 mm Druchmesser und 1 mm Brennweite geht praktisch nicht da hätte man viel zu große verzerrungen. Schon Linsen mit einem Durchmesser von wesentlich mehr als dem doppelten der Brennweite sind eher selten.

Selbst bei einem 5 mm Sensor sollte eine Linse mit etwa 5 oder auch nur 2 mm durchmesser Reichen. Der Linsendurchmesser ist ohmehn im wesentlichen für die Helligkeit wichtig.
Die Linse aus dem CD Spieler sollte etwa 2 mm Brennweite haben, was auch ungefähr richtig wäre. Einen groben Schätzwert für die Brennweite kriegt man, wenn man die Linse als Lupe benutzt. Die Brennweite ist etwas mehr als der maximale Abstand ein dem man noch was erkennt.

Es gibt für diese Linse 2 Positionen wo man ein Scharfes Bild kriegt: eine mit der Linse dicht am Objekt (das sollte die Oben Probierte Lösung sein) und eine mit der Linse dicht am Sensor, das solle die richtige sein.
Als Pratische Grenze kann der Bildausschnitt (also das Linienmuster) nicht wesentlich breiter als etwa 2 mal der Abstand sein. Wenn man breiter will, kriegt man Probleme mit den Linsenfehlern und unterschiedlicher Helligkeit in der Mitte und an Rand. Wenn es so eng zugeht, dann hilft nur noch ein Spiegel.

mare_crisium
03.04.2008, 21:24
Elektronik303,

ich habe interessehalber einmal Lichtöffnung eines Maussensors vergrössert. Wie man sieht, ist die lichtempfindliche Fläche eines Maussensors kleiner als 2x2mm gross (in dem Bild Maus007 beträgt der Abstand zwischen den Chip-Anschlüssen 2,54mm). Die anderen Bilder zeigen, wie so eine "Brille" für die Maus aussehen kann. Beide Linsendurchmesser sind 12mm, die Brennweiten 30mm und 48mm, der Linsenabstand 0mm. Die effektive Brennweite ist 18mm. Der freie Bohrungsdurchmesser im Linsenhalter ist 8mm. Die Anordnung funktioniert.

mare_crisium

Elektronik303
04.04.2008, 18:04
Ok, 2mm Brennweite mit 2mm Durchmesser ginge auch gut denk ich, aber wo bekommt man sowas?
Bei der einen Firma wie gesagt 350 bis 600 Euro, vieeeel zu viel...

Besserwessi
04.04.2008, 19:25
Die Linse aus dem CD Spieler sollte in diesem Größenbereich liegen. Bei Reichelt gibt es eine Linse mit 4,6 mm Brennweite für die Laser Kollimination.
Bevor man jetzt noch weiter nach Linsen sucht, sollte man vielleicht noch mal die vorgegeben Maße zusammenstellen:
- Breite des Bildes das aufgezeichnet werden soll
- Größe des Sensors (aktive fläche)
- möglicher Abstand zwischen Bild und Sensor

Die Linsengelichungen sollten bekannt sein. Als Näherung bei großer Vergrößerung, wird der Abstand Linse-Sensor etwas (z.B. 10%) größer als die Brennweite sein. Die Vergrößerung bzw. Verkleinerung (Sensor/Bild) ist das Verhältnis der Abstände zur Linse.

Wenn das mit einer Linse nicht gut geht, bleibt einem immer noch die Möglichkeit Spiegel zu verwenden, so wie in älteren Scannern.

mare_crisium
05.04.2008, 07:50
Elektronik303,

ich hätte besser erklären sollen, was ich mit dem Maus-Beispiel zeigen wollte: Dass bei technischen Anwendungen die Objektivbrennweite (18mm) und Chipdiagonale (ca. 3mm) nicht gleich gross zu sein brauchen. - Der Zusammenhang, auf den Frank E. sich bezieht, stammt, wie er schon sagt, aus der Photographie. Da stellt er sicher, dass das Bild, das auf dem Dia bzw. dem Bildschirm erscheint, in etwa dem Blickwinkel (nicht dem Gesichtsfeld, das ist nämlich viel grösser!) eines normalsichtigen, erwachsenen Menschen entspricht. - Wenn man nach „Normalobjektiv“ googlet, findet man jede Menge Diskussionen zu diesem Thema. -

Du willst aber Deine Kamera nicht fürs Photographieren benutzen, sondern für die Bildverarbeitung, um mit Deinem Roboter Linien entlang zu fahren.

Deshalb ist, genau wie bei meiner Mausoptik, die Regel „Chipdiagonale = Objektivbrennweite“ für Dich nicht wichtig. Sie macht es Dir sogar unnötig schwer: Je kürzer die Brennweite einer Sammellinse ist, desto stärker ist ihre Krümmung (siehe „Linsenschleiferformel“ in Wikipedia.de) und umso teuerer ist die Linse (abgesehen von Massenprodukten wie DVD-Laufwerkslinsen und opt. Mauslinsen). Die beiden Linsen, aus denen ich meine Mausbrille zusammengesetzt habe, kosten zusammen nicht einmal 2 Euronen (ohne Versandkosten ;-)).

Fazit: Wie Besserwessi vorschlägt, solltest Du die Gegenstands- und Bildweite bzw. den Abbildungsmassstab festlegen, die Du haben willst, und daraus die gewünschte Brennweite berechnen. Mit ein bisschen Herumspielen wirst Du eine passende „zivile“ Brennweite (10mm – 20mm) finden, für die Du Linsen bekommen und auch bezahlen kannst.

mare_crisium

Manf
05.04.2008, 08:32
Eine besonders einfache Form einer Linse mit einer sehr kurzen Brennweite ist eine Kugellinse. Die braucht bei ihrer sehr einfachen Herstellung auch nicht teuer zu sein.
https://www.roboternetz.de/phpBB2/viewtopic.php?t=8192

hier auch im Vergleich mit Suppenlinsen (rechts außen):
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=482

Elektronik303
05.04.2008, 12:25
Ok, 5cm Sichtbereich wäre schon nicht schlecht, damit ich auch 90°-120° Kurven schaffe.
Der Sensor ist so ca. 4mm*4mm Breit/Lang, obwohl die wirklich aktive Fläche (das erkenn ich daran dass sie sehr bunt spiegelt) eher bei 3,5*3,5mm liegen könnte.
Abstand zwischen Sensor (nicht Linse!!!) wäre bei 1,5cm perfekt, aber ich denke dass ist echt Luxus, und so eine Linse werde ich nicht kriegen, deshab können es auch zwei, drei cm mehr sein.
Also in Kurzform:
- Breite des Bildes das aufgezeichnet werden soll : 5cm
- Größe des Sensors (aktive fläche) : 3,5mm*3,5mm
- möglicher Abstand zwischen Bild und Sensor: 1,5cm ideal, 2,5-3 cm gehen auch.

So, jetzt muss ich daraus die Linse erechnen, wie mach ich das? Und der Mann bei der Firma IMOS sagte auch was von Dicke der Linse, was hängt davon ab?


Und wo krieg ich solche Kugellinsen her?

Mfg

Christian

Besserwessi
05.04.2008, 12:58
Das gibt dann eine Vergrößerung von 50/3,5 = 14,3.
Der Abstand Linse Bild muß also 14,3 man größer sein als der Abstand Linse Sensor. Für 1,5 cm Abstand Bild-Sensor wäre das nur etwa 1 mm Abstand Linse-Sensor, und etwa 1 mm Brennweite. Schon wegen des großen Öffnungswinkels würde das starke verzerrungen geben.
Für 3 cm Abstand käme man auf etwas unter 2 mm Brennweite. Viel weniger als 2,5 cm Abstand wird kaum gehen, denn dann hat man schon 45 Grad Einfallswinkel für das Licht vom Rand des Bildes auf die Mitte der Linse.
Der große Winkelbereich ist hier einer der begrenzenden Punkte, den man so einfach nicht umgehen kann. Bei gegeben Abstand müßte man sonst mit einem Spiel arbeiten um so den Platz ggf. mehrfach zu nutzen oder den Lichtweg umlenken in die Horizontale, wo er weniger stört.

Wie groß die Linse ist, ist nur für die Helligkeit wichtig. Damit die Verzerrungen klein bleiben und die Linse nicht zu dick wird, sollte man mit einem Durchmesser von etwa halber (weniger als einer) Brennweite rechnen. Das wird also eine recht kleine kleine Linse.

Elektronik303
05.04.2008, 13:16
Ok, ich hab die jetzige Linse ausgebohrt, eine vom CD Laufwerk reingepackt und... Geht ganz gut eig. Es sieht ein bisschen nach Bloom aus, also die Seiten verzehrt, aber macht ja nix, und ich muss ihn wirklich gut vor Licht schützen, er wird sehr leicht überbelichtet bei der großen Linse, aber Es ist schonmal ne Notlösung! Ich brauch nurnoch ca. die Hälfte des Abstands zu vorher um alles draufzukriegen, das ist mal n Fortschritt!

Besserwessi
05.04.2008, 14:01
Wenn die alte linse noch brauchbar ist, könnte man die ganz dicht vor die neue bringen, dann sollte man noch etwas dichter ran könne. Dunkler machen sollte nicht so schwierig sein, einfache eine Blende ganz dicht an die Linse.

Manf
05.04.2008, 14:25
Und wo krieg ich solche Kugellinsen her?
Vorschlag:
Ich schicke Dir ohne Kosten 3 Stück mit den Durchmessern 3,5mm 5mm und 7mm (nicht die beste Qualität) und Du probierst es aus.
Die sollten Brennweiten von etwa 2,6mm, 3,7mm und 5,2 mm haben.
Manfred

Elektronik303
05.04.2008, 16:29
Boah, das wär echt super, die alte Linse die jetzt drin ist kann ich ganz einfach wieder abmachen, also gehen würde es.

Kannst du mir die zuschicken? Dann kleb keine Briefmarke drauf und schreib drauf Empfänger bezahlt Porto, sollte ja gehen, dann schick ich dir meine Addresse als PN. Das wäre echt supergeil!

Mfg Christian

Manf
05.04.2008, 18:00
Ich schicke es morgen früh ab, es ist ja nur ein kleiner Brief mit etwas Luftpolster.
Berichte dann auf alle Fälle mal wie es funktioniert.
Es sind ja wirklich nur Kugel-Linsen ohne Fassung, Du wirst sie vielleicht zwischen zwei Kuststoffscheiben mit Bohrung einklemmen können.
Naja Du findest schon einen Weg.
Manfred

Elektronik303
05.04.2008, 18:33
Naja, hab ja die andere Linse auch reingekriegt ^^ Da hab ich einfach die andere mit rausgebohrt, jetzt wirds nur schwer die neuen reinzukriegen da die wohl bestimmt zu klein sind, aber da wird sich schon was machen lassen!

Nochmal vielen vielen Dank!