![]() |
|
|
![]() |
|||||||||||||
![]() |
||||||||||||||||
|
![]() |
#1 |
Registriert seit: 13.07.2008
Ort: Essen
Beiträge: 963
|
Arduino basieredes Lichtschrankensystem
Für zb Wassertropfenfotografie mit Magnetventilsteuerung, für diejenigen die das Geld nicht für ein Stopshot ausgeben wollen.
Angefangen hat alles mit dem Thread im DSLR-Forum von Niggoh. Also musste mein Männe ran und bauen . Wir bauten alles in ein Gehäuse ein mit Display , LED`s und vorbereitung für Buttons. Display ist kein muss. Gebraucht wird auf jedenfall ein Arduino Uno , ein Magnetventil 12 Volt. Der Rest sollte sich aus dem Schaltplan ergeben. Vieleicht intressiert es ja jemand Hier seht ihr den Schaltplan und auch das Fertig Gerät ![]() -> Bild in der Galerie ![]() -> Bild in der Galerie Den Softwarecode muss ich noch nachreichen ist auf dem anderen PC mfg Clarissa
__________________
gruss Cl ![]() Geändert von Lachsy (09.04.2011 um 20:29 Uhr) |
![]() |
![]() |
Sponsored Links | |
|
![]() |
#2 |
Registriert seit: 24.02.2007
Ort: Konstanz
Beiträge: 1.095
|
Öhm... Nö!
Beide Fotos laufen unter der image_id 0, deswegen gibt es beim Aufruf einen 404-Fehler. Viele Grüsse, Michael
__________________
Fotos: seetroll.ipernity.com |
![]() |
![]() |
![]() |
#3 |
Registriert seit: 11.12.2006
Ort: nähe FFM
Beiträge: 11.249
|
Wenn die in dem Equipment teil sind bitte mal ne pm an die mpds das die freischalten können
![]() Ich will endlich Bilder sehn ![]() ![]() |
![]() |
![]() |
![]() |
#4 |
Themenersteller
Registriert seit: 13.07.2008
Ort: Essen
Beiträge: 963
|
Markus habe schon eine Pn gesendet mit bitte um Freischaltung.
__________________
gruss Cl ![]() |
![]() |
![]() |
![]() |
#6 |
Themenersteller
Registriert seit: 13.07.2008
Ort: Essen
Beiträge: 963
|
Danke Christian
![]() so hier der Quelltext der auf den Arduino aufgespielt wird Code:
// include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // KONSTANTEN const int lichtschranken_pin = A0; const int ventil_pin = 13; const int kamera_pin = 8; const int autofocus_pin = 9; const int lichtschranken_led =6; const int ventil_led =7; // 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 = 24; int tropfenzeit_2 = 170; int verschlusszeit_2_3 = 18; int tropfenzeit_3 = 170; 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 = 20000; // Auslöseverzögerung festlegen int ausloeseverzoegerung = 45; // Aktivierungszeit für Kameraauslöser festlegen int ausloeser_aktivzeit = 170; // 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); pinMode(autofocus_pin, OUTPUT); pinMode(lichtschranken_led, OUTPUT); pinMode(ventil_led, OUTPUT); // set up the LCD's number of columns and rows: lcd.begin(20, 4); // Begrüßungsbildschirm. lcd.setCursor(1,0); lcd.print("Hallo, Clarissa!"); lcd.setCursor(1,1); lcd.print("viel Spass beim"); lcd.setCursor(1,2); lcd.print("Wassertropfen"); lcd.setCursor(1,3); lcd.print("fotografieren !!!!"); // Serielle Verbindung zum Computer initialisieren für Textausgabe Serial.begin(9600); Serial.println("Lichtschranke wird kalibiert..."); lcd.clear(); lcd.setCursor(1,0); lcd.print("Lichtschranke wird"); lcd.setCursor(1,1); lcd.print("kalibriert..."); // 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); lcd.clear(); lcd.setCursor(1,0); lcd.print("Leerwert der"); lcd.setCursor(1,1); lcd.print("Lichtschranke"); lcd.setCursor(17,1); lcd.print(lichtschranke_maximum); lcd.setCursor(1,2); lcd.print("Schwellenwert der"); lcd.setCursor(2,2); lcd.print("Lichtschranke"); lcd.setCursor(17,2); lcd.print(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); digitalWrite(ventil_led, HIGH); ventil_offen = true; tropfserie_laeuft = true; Serial.println("Tropfen 1 Start, Ventil offen"); lcd.clear(); lcd.setCursor(1,0); lcd.print("Tropfen 1 Start,"); lcd.setCursor(1,1); lcd.print("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); digitalWrite(ventil_led, LOW); ventil_offen = false; Serial.println("Tropfen 1 Ende, Ventil geschlossen"); lcd.setCursor(1,2); lcd.print("Tropfen 1 Ende"); lcd.setCursor(1,3); lcd.print("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); digitalWrite(ventil_led, HIGH); ventil_offen = true; Serial.println("Tropfen 2 Start, Ventil offen"); lcd.clear(); lcd.setCursor(1,0); lcd.print("Tropfen 2 Start,"); lcd.setCursor(1,1); lcd.print("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); digitalWrite(ventil_led, LOW); ventil_offen = false; Serial.println("Tropfen 2 Ende, Ventil geschlossen"); lcd.setCursor(1,2); lcd.print("Tropfen 2 Ende"); lcd.setCursor(1,3); lcd.print("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); digitalWrite(ventil_led, HIGH); ventil_offen = true; Serial.println("Tropfen 3 Start, Ventil offen"); lcd.clear(); lcd.setCursor(1,0); lcd.print("Tropfen 3 Start,"); lcd.setCursor(1,1); lcd.print("Ventil offen"); } else if (aktuellezeit_ventil - startzeit_ventil > endzeit_offen_3 && aktuellezeit_ventil - startzeit_ventil < endzeit_pause && ventil_offen == true) { digitalWrite(ventil_pin, LOW); digitalWrite(ventil_led, LOW); ventil_offen = false; Serial.println("Tropfen 3 Ende, Ventil geschlossen"); lcd.setCursor(1,2); lcd.print("Tropfen 3 Ende"); lcd.setCursor(1,3); lcd.print("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"); lcd.clear(); lcd.setCursor(1,0); lcd.print("Ende der Pause,"); lcd.setCursor(1,1); lcd.print("Startzeit aktualisiert,"); lcd.setCursor(1,2); lcd.print("Lichtschranke wieder"); lcd.setCursor(1,3); lcd.print("scharf !!!!!!"); } } // Lichtschranke abfragen lichtschranke_messwert = analogRead(lichtschranken_pin); if (lichtschranke_messwert < lichtschranke_schwellenwert && lichtschranke_unterbrochen == false) { Serial.println("Lichtschranke unterbrochen"); lcd.clear(); lcd.setCursor(1,0); lcd.print("Lichtschranke"); lcd.setCursor(1,1); lcd.print("unterbrochen"); digitalWrite(lichtschranken_led, HIGH); 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) { Serial.println(aktuellezeit_ausloeseverzoegerung); digitalWrite(kamera_pin, HIGH); digitalWrite(autofocus_pin, HIGH); kamera_ausloeser_aktiv = true; Serial.println("Kamera-Ausloeser aktiviert"); lcd.clear(); lcd.setCursor(1,0); lcd.print("Kamera-Ausloeser"); lcd.setCursor(1,1); lcd.print("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); digitalWrite(autofocus_pin, LOW); digitalWrite(lichtschranken_led, LOW); kamera_ausloeser_aktiv = false; Serial.println("Kamera-Ausloeser deaktiviert"); lcd.setCursor(1,2); lcd.print("Kamera-Ausloeser"); lcd.setCursor(1,3); lcd.print("deaktiviert"); } }
__________________
gruss Cl ![]() |
![]() |
![]() |
![]() |
#7 |
Themenersteller
Registriert seit: 13.07.2008
Ort: Essen
Beiträge: 963
|
Es hat sich ein Fehler eingeschlichen , die Gelbe Ventil -LED geht nicht nach D6 sondern D7
So hier nochmal der Schaltplan angepasst, was man nicht unbedingt braucht ist grün Schrafiert. -> Bild in der Galerie
__________________
gruss Cl ![]() |
![]() |
![]() |
![]()
|
|
|