Geissler Service
Amazon
Forum für die Fotosysteme von Sony und KonicaMinolta
  SonyUserforum - Forum für die Fotosysteme
von Sony und KonicaMinolta
 
Registrieren Galerie Objektiv-Datenbank Kalender Forenregeln Alle Foren als gelesen markieren

Startseite » Forenübersicht » Kamera und Technik » Zubehör » Arduino basieredes Lichtschrankensystem
 
 
Themen-Optionen Ansicht
Alt 09.04.2011, 20:48   #6
Lachsy

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 Clrissa
Lachsy ist offline   Mit Zitat antworten
 

Themen-Optionen
Ansicht

Forenregeln
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 +2. Es ist jetzt 05:13 Uhr.