Der Drehgeber erkennt Vorlauf und Rücklauf, der Taster setzt den Wert wieder auf 0, die LED geht erst an, wenn beide Lichtschranken ein Signal haben.
Bauteile
- 2x Gabellichtschranke (5/16 „Schlitz PCB Lichtschranke Sensor HY860H-A)
- 3x 220 Ohm Widerstand
- 3x 10k Ohm Widerstand
- 1x LED
- 1x Taster (Schließer)

Sketch
// Die Lochscheibe hat 46 Löcher
// 1 Takt = 6,5 mm
double mmProTakt = 7.51;
int sensorPin = A0;
int sensorPin_2 = A5;
int sensorValue = 0;
int sensorValue_2 = 0;
int ledPin = 13;
int ledPin_2 = 12;
int taster = 8;
int richtung = 0; // 1 = vor, 2 = zurück
static unsigned long timeStamp = 0L;
unsigned long countSlots = 0;
double countSlots_2 = 0;
unsigned long takt = 0;
unsigned long takt_2 = 0;
//unsigned long saveCountSlots = 0;
// erst wenn es einen hohen Wert und einen tiefen Wert gibt,
// erst dann ein "countSlots" mehr
bool sensorAn = false;
bool sensorAus = false;
bool sensorAn_2 = false;
bool sensorAus_2 = false;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(ledPin_2, OUTPUT);
pinMode(taster, INPUT);
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin_2, HIGH);
digitalWrite(taster, LOW);
Serial.begin(9600);
Serial.print("Bereit...");
}
void loop()
{
sensorValue = analogRead(sensorPin);
sensorValue_2 = analogRead(sensorPin_2);
if(digitalRead(taster) == HIGH){
Serial.println("Taster");
if(countSlots_2 != 0){
countSlots_2 = 0;
Serial.print("countSpin: ");
Serial.println(countSlots_2);
}
}
//Serial.println(sensorValue);
if (sensorValue > 500) {
//Serial.println("Lichtschranke 1 An: ");
if(richtung == 0) {
richtung = 1;
Serial.println("+1");
}
sensorAn = true;
} else {
sensorAn = false;
}
//Serial.println(sensorValue_2);
if (sensorValue_2 > 500) {
//Serial.println("Lichtschranke 2 An: ");
if(richtung == 0) {
richtung = 2;
Serial.println("-1");
}
sensorAn_2 = true;
} else {
sensorAn_2 = false;
}
//Serial.print("Lichtschranke 1 An: ");
//Serial.println(sensorValue);
//Serial.print("Lichtschranke 2 An: ");
//Serial.println(sensorValue_2);
if (sensorAn && sensorAn_2) {
digitalWrite(ledPin_2, HIGH);
if (takt == 0) {
if(richtung == 1) {
//Serial.println("+1");
countSlots_2++;
}
if(richtung == 2) {
//Serial.println("-1");
countSlots_2--;
}
//sensorAn_2 = false;
takt = 1;
Serial.print("Takt: ");
Serial.print(countSlots_2);
Serial.print(" = ");
Serial.print(countSlots_2 * mmProTakt);
Serial.println("mm");
// Serial.print("Richtung: ");
// Serial.println(richtung);
}
}
if (!sensorAn && !sensorAn_2) {
digitalWrite(ledPin_2, LOW);
takt = 0;
richtung = 0;
}
// kein delay()einbauen, sonst wird nicht alles gezählt
//delay(10);
}
void getSpins(){
// if(millis() - timeStamp >= 60000L){
// gezählte Schlitze in einer Minute
//Serial.print("countSpin: ");
//Serial.println(countSlots);
// Umdrehungen pro Minute, es sind 23 Schlitze in der Zählscheibe
int rpm = countSlots / 23;
//Serial.print("rpm: ");
//Serial.println(rpm);
// reset Daten
//timeStamp = millis();
//countSlots = 0;
// }
}
Code-Sprache: PHP (php)