Technik |  Romanhefte |  Fotografie |  Wer? |  Wo? |  Humor |  Webcam |  Gästebuch |  Sitemap | 
 
Linke obere Ecke Rechte obere Ecke
Zeitraffertimer für CANON-Kameras

Steffen Barth (DG0MG), Juli 2004

Einleitung

Animiertes GIF: ziehende Wolken Es soll eine kleine Schaltung beschrieben werden, die eine Digitalkamera CANON EOS300D in regelmäßigen einstellbaren Abständen dazu veranlaßt, eine Aufnahme zu machen. Man kann damit Zeitrafferaufnahmen von ziehenden Wolken, Baustellen oder wachsenden Pflanzen machen, indem man die Bilderserien später am PC zu einem Film verbindet. Die EOS300D (und auch andere CANON-Kameras) haben einen Anschluß für einen Fernauslöser, der im Zubehörhandel erhältlich ist. Der Anschluß ist eine 2.5mm-Stereo-Klinkenbuchse, die Funktion ist recht einfach: Wird der hintere Anschluß des Klinkensteckers mit Masse verbunden, ist das gleichbedeutend mit dem Antippen des Auslösers, die die Kamera wacht auf, falls sie aus war und führt eine Belichtungsmessung und Fokussierung durch. Wird zusätzlich die Spitze des Klinkensteckers mit Masse verbunden, wird eine Aufnahme gemacht.

Bauteile

Einzelteile zum Bau des Timers Zum Bau des Timers brauchen wir folgendes Material:
  • 1 PIC16F84/04-P, programmiert
  • 2 FET BS170
  • 1 Quarz 32.768 kHz (Uhrenquarz)
  • 2 Kondensatoren 18pF
  • 1 Kondensator 100nF
  • 1 IC-Fassung 18 pol.
  • 1 Hexencoderschalter 4 Bit 0-F
  • 1 Lithiumbatterie CR2330, CR2354 o.ä. mit Lötbefestigung
  • 1 Klinkenstecker 2.5 mm stereo
  • 1 Gehäuse STRAPU 2044
  • etwas Leitung, zweiadrig abgeschirmt
  • Schaltdraht
  • Lochrasterplatine

Schaltungsbeschreibung

Schaltplan / circuit plan / schematic Zeitraffertimer Die Schaltung enthält keine größeren Besonderheiten. Man verzeihe mir die Qualität des handgezeichneten Schaltplans, aber wegen dieser Schaltung EAGLE anzuschmeißen hab ich echt keine Lust.

Die Stromversorgung des PIC erfolgt über eine 3V-Lithiumzelle, da der PIC im Low-Power-Mode betrieben wird, beträgt dessen Stromaufnahme nur etwa 75-100μA. Stellt man den Wahlschalter auf "0" versetzt das Programm den Prozessor in den SLEEP-Mode und die Stromaufnahme sinkt weiter auf 25μA, wodurch man auf einen Ausschalter verzichten kann. Im Prototyp wurde trotzdem ein Jumper eingebaut, mit dem die Batterie abgetrennt werden kann.
Ebenfalls nicht nötig sind Pull-up-Widerstände an den 4 Pins vom Encoderschalter, da der PIC interne Pullups von etwa 100kOhm besitzt. Diese werden vor der Abfrage des Schalterzustandes zu- und später zur Ruhestromsenkung wieder abgeschalten. Die N-Kanal-FETs zum Schalten wurden verwendet, da bei ihnen keine Ansteuerleistung notwendig ist. Der Uhrenquarz kann z.B. aus einem alten Wecker oder einer Armbanduhr gewonnen werden, das zweiadrige Kabel von einem PC-CD-ROM-Audiokabel vom PC-Händler. Auf Grund der sehr geringen Stromaufnahme wurde die Lithiumbatterie fest eingelötet.

Aufbau


Lochrasterplatine in Strapu 2044-Gehäuse
Als erstes wird die Lochrasterplatine für das Gehäuse passend zurecht gefeilt,

Das Loch im Deckel für den Encoderschalter
dann das Loch für den Schalter in den Deckel gebohrt.

Die Unterseite der Lochrasterplatine
Das Verdrahten der Bauteile erfolgt "quick&dirty" mit lötfähigem Schaltdraht.

Schaltung fertig im Gehäuse
Kurze Zeit später sieht das Ganze dann so aus.
Der Aufbau auf einer Lochrasterplatine stellt auch für einen weniger geübten Löter kein größeres Problem dar, natürlich muß es auch nicht unbedingt so klein werden.

Die Micro-Software

Das Programm im PIC ist nicht sehr umfangreich. Nach einer Initialisierung, in der die Register mit sinnvollen Werten gefüllt werden, bleibt der PIC in einer Hauptschleife. Die Zeitbasis wird über einen Interrupt erzeugt, jede Sekunde wird ein Interrupt ausgelöst. Die 32768 Hz, die systembedingt bereits durch 4 geteilt werden, werden durch den auf Teilerfaktor 256 programmierten Vorteiler auf 32 Hz heruntergeteilt. Das Register TMR0 wird so programmiert, daß es nach 32 Zählvorgängen einen Interrupt auslöst. In der Interruptroutine wird ein 16 Bit breiter Zähler hochgezählt, der die Anzahl der Sekunden seit der letzten Aufnahme angibt.
In der Hauptschleife passiert folgendes: Die Pullups an PortB werden eingeschalten und der durch den Encoderschalter eingestellte Bitwert wird eingelesen, danach die Pullups wieder aus. Der Bitwert wird negiert, da der Schalter Komplementwerte liefert, und mit 0x0F AND-verknüpft, da nur die unteren 4 Bit interessieren. Ist der entstehende Wert "0", so wird der Timerinterrupt abgeschalten und der Prozessor geht in den SLEEP-Mode. Ansonsten wird in einer Tabelle nachgeschaut, welche Schalterstellung welchem Sekunden/Minutenwert entspricht und dann abgetestet, ob der 16-Bit-Zähler bereits diesen Wert erreicht hat. Wenn nein, wird wieder zum Beginn der Schleife gesprungen. Ist der Zählerstand erreicht oder überschritten, wird der Zähler gelöscht, der "Messen-"Anschluß der Kamera aktiv geschalten, das entspricht dem Antippen und Halten des Auslöseknopfes. Dann werden 4 Sekunden gewartet, um der Kamera Zeit zum Aufwachen zu geben, falls sie sich abgeschaltet hatte. Danach wird der "Auslösen-"Anschluß aktiv geschalten, was dem Durchdrücken des Auslösers entspricht. Nach einer weiteren Sekunde werden beide Anschlüsse inaktiv geschalten (Loslassen des Auslösers) und zum Beginn der Schleife gesprungen.

Download:
Hier gibts das Hexfile für den PIC:
Version vom 25.7.2004:zeitraffer040725.zip
Version vom 8.8.2004:zeitraffer040725.zip (4 Sekunden Vorlauf nur noch bei Zeiten >= 1 Minute, ansonsten 1 Sekunde)
Version vom 2.10.2004:zeitraffer041002.zip (Zeittabelle geändert, 3 Sekunden hinzugefügt.)


Nachfolgend eine Tabelle, welche Schalterstellung welchem zeitlichen Abstand entspricht:

Schalter-
stellung
0 1 2 3 4 5 6 7 8 9 A B C D E F
Zeit AUS 3 sec 5 sec 10 sec 15 sec 30 sec 1 min 5 min 15 min 30 min 1 h 2 h 3 h 4 h 5 h 6 h
Fokus-
Vorlaufzeit
- 1 sec 4 sec

Einsatz

EOS 300 am Dachfenster Wie setzt man dieses Bastelergebnis nun ein?
Nehmen wir an, wir wollen später aus der Bilderreihe wirklich ein kleines Filmchen machen. Ein Film hat 24 Bilder/Sekunde. Macht man nun alle 10 Sekunden eine Aufnahme (was die kürzeste Zeitspanne ist), so werden 24*10 Sekunden = 4 Minuten auf eine Sekunde zusammengerafft, 40 Minuten auf 10 Sekunden. Weiter ist die Größe der Compact-Flash-Karte ein Kriterium. In der geringsten Auflösung der EOS300D von ca. 1.6 MegaPixel (was für den späteren Film mehr als ausreicht) passen lt. Handbuch auf eine 256MB-Karte etwa 264 Bilder (bei einer angenommenen Bildgröße von 0.9 MB), was nur 264/24 = 11 Sekunden Film sind. Hier sollte man also eine sehr große CF-Karte verwenden, wenn man zwischendrin nicht wechseln möchte oder kann. Meine Wolkenbilder sind allerdings nur etwa 300 KB groß, was ca. 850 Bilder, also etwa 35 Sekunden Film zuläßt. Für andere Kameras sind diese Berechnungen natürlich anzupassen.

Die Kamera wird auf ein stabiles Stativ montiert und auf manuellen Fokus, manuelle Belichtungssteuerung und Einzelaufnahme gestellt. Danach wird der Bildausschnitt gewählt, fokussiert und die Belichtung angepaßt. Dann wählt man am Timer den gewünschten Aufnahmerhythmus, steckt das Gerätchen an die Kamera und schon gehts los. Es versteht sich von selbst, die Kamera während der Aufnahmezeit nicht mehr zu bewegen.

Erste Ergebnisse


Vorschaubild Wolkenziehen
Wolken1_400KBit.avi

(714 KB, 457 Bilder, ca. 18 sec. (Bildabstand 10 Sekunden)

Vorschaubild Wolkenziehen
Wolken2_256KBit_320x240.avi

(1.7 MB, 705 Bilder, ca. 29 sec. Bildabstand 10 Sekunden)

Vorschaubild Bieschaum absinken
bier_640x480_divx.avi

(230KB, 109 Bilder ca. 8 sec., Bildabstand 3 Sekunden)

Vorschaubild Farbchromatografie
kreide_320x240_512kbit_MPEG4.avi

(1.05 MB, 766 Bilder ca. 35 sec., Bildabstand 10 Sekunden)
Farbchromatografie: Mit Filzstift auf ein Stückchen Kreide gemachte Punkte, und dieses in Propanol gestellt.

Gummibaerchen und Eis
oetzi_320x213.avi

(729 KB, 173 Bilder, ca. 14 sec. (Bildabstand 1 Minute)


Vorschaubild Koberbachtalsperre
kober_400x300_xvid_768kbit.avi

(2,2 MB, 562 Bilder, ca. 3 sec. Bildabstand)




Software

Wie funktioniert nun die Bildverarbeitung zum fertigen Film? Im Ergebnis der Aufnahmen bekommt man ja eine Reihe von aufsteigend numerierten Files, also IMG_7454.JPG, IMG_7455.JPG, IMG_7456.JPG ... usw. Nun braucht man noch ein Videobearbeitungsprogramm, das die Funktion, eine Bilderserie in einen Film einzulesen, besitzt. Sehr gut funktioniert an dieser Stelle MainActor (Homepage) der Firma MainConcept, allerdings ist es nicht kostenfrei.

Eine andere (Freeware-)Variante ist AVISynth. Hier lädt man sich eine aktuelle Version (>2.5), installiert diese und schreibt sich mit dem Editor (Notepad) ein AVISynth-Script, das die Bilder als Serie einliest:

# ZEITRAFFER.AVS
# Liest Bilder von IMG_7454 bis IMG_7718.JPG (bei 24 fps):
ImageReader("C:\Programmdaten\Eigene Dateien\avisynth\174CANON\IMG_%04d.JPG", 7454,7718, 24, false)


Um sich das zukünftige Ergebnis anzuschauen, kann man das AVS-File schonmal im Windows-Media-Player öffnen. Für diesen erscheint das Textfile als eine AVI-Datei, ein Verfahren, das Frameserver genannt wird. Ein etwas komfortableres Ergebnis liefert folgendes Script, getestet mit Version AVISynth 2.5.5:

# ZEITRAFFER.AVS sbarth 28.5.05
# Bilderpfad und erstes und letztes Bild
bilder = "C:\Programmdaten\Eigene Dateien\avisynth\174CANON\IMG_%04d.JPG"
nummer1st = 7454
nummerlast = 7718

# Liest nur das erste Bild, generiert 1.5 Sek. Aufblendung
Vorspann = ImageReader(bilder, nummer1st,nummer1st, 24, false).BilinearResize(640,480).Trim(0,-1).loop(48).FadeIn(36)

# Liest Bilder von IMG_7454 bis IMG_7718.JPG (bei 24 fps), verkleinert, und blendet aus:
Film=ImageReader(bilder, nummer1st,nummerlast, 24, false).BilinearResize(640,480).FadeOut2(36)
# Fuegt auf den letzten Sekunden ein Copyright hinzu
Film=Subtitle(Film,"©St. Barth V/05", first_frame=Framecount(Film)-36, font="tahoma", size=12, text_color=$FFFFFF, align=1)
# Vorspann und Rest zusammenfuegen
AlignedSplice(Vorspann,Film)


Um nun beispielsweise als Endergebnis ein DivX-File zu bekommen, verwendet man TMPGEnc oder wie im Beispiel VirtualDub:


AVS oeffnen Als Erstes öffnen wir das vorhin erstellte AVS-File in Virtual-Dub unter File->Open video file. Wie bereits erwähnt "sieht" VirtualDub dabei ein AVI-File, nicht etwa ein Textfile.

Ton abschalten Den Ton schalten wir mit Audio->No audio ab.

DivX auswählen Unter Video->Compression wählen wir als Codec DivX (das muß natürlich installiert sein) und mit einem Klick auf Configure gelangen wir in das nächste Fenster ...

Einstellungen im DivX-Codec ... die Einstellungen für den DivX-Codec. Die vorgeschlagenen Werte sind ein guter Kompromiß zwischen webtauglicher Größe und Videoqualität. Hier kann man bei Bedarf noch etwas experimentieren.

Letzter Schritt: Speichern Als Letztes wählen wir unter File->Save as Avi einen Filenamen aus und schon beginnt VirtualDub, den Film zu speichern.


Externe Links:
  • Für PIC-Grundlagen und Brennerschaltungen schaue man unbedingt auf die Seite von Sprut.



Startseite Seitenanfang Mail an Steffen schreiben Seitenstatistik Valid HTML 4.0 Transitional 882201   seit 22.9.2002  

Seite vom: 30.08.2008, 06:55 Uhr (Seite #15)

Linke untere Ecke Rechte untere Ecke