Kazalo:

Rotacijski dajalnik - Razumejte in ga uporabite (Arduino/drug Μ krmilnik): 3 koraki
Rotacijski dajalnik - Razumejte in ga uporabite (Arduino/drug Μ krmilnik): 3 koraki

Video: Rotacijski dajalnik - Razumejte in ga uporabite (Arduino/drug Μ krmilnik): 3 koraki

Video: Rotacijski dajalnik - Razumejte in ga uporabite (Arduino/drug Μ krmilnik): 3 koraki
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Julij
Anonim
Rotacijski dajalnik - Razumejte in ga uporabite (Arduino/drug Μ krmilnik)
Rotacijski dajalnik - Razumejte in ga uporabite (Arduino/drug Μ krmilnik)

Rotacijski dajalnik je elektromehanska naprava, ki pretvarja rotacijsko gibanje v digitalne ali analogne informacije. Lahko se obrača v smeri urinega kazalca ali v nasprotni smeri. Obstajata dve vrsti rotacijskih kodirnikov: absolutni in relativni (inkrementalni) dajalniki.

Medtem ko absolutni dajalnik odda vrednost, ki je sorazmerna s trenutnim kotom gredi, inkrementalni dajalnik odda korak gredi in njeno smer. (V tem primeru imamo inkrementalni dajalnik)

Rotacijski dajalniki postajajo vse bolj priljubljeni, ker lahko v enem električnem modulu uporabite dve funkciji: Enostavno stikalo za potrditev delovanja in rotacijski dajalnik za krmarjenje, npr. skozi meni.

Inkrementalni rotacijski dajalnik generira dva izhodna signala, medtem ko se njegova gred vrti. Odvisno od smeri, eden od signalov vodi drugega. (glej spodaj)

1. korak: Razumevanje izhodnih podatkov

Razumevanje izhodnih podatkov
Razumevanje izhodnih podatkov

Kot lahko vidite, ko se gred kodirnika začne vrteti v smeri urinega kazalca, izhod A najprej pade na LOW in izhod B mu sledi. V nasprotni smeri urinega kazalca se operacija obrne.

Zdaj moramo to le implementirati na naš µController (uporabil sem Arduino Nano).

2. korak: Zgradite vezje

Zgradite vezje
Zgradite vezje
Zgradite vezje
Zgradite vezje

Kot sem že opisal, izhodi ustvarijo HIGH in LOW bok. Če želimo doseči čisto HIGH na podatkovnem zatiču A in B µControllerja, moramo dodati vlečne upore. Navadni pin C gre naravnost na tla za NIZKO bok.

Za informacije o notranjem stikalu (gumb) bomo uporabili druga dva zatiča. Eden od njih gre v VCC, drugi pa na podatkovni pin µControllerja. Podatkovnemu zatiču moramo dodati tudi izvlečni upor, da dobimo čisto NIZKO.

Možna je tudi uporaba notranjih uporovnih in izvlečnih uporov vašega µControllerja!

V mojem primeru je pinout videti tako:

  • +3, 3V => +3, 3V (Arduino) (možno tudi +5V)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

3. korak: Pisanje kode

int pinA = 10; // notranje stikalo A int pinB = 11; // notranje stikalo B int pinSW = 12; // stikalo (pritisnjen kodirnik) int encoderPosCount = 0; // se začne pri nič, če želite, spremenite

int positionval;

bool switchval; int mrotateLast; int mrotate;

void setup () {

int mrotateLast = digitalno branje (pinA); Serial.begin (9600); zamuda (50); }

void loop () {readencoder (); if (readwitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// gumb se vrti if (digitalRead (pinB)! = mrotate) {// stikalo A najprej spremenjeno -> vrtenje kodirnika v smeri urinega kazalcaPosCount ++; Serial.println ("zasukan v smeri urinega kazalca"); } else {// stikalo B najprej spremenjeno-> vrteči se kodirnik v nasprotni smeri urinega kazalcaPosCount--; Serial.println ("zasukan v nasprotni smeri urinega kazalca"); }

Serial.print ("Položaj kodirnika:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; povratni kodirnikPosCount; } bool readwitch () {

if (digitalRead (pinSW)! = 0) {// stikalo je pritisnjeno

while (digitalRead (pinSW)! = 0) {} // stikalo je trenutno pritisnjeno switchval = 1; } else {switchval = 0;} // stikalo ni pritisnjeno return switchval; }

Zdaj lahko obrnete kodirnik in spremenljivkoderPosCount se bo odšteval, če se obrnete v smeri urinega kazalca, in odšteval, če se obračate v nasprotni smeri urinega kazalca.

To je to! Preprosto in uporabno.

Spremenite in izvedite kodo. Lahko ga implementirate v svoj projekt.

Naložil bom tudi projekt LED, kjer sem z dajalnikom nastavil svetlost LED.

Priporočena: