Genau ! Es ist ein MOC3022. Die Lichtschranke besteht nur aus einer Fotodiode und einem Widerstand. Die Lichtquelle ist ein Laserpointer.
So sieht der Source aus:
/*
* Wenn Laserlichtschranke unterbrochen wird, gilt FotodiodePin == HIGH
*
*/
int redledPin = 13; // rote Anzeige-LED auf Arduino
int OptoTriacPin = 8; // Steuer-LED in OptoTriac
int FotodiodePin = 7; // Input für Fotodiode
int UpSwitch = 4; // Taster für Verzögerungsverläbgerung
int DownSwitch = 2; // Taster für Verzögerungsverkürzung
int FotoStatus = 0; // Status der FotoDiode
int Warte1 = 100; // Verzögerungszeit für Blitz (Achtung: 8% Verlängerungsfaktor beachten)
int Warte2 = 50; // Verzögerung nach Auslösung
int VerzIncr = 0; // Increment der Verzögerungszeit
int ShortIncr = 1;
int LongIncr = 10;
void setup() {
pinMode(redledPin, OUTPUT);
pinMode(OptoTriacPin, OUTPUT);
pinMode(FotodiodePin, INPUT);
pinMode(UpSwitch, INPUT);
pinMode(DownSwitch, INPUT);
}
void loop(){
FotoStatus = digitalRead(FotodiodePin);
if (FotoStatus == HIGH) { // Lichtschranke unterbrochen ?
delay (Warte1); // warte eine gewisse Zeit vor der Blitzauslösung
digitalWrite(OptoTriacPin, HIGH); // dann zünde OptoTriac und damit Blitz
digitalWrite(redledPin, HIGH);
delay (Warte2); // warte noch ein wenig
} else {
digitalWrite(OptoTriacPin, LOW); // OptoTriac ausschalten
digitalWrite(redledPin, LOW);
}
if (digitalRead(UpSwitch) == LOW) {
VerzIncr = ShortIncr;
while (digitalRead(UpSwitch) == LOW) {
if (digitalRead(DownSwitch) == LOW) {
VerzIncr = -LongIncr;
while (digitalRead(DownSwitch) == LOW);
delay (1);
}
}
Warte1 += VerzIncr;
Warte1 = max (0,Warte1);
delay (25);
}
if (digitalRead(DownSwitch) == LOW) {
VerzIncr = -ShortIncr;
while (digitalRead(DownSwitch) == LOW) {
if (digitalRead(UpSwitch) == LOW) {
VerzIncr = LongIncr;
while (digitalRead(UpSwitch) == LOW);
delay (1);
}
}
Warte1 += VerzIncr;
Warte1 = max (0,Warte1);
delay (25);
}
}