Rotary Encoder Module KY-040 for Arduino

További képek

Rotary Encoder Module KY-040 for Arduino

Ter. állapot: Raktáron

Raktárkészlet: 8.00 db.


500 Ft (Ára)


Kód: ARD0017-3-04-15

Termék leírás

A Rotary Encoder modul segítségével egyetlen eszközzel három kapcsoló is helyettesíthető. A balra/jobbra forgatás mellett a nyomógomb is egyetlen eszközbe lett sűrítve. Speciális alkalmazásként szögmérésre és fordulatszám mérésére is alkalmas.


Bővebb leírás

Ezen a modulon csak egy inkrementális jeladó van, a hozzá tartozó felhúzó ellenállásokkal. Egy fordulatra 20 impulzust ad, és van egy kapcsolója a begyomás érzékelésére.


Tápfeszültség 3 – 5 V (vagy akármennyi értelmes határokon belül), így bármilyen mikrokontrollerrel működik.


Ismertető

A Rotary Encoder modul segítségével egyetlen eszközzel három kapcsoló is helyettesíthető. A balra/jobbra forgatás mellett a nyomógomb is egyetlen eszközbe lett sűrítve. Speciális alkalmazásként szögmérésre és fordulatszám mérésére is alkalmas.

Funkcionalitás

  • 20 pozíció beállítás,
  • Független kapcsoló funkció,
  • Mechanikus kivitelű rotary-switch,
  • Működési/mérési hőmérséklet-tartomány: -10 .. 60°C,
  • Működési páratartomány: 20 .. 90RH% (nemkondenzálódó),
  • Csatlakoztatása külső alkatrészt nem igényel.

Bekötés
   1: GND
   2: +1.8V ... +5V
   3: Beépített kapcsoló (SW)
   4: Irányjelző kimenet (DT)
   3: Lépésjelző kimenet (CLK)

Kompatibilitás

  • Diecimila/Duemilanove/R3,
  • Mega1280/Mega2560/ADK,
  • Due,
  • ARM család,
  • PIC család,
  • AVR család,
  • stb.

Szoftvertámogatás

  • Bascom-AVR,
  • Arduino,
  • C.

Példakód:
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);
}