DSLR-Forum Anzeige

Zurück   DSLR-Forum > Technik und Gestaltung > Fototechnik > Bastelecke

Anzeige

Antwort
 
Themen-Optionen Ansicht
Alt 07.05.2011, 22:49   #101
gloob
Benutzer
 
Registriert seit: 08.04.2008
Beiträge: 398
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Zitat:
Zitat von Dirk_NRW Beitrag anzeigen
Hat sich erledigt, habe eine Lösung gefunden und das Problem gelöst.
Und wie hast du es geschafft wenn man fragen darg
__________________
| Canon EOS 5D MII | Canon EOS 550D | Canon EF 24-105 mm 1:4 L IS USM | Canon EF 70-200mm 1:4 L USM | Canon EF 50mm 1:1.4 USM | Walimex 8mm 1:3.5 | Canon Speedlite 430EX II | Manfrotto 190XDB | Sirui K-30X Aluminium Kugelkopf | Selbstbau-Nodalpunktadapter |
gloob ist offline   Mit Zitat antworten
Alt 25.05.2011, 17:27   #102
Niggoh
Benutzer
 
Threadstarter
 
Registriert seit: 02.04.2010
Ort: Nürnberg
Beiträge: 712
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Kleines Update für die Software-Version mit Magnetventil. Dieses behebt das Problem, dass die Tropfenfolge nicht oder nicht vollständig ausgelöst wird, wenn die Öffnungs- und Pausenzeiten sehr kurz sind. Auch mit der neuen Version sind die Probleme nicht vollständig behoben, zumindest aber deutlich verringert.
Das Problem tritt durch Serial.println() auf, welches eine Verzögerung ähnlich delay() auslöst, die wiederum dazu führen kann, dass ein Tropfintervall verpasst wird. Im Grunde genommen kann man einfach alle Zeilen mit Serial.println() löschen oder über // auskommentieren. Hab mich für das Auskommentieren entschieden, weil das Debugging durch die Rückmeldungen etwas erleichtert wird und man so ggf. einfach die beiden Schrägstriche wieder entfernen kann.

Code:
// KONSTANTEN
const int lichtschranken_pin = A0;
const int ventil_pin = 12;
const int kamera_pin = 13;

// VARIABLEN
// Alle Zeiten in Millisekunden angegeben

// Zeitvariablen initalisieren
// Auslöseverzögerung Kamera
long aktuellezeit_ausloeseverzoegerung = 0;
long startzeit_ausloeseverzoegerung = 0;
// Ventil
long aktuellezeit_ventil = 0;
long startzeit_ventil = 0;

// Ventilöffnungszeiten festlegen
int tropfenzeit_1 = 150;
int verschlusszeit_1_2 = 70;
int tropfenzeit_2 = 150;
int verschlusszeit_2_3 = 70;
int tropfenzeit_3 = 150;
int gesamtzeit_tropfserie = tropfenzeit_1 + verschlusszeit_1_2 + tropfenzeit_2 + verschlusszeit_2_3 + tropfenzeit_3 + 500; // für die Inaktivzeit der Lichtschranke, 500 ms Sicherheitsreserve, damit die Lichtschranke nicht durch den dritten Tropfen doch wieder aktiviert werden kann

// Zeit zwischen den Tropfenserien festlegen
int pausenzeit = 10000;

// Auslöseverzögerung festlegen
int ausloeseverzoegerung = 288;

// Aktivierungszeit für Kameraauslöser festlegen
int ausloeser_aktivzeit = 200;

// Lichtschranken-Schwellenwert festlegen
int lichtschranke_messwert;
int lichtschranke_maximum;
int lichtschranke_minimum;
int lichtschranke_schwellenwert;
float lichtschranke_schwellenwertfaktor = 0.85; // Faktor, mit dem der maximale Messwert der Lichtschranke multipliziert wird, um den Schwellenwert zu errechnen, muss unbedingt kleiner als 1 sein!

// Statusvariable Lichtschranke
boolean lichtschranke_unterbrochen = false;

// Statusvariable Kameraauslöser
boolean kamera_ausloeser_aktiv = false;

// Satusvariable Ventil
boolean ventil_offen = false;

// Statusvariable Tropfserie
boolean tropfserie_laeuft = false;

// Statusvariable Tropfen ausgelöst
boolean tropfen_ausgeloest = false;

// Ventilzeiten in Absolutwerte umrechnen
int endzeit_offen_1 = tropfenzeit_1;
int endzeit_geschlossen_1_2 = endzeit_offen_1 + verschlusszeit_1_2;
int endzeit_offen_2 = endzeit_geschlossen_1_2 + tropfenzeit_2;
int endzeit_geschlossen_2_3 = endzeit_offen_2 + verschlusszeit_2_3;
int endzeit_offen_3 = endzeit_geschlossen_2_3 + tropfenzeit_3;
int endzeit_pause = endzeit_offen_3 + pausenzeit;

// Eingabevariable initialisieren
int eingabe;

void setup() {
  // Ausgangspins initialisieren
  pinMode(ventil_pin, OUTPUT); 
  pinMode(kamera_pin, OUTPUT);
  // Serielle Verbindung zum Computer initialisieren für Textausgabe
//  Serial.begin(9600);
//  Serial.println("Lichtschranke wird kalibiert...");
  // Die ersten zwei Sekunden die Lichtschranke kalibrieren
  while (millis() < 2000) {
    lichtschranke_messwert = analogRead(lichtschranken_pin);
    // Maximalwert speichern
    if (lichtschranke_messwert > lichtschranke_maximum) {
      lichtschranke_maximum = lichtschranke_messwert;
    }
    // Minimalwert speichern, nur fuer den Fall, dass wir den Schwellenwert irgendwann mal anders berechnen wollen
    if (lichtschranke_messwert < lichtschranke_minimum) {
      lichtschranke_minimum = lichtschranke_messwert;
    }
  }
  lichtschranke_schwellenwert = lichtschranke_maximum * lichtschranke_schwellenwertfaktor;
//  Serial.print("Leerwert der Lichtschranke: ");
//  Serial.println(lichtschranke_maximum);
//  Serial.print("Schwellenwert der Lichtschranke: ");
//  Serial.println(lichtschranke_schwellenwert);
}

void loop() {
  tropfen_ausgeloest = true;

  // Tropfserie fallen lassen falls ausgelöst
  if (tropfen_ausgeloest == true) {
    aktuellezeit_ventil = millis();
    if (aktuellezeit_ventil - startzeit_ventil < endzeit_offen_1 && ventil_offen == false) {
      digitalWrite(ventil_pin, HIGH);
      ventil_offen = true;
      tropfserie_laeuft = true;
//      Serial.println("Tropfen 1 Start, Ventil offen");
    }
    else if (aktuellezeit_ventil - startzeit_ventil > endzeit_offen_1 && aktuellezeit_ventil - startzeit_ventil < endzeit_geschlossen_1_2 && ventil_offen == true) {
      digitalWrite(ventil_pin, LOW);
      ventil_offen = false;
//      Serial.println("Tropfen 1 Ende, Ventil geschlossen");    
    }
    else if (aktuellezeit_ventil - startzeit_ventil > endzeit_geschlossen_1_2 && aktuellezeit_ventil - startzeit_ventil < endzeit_offen_2 && ventil_offen == false) {
      digitalWrite(ventil_pin, HIGH);
      ventil_offen = true;
//      Serial.println("Tropfen 2 Start, Ventil offen");
    }
    else if (aktuellezeit_ventil - startzeit_ventil > endzeit_offen_2 && aktuellezeit_ventil - startzeit_ventil < endzeit_geschlossen_2_3 && ventil_offen == true) {
      digitalWrite(ventil_pin, LOW);
      ventil_offen = false;
//      Serial.println("Tropfen 2 Ende, Ventil geschlossen");        
    }
    else if (aktuellezeit_ventil - startzeit_ventil > endzeit_geschlossen_2_3 && aktuellezeit_ventil - startzeit_ventil < endzeit_offen_3 && ventil_offen == false) {
      digitalWrite(ventil_pin, HIGH);
      ventil_offen = true;
//      Serial.println("Tropfen 3 Start, Ventil offen");
    }
    else if (aktuellezeit_ventil - startzeit_ventil > endzeit_offen_3 && aktuellezeit_ventil - startzeit_ventil < endzeit_pause && ventil_offen == true) {
      digitalWrite(ventil_pin, LOW);
      ventil_offen = false;
//      Serial.println("Tropfen 3 Ende, Ventil geschlossen");    
    }
    else if (aktuellezeit_ventil - startzeit_ventil > endzeit_pause) {
      startzeit_ventil = aktuellezeit_ventil;
      tropfserie_laeuft = false;
      lichtschranke_unterbrochen = false;
//      Serial.println("Ende der Pause, Startzeit aktualisiert, Lichtschranke wieder scharf");
    }
  }
  
  // Lichtschranke abfragen
    lichtschranke_messwert = analogRead(lichtschranken_pin);
    if (lichtschranke_messwert < lichtschranke_schwellenwert && lichtschranke_unterbrochen == false) {
//      Serial.println("Lichtschranke unterbrochen");
      lichtschranke_unterbrochen = true;
      startzeit_ausloeseverzoegerung = millis();
    }
    // Verzögerungszeit abwarten, dann Kamera-Auslöser aktivieren
    aktuellezeit_ausloeseverzoegerung = millis();
    if (aktuellezeit_ausloeseverzoegerung - startzeit_ausloeseverzoegerung > ausloeseverzoegerung && aktuellezeit_ausloeseverzoegerung - startzeit_ausloeseverzoegerung < ausloeseverzoegerung + ausloeser_aktivzeit && kamera_ausloeser_aktiv == false && lichtschranke_unterbrochen == true) {
      digitalWrite(kamera_pin, HIGH);
      kamera_ausloeser_aktiv = true; 
//      Serial.println("Kamera-Ausloeser aktiviert");
    }
    // Aktivzeit des Auslösers abwarten, dann Kamera-Auslöser deaktivieren
    else if (aktuellezeit_ausloeseverzoegerung - startzeit_ausloeseverzoegerung > ausloeseverzoegerung + ausloeser_aktivzeit && aktuellezeit_ausloeseverzoegerung - startzeit_ausloeseverzoegerung < gesamtzeit_tropfserie && kamera_ausloeser_aktiv == true) {
      digitalWrite(kamera_pin, LOW);
      kamera_ausloeser_aktiv = false;
//      Serial.println("Kamera-Ausloeser deaktiviert");
    }
}
Niggoh ist offline   Mit Zitat antworten
Alt 29.05.2011, 23:20   #103
Norbi
Benutzer
 
Registriert seit: 11.02.2007
Ort: Emden
Beiträge: 36
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Guten Abend zusammen,

vielen Dank an Niggoh und die anderen für die ausführliche Beschreibung.

Gerade hab ich die Lichtschranke mit dem Arduino Mega 2560 fertig, das mit dem Magnetventil kommt in der nächsten Woche noch.

Nach anfänglichen, kleinen Schwierigkeiten läuft sie jetzt fehlerfrei.

Was mich nur wundert ist die geringe Reichweite. Größer als 20 mm darf der Abstand zwischen Sender und Empfänger nicht sein sonst löst sie ständig aus. Ist das normal?

Gruß aus Emden

Norbi
Norbi ist offline   Mit Zitat antworten
Alt 29.05.2011, 23:37   #104
h3design
Benutzer
 
Registriert seit: 04.02.2011
Beiträge: 344
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Ne das ist glaub ich nicht normal ...
meine schafft locker 10-15 cm..
kann natürlich sein dass das von sender zu sender unterschiedlich ist
h3design ist offline   Mit Zitat antworten
Werbung
Zu viel Werbung? Hier kostenlos bei DSLR-Forum.de registrieren!
Alt 30.05.2011, 00:41   #105
Niggoh
Benutzer
 
Threadstarter
 
Registriert seit: 02.04.2010
Ort: Nürnberg
Beiträge: 712
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Wie hoch ist denn die Spannung an Deiner LED? Ggf. kannst Du die noch ein bisschen erhöhen. Bei mir gehen auch wesentlich größere Abstände. Die Empfindlichkeit ist frei wählbar, alternativ kannst Du auch die selbstkalibrierende Version benutzen. Allerdings musst Du dann das Programm neu starten, wenn Du den Abstand veränderst, weil sich dann logischerweise die Werte verändern.

Ich betreibe meine Lichtschranke momentan mit 3 Volt. Sender und Empfänger sind in ca. 2 cm Abstand. Dabei erhalte ich dann Leerwerte um die 170. Was bekommst Du da für Werte angezeigt?
Niggoh ist offline   Mit Zitat antworten
Alt 31.05.2011, 08:58   #106
Norbi
Benutzer
 
Registriert seit: 11.02.2007
Ort: Emden
Beiträge: 36
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Der Sender wird mit 3 V betrieben. Die gezeigten Werte liegen zwichen 39 und 49. Aber könnte es vielleicht auch an dem Fototransistor im Empfänger liegen?
Dort habe ich einen BP 103 eingesetzt (den hatte ich noch) wobei nur die Anschlüsse Emitter/Collektor verwendet werden. Die Basis vom Transistor wird hier nicht genutzt.

Als Programmcode verwende ich das was Niggoh auf der ersten Seite hier zeigt.

Ich hab jetzt mal verschiedene Werte ausprobiert, komme aber nicht weiter als 20 mm Abstand. Ok, das reicht ja eigendlich für die Tropfenfotografie, aber man könnte die LS ja z.B. auch für das Futterhaus auf dem Balkon einsetzen.

Gruß aus Emden
Norbi
Norbi ist offline   Mit Zitat antworten
Alt 31.05.2011, 14:17   #107
fernbedienung712
Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 305
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Zitat:
Zitat von Niggoh Beitrag anzeigen
Kleines Update für die Software-Version mit Magnetventil. Dieses behebt das Problem, dass die Tropfenfolge nicht oder nicht vollständig ausgelöst wird, wenn die Öffnungs- und Pausenzeiten sehr kurz sind. Auch mit der neuen Version sind die Probleme nicht vollständig behoben, zumindest aber deutlich verringert.
Das Problem tritt durch Serial.println() auf, welches eine Verzögerung ähnlich delay() auslöst, die wiederum dazu führen kann, dass ein Tropfintervall verpasst wird. Im Grunde genommen kann man einfach alle Zeilen mit Serial.println() löschen oder über // auskommentieren. Hab mich für das Auskommentieren entschieden, weil das Debugging durch die Rückmeldungen etwas erleichtert wird und man so ggf. einfach die beiden Schrägstriche wieder entfernen kann.
Danke ich hab mir schon immer überlegt warum das passiert
__________________
Grüße fernbedienung712

35mmFilm.de - Meine Website

Ausrüstung ist zweitrangig - der Fotograf ist der entscheidende Faktor
fernbedienung712 ist offline   Mit Zitat antworten
Alt 31.05.2011, 22:53   #108
Niggoh
Benutzer
 
Threadstarter
 
Registriert seit: 02.04.2010
Ort: Nürnberg
Beiträge: 712
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

@Norbi:
Versuch mal 5V an der IR-LED anzulegen, das müsste die eigentlich auch abkönnen. Ich hatte meine auch schon an einer 9V Blockbatterie und das hat sie auch überlebt. Die Dinger sind ja zum Glück auch nicht so furchtbar teuer
Evtl. kommst Du dann auf etwas größere Abstände, die fürs Futterhaus reichen, wobei das Tageslicht evtl. stören könnte. Für ernsthafte Distanzen wird es aber eher auf eine Laserlichtschranke hinauslaufen, da hab ich allerdings bisher noch keine Erfahrungen mit gemacht und mich auch nie ernsthaft damit beschäftigt. Es gibt aber reichlich Infos zum Thema im Internet, mit ein bisschen Geduld sollte da sicherlich etwas zu finden sein.

@fernbedienung712:
Kein Problem. Auf die Lösung bin ich zufällig bei der Recherche nach anderen Dingen gestoßen.

Ich werde mittelfristig die Schaltung noch dahingehend erweitern, dass man die Zeiten unabhängig vom Computer verändern kann. Dann wird man dann allerdings um ein LCD und ein paar Knöpfe nicht mehr umherkommen. Das ist aber bisher nur eine Idee, ich habe mir noch keine großen Gedanken zur Umsetzung gemacht und momentan auch andere Prioritäten. Könnte also eine ganze Weile dauern.
Niggoh ist offline   Mit Zitat antworten
Alt 01.07.2011, 01:01   #109
Norbi
Benutzer
 
Registriert seit: 11.02.2007
Ort: Emden
Beiträge: 36
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Guten Abend Niggoh,
endlich finde ich mal Zeit, mich weiter mit der Materie zu beschäftigen.

Ich hoffe das morgen das Magnetventil kommt und noch ein paar andere eletronische Bauteile, damit ich weitermachen kann.

Das "Gestell" ist schon soweit fertig, ich habe einfach meinen selbstgebauten Fototisch etwas erweitert und kann ihn jetzt für die TaT´s verwenden. Nur ein geeignetes Becken fehlt mir noch, aber da bin ich auch schon dran.

Was die Reichweite der LS betrifft, baue ich diese nochmal neu auf mit den richtigen Bauteilen. Mal sehen was dabeirauskommt.

Gut ist, dass ich für meine Foto-Experimente einen zum Fotostudio hergerichteten Kellerraum von ca 4 x 9 m mit einer Deckenhöhe von über 3 m zur Verfügung habe in dem ich alles so stehen und liegen lassen kann wenns mal knapp wird. Zum Aufräumen fehlt mir dann meist die Zeit.

Ich melde mich in den nächsten Tagen wieder.

Gruß aus Emden

Norbi
Norbi ist offline   Mit Zitat antworten
Alt 06.07.2011, 22:35   #110
Bottle
Benutzer
 
Registriert seit: 28.10.2008
Beiträge: 7
Standard AW: Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Hallo Bastelgemeinde!

Habe jetzt nach Anleitung von Niggoh meine erste Schaltung zusammengesteckt (die von Seite eins ) und habe das Problem, das die Kamera alle zehn Sekunden auslöst, egal ob irgendwas bewegt wird, oder alle im Raum den toten Mann machen. Ich kann mir nicht erklären, woran das liegen könnte.
Hat jemand `ne gute Idee für den Elektroniklaien?

Danke vorab!
Bottle ist offline   Mit Zitat antworten
Antwort

Stichworte
lichtschranke , trigger


Zurück   DSLR-Forum > Technik und Gestaltung > Fototechnik > Bastelecke
Themen-Optionen
Ansicht

Nutzungsbedingungen
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.

Anzeige


* * *

Zu viel Werbung?
Kostenlos registrieren!

* * *

Anzeige

Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Copyright ©2003 - 2018, DSLR-Forum.de
Akzeptieren

Diese Website verwendet Cookies. Durch die Nutzung dieser Webseite erklärst Du Dich damit einverstanden, dass Cookies gesetzt werden. Falls du mit unserer Verwendung von Cookies nicht einverstanden bist, so ändere bitte die Cookie-Einstellungen in deinem Browser oder verlasse unsere Website. Mehr erfahren