Aktionen

BP

BP:Kameramodell

Aus Physik und ihre Didaktik Wiki


In diesem Projekt soll ein Aufbau realisiert werden, wodurch die Funktionsweise einer Kamera dargestellt werden soll. Hierfür wird eine Pixelmatrix aus 3x3 Pixeln aufgebaut, welche durch einen Arduino ausgelesen werden kann, so dass schwarz-weiß Bilder aufgenommen und durch einen Computer angezeigt werden können.

Abbildung 1: Fertiges Kameramodell

Grundlagen

Für dieses Vorhaben ist es relevant den Fotostrom (Je heller das Licht, desto größer der Fotostrom), der an der Photodiode entsteht in eine Spannung umzuwandeln, da der Arduino ausschließlich Spannungen messen kann. Zudem muss das Signal in seiner Amplitude durch einen möglichst konstanten Faktor vergrößert werden, sodass das gesamte Spannungsintervall ausgenutzt wird, welches der Arduino messen kann. Dadurch wird die Genauigkeit der Messung erhöht. Zuletzt muss beachtet werden, dass zur wesentlichen Funktionsweise einer Kamera die sogenannte Belichtungszeit gehört. Es muss also eine Schaltung gebaut werden, die es ermöglicht über das erhaltene Signal aufzusummieren. Diese Anforderungen an die elektrische Schaltungen werden hier durch einen Integrationsverstärker auf der Basis eines Operationsverstärkers realisiert. Ein Schaltplan dieses Aufbaus, wie er hier verwendet wird, ist in Abbildung 2 gezeigt. Dabei lädt sich der verbaute Kondensator, über welchen das Ausgangssignal zurückgekoppelt wird, nach und nach auf und erfüllt dadurch die Voraussetzung des Aufsummierens. Es wurde dabei darauf zu achten, dass die Kapazität, der Widerstand und die Integrationszeit so gewählt werden, dass sich dieses Aufladen im näherungsweise linearen Teil der Aufladekurve des Kondensators abspielt. Anderenfalls muss dies in der Auswertung der Signale beachtet werden. Zudem muss bei dieser Schaltung darauf angemerkt werden, dass der Integrationsverstärker invertierend ist und daher die Polung der Photodiode relevant ist.

Nun muss diese Schaltung vom Arduino angesteuert werden können, sodass eine Messung initialisiert werden kann und der gesamte Aufbau nach der Messung wieder in den Ausgangszustand gebracht werden kann. Hierzu benötigen wir einen effektiven Schaltplan, wie er in Abbildung 3 gegeben ist. Hierbei soll über einen digitalen Schalter (D7) geschaltet werden, ob dieses Pixel gemessen wird (Schalter geschlossen) oder nicht (Schalter offen). Der zweite Schalter (D6) ist dafür da den Kondensator des Integrationsverstärkers zu entladen (Schalter geschlossen) und damit den Integrationsvertärker in den Ausgangszustand zurück zu bringen. Wie die Namen der Schalter bereits andeuten, soll dies über digitale Ausgänge des Arduinos geschalten werden. Außerdem wird das Signal am Ausgang des Verstärkers mit einem analogen Eingang des Arduinos ausgelesen.

Bei der realen Ansteuerung wird dabei ausgenutzt, dass ein digitaler Pin am Arduino in verschiedene Modi geschalten werden kann. Insbesondere können diese den Modus "Output" annehmen, wodurch sie mit dem entsprechenden Befehl auf dem Niveau "GND" liegen, und den Modus "Input", wobei ein sehr großer Widerstand gegenüber dem GND-Niveau vorliegt bzw. effektiv als eine Unterbrechung angenommen werden kann. Damit können nun alle Funktionen aus dem effektiven Schaltplan realisiert werden.

Dieses Konzept soll nun auf alle 9 Pixel in der 3x3 Pixelmatrix angewandt werden. Der Schaltplan hierfür ist in Abbildung 5 dargestellt. Es werden dazu drei baugleiche Integrationsverstärker (siehe oben) gebaut und angeschlossen. Ein Integrationsverstärker ist nun jedoch für eine ganze Zeile von Pixeln in der 3x3-Pixelmatrix zuständig, wie auch aus dem Schaltplan in Abbildung 5 hervorgeht. Außerdem werden nun die Photodioden nicht mehr einzeln zur Messung ein- und ausgeschalten (siehe oben die Funktion von Schalter (D6)), sondern spaltenweise. Mit diesem Aufbau werden die Photodioden nun Spaltenweise ausgelesen, indem zuerst Ausgang D7 auf das GND-Niveau gelegt werden, wobei die Ausgänge D8 und D9 im Input-Modus sind. Dadurch sind nur die Photodioden der ersten Spalte verantwortlich für das Eingangssignal an den Integrationsverstärkern. Nach der Integrationszeit wird nun das Signal der drei Verstärker am Arduino ausgelesen (analoge Eingänge A0, A1 und A2) und anschließend die Kondensatoren entladen, indem die Pins D4, D5 und D6 kurzzeitig auf das GND-Niveau gelegt werden, bevor sie wieder in den Input-Modus gebracht werden. Dies läuft für alle Spalten der Pixelmatrix nun nach einander analog ab, bis ein vollständiges Bild aufgenommen wurde.


Abbildung 2: Schaltplan des hier verwendeten Integrationsverstärkers.
Abbildung 3: Effektive Ansteuerung des Pixels mit dem Integrationsverstärker durch den Arduino.
Abbildung 4: Reale Ansteuerung des Pixels mit dem Integrationsverstärker durch den Arduino.
Abbildung 5: Gesamter Schaltplan zur Ansteuerung einer 3x3 Pixelmatrix mit Integrationsverstärkern durch den Arduino.

Aufbauanleitung

Benötigtes Material

  • 9 Photodioden (BPW 34)
  • 3 Operationsverstärker (TLC 271 ACP)
  • 3 Kondensatoren (1 µF)
  • 3 Widerstände (100 kΩ)
  • Punktrasterplatine mit den Maßen 6 cm × 5 cm und 16 cm × 10 cm
  • Kabel (in verschiedenen Farben)
  • Schrumpfschläuche
  • Lötkolben, Lötzinn
  • 3D gedrucktes Gehäuse
  • Arduino Uno mit USB-Kabel (USB-B auf USB-A)
  • PC mit Python-Software

Versuchsaufbau

Schritt 1
Die einzelnen Photodioden werden auf eine Platine gelötet zu einer 3x3 Pixelmatrix. Dies ist in Abbildung 2 dargestellt. Es ist dabei ratsam bereits verschiedene Farben für die horizontalen und vertikalen Verbindungen zu nehmen. In diesem Fall wurde für die Verbindung der Photodioden mit dem GND-Anschluss (Spalten) die Farbe Blau gewählt und für die Verbindung zwischen Photodioden und Verstärkern (Zeilen) die Farbe Gelb.
Schritt 2
Nun müssen die drei Verstärkerschaltungen gebaut werden. Deren Schaltplan ist jeweils in Abbildung 4 zu erkennen bzw. auch in Abbildung 5 gezeigt. Es empfiehlt sich auch hier einen Farbcode zu wählen, um die Schaltung ansatzweise übersichtlich zu gestalten. So wurde hier die Farbe Blau für Verbindungen mit GND, die Farbe Rot für Verbindungen mit der Betriebsspannung 5V, die Farbe Grün für die Ausgangssignale aus den Verstärkerschaltungen und die Farbe Gelb für die Verstärkerschaltungen verwendet.
Schritt 3
Die 3x3 Pixelmatrix wird anschließend mit dem Versträrkerkonstrukt verbunden, wie es in Abbildung 5 skizziert ist und auch in Abbildung 7 zu sehen ist.
Schritt 4
Daraufhin soll ein Gehäuse für die Elektronik der Kamera gedruckt werden. Es ist darauf zu achten, dass die Platine sowie der Arduino darin fest verbaut werden können und nicht wackeln, da sich sonst Kabel lösen könnten. Dazu dient für den Arduino ein kleines zusätzliches Teil, welchen hinter diesem zur Befestigung eingeklemmt wird, nachdem der USB-Anschluss des Arduinos in die entsprechende Aussparung geschoben wurde. Es muss auf jeden Fall gewährleistet sein, dass der Arduino über den USB-Anschluss weiterhin von außen ansteuerbar ist. Die Platine kann durch einfaches Drücken fest eingebaut werden. Die hier verwendeten Dateien können dem Kapitel "3D Druckvorlage" entnommen werden.
Schritt 5
Nachdem der Arduino in das Gehäuse eingesetzt wurde, sollte die Verkabelung der Verstärker mit diesem stattfinden. Diese kann Abbildung 5 entnommen werden.
Schritt 6
Nun wird die Platine mit den Verstärkerschaltungen in das Gehäuse eingebaut.
Schritt 7
Über den USB-Anschluss kann nun der Arduino über einen externen Computer angesteuert und programmiert werden.
Abbildung 6: Darstellung des gelöteten Sensors der Kamera.
Abbildung 7: Gelötetes Modul aus drei Verstärkerschaltungen.

3D Druckvorlage

Programmierung

Es wird hier sowohl mit einem Arduino-Skript als auch mit einem Python-Skript gearbeitet. Dem liegt zugrunde, dass man über die Arduino-IDE die erhaltenen Messwerte nicht als Bild ausgeben kann, was jedoch mit Python sehr gut funktioniert. Diese beiden Skripte können dem Kapitel "Software" entnommen werden.

Arduino-Skript

Das Arduino-Skript orientiert sich stark an der Struktur, welche im Grundlagenteil dieses Artikels eingeführt wurde. Was in diesem Teil des Skripts sehr relevant ist, ist die Implementierung der Belichtungszeit, welche angibt, wie lange die Daten der Photodiode aufsummiert werden. Außerdem muss implementiert werden, dass die aufgenommenen Daten des Arduinos über dessen serielle Schnittstelle an den PC weitergegeben werden, sodass dieser daraus ein Bild erzeugen kann, was über den Befehl "serial.print()" realisiert wurde. Es ist darauf zu achten, dass die Daten einer Messung durch Kommata getrennt sind, um damit in Python weiterarbeiten zu können. Außerdem ist dabei wichtig zu wissen, dass die Daten, welche über die serielle Schnittstelle laufen kodiert sind (ASCII). Da die Kamera hier jedoch nicht dauerhaft Bilder senden soll, sondern nur einzelne Bilder, wird zu Beginn des Programms für eine Messung auf ein Signal des PC-gewartet, der den Messprozess startet.

Python-Skript

Das relevant am Pythonskript auf dem PC ist, dass damit die Messwerte des Arduinos als Bild dargestellt werden kann. Um hierfür Daten erhalten zu können muss zunächst eine serielle Verbindung aufgebaut werden. Hier ist darauf zu achten, dass der angegebene Port im unten stehenden Programm evtl. angepasst werden muss. Für eine Messung muss zunächst ein Signal an den Arduino gesendet werden (siehe oben), wobei erneut auf die Kodierung des Signals geachtet werden muss (übergibt man beispielsweise b'x', so erhält der Arduino nur x). Die Daten, welche der Arduino nun an den PC schickt, müssen nun mit dem entsprechenden Befehl dekodiert werden, sodass diese mit Hilfe von Matplotlib.Pyplot dargestellt werden können. Eine wichtige Einstellung dabei ist die der oberen und unteren Grenze. Diese legen fest, ab welchem Messwert ein Pixel weiß oder schwarz ist. Eine weiterer sehr wichtiger Befehl ist am Ende des Python-Programms das Schließen der seriellen Verbindung. Wird dies nicht gemacht, so treten Probleme beim erneuten Ausführen des Programms auf. Außerdem wird dies sehr relevant, wenn das Programm manuell abgebrochen wird, wobei in die Konsole dieser Befehl eingegeben werden sollte.

Software

Anwendung

Führt man die erwähnte Software mit der gebauten Kamera aus, so erhält man Bilder wie das, welches in Abbildung 8 dargestellt ist. Für dieses wurde, um die Funktion zu testen, eine Spalte von Photodioden abgedeckt.

Abbildung 9: Aufgenommenes Bild, für welches eine Spalte an Photodioden abgedeckt wurde.

Schwierigkeiten und Optimierungen

Operationsverstärker
In diesem Aufbau wurde statt eines "normalen" Operationsverstärkers mit symmetrischer Spannungsversorgung ein Modell gewählt, welches eine Spannungsversorgung zwischen 0V und 5V unterstützt, was für die Schaltung sehr wichtig ist, da der Arduino keine symmetrische Spannung liefern kann.
Python-Ansteuerung
Es existieren mehrere Pakete für Python, welche den Zweck der Zusammenarbeit mit einem Arduino ermöglichen. Insbesondere haben wir uns PySerial und PyFirmata angeschaut. Während Ersteres über die Kommunikation an der seriellen Schnittstelle arbeitet, wobei aber immernoch ein Arduino-Skript benötigt wird, ist für das Zweite nur ein Pythonskript notwendig. Jedoch ist das Programm mit PySerial schneller und präziser in den Reaktionen, wodurch dieses für das Vorhaben gewählt wurde. Zudem kann hierbei das Arduino-Skript von SuS geschrieben werden, während die Lehrkraft das Python-Skript stellt, da diese Programmiersprache in der Schule nicht unterrichtet wird.
Steckbrett
Es ist bei allen elektronischen Schaltungen, welche auf Steckbrettern getestet werden hilfreich, die Steckbretter auf Funktionalität zu prüfen und etwaige Wackelkontakte o.ä. auszuschließen, da diese sonst eine Fehlerquelle darstellen können, an welche man selten denkt.
Mikrocontroller
Statt einem Arduino Uno kann auch ein Arduino Nano verwendet werden. Dieser bringt den Vorteil, dass man leicht Kabel mit diesem verlöten kann. Beim Arduino Uno werden diese gesteckt, was dazu führen kann, dass diese sich lösen, oder Wackelkontakte bilden.

Fotos

  • slide 1
        Die fertige Kamera
    
  • slide 2
         Die 3x3 Pixelmatrix
    
  • slide 3
         Das Verstärkerkonstrukt
    
  • slide 4
         Der Schaltplan
    
  • slide 5
         Das Ergebnis
    
88x31.png Universität Stuttgart, 5. Physikalisches Institut, AG Physik und ihre Didaktik, lizenziert unter CC BY-NC-SA 4.0