Der Aufbau einer Lichtschranke ist nicht sehr schwer. Vereinfacht ausgedrückt haben wir nur zwei Zustände: Der Infrarotstrahl ist nicht unterbrochen (=0), oder der Strahl wurde unterbrochen (=1).
Ich habe für den Aufbau zuerst den Temic K153P-Lichtsensor verwendet (siehe Bild rechts), den gibt es ganz günstig bei Pollin (Infrarot-Lichtschrankenpaare Temic K153P [1] – 10 Paare für 0,95 EUR).
Die Schwierigkeit mit diesem Sensor war, dass ich kein korrektes 0- oder 1-Signal bekam, dass ich mit dem Controller verarbeiten konnte.
analogWrite() mit Pi mal Daumen rechnen mag zwar gehen, aber ich wollte ein sauberes, digitales Signal.
Bei microcontroller.net [2] fand ich dann eine wunderbare Schaltung, die diesem Wunsch nachgekommen ist.
Da ich keinen CD4093N-IC zur Hand habe, habe ich hierfür einen 74HC132N genommen.
Tut ebenfalls, was er soll und preislich ist er sogar wenige Cent günstiger.
Den Rest hat man ja eh daheim und dann geht es auch schon los.
Hier der Schaltplan der Lichtschranke:
Der verwendete Schmitt-Trigger-IC liefert ein glasklares AN oder AUS (1-0)-Signal und man kann dieses Signal nun toll weiterverarbeiten.
Doch zuvor bauen wir die Schaltung noch auf ein Breadboard auf:
(Hinweis: Nicht Pin9 verwenden, sondern den analogen Pin A0!)
Beachtet, dass die Spannung 5V nicht übersteigen darf, sonst grillt es Lichtschranke und IC.
Zum Testen können wir ja mal eine 5V-Stromquelle anschließen und stellen dann fest, dass die LED brennt, wenn nichts die Lichtschranke unterbricht.
Ist dies der Fall, geht die LED aus.
Das Signal für unseren Arduino greifen wir vor dem Widerstand zum Transistor ab und erstellen uns einen kleinen Sketch, um zu testen, ob wir unser Signal auch ordentlich in den Arduino-Input bekommen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
int sensorPin = A0; int ledPin = 13; int sensorValue = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(sensorPin, INPUT); Serial.begin(9600); } void loop() { sensorValue = analogRead(sensorPin); Serial.println(sensorValue); if(sensorValue >= 1) digitalWrite(ledPin, HIGH); else digitalWrite(ledPin, LOW); delay(200); } |
Der Input liegt auf Pin A0 und wir verwenden die interne LED auf Pin 13 des Arduino UNOs für die Ausgabe.
Zusätzlich sehen wir auf der seriellen Ausgabekonsole den aktuellen Zustand des Signals.
Verwendet Ihr eine externe Stromquelle für die Schaltung, dann vergesst nicht den GND-Pin des Arduinos mit GND der Schaltung zu verbinden.
Haben wir alles richtig gemacht, dann brennt auch auf dem Arduino UNO die LED, wenn nichts die Lichtschranke behindert.
Unterbrechen wir die Lichtschranke, geht auch die LED aus.
Und das war das ganze Hexenwerk 🙂
Die Schaltung funktioniert natürlich auch mit anderen Lichtschranken, achtet aber auf das beigefügte Datenblatt, damit Ihr nicht zu viel Spannung auf die Infrarot-Diode legt. Die Teile von Pollin sind mit einer Forward Current von 60mA recht schmerzfrei, andere, wie beispielsweise die Gabellichtschranke von Honeywell HOA086X/087X hat nur 50mA.
Diese habe ich auch erfolgreich getestet und sie läuft ebenso einwandfrei mit dieser Schaltung. (Anm.: Bei diesem Typ ist das Bauteil mit “E” und “S” gekennzeichnet. “E” ist die Diode. Beide haben eine Seite mit einer abgeflachten Kante, diese Seite ist VCC für die Diode und für den Detektor ist die abgeflachte Seite der Emitter.)
[5]
Für die Infrarot-Diode(n) liegen bei der obigen Schaltung bei knapp 5V rund 10mA an.
Die Ausgabe-Test-LED bekomt 8mA.
Also alles im grünen Bereich.
Viel Spaß beim Nachbauen.