Агуулгын хүснэгт:

Arduino -тэй Ротари кодлогчын заавар: 6 алхам
Arduino -тэй Ротари кодлогчын заавар: 6 алхам

Видео: Arduino -тэй Ротари кодлогчын заавар: 6 алхам

Видео: Arduino -тэй Ротари кодлогчын заавар: 6 алхам
Видео: LDmicro 2: Создание лестничной схемы (программирование лестничной логики ПЛК микроконтроллера с помощью LDmicro) 2024, Арваннэгдүгээр
Anonim
Arduino -тэй Ротари кодлогчын заавар
Arduino -тэй Ротари кодлогчын заавар

Ротари кодлогч нь эргэх үед хөдөлгөөн, байрлалыг хянах чадвартай электрон бүрэлдэхүүн хэсэг юм. Ротари кодлогч нь эргэлддэг кодлогч эргэх үед импульс үүсгэж болох оптик мэдрэгчийг ашигладаг. Эргэдэг кодлогчийг ихэвчлэн механик эсвэл роботын хөдөлгөөний монитор болгон ашиглах нь дэлгэц дээрх цэсийг сонгоход хэрэглэгддэг. Ротари кодлогч нь хоёр гаралттай тул сөрөг (CW) ба эерэг (CCW) эргэлтийг ялгаж чаддаг бөгөөд ганц товчлууртай байдаг.

Алхам 1: Ротари кодлогчийн импульсийн урсгал

Ротари кодлогчын импульсийн урсгал
Ротари кодлогчын импульсийн урсгал

Дараах эргэлдэгч кодлогчын үүсгэсэн импульсийн урсгал нь дээрх зураг шиг байна.

Алхам 2: Ротари кодлогчын холболт

Ротари кодлогчын холболт
Ротари кодлогчын холболт

Тайлбар:

  • GND GND
  • + + 5V
  • Эргэдэг кодлогчын SW товчлуур дарагдсан үед
  • DT өгөгдөл
  • CLK өгөгдөл 2

DT эсвэл CLK -ийн нэг зүү нь Arduino Uno -ийн тасалдах хөлтэй холбогдсон байх ёстой, эсвэл DT ба CLK хоёулаа таслах зүүтэй холбогдсон байх ёстой.

Алхам 3: Схем

Схем
Схем
  • GND à GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

Алхам 4: Код

Код
Код

Дараагийн гарын авлагад Arduino Uno -ийн ПИН 2 -ийг тасалдахад ашиглах бөгөөд PIN 3 -ийг зөвхөн ердийн оролт болгон ашигладаг.

#PodA encoder0PinA 2 #encoder0PinB тодорхойлох 3 #encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Цуваа.хэвлэх (btn); Serial.print (""); Цуваа.хэв (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } бол (valRotary {

Serial.print ("CCW");

} lastValRotary = valRotary; Serial.println (""); саатал (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } өөр {encoder0Pos--; } valRotary = encoder0Pos/2.5; }

Дээрх ноорогны 10 -р мөрөнд Arduino Uno 2 -р зүүг таслахад ашигладаг. "DoEncoder" функцийг эргэдэг кодлогчоос тооцоолно. Хэрэв DT ба CLK -ийн утга (Arduino Uno -ийн зүсэлтийн тасалдал) ижил байвал "encoder0Pos" хувьсагч нэмэгдэх / нэмэгдэх бөгөөд энэ нөхцлөөс гадна "encoder0Pos" хувьсагч буурах болно.

Алхам 5: Тайлбар

ValRotary утга нь ажиллаж байсан алхмуудын тооны утга юм. ValRotary утгыг эргэдэг мэдрэгчийн кодлогчын унших утгыг 2.5 -д хувааж авна. Туршилтын үр дүнд 2.5 -ийн утгыг олж авна, учир нь эргэдэг кодлогчийн нэг алхам нь 1 -ээс хэтрэх боломжтой тул унших хугацааг хоёуланг нь тооцохдоо түүний утгыг 2.5 -д хуваана.

19 - 25 -р мөрөнд CW эсвэл CCW эргэдэг кодчилогч эсэхийг тодорхойлох програм юм. 19 - 25 -р мөрүүдийн тайлбар нь өнөөгийн эргэлтэт кодлогчын уншилт нь өмнөх эргэлтийн өгөгдлөөс илүү их бөгөөд дараа нь CW хэлбэрээр илэрхийлэгддэг. Хэрэв одоогийн уншилт нь өмнөх уншилтаас бага байвал үүнийг CCW гэж бичнэ.

Алхам 6: Гаралт

Гаралт
Гаралт

1 = эргэлтэт дарагдаагүй байхад эхлэх товчлуурын утга

Зөвлөмж болгож буй: