Lichtsensor aus Reflexkoppler CNY 70

Mit dem Reflexkoppler CNY 70 einem 180 Ohm und einem 10 kOhm Widerstand kann man sich einfach einen Lichtsensor für den Arduino oder Mindstorms NXT bauen.

Der fertige Lichtsensor kostet dann ungefähr 1 Euro. Wobei der Reflexkoppler schon 0,79€ kostet.

Der Reflexkopler besteht aus einer IR-Diode und einem Phototransistor.

Das Innere des Reflexkopplers CNY 70

Das Innere des Reflexkopplers CNY 70

Wenn man nun den Reflexkoppler wie folgt beschaltet, kann man am Ausgang Spannungen zwischen 0 und knapp 5 Volt messen:

Beschaltung des Reflexkopplers CNY 70

Beschaltung des Reflexkopplers CNY 70

Hinweis: Die Messungen kann man auch an einem NXT-Port durchführen(näheres in diesem Beitrag).

Man kann den Sensor auch am Arduino betreiben, dann erhält man via analogRead(A1) Werte zwischen 0 und max. 1023 (theoretisch; in dieser Schaltung nicht realistisch). Man kann diese Werte auch mit float volt = (var/1023)*5; in Volt umrechnen. Je kleiner der Wert ist, desto dunkler ist das Objekt.

Beschaltung des Reflexkopplers und Arduinos

Beschaltung des Reflexkopplers und Arduinos

Aber Achtung: Der Sensor reagiert auch auf Fremdlicht. Wenn man die IR-Diode also ausschaltet, kann man die Helligkeit messen.

Beschaltung des Reflexkopplers CNY 70 und Arduinos

Beschaltung des Reflexkopplers CNY 70 und Arduinos

Arduino Code

int sensorpin = A1;
float valueactiv = 0; //musst be float to calc with /
float valuepassiv = 0;
int statepin = 2;
float voltpass = 0;
float voltacti = 0;

 void setup()
{
  Serial.begin(9600);          //  setup serial
  pinMode(statepin, OUTPUT);
}

void loop()
{
  digitalWrite(statepin, HIGH);
  valueactiv = analogRead(sensorpin);    // read the input pin (0 to 1023)
  digitalWrite(statepin, LOW);
  valuepassiv = analogRead(sensorpin);

  Serial.print("Activ: ");
  Serial.print(valueactiv);             // debug value
  Serial.print(" Volt: ");
  voltacti = valuepassiv/1023*5; 
  Serial.print(voltacti);
  Serial.print(" Pass: ");
  Serial.print(valuepassiv);
  Serial.print(" Volt: ");
  voltpass = valueactiv/1023*5;
  Serial.print(voltpass);
  Serial.println();
}

Zehn auf einen Streich

Wenn man jetzt die Ausgänge mehrerer Sensoren per Diode geschützt zusammen zu einem Ausgang steckt und der Reihe nach jeden Sensor ein und wieder aus schaltet, hat man sich schon einmal ein paar Ausgänge eingespart. Da das ein und aus Schalten, allein vom IC 4017 übernommen werden kann (siehe vorheriger Beitrag), braucht man auch für das durchzählen nur einen Eingang für max. 10 Sensoren. Schließlich verbindet man noch bei allen Sensoren die IR-Dioden Eingänge zu einem. Fertig ist ein Sensor mit 10 Licht-Sensoren der insgesamt 2 Eingangs- und 1 Ausgangs-Port besitzt.

Diesen kann man dann entweder an einem NXT-Port oder an 3 Arduino-Ports anschließen.

Schaltplan von 10 Licht-Sensoren mit NXT oder Arduino

Schaltplan von 10 Licht-Sensoren mit NXT oder Arduino

Die Programmierung ist der von den Multiplexern sehr änlich (siehe Multiplexer und Demultiplexer Beiträge).

Arduino Code

int sensorpin = A1;
int statepin = 2;
int impulspin = 13; //IC 4017 Clock
float valueactiv = 0; //musst be float to calc with /
float valuepassiv = 0;
float voltpass = 0;
float voltacti = 0;

void setup()
{
  Serial.begin(9600);          //  setup serial
  pinMode(statepin, OUTPUT);
  pinMode(impulspin, OUTPUT);
}

void loop()
{
  for(int sen = 0; sen < 10; sen++){
    Serial.print("Sensor: ");
    Serial.print(sen);

    digitalWrite(statepin, HIGH);
    valueactiv = analogRead(sensorpin);    // read the input pin (0 to 1023)
    digitalWrite(statepin, LOW);
    valuepassiv = analogRead(sensorpin);

    Serial.print(" Activ: ");
    Serial.print(valueactiv);             // debug value
    Serial.print(" Volt: ");
    voltacti = valuepassiv/1023*5; 
    Serial.print(voltacti);
    Serial.print(" Pass: ");
    Serial.print(valuepassiv);
    Serial.print(" Volt: ");
    voltpass = valueactiv/1023*5;
    Serial.print(voltpass);
    Serial.println();

    //Trigger Impuls
    digitalWrite(impulspin, HIGH);
    digitalWrite(impulspin, LOW);
  }
  Serial.println("--------------------------------------------");
}

2 Gedanken zu „Lichtsensor aus Reflexkoppler CNY 70

  1. Pingback: Radencoder für den Schlepper

  2. Pingback: Radencoder Arduino Code

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s