Sadržaj:

Rotacijski koder - razumite i koristite ga (Arduino/drugi Μkontroler): 3 koraka
Rotacijski koder - razumite i koristite ga (Arduino/drugi Μkontroler): 3 koraka

Video: Rotacijski koder - razumite i koristite ga (Arduino/drugi Μkontroler): 3 koraka

Video: Rotacijski koder - razumite i koristite ga (Arduino/drugi Μkontroler): 3 koraka
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Juli
Anonim
Rotacijski koder - razumite i koristite ga (Arduino/drugi Μkontroler)
Rotacijski koder - razumite i koristite ga (Arduino/drugi Μkontroler)

Rotacijski davač je elektromehanički uređaj koji pretvara rotacijsko kretanje u digitalne ili analogne informacije. Može se okretati u smjeru kazaljke na satu ili suprotno. Postoje dvije vrste rotacionih davača: apsolutni i relativni (inkrementalni) davači.

Dok apsolutni davač daje vrijednost proporcionalnu trenutnom kutu osovine, inkrementalni davač daje korak vratila i njegov smjer. (U ovom slučaju imamo inkrementalni davač)

Rotacijski davači postaju sve popularniji jer možete koristiti dvije funkcije u jednom električnom modulu: jednostavan prekidač za potvrdu rada i okretni davač za navigaciju, npr. kroz meni.

Inkrementalni rotacijski davač generira dva izlazna signala dok se osovina okreće. Ovisno o smjeru, jedan od signala vodi drugi. (vidi dole)

Korak 1: Razumijevanje izlaznih podataka

Razumijevanje izlaznih podataka
Razumijevanje izlaznih podataka

Kao što vidite kada se vratilo davača počne okretati u smjeru kazaljke na satu, izlaz A prvo pada na LOW, a izlaz B slijedi. U smjeru suprotnom od kazaljke na satu, radnja se okreće suprotno.

Sada samo moramo ovo implementirati na naš µController (koristio sam Arduino Nano).

Korak 2: Izgradite krug

Izgradite krug
Izgradite krug
Izgradite krug
Izgradite krug

Kao što sam već opisao, izlazi stvaraju HIGH i LOW bok. Da bismo postigli čistu HIGH vrijednost na podatkovnom pinu A i B µControlera, moramo dodati otpornike za povlačenje. Uobičajeni pin C ide ravno u zemlju za LOW bok.

Za dobivanje informacija o unutarnjem prekidaču (tipkalo) upotrijebit ćemo druga dva pina. Jedan od njih ide na VCC, a drugi na podatkovni pin µControlera. Moramo dodati i pull-down otpornik na pin za podatke kako bismo dobili čisti LOW.

Takođe je moguće koristiti interne otpornike za povlačenje i povlačenje vašeg µKontrolera!

U mom slučaju pinout izgleda ovako:

  • +3, 3V => +3, 3V (Arduino) (takođe +5V moguće)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

Korak 3: Pisanje koda

int pinA = 10; // interni prekidač A int pinB = 11; // interni prekidač B int pinSW = 12; // prekidač (pritisnuti koder) int encoderPosCount = 0; // počinje na nuli, promijenite ako želite

int positionval;

bool switchval; int mrotateLast; int mrotate;

void setup () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); kašnjenje (50); }

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

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// dugme se rotira if (digitalRead (pinB)! = mrotate) {// prekidač A se prvo menja -> rotirajući enkoder u smeru kazaljke na satuPosCount ++; Serial.println ("rotirano u smjeru kazaljke na satu"); } else {// prekidač B se prvo promijenio-> rotirajući koder u smjeru kazaljke na satuPosCount--; Serial.println ("rotirano u smjeru suprotnom od kazaljke na satu"); }

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

if (digitalRead (pinSW)! = 0) {// prekidač je pritisnut

while (digitalRead (pinSW)! = 0) {} // prekidač je trenutno pritisnut switchval = 1; } else {switchval = 0;} // prekidač nije pritisnut return switchval; }

Sada možete okrenuti davač i varijabla enkoderPosCount će odbrojavati ako rotirate u smjeru kazaljke na satu i odbrojavati ako se okrećete u smjeru suprotnom od kazaljke na satu.

To je to! Jednostavno i korisno.

Slobodno promijenite i izvedite kod. Možete ga implementirati u svoj projekt.

Postavit ću i LED projekt u kojem sam pomoću kodera postavio svjetlinu LED dioda.

Preporučuje se: