Poti an Analog> längeres Intervall?

Guten Morgen :)

ich bastle gerade an einem der vielen Tutorials zum Thema Kameraauslösung mittels Lichtschranke und habe da konkret eine Frage, die ich mir mangels Erfahrung noch nicht beantworten kann: Ich möchte ein Poti einbauen um mittels des Wertes einen Delay zwischen Durchbrechen der Lichtschranke und Auslösen der Kamera einzustellen. Das ist so weit ja alles kein Problem. Ich verstehe jedoch leider nicht wie ich es schaffe, dass das Potentiometer nur alle z.B. 60 Sekunden »abgefragt« wird wohingegen der Rest des Programms quasi ohne Pause immer wiederholt wird (um die Unterbrechung des Lichtstrahls permanent zu überprüfen)

Kann mir jemand damit helfen? Vielen Dank ...

tm

Zuerst mal ne Verständnisfrage: Warum soll der Poti nur alle z.B. 60 Sekunden abgefragt werden…?

Und zur Lösung: Du könntest z.B. irgendwas in der Art machen:

long lastTime;
loop() {
  if (lastTime < millis() - 60000) {
    ... // alle 60 Sekunden
    lastTime = millis();
  }

Hallo Joghurt,

vielen Dank erst mal : ) jaa ich glaube das ist genau das was ich gesucht habe!!! Toll : ) Vielen Dank. Bezüglich Deiner Frage dachte ich mir folgendes: Das Auslesen der analogen Eingänge dauert ja eine gewisse Zeit und es wäre ja sinnvoll sich das zu sparen, da ich ja möchte dass die Zeit zwischen dem Erkennen des Durchbrechens der Schranke und dem Auslösen der Kamera so kurz wie möglich ist. Oder ist der Ansatz falsch und es kommt auf dasselbe raus wenn ich es wie mit dem von Dir vorgeschlagenen Code löse?

Danke sehr und viele Grüße

tm

Diese durchbrechende Schranke, wie meldet die sich? Gibt die ein digitales Signal aus? Oder wie funktioniert das?

Ich würde Dir raten, Dir mal die attachInterrupt()-Funktion anzugucken, damit könntest Du die Reaktionszeit und etwaigen Jitter in der Zeit bis zur Auslösung minimieren...

puh. Ich fürchte ich kann Dir nicht folgen was attachInterrupt und »Jitter« angeht. Ich bin aber sehr interessiert daran wie ich das alles optimieren kann. Das ganze ist super einfach aufgebaut: Ich nutze einen Laserpointer, dessen Strahl auf einen Fotowiderstand fällt. Ich habe hier im Moment den Sketch nicht hier aber es ist nur eine Abfrage ob der zurückgelieferte Wert unter einen bestimmten Wert fällt (also der Strahl unterbrochen wird)

vielen dank : )

tm

Der Knackpunkt ist der: Selbst wenn Du nur alle 60 Sekunden den Poti abfragst, so kann es trotzdem sein, dass ausgerechnet in dem Moment Dein Ziel den Strahl unterbricht, und Du das dann nicht mitbekommst. Je nachdem, wie selten der "Auslöser" auftritt, kann das irritierend bis sehr ärgerlich sein, könnte ich mir vorstellen... ;)

Betreffs Interrupt: Stell Dir vor, Du wartest dringend auf den Postboten und Du hast keine Türklingel: Du bist andauernd am an die Türe rennen, bekommst nichts richtig gebacken weil Du ständig aus dem Fenster guckst und nie sicher bist, ob Du ihn nicht doch verpasst hast, und aufs Klo oder kurz in den Keller gehen ist schon mal überhaupt nicht drin. Wenn Du nun aber eine zuverlässige Haustürklingel hast, dann kannst Du in Ruhe arbeiten und trotzdem sicher sein dass Du ihn nicht verpasst.

Genau das Prinzip hast Du bei einem s.g. Interrupt: Der unterbricht Dir Deine loop()-Schleife, egal wo darin sie gerade ist, und führt eine Funktion aus (die im attachInterrupt angegeben wird), anschließend wird die Arbeit in der loop()-Schleife an genau der unterbrochenen Stelle wieder aufgenommen. Du kannst also jederzeit und so oft wie Du willst Deine analogen Ports auslesen, grafische Displays updaten und sonstige langwierigen Sachen machen, und wenn Deine Lichtschranke unterbrochen wird, dann wird die Funktion sofort und quasi ohne Verzögerung aufgerufen, und Du kannst die Kamera auslösen, und es kommt keine Zeit dazu, bis Dein Programm bei der Überprüfung des Pins der Lichtschranke ankommt (letzteres meinte ich mit Jitter, weil die Zeit bis dahin je nachdem, wo in der loop() Du in dem Moment gerade bist, immer unterschiedlich sein wird).

Das klappt aber nur an einem digitalen Port, Deine Lichtschranke muss also ein "reguläres" HIGH- oder LOW-Signal liefern, analoge Werte gehen damit nicht! Aber selbst analog sollte das über einen Schmitt-Trigger oder etwas ähnliches kein Problem sein. ;)

Sehr anschaulich erklärt, Joghurt! Nun noch meine Gedankengänge zum Projekt: Ich würde den Einstellungsphase und den Funktionsphase strikt voneinander trennen. Einstellungen mit dem Poti (alternativ Taster) kann man während der 1. Phase machen, die zweite Phase leitet man dann bspw. mit einem Startbutton ein. Von hier an wird auch Poti gar nicht mehr ausgelesen, erst nach dem Auslösen der Kamera oder einem Druck auf die Abbruchtaste wechselt man zurück in den Einstellungsmodus.

Das ist natürlich auch ne Möglichkeit, daran hatte ich gar nicht gedacht. :)

Du solltest aber wegen der Reaktionszeit vermutlich trotzdem zusehen, dass die Lichtschranke digitale Werte liefert (falls sie das bisher noch nicht tut).

Auch sehr zu empfehlen wäre statt eines Potis zur Zeiteinstellung ein Drehencoder (z.B. dieser hier, der hätte auch gleich noch einen Taster eingebaut), dann hast Du das Problem mit der Zeitverzögerung beim Auslesen nicht und kannst gleichzeitig feinere Einstellungen vornehmen (da z.B. endlos viele Umdrehungen möglich sind) und z.B. auch auf zuvor gespeicherte Werte springen und von denen aus weiter verstellen oder so.

Möchtest du High-Speed Fotografie machen und hast die Cam an den Arduino angeschlossen? Und möchtest Zeit sparen indem du analogRead nicht einsetzt?

Ich würde ohnehin in diesem Fall von dem recht trägen Fotowiderstand auf einen Fototransistor wechseln, denn gerade für eine Fotofalle kann Geschwindigkeit ein Thema sein.

Gute Idee, das verringert die Reaktionszeit, reduziert mögliche Zeitfehler beim Auslösen und eine "digitale" Spannung zu bekommen ist damit auch einfacher. :)

Es bringt im Falle von Highspeed-Fotografie eigentlich eh nichts die Kamera direkt auszulösen, da sie zu träge ist, drum habe ich gefragt.

Naja, wenn Du irgendwelche Tropfen oder Insekten oder so fotografieren willst, wenn sie im Aufnahmebereich der Kamera sind, dann ist so eine Anordnung schon ne gute Idee. :)

Ich hab sowas bereits mit einem Arduino gemacht und kann dir sagen, dass der Arduino schnell genug, die Kamera aber zu träge ist.

Ich hatte damals mit einem Piezoelement und einem Op-Amp ein Glas gemessen, das Piezo war so sensitiv dass es einen Tropfen auf der Oberfläche erkannte.

@apogee

Mich würde interessieren, mit was für einer Kamera du es versucht hast.

Gruß, Roland

Canon EOS 450D und 550D

Dort muss man für Vorgänge im Bruchteil-Sekunden Bereich einen anderen Weg gehen um Bilder zu bekommen.

die Kamera aber zu träge ist.

Zu Träge im Sinne von "die Belichtung ist zu lang" oder "die Kamera braucht zu lange zum Auslösen"?

Und 75 ms Auslöseverzögerung waren ungefähr wie viel zu lang?

@joghurt: Die Kamera braucht zu lange zum Auslösen.

@r.merk 75ms (dazu noch die reaktion der Arduino-Schaltung) sind zu lange um zB einen platzenden Ballon optimal zu fotografieren.

Ausserdem verzögert die EOS laut Chip-Test eher um 0,12 Sekunden.

Ok. Google hat mich zu Traumflieger geleitet. Hier stehen die genannten 75 ms.