Eine Lichtschranke ist in der Optoelektronik (von Optik und Halbleiterelektronik) ein System, das die Unterbrechung eines Lichtstrahls erkennt und als elektrisches Signal anzeigt. Dadurch können Hindernisse in automatischen Türen erkannt werden, Alarmanlagen können das eindringen von Personen erkennen und vieles mehr.
Eine Lichtschranke besteht aus drei Hauptkomponenten:
Video: https://www.youtube.com/watch?v=9yd_WYHdkT0
Links der Sender:
Der Sender erzeugt einen kontinuierlichen Lichtstrahl (meist Infrarotlicht oder Laserstrahl)
Rechts der Empfänger:
Wenn ein Objekt den Lichtstrahl zwischen Sender und Empfänger unterbricht, registriert der Empfänger dies.
Auswertung mit LED und Summer:
Die Unterbrechung des Strahls löst eine Reaktion aus, die durch eine elektronische Auswertungseinheit verarbeitet wird. Je nach Anwendung kann dies eine einfache Signalweiterleitung sein oder ein komplexer Prozess zur Steuerung von Maschinen oder Sicherheitsvorrichtungen.
Auswertung mit dem Arduino. Der Arduino misst über den analogen Eingang den Wert des LDR. Wird der Wert kleiner als im Programm Hinterlegt ist, wird im Display das Wort ALA angezeigt und ein Summer ertönt im Sekundentakt. Über den Taster S1 wird die Alarmanlage "scharf" geschaltet über S2 "ausgeschaltet" und über S3 kann der Alam resettet werden. Der Deckel über dem LDR verhindert das andere Lichtquellen auf den LDR Einfluss nehmen.
Schaltung mit einem Transistor: Die Schaltung für die Auswertung sieht dann so aus. Wird der Lichtstrahl unterbrochen schaltet der Transistor und die LED und Summer zeigen einen Alarm an.
Das Programm für den Arduino mit dem "multifunktions shield" sieht dann so aus.
#include <TimerOne.h>
#include <Wire.h>
#include <MultiFuncShield.h>
bool ALRAM = false;
bool Zustand = false;
long ZeitVariable = 0L;
byte umsch = 0;
int ldr = 0;
void Unterprogramm();
void setup() {
pinMode(10, OUTPUT);
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
Timer1.initialize();
MFS.initialize(&Timer1);
ALRAM = false;
Zustand = false;
analogWrite(5 , 0);
digitalWrite( 10 , LOW );
digitalWrite( 10 , HIGH );
}
void loop() {
ZeitVariable = millis();
while(ZeitVariable + 1000L >= millis()) {
Unterprogramm();
}
if (( ALRAM == false )) {
umsch = ( umsch + 1 );
if (( umsch == 1 )) {
ldr = map ( analogRead(5) , 0 , 1000 , 0 , 100 ) ;
MFS.write((int)ldr);
}
if (( umsch == 3 )) {
if (( Zustand == false )) {
MFS.write("AUS");
}
if (( Zustand == true )) {
MFS.write("EIN");
}
}
if (( umsch == 4 )) {
umsch = 0;
}
}
if (( ALRAM == true )) {
umsch = ( umsch + 1 );
if (( umsch == 1 )) {
digitalWrite( 3 , LOW );
}
if (( umsch == 2 )) {
digitalWrite( 3 , HIGH );
}
if (( umsch == 3 )) {
umsch = 0;
}
}
}
//LOOP
void Unterprogramm() {
if (( ( analogRead(1) < 10 ) && ( ALRAM == false ) )) {
Zustand = true;
analogWrite(5 , 33);
digitalWrite( 10 , HIGH );
digitalWrite( 11 , LOW );
delay( 111 );
MFS.write("EIN");
}
if (( ( analogRead(2) < 10 ) && ( ALRAM == false ) )) {
MFS.write("AUS");
Zustand = false;
analogWrite(5 , 0);
digitalWrite( 10 , LOW );
digitalWrite( 11 , HIGH );
}
if (( ( ( ALRAM == false ) && ( Zustand == true ) ) && ( analogRead(5) < 50 ) )) {
ALRAM = true;
MFS.write("ALA");
MFS.blinkDisplay(DIGIT_ALL, ON);
umsch = 0;
}
if (( ( analogRead(3) < 10 ) && ( ALRAM == true ) )) {
Zustand = false;
ALRAM = false;
MFS.blinkDisplay(DIGIT_ALL, OFF);
MFS.write("AUS");
analogWrite(5 , 0);
digitalWrite( 3 , HIGH );
digitalWrite( 10 , LOW );
digitalWrite( 11 , HIGH );
}
}