Moin Forum,
ich hatte es ja schon im "was-hast-Du-heute-ausgepackt"-Thread erwähnt: ich habe mir eine neue Kamera gekauft und deshalb suchte meine alte EOS200D eine Zweitverwendung.
Da ich neuerdings einen MIOPS-Trigger besitze, hatte ich mir überlegt, die Kamera dauerhaft unter eine Plexiglaskuppel zu setzen. Weil die Gewitter natürlich aus verschiedenen Richtungen kommen,
müsste die Kamera dreh- und neigbar sein.
Gesagt, getan - ich habe mir (aus dem Werbeartikelhandel) eine Kuppel und von ebay dieses exzellente chinesische Hightech-Produkt bestellt.
Nur wenige Tage später wurde alles geliefert:
Da das Wetter zur Zeit wirklich unglaublich miserabel ist, habe ich auch gleich losgelegt.
Zuerst habe ich einen Raspberry Pi4 (den hatte ich noch liegen) mit Raspberry PI OS (ehemals Raspbian) aufgesetzt. Um ohne Tastatur und Monitor darauf zugreifen zu können,
habe ich mir NoMachine darauf installiert.
Der Pi soll die Bilder der Kamera mit "gphoto2" erfassen - dazu später mehr.
Die Kuppel ist 50cm hoch, damit Mount und Kamera später darunter Platz haben, habe ich den Mount mit der Flex noch ein paar cm gekürzt.
Oben drauf habe ich einen alten Stativkopf befestigt, hier kann der Kamera-Schuh geklemmt werden und die Kameraposition kann mit dem Kugelkopf "fine-ge-tuned" werden:
Das Ding oben auf der Kamera ist der MIOPS-Trigger, der soll später auf die Blitze reagieren und die Kamera auslösen.
1) Ansteuerung der Stellmotoren
Weil der PI schonmal da ist, sollte er am besten über die GPIO auch die Motorsteuerung übernehmen - am besten mit einer simplen grafischen Oberfläche.
Ich habe mir für die Ansteuerung ein L298N Motortreiber-Modul besorgt und mit der GPIO des PI verdrahtet:
Fritzing-Puristen mögen es mir nachsehen - ich bin nicht wirklich firm in dem Programm und habe das meiste einfach mit GIMP eingezeichnet.
Der Mount hat Endabschalter, ich habe die ganz hemdsärmelig so eingebunden, dass die die High-Pegel der GPIO wegschalten - funktioniert bestens...
Um mit einer grafischen Oberfläche arbeiten zu können, habe ich mir das Paket "guizero" via PIP (PIP ist bei Raspberry Pi OS bereits vorinstalliert) geladen:
Und jetzt kommt der Clou - der hat bei mir zu einer quasi-religiösen Erweckung geführt.
Ich habe einfach Chat-GPT gefragt, ob er so nett ist und mir ein Python-Script mit einer auf guizero-basierenden grafischen Oberfläche schreibt.
Ich habe einfach beschrieben was ich will: 4 buttons, die bestimmte PINs der GPIO bei Klick auf "High"-Pegel setzen. In 30 Sekunden hatte ich ein funktionierendes Script:
from guizero import App, Text, PushButton, Box
import RPi.GPIO as GPIO
import time
# GPIO-Pins konfigurieren
GPIO.setmode(GPIO.BOARD)
up_pin = 13 # Zum Beispiel: Pin für "Up" Button
down_pin = 15 # Zum Beispiel: Pin für "Down" Button
left_pin = 11 # Zum Beispiel: Pin für "Left" Button
right_pin = 19 # Zum Beispiel: Pin für "Right" Button
GPIO.setup(up_pin, GPIO.OUT)
GPIO.setup(down_pin, GPIO.OUT)
GPIO.setup(left_pin, GPIO.OUT)
GPIO.setup(right_pin, GPIO.OUT)
# Funktionen, die aufgerufen werden, wenn die Buttons geklickt werden
def button_clicked(pin):
GPIO.output(pin, GPIO.HIGH)
time.sleep(1) # HIGH-Pegel bleibt 1 Sekunde lang
GPIO.output(pin, GPIO.LOW)
# App erstellen
app = App("Blitzcam-Control", width=300, height=180)
# Box erstellen, um die Buttons und Text-Elemente anzuordnen
button_box = Box(app, layout="grid")
# Text-Elemente für Abstand erstellen
Text(button_box, "", grid=[1, 0]) # Oberer Abstand
Text(button_box, "", grid=[1, 5]) # Unterer Abstand
# Buttons erstellen und der Box hinzufügen
up_button = PushButton(button_box, text="Up", grid=[1, 1], command=lambda: button_clicked(up_pin))
down_button = PushButton(button_box, text="Down", grid=[1, 4], command=lambda: button_clicked(down_pin))
left_button = PushButton(button_box, text="Left", grid=[0, 3], command=lambda: button_clicked(left_pin))
right_button = PushButton(button_box, text="Right", grid=[2, 3], command=lambda: button_clicked(right_pin))
# App starten
app.display()
# GPIO-Pins freigeben
GPIO.cleanup()
Alles anzeigen
Ist das nicht ein Hammer?!
So sieht die "Steuerkonsole" dann auf dem Bildschirm aus:
Das Python-Script habe ich in das home-Verzeichnis des Raspberry (meiner heisst "blitzcam") gelegt und ich rufe es vom Desktop mit einen batch-Script auf (beide Scripte müssen natürlich "ausführbar" gemacht werden: rechte Maustaste, Eigenschaften, Berechtigungen, Ausführen=JEDER) :
Normalerweise fragt der PI immer nach, ob man die Datei direkt ausführen oder im Terminal öffnen möchte.
Dies kann man unterbinden, indem man im Dateimanager unter Bearbeiten --> Einstellungen --> Allgemein einen Haken bei "Keine Optionen beim Starten ausführbarer Dateien abfragen" setzt.
Damit ist die Kamera schonmal in alle Richtungen dreh- und neigbar - so sieht das dann aus:
2) Zugriff auf die Kamera und übertragen der Bilder in ein Verzeichnis auf den PI
Für den Zugriff auf die Canon habe ich viele nützliche Tipps von Thomas / tliastro bekommen. Thomas ist "im Thema" was AllSky und DSLR-Ansteuerung betrifft - siehe auch seine webseite.
Meine Anforderung sind etwas anders - eine AllSky-Kamera habe ich ja bereits und diese hier soll wirklich nur Gewitter einfangen.
Kamera mit MIOPS-Trigger "Huckepack":
Zunächst muß das Paket "gphoto2" auf dem PI installiert werden:
Um ein einzelnes Photo aufzunehmen und auf den PI zu laden, habe ich folgendes (von Thomas / tliastro "geborgte" ) Script auf das Desktop gelegt (und natürlich wieder ausführbar gemacht, siehe oben):
#!/bin/bash
# Kamera erkennen
gphoto2 --auto-detect
# Kamera unmounten
gio mount -s gphoto2
# Capture starten und Datei herunterladen
gphoto2 --capture-image-and-download --filename '/home/blitzcam/Desktop/Captures/%Y%m%d%H%M%S.jpg'
Wichtig ist der Punkt "Kamera unmounten", denn wenn sich der PI selbst mit der Kamera verbindet, dann ist die für gphoto nicht mehr verfügbar.
Der filename bekommt durch das Anfügen von "%Y%m%d&H&M%s" einen Zeitstempel.
Ich habe den Order "Captures" geöffnet und es werden sofort die Thumbnails der aufgenommenen Bilder gezeigt (wichtig, wenn man wissen will, wo die Kamera hingeschwenkt ist ).
Die eigentliche Aufnahme soll ja aber vom MIOPS-Trigger initiert werden. Hierzu hat "gphoto" den Aufnahmemodus "Tethered". Sobald der Trigger eine Aufnahme auslöst (und nur dann) landet die Aufnahme auf dem PI:
#!/bin/bash
# Kamera erkennen
gphoto2 --auto-detect
# Kamera unmounten
gio mount -s gphoto2
# Thetered Capture starten und Datei herunterladen
gphoto2 --capture-tethered --filename '/home/blitzcam/Desktop/Captures/%Y%m%d%H%M%S.jpg'
Und so sieht mein Desktop wärend einer Aufnahme aus: der Ordner füllt sich langsam mit Thumbnails:
Sollten anstelle der Vorschau-Bilder nur Symbole angezeigt werden: im Dateimanager kann man unter Bearbeiten --> Einstellungen --> Anzeige den Wert bei "Keine Vorschaubilder erzeuegen für Dateien größer als xy kb" hochsetzen.
Für einen halben Sonntag und einen halben Dienstag gefrickel ist der Output schonmal nicht schlecht.
Natürlich gibt es einige weitere Dinge auf der Todo-Liste:
- die Dateien müssen automatisch auf den Hauptrechner transferiert werden
- Camera-Settings (Blende, usw.)
- Fokus-Einstellung
- Liveview
- der MIOPS-Trigger muß an die externe Stromversorgung (die Kamera habe ich mit diesem Adapter versorgt)
- ...
Und natürlich muß die Kuppel auf den Eselstall.
Für alles bis auf den letzten Punkt ist das Wetter momentan optimal!
Ich werde berichten, wie es weiter geht!
Gruß, Jochen