KY-040 - Rotationsmesssensor
KY-040 - Rotationsmesssensor
Bei der Drehung des des Rotationssensors können die Pulse des Sensors in beide Richtungen gemessen/gezählt werden. Im Gegensatz zu einem Drehpotentiometer ist die drehung nicht begrenzt. Mit den Schaltern kann die Rotation auf Null gzurückgesetzt werden.
Das Prinzipb beruht auf einer Schlitzscheibe und einer IR-Lichtschranke.
Clockwise counterclockwise
Uhrzeigersinn | Gegensinn |
A | B |
1 | 1 |
0 | 1 |
0 | 0 |
1 | 0 |
1 | 1 |
1 | 0 |
0 | 0 |
0 | 1 |
Anschluss
Arduino | Modul |
---|---|
GND | Pin - |
+5V | Pin + |
Pin | Pin |
Beispielcode
int redPin = 2;
int yellowPin = 3;
int greenPin = 4;
int aPin = 6;
int bPin = 7;
int buttonPin = 5;
int state = 0;
int longPeriod = 5000; // Time at green or red
int shortPeriod = 700; // Time period when changing
int targetCount = shortPeriod;
int count = 0;
void setup ()
{
pinMode (aPin, INPUT);
pinMode (bPin, INPUT);
pinMode (buttonPin, INPUT);
pinMode (redPin, OUTPUT);
pinMode (yellowPin, OUTPUT);
pinMode (greenPin, OUTPUT);
}
void loop ()
{
count++;
if (digitalRead (buttonPin))
{
setLights (HIGH, HIGH, HIGH);
}
else
{
int change = getEncoderTurn ();
int newPeriod = longPeriod + (change * 1000);
if (newPeriod >= 1000 && newPeriod <= 10000)
{
longPeriod = newPeriod;
}
if (count> targetCount)
{
setState ();
count = 0;
}
}
delay (1);
}
int getEncoderTurn ()
{
// Return -1, 0, or +1
static int oldA = LOW;
static int oldB = LOW;
int result = 0;
int newA = digitalRead (aPin);
int newB = digitalRead (bPin);
if (newA != oldA || newB != oldB)
{
//Something has changed
if (oldA == LOW && newA == HIGH)
{
result = - (oldB * 2 - 1);
}
}
oldA = newA;
oldB = newB;
return result;
}
int setState ()
{
if (state == 0)
{
setLights (HIGH, LOW, LOW);
targetCount = longPeriod;
state = 1;
}
else if (state == 1)
{
setLights (HIGH, HIGH, LOW);
targetCount = shortPeriod;
state = 2;
}
else if (state == 2)
{
setLights (LOW, LOW, HIGH);
targetCount = longPeriod;
state = 3;
}
else if (state == 3)
{
setLights (LOW, HIGH, LOW);
targetCount = shortPeriod;
state = 0;
}
}
void setLights (int red, int yellow, int green)
{
digitalWrite (redPin, red);
digitalWrite (yellowPin, yellow);
digitalWrite (greenPin, green);
}
- Zugriffe: 241