• Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2025
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien und Schutzgläser der Eigenmarken
    "Upscreen", "Screenleaf", BROTECT" und "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Stimmt ab über die Sieger des DSLR-Forum Fotowettbewerbs August 2025.
    Thema: "Kurven"

    Nur noch bis zum 31.08.2025 23:59!
    Jeder darf abstimmen!
    Zur Abstimmung und Bewertung hier lang
  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
WERBUNG

Wassertropfen

Angeregt durch Eure super tollen Bilder habe ich mich nun auch an dieses Thema gewagt. Hier mal einer meiner wenigen "geglückten" Versuche.


IMG_9279-zugeschnitten-hintergrund.jpg
 
Hallo nochmal,

Ich wollte kurz auf einige der angesprochenen Punkte eingehen:

- Einstellmöglichkeiten des GUI: Hier eine kurze Beschreibung am Beispiel von den "Devices" (Für die Kameras/Blitze ist es identisch. Eine vollständige Beschreibung muß ich erst noch machen): Für jedes Device kann man 10 Phasen einstellen, angeordnet in 5 Zeilen untereinader à 2 Phasen (1/2, 3/4, 5/6, 7/8, 9/10). Bei den ungeraden Phasen ist der Ausgang nicht geschaltet (OFF), bei den geraden Phasen (ON) ist er geschaltet. Selbstverständlich kann man Phase 1 auch auf Dauer 0 setzen, so daß ein Ausgang direkt nach Startknopf oder Trigger aktiv wird, ohne Wartezeit. Zu jeder einzelnen dieser Phasen ist ein Inkrement-Wert zugeordnet, am Bildschirm angeordnet in der gleichen Art und Weise wie die eigentlichen Phasen (in der jeweils 3. und 4. Kolonne). Diese Werte werden nur benötigt wenn man mehrere Durchläufe laufen lassen will (also Feld "Number of repetitions" größer als 1). Ist dies der Fall, wird bei jedem Durchlauf die entsprechende Phasenzeit um ihren zugehörigen Inkrement-Wert erhöht. Hiermit lassen sich sehr komplexe Szenarien darstellen (die für einen Menschen wahrscheinlich sehr schnell nicht mehr nachvollziehbar sind), im Normalfall ist es aber wahrscheinlich sinnvoll nur einen oder wenige Inkrement-Werte gleichzeitig auf einen Wert verschieden von 0 zu setzen. Hiermit lassen sich z.Bsp. "Filme" (also eine automtische Sequenz zu verschiedenen Zeitpunkten) erstellen oder aber eine Testreihe durchspielen um die besten Zeitpunkte für ein Szenario zu finden.

Alle Dauern beziehen sich immer auf den jeweils für das betreffende Gerät eingestellten Startzeitpunkt, d.h. entweder auf den Startknopf oder auf Trigger 1 oder 2. Dieser kann für jeden Device (oder KameraBlitz) separat in der jeweiligen Auswahlbox ausgewählt werden. Es kann deshalb z.Bsp. komplett ohne Lichtschranke (Trigger) oder ähnliches gearbeitet werden, einfach dadurch daß die relativen Dauern verschiedener Ereignisse zueinander, bezogen auf den Startknopfzeitpunkt, benutzt werden (z.Bsp. Auslöseverzögerung Kamera, ...).

Gestartet wird der Prozess auf jeden Fall durch den Startknopf am GlimpseCatcher. Hierzu wird der Startknopf kurz gedrückt. Wenn man den Startknopf 5 Sekunden gedrückt hält, werden die Device-Ausgänge dauerhaft geschaltet (um z.Bsp. Siphons zu entleeren). Für die Kamera/Blitz-Ausgänge gilt dies nicht. In beiden Fällen (laufender Prozess oder laufende Siphon-Entleerung) wird durch einen weiteren Knopfdruck der jeweils laufende Prozess abgebrochen. Dies ist die einzige Möglichkeit die Siphon-Entleerung zu beenden, der normale Prozess wird natürlich selbständig nach komplettem Ablauf beendet. Während eines laufenden Prozesses ist keine Parametrierung möglich.

- Externes Display: Ich habe mich bewußt gegen ein externes Display entschieden. Zum einen denke ich, daß die Parametriermöglichkeiten zu umfangreich sind um sinnvoll über ein kleines Display eingegeben werden zu können. Zum anderen benötigt meines Wissens ein paralleles LCD-Display alleine mindestens 7 Eingänge, besser mehr. Damit wären mindestens die Hälfte der verfügbaren Steuerausgänge verschenkt (allerdings wären die Anforderungen an die Parametrierung dann auch entsprechend geringer :)). Ich weiß momentan nicht, ob es serielle LCD-Displays gibt. Wahrscheinlich aber schon. In dem Fall wäre ein solches Display nach wie vor möglich. Ich halte es aber dennoch nicht unbedingt für praktisch und sehe es deshalb nicht unbedingt als Priorität an.

- Quellcode: Bitte habt Verständnis dafür, daß ich den Quellcode leider nicht frei zur Verfügung stellen kann.

Schönen Abend

GlimpseCatcher
 
Die Löterei an meinem eigenen GlimpseCatcher hat mich aber (fast) in den Wahnsinn getrieben :) Es ist einfach unglaublich wieviele Verbindungen hergestellt werden müssen, und das auf kleinstem Raum um die kompakte Bauweise zu ermöglichen

Da hast du dir aber viel Arbeit gemacht :top: Die Größe hätte für mich persönlich keine Bedeutung, ich hätts/habs lieber größer, aber einfacher zum bauen gemacht. Aber so hat eben jeder sein Ding :)

Dann bin ich auf die ersten Bilder gespannt. Mit 10 Ausgängen könnten ja ne ganze Menge Spielereien möglich sein :cool:
 
@Mirkole,
ich habe ja den Photoduino und auch den von Niggoh nachgebaut. Die Ausgaben erfolgen über ein Display.
So sieht mein Schaltplan aus https://www.dslr-forum.de/showpost.php?p=8149059&postcount=68

Danke für den Tipp, dachte immer das Teil von Niggoh heißt Photoduino.
Jetzt werde ich mal den Quellcode vom Richtigen anschauen. Mal sehen wie die so alles steuern.
Hoffe mal nicht, daß da nur simple Delay-Verzögerungen verwendet werden.

Gruß Mirkole
 
Das führt hier zwar etwas vom Thema des Threads weg, aber trotzdem eine kurze Antwort:

delay() hält das Arduino an. Während der Befehl ausgeführt, kann das Arduino nichts anderes machen. Das ist kein Problem, wenn man nur ein einziges Ereignis über delay() steuern möchte und sicher ausschließen kann, dass währenddessen noch etwas anderes geschehen soll. Sobald aber zwei Dinge im gleichen Zeitfenster passieren, funktioniert das mittels delay() nicht mehr, weil während des delay()-Befehls das Arduino nichts anderes als warten kann, bis die angegebene Zeitspanne vorbei ist und somit nicht auf Änderungen reagiert.

Auf die Wassertropfen-Fotografie übersetzt bedeutet das:
Wenn man ein Magnetventil steuern und eine Lichtschranke zur Kamera-Auslösung benutzen möchte, kann die Lichtschranke nicht reagieren, während das Magnetventil mittels delay() offen gehalten wird. Man kann aber alternativ auch auch die Lichtschranke weglassen und die Kamera zu einem definierten Zeitpunkt nach Öffnung des Ventils auslösen, da spricht dann nichts gegen delay(). Wenn dann aber beispielsweise mehrere Ventile gesteuert werden sollen, gehts mit delay() nicht mehr.
Wenn mehrere Ereignisse überlappend eintreffen können, ist es günstiger, Verzögerungen über millis() und Bedingungen wie if oder while zu realisieren. Beispiele dazu gibts auf arduino.cc
 
Zuletzt bearbeitet:
Sehr interessante sachen die ihr hier besprecht. Leider kenne ich mich mit dem Thema überhaupt nicht aus :rolleyes: Aber dafür gibt es ja euch !

Und ich melde mich jetzt für 2 Wochen ab. Ab Morgen gehts in den Urlaub :p
 
So ich hab jetzt endlich zu meiner DSLR geschafft, EOS550D.

Nun wollte ich mich mal erneut an die Tropfen versuchen, habe da aber ein paar Probleme.

Bei der Zeitvorgabe, komme ich nicht höher als 200?!

Er stellt absolut nicht scharf, alles ist verschwommen?!

Habe zwei Objekte zur Auswahl

Ein 75-300mm und das Standard Objektiv. Ist halt alles noch ganz frisch.

Habt ihr da paar Ideen?
 
@ Sternchenmaus:
Die Zeitvorgabe geht nicht höher, weil der aufgesteckte (oder aufgeklappte) Blitz das verhindert. Die Kamera kann den Blitz nicht schneller synchronisieren.
Für normales Fotografieren mit Blitzlicht reicht das ja auch.
Bei den Tropfen nicht mehr wirklich. Wir steuen unsere externen Blitze alle über separate Elektronik.
Du hast in Deinem Fall wohl nur die Chance, im manuellen Modus die Zeit auf 1/200sek bei einer festen Blende, ca. f4-f8, im richtigen Moment abzudrücken.
Stativ und externer Auslöser helfen da.

Klar stellt die Kamera nicht scharf, geht alles viel zu schnell. Du musst manuell auf den Punkt focusieren, wo Dein Tropfen auftrifft. So daß die Kamera nicht mehr selber scharf stellen muss.

Die Objektive sind beide für Tropfen nicht das wahre. Am besten wäre ein Makro mit 105mm oder 150mm Brennweite. Ich nutze ein 60er Makro, das geht auch, aber man muss teilweise sehr nah ran und bekommt dann Spritzer aufs Objektiv.
Wenn Du das nicht kaufen willst, nimm das Objektiv, das die kleinen Tropfen am grössten aufs Bild bringt.

Hoffe mal, daß Dir das hilft.
LG Mirkole
 
In der Zeit macht der Prozessor nichts ausser zu warten. D.h. du kannst keine 2 Ventile oder allgemein keine 2 Vorgänge parallel steuern weil er das andere nicht verarbeiten kann solange er im delay hängt.

Hatte früher auch alles mit delay programmiert, das ist ziemlich genau, aber die entsprechenden Probleme wurden ja schon angesprochen.
Dann hab ich die Ventile über die millis()-Funktion in ner while-Schleife ablaufen lassen. Da hatte ich aber oft das Gefühl, daß sich der Arduino irgendwie verschluckt. Waren immer wieder Bilder dabei, die völlig aus der Reihe getanzt sind.

Jetzt habe ich die Ventile in ne for-Schleife gepackt, die solange hochzählt, bis der BLitz gezündet wurde, was ja immer das Ende des Gesamtvorgangs darstellt. Jede Schleife wird mit einem Delay-Befehl um 985 Microsekunden (so hab ich die wenigste Abweichung) kurz gestoppt. So dauert jede Schleife dann exakt eine Millisekunde.
Für mich bis jetzt die beste Lösung.

Hat jemand noch ne andere Lösung??
Würde mich echt interressieren obs noch andere Ansätze gibt.

LG
Mirkole
 
Die for Schleife mit delay() drin finde ich eine interessante Idee. Verstehe aber nicht, warum das mit den millis() bei Dir nicht funktioniert. Meinen Quelltext findest Du hier, evtl. hilft der ja weiter. Hab auch schon wieder neue Bastelideen... :)

Bei der Zeitvorgabe, komme ich nicht höher als 200?!
Nimm den manuellen Modus, stell auf 1/180, damit sollte der Blitz noch problemlos synchronisieren können. Blende 16, ISO nur so hoch wie notwendig.

Er stellt absolut nicht scharf, alles ist verschwommen?!
Kamera aufs Stativ. Eine Schraube (o.ä.) an der Stelle ins Becken stellen, an denen die Tropfen auftreffen werden. Darauf fokussieren, danach den Autofokusschalter am Objektiv abschalten.

Ein 75-300mm und das Standard Objektiv. Ist halt alles noch ganz frisch.
Man kann mit dem Kitobjektiv problemlos Wassertropfen fotografieren. Hab mit dem 15-85 angefangen und bin jetzt beim 100er Makro gelandet, das bringt aber für die Wassertropfen kaum einen Gewinn. Falls Du in Ausrüstung investieren willst: Blitze, Funkauslöser.
 
Dann hab ich die Ventile über die millis()-Funktion in ner while-Schleife ablaufen lassen. Da hatte ich aber oft das Gefühl, daß sich der Arduino irgendwie verschluckt. Waren immer wieder Bilder dabei, die völlig aus der Reihe getanzt sind.

Verwende auch die Millis() Funktion, funktioniert absolut zuverlässig bei mir, habs schon einige Male nachgemessen bzw. die Zeitstempel mitgeloggt, das passt immer sehr exakt.
 
Vielleicht hatte ich das Ganze auch nur sch.... programmiert.

Der Vorteil ist, daß ich nix rumrechnen muß, um die eingestellten Zeiten von den aktuellen millis() abzuziehen usw. Je weniger Code, desto besser, oder?
Falls ich mal ne höhere Zeitauflösung von 0,5 oder 0,1 ms brauchen sollte, verringere ich nur diesen einen Delay-Wert auf 500 oder 100 Microsekunden.

Außerdem hab ich die For-Schleife in ein Unterprogramm gepackt, da stört Delay() nicht den kompletten Ablauf, brauche den Loop zum einstellen der Werte auf'm Display.

Hab diese Woche noch den Befehl interrupt() / no interrupt() gefunden. Möchte mal probieren, ob man damit vielleicht eine noch höhere Genauigkeit erreicht. Kann aber auch sein, daß der Befehl die I/O-Ports abschaltet. Schau mer mal.
 
Hallo,

hab mich heute auch mal wieder an die Tropfen gewagt, was mich nur sehr stört ist der Schatten übergang vom Becken zu meinem Hintergrund. Habe leider noch kein Blitzkabel/Funkauslöser für mein Blitz und kann deshalb nur mit aufsteckblitz Arbeiten, habt ihr eine idee was ich dagegen im moment machen kann ?

MfG
Stephan
 
...
Je weniger Code, desto besser, oder?
...
Hab diese Woche noch den Befehl interrupt() / no interrupt() gefunden. Möchte mal probieren, ob man damit vielleicht eine noch höhere Genauigkeit erreicht. Kann aber auch sein, daß der Befehl die I/O-Ports abschaltet. Schau mer mal.

Der interrupt()/nointerrupt() Befehl wird Dir nicht helfen eine höhere Genauigkeit zu erreichen. Er macht ja nichts anderes als Interrupt-Routinen freizugeben für Signale, die über die Interrupt-Pins reinkommen. Und diese Signale müssen ja erst einmal bestehen und haben à priori nichts mit der Genauigkeit zu tun. Zudem mußt Du bedenken, daß diese Interrupt-Routinen das „normale“ Programm an jeder x-beliebigen Stelle unterbrechen, sobald das entsprechende Signal auftritt (und daß das Programm hierfür entsprechend ausgelegt sein muß). Die Interrupts kann man deshalb z.Bsp. für Trigger benutzen.

Das genaueste ist natürlich die delay() Funktion da hiermit das Programm für genau die angegebene Zeit „angehalten“ wird. Dies ist aber nicht zu empfehlen, da das Programm dann eben wirklich „angehalten“ ist und nichts anderes tut. Wenn Du nur ein Gerät steuern willst und sonst absolut garnichts, kannst Du das machen. In allen anderen Fällen (was der Normalfall sein dürfte) aber nicht.

Im Prinzip ist der Arduino eigentlich nichts anderes als eine SPS, die ein Programm in Zyklen abarbeitet (hier heißt er eben nur loop(), bei der SPS z.Bsp. OB1). Es sind diese Zyklen, die Du nutzen mußt um mehrere Dinge gleichzeitig zu tun. Mit der delay() Funktion verhinderst Du sie aber, d.h. Du bleibst in dem gleichen Zyklus bis zum Ablauf des Delays. Stattdessen mußt Du die millis() oder evtl. die micros() Funktion nutzen, Dich bei jedem Zyklus über die aktuelle Zeit informieren und pro Zyklus entsprechend reagieren. Um die größtmögliche Genauigkeit zu erreichen, muß Dein Programm so geschrieben sein, daß die Zyklusdauer kürzestmöglich ist. Aus diesem Grund gebe ich beim GlimpseCatcher z.Bsp. die maximale Zyklusdauer an, die während des kompletten Prozessablaufs aufgetreten ist. Dies ist die theoretisch größte Abweichung die zu den vorgegebenen Dauern aufgetreten sein kann. Es ist aber unwahrscheinlich, daß diese maximale Zyklusdauer auch tatsächlich die maximale Abweichung ist (genau so wie es unwahrscheinlich ist, daß die angegebenen Zeiten exakt eingehalten werden). Vielmehr wird durchschnittlich die Abweichung wahrscheinlich bei der Hälfte dieser Zeit liegen, mal ein bißchen zu früh, mal ein bißchen zu spät.

Im Prinzip ist das alles: Du mußt das Programm so schreiben (und entsprechend optimieren) daß Du pro Zyklus möglichst viel machst bei möglichst kurzer Zykluszeit. Es muß nicht unbedingt – wie Du schreibst – möglichst wenig Code sein. Es muß so viel Code wie nötig sein (was durchaus relativ viel sein kann), der Code muß aber so geschrieben sein, daß er schnellstmöglich ist.

Noch ein Update zum GlimpseCatcher: Aufgrund der Nachfrage bin ich dabei eine professionelle Platine (oder besser 2, da es ja 2 sind) zu entwickeln. Ich denke, daß ich diese im Laufe der nächsten Woche fertig bekomme. Dann muß diese in einer Kleinserie hergestellt werden, was ca. 2-3 Wochen dauert. Danach kommt dann die Lieferzeit der Platinen zu mir, der Bau und natürlich die Tests. Alles in allem denke ich deshalb, daß die ersten GlimpseCatcher vielleicht in 4-5 Wochen verfügbar sind.
 
WERBUNG
Zurück
Oben Unten