Мазмуну:

Rotary Encoder - Аны түшүнүңүз жана колдонуңуз (Arduino/башка ontrolController): 3 кадам
Rotary Encoder - Аны түшүнүңүз жана колдонуңуз (Arduino/башка ontrolController): 3 кадам

Video: Rotary Encoder - Аны түшүнүңүз жана колдонуңуз (Arduino/башка ontrolController): 3 кадам

Video: Rotary Encoder - Аны түшүнүңүз жана колдонуңуз (Arduino/башка ontrolController): 3 кадам
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Июль
Anonim
Rotary Encoder - Аны түшүнүңүз жана колдонуңуз (Arduino/башка ΜController)
Rotary Encoder - Аны түшүнүңүз жана колдонуңуз (Arduino/башка ΜController)

Ротари коддоочу-айлануу кыймылын санарип же аналогдук маалыматка айландыруучу электр-механикалык түзүлүш. Ал сааттын жебеси боюнча же сааттын жебесине каршы бурулушу мүмкүн. Ротари коддогучтардын эки түрү бар: абсолюттук жана салыштырмалуу (көбөйүүчү) кодерлер.

Абсолюттук коддоочу учурдагы валдын бурчуна пропорционалдуу маанини чыгарса, кошумча кодер валдын кадамын жана анын багытын чыгарат.

Ротари коддогучтар популярдуу болуп баратат, анткени сиз бир электрдик модулда эки функцияны колдоно аласыз: Операцияларды ырастоо үчүн жөнөкөй коммутатор жана навигациялоо үчүн ротациялык кодер, мис. меню аркылуу.

Кошумча ротациялык кодер, анын огу айланып жатканда эки чыгуу сигналын чыгарат. Багытка жараша сигналдардын бири экинчисине алып барат. (төмөндө караңыз)

1 -кадам: Чыгуу маалыматын түшүнүү

Чыгуу маалыматын түшүнүү
Чыгуу маалыматын түшүнүү

Көрүнүп тургандай, коддогучтун огу сааттын жебеси боюнча айлана баштаганда, А ЧЫГЫШЫ биринчи кезекте ТӨМӨН түшүп, В Чыгуусу анын артынан түшөт. Сааттын жебесине каршы операция тескери бурулат.

Эми биз муну µController'ибизге киргизишибиз керек (мен Arduino Nano колдондум).

2 -кадам: Районду куруу

Circuit куруу
Circuit куруу
Circuit куруу
Circuit куруу

Мен жогоруда айткандай, жыйынтыктар БИЙИК жана ТӨМӨН канатты түзөт. ΜКонтроллердин А жана В маалымат түйүнүнөн таза БИЙИКТИ алуу үчүн биз Pull-Up каршылыгын кошушубуз керек. Жалпы Pin C LOW капталында түз жерге түшөт.

Ички которгуч жөнүндө маалымат алуу үчүн (баскыч) башка эки казыкты колдонобуз. Алардын бири VCCге, экинчиси µController'дин маалымат пинине барат. Таза LOW алуу үчүн, биз маалымат пинине Pull-Down Resistor кошушубуз керек.

ΜController'дин ички Pull-Up жана Pull-Down каршылыгын колдонууга да болот!

Менин учурда, pinout окшош:

  • +3, 3V => +3, 3V (Arduino) (ошондой эле +5V мүмкүн)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Кадап коюу

    11

  • C => GND
  • SW =>

    Кадап коюу

    12

3 -кадам: Код жазуу

int pinA = 10; // ички которуу A int pinB = 11; // ички которуу B int pinSW = 12; // которуу (басылган Encoder) int encoderPosCount = 0; // нөлдөн башталат, кааласаңыз өзгөртүңүз

int positionval;

bool switchval; int mrotateLast; int mrotate;

жараксыз орнотуу () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); кечиктирүү (50); }

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

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// баскычы айланууда, эгерде (digitalRead (pinB)! = mrotate) {// которгуч A биринчи өзгөрдү -> сааттын жебеси боюнча encoderPosCount ++; Serial.println ("саат жебеси боюнча бурулду"); } else {// которуштуруучу В биринчи өзгөртүлдү-> сааттын жебесине каршы айлануучу encoderPosCount--; Serial.println ("саат жебесине каршы бурулган"); }

Serial.print ("Encoder Position:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; encoderPosCount кайтаруу; } bool readwitch () {

if (digitalRead (pinSW)! = 0) {// которуу басылат

while (digitalRead (pinSW)! = 0) {} // switch азыркы учурда switchval = 1 басылган; } else {switchval = 0;} // switch басылбаган кайтуу switchval; }

Эми сиз коддогучту бурсаңыз болот жана encoderPosCount өзгөрмөсү сааттын жебеси боюнча бурулса, ал эми сааттын жебесине каршы бурулса, кайра санайт.

Дал ушул! Жөнөкөй жана пайдалуу.

Кодду өзгөртүп, аткаруудан тартынбаңыз. Сиз муну долбооруңузда ишке ашырсаңыз болот.

Мен ошондой эле LED долбоорун жүктөйм, анда мен светодиоддордун жарыгын орнотуу үчүн коддогучту колдондум.

Сунушталууда: