INHOUDSOPGAWE:

Rotary Encoder - verstaan en gebruik dit (Arduino/ander ΜController): 3 stappe
Rotary Encoder - verstaan en gebruik dit (Arduino/ander ΜController): 3 stappe

Video: Rotary Encoder - verstaan en gebruik dit (Arduino/ander ΜController): 3 stappe

Video: Rotary Encoder - verstaan en gebruik dit (Arduino/ander ΜController): 3 stappe
Video: Rotary Encoder op Arduino (zonder extra library) 2024, Julie
Anonim
Rotary Encoder - verstaan dit en gebruik dit (Arduino/ander ΜController)
Rotary Encoder - verstaan dit en gebruik dit (Arduino/ander ΜController)

'N Draaikodeerder is 'n elektro-meganiese toestel wat rotasiebeweging omskakel in digitale of analoog inligting. Dit kan met die kloksgewys of teen die kloksgewys draai. Daar is twee tipes roterende encoders: Absolute en relatiewe (inkrementele) encoders.

Terwyl 'n absolute encoder 'n waarde uitstuur wat eweredig is aan die huidige ashoek, gee 'n inkrementele encoder die trap van die as en sy rigting uit. (In hierdie geval het ons 'n inkrementele encoder)

Draaikoders word meer en meer gewild omdat u twee funksies in een elektriese module kan gebruik: 'n Eenvoudige skakelaar om die werking te bevestig en die draaikodeerder om te navigeer, bv. deur 'n spyskaart.

'N Inkrementele roterende enkodeerder genereer twee uitsetseine terwyl die as daarvan draai. Afhangende van die rigting, lei een van die seine die ander. (sien onder)

Stap 1: Begrip van die uitsetdata

Verstaan die uitsetdata
Verstaan die uitsetdata

Soos u kan sien wanneer die encoder -as met die kloksgewys begin draai, val Output A eers op LOW en volg output B daarna. Teen die rigting van die klok draai die operasie teenoorgestelde.

Nou moet ons dit net implementeer op ons µController (ek het 'n Arduino Nano gebruik).

Stap 2: Bou die stroombaan

Bou die stroombaan
Bou die stroombaan
Bou die stroombaan
Bou die stroombaan

Soos ek voorheen beskryf het, skep die uitsette 'n HOOG en 'n LAE flank. Om 'n skoon HOOG te kry by die gegewenspen A en B van die µController, moet ons optrekweerstands byvoeg. Die gewone pen C gaan reguit grond toe vir die LAE flank.

Om inligting oor die interne skakelaar (drukknop) te kry, gebruik ons die ander twee penne. Een van hulle gaan na VCC en die ander een na 'n data -pen van die µController. Ons moet ook 'n aftrekweerstand by die gegewenspen voeg om 'n skoon LOW te kry.

Dit is ook moontlik om interne pull-up en pull-down weerstande van u µController te gebruik!

In my geval lyk die pinout soos volg:

  • +3, 3V => +3, 3V (Arduino) (ook +5V moontlik)
  • GND => GND (Arduino)
  • A => Speld 10
  • B =>

    Speld

    11

  • C => GND
  • SW =>

    Speld

    12

Stap 3: Skryf die kode

int pinA = 10; // interne skakelaar A int pinB = 11; // interne skakelaar B int pinSW = 12; // skakelaar (gedrukte Encoder) int encoderPosCount = 0; // begin by nul, verander as u wil

int positionval;

bool switchval; int mrotateLast; int mrotate;

ongeldige opstelling () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); vertraging (50); }

leemte -lus () {readencoder (); if (readwitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// knop draai as (digitalRead (pinB)! = mrotate) {// skakelaar A eers verander -> draai kloksgewys encoderPosCount ++; Serial.println ("kloksgewys gedraai"); } anders {// skakelaar B eers verander-> draai linksom encoderPosCount--; Serial.println ("linksom gedraai"); }

Serial.print ("Encoder Position:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; terugkeer encoderPosCount; } bool leesskakelaar () {

as (digitalRead (pinSW)! = 0) {// skakelaar ingedruk word

terwyl (digitalRead (pinSW)! = 0) {} // skakelaar tans ingedruk word switchval = 1; } anders {switchval = 0;} // switch is ongedrukte return switchval; }

Nou kan u die encoder draai en die veranderlike encoderPosCount sal tel as u met die kloksgewys draai en aftel as u linksom draai.

Dis dit! Eenvoudig en handig.

Voel vry om die kode te verander en uit te voer. U kan dit in u projek implementeer.

Ek sal ook 'n LED -projek oplaai waar ek die encoder gebruik het om die helderheid van my LED's in te stel.

Aanbeveel: