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

Arduino -ийн иж бүрэн шийдэл: 5 алхам
Arduino -ийн иж бүрэн шийдэл: 5 алхам

Видео: Arduino -ийн иж бүрэн шийдэл: 5 алхам

Видео: Arduino -ийн иж бүрэн шийдэл: 5 алхам
Видео: EDUMALL ТВ / T-PANDA 65” Dual - Touch TV & PC (Зөөврийн багц) / Үнэ: 9,900,000₮ 2024, Арваннэгдүгээр
Anonim
Arduino -ийн иж бүрэн шийдэл
Arduino -ийн иж бүрэн шийдэл

Ротари кодлогч нь электрон төслүүдийн эргэдэг хяналтын товчлуурууд бөгөөд ихэвчлэн Arduino гэр бүлийн микроконтроллеруудад ашиглагддаг. Тэдгээрийг параметрүүдийг нарийн тохируулах, цэсийг удирдах, дэлгэц дээрх объектуудыг зөөх, ямар ч төрлийн утгыг тохируулахад ашиглаж болно. Эдгээр нь потенциометрийн ердийн орлуулалт юм, учир нь тэдгээрийг илүү нарийвчлалтай, хязгааргүй эргүүлэх боломжтой, нэг дискрет утгыг нэг дор нэмэгдүүлэх эсвэл бууруулах, ихэвчлэн сонгох функцүүдийг түлхэх түлхүүрээр нэгтгэдэг. Тэд янз бүрийн хэлбэр, хэмжээтэй байдаг, гэхдээ хамгийн хямд үнийг доор тайлбарласны дагуу ашиглахад хэцүү байдаг.

Ротари кодлогчийн ажлын нарийвчлал, ашиглалтын горим, тэдгээрийг хэрхэн ашиглах талаар олон тооны жишээ код, номын сангийн талаар тоо томшгүй олон нийтлэл байдаг. Ганц асуудал бол тэдний хэн нь ч хамгийн бага үнээр хятадын эргэдэг модулиудтай 100% үнэн зөв ажилладаггүй явдал юм.

Алхам 1: Ротари кодлогч дотор

Дотор эргэдэг кодлогч
Дотор эргэдэг кодлогч
Дотор эргэдэг кодлогч
Дотор эргэдэг кодлогч
Дотор эргэдэг кодлогч
Дотор эргэдэг кодлогч

Кодлогчын эргэдэг хэсэг нь гурван тээглүүртэй (мөн нэмэлт унтраалга хэсэгт хоёр ширхэг). Нэг нь нийтлэг ойлголт (хар GND), нөгөө хоёр нь бариулыг эргүүлэх үед чиглэлийг тодорхойлох зориулалттай (тэдгээрийг ихэвчлэн цэнхэр CLK, улаан DT гэж нэрлэдэг). Эдгээр хоёулаа микроконтроллерийн PULLUP оролтын зүү дээр залгагдсан бөгөөд энэ нь HIGH түвшинг анхны уншилт болгодог. Бариулыг урагш (эсвэл цагийн зүүний дагуу) эргүүлэхэд эхлээд цэнхэр CLK нь LOW түвшинд унаж, дараа нь улаан DT гарч ирнэ. Цааш нь харвал цэнхэр CLK нь HIGH руу буцаж очдог бөгөөд дараа нь GND -ийн нийтлэг холболт хоёулаа хоёуланг нь орхиход улаан DT нь мөн HIGH руу буцдаг. Ийнхүү FWD (эсвэл цагийн зүүний дагуу) нэг бүтэн тэмдэг бөглөнө үү. BWD-ийн нөгөө чиглэлд (эсвэл цагийн зүүний эсрэг) ижил чиглэлд явдаг боловч одоо улаан нь эхлээд унаж, хөх нь хоёр түвшний зураг дээр харуулсны дагуу хамгийн сүүлд дээшээ харагдана.

Алхам 2: Олон хүнд жинхэнэ зовлон учруулдаг зовлон

Олон хүнд жинхэнэ зовлон авчирдаг зовлон
Олон хүнд жинхэнэ зовлон авчирдаг зовлон
Олон хүнд жинхэнэ зовлон авчирдаг зовлон
Олон хүнд жинхэнэ зовлон авчирдаг зовлон
Олон хүнд жинхэнэ зовлон авчирдаг зовлон
Олон хүнд жинхэнэ зовлон авчирдаг зовлон

Arduino сонирхогчдын хувьд нийтлэг асуудал бол хямд Ротари кодлогч модулиуд нь гаралтын түвшний нэмэлт өөрчлөлтийг нэмэгдүүлж, чиглэлийг тоолоход буруу, буруу уншлага үүсгэдэг. Энэ нь өөгүй тоолохоос сэргийлж, эдгээр модулийг нарийвчлалтай эргүүлэх төсөлд нэгтгэх боломжгүй болгодог. Эдгээр нэмэлт үсрэлтүүд нь холболтын зүү дээрх засваруудын механик хөдөлгөөнөөс үүдэлтэй бөгөөд нэмэлт конденсаторыг ашигласнаар тэдгээрийг бүрэн арилгаж чадахгүй. Bounces нь хачигны бүрэн мөчлөгийн аль ч үед гарч ирж болох бөгөөд эдгээрийг бодит амьдрал дээрх зургуудаар дүрсэлсэн болно.

Алхам 3: Эцсийн төлөвт машин (FSM) шийдэл

Эцсийн төлөвт машин (FSM) шийдэл
Эцсийн төлөвт машин (FSM) шийдэл

Зураг дээр хоёр тээглүүр (цэнхэр CLK ба улаан DT) -ийн боломжит түвшний өөрчлөлтийн бүрэн бүтэн орон зайг харуулсан болно. Энэхүү төрийн машин дээр үндэслэн 100% үнэн зөв ажилладаг бүрэн шийдлийг програмчилж болно. Энэхүү шийдэлд шүүлтүүрийг хойшлуулах шаардлагагүй тул энэ нь хамгийн хурдан боломжтой юм. Зүүгийн төлөв байдлын орон зайг ажлын горимоос салгах бас нэг давуу тал бол санал асуулга эсвэл тасалдлын горимыг өөрийн хүссэнээр ашиглах боломжтой юм. Санал асуулга эсвэл тасалдал нь тээглүүр дээрх түвшний өөрчлөлтийг илрүүлэх боломжтой бөгөөд тусдаа горим нь одоогийн төлөв болон түвшний өөрчлөлтийн бодит үйл явдлыг үндэслэн шинэ төлөвийг тооцоолох болно.

Алхам 4: Arduino код

Arduino код
Arduino код

Доорх код нь цуваа дэлгэц дээрх FWD ба BWD тэмдгийг тоолж, нэмэлт шилжүүлэгч функцийг нэгтгэсэн болно.

// Питер Цургай 2019-04-10

// Arduino портууд руу эргэдэг тээглүүрүүд

#тодорхойлох SW 21 #define CLK 22 #тодорхойлох DT 23

// Ротари ашиглан тааруулсан тоолуурын одоогийн болон өмнөх утга

int curVal = 0; int prevVal = 0;

// FSM -ийн долоон муж (хязгаарлагдмал төлөвт машин)

#тодорхойлох IDLE_11 0 #тодорхойлох SCLK_01 1 #тодорхойлох SCLK_00 2 #тодорхойлох SCLK_10 3 #тодорхойлох SDT_10 4 #тодорхойлох SDT_00 5 #тодорхойлох SDT_01 6 int төлөв = IDLE_11;

хүчингүй тохиргоо () {

Цуваа.begin (250000); Serial.println ("Эхлэх …"); // Бүх түвшний pinMode (SW, INPUT_PULLUP) хувьд HIGH түвшин анхдагч байх болно; pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // CLK болон DT хоёулаа бүх түвшний өөрчлөлтийн тасалдлыг идэвхжүүлнэ. attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }

void loop () {

// Хэрэв (digitalRead (SW) == LOW) {Serial.println ("дарагдсан"); while (! digitalRead (SW)); } // Тоолуурын утгын аливаа өөрчлөлтийг Serial Monitor -д харуулна, хэрэв (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}

// CLK түвшний өөрчлөлтийн улсын машины шилжилт

void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (төлөв == IDLE_11) төлөв = SCLK_01; өөр бол (төлөв == SCLK_10) төлөв = SCLK_00; өөр бол (төлөв == SDT_10) төлөв = SDT_00; } өөр {хэрэв (төлөв == SCLK_01) төлөв = IDLE_11; өөр бол (төлөв == SCLK_00) төлөв = SCLK_10; өөр бол (төлөв == SDT_00) төлөв = SDT_10; өөр бол (төлөв == SDT_01) {төлөв = IDLE_11; curVal--; }}}

// DT түвшний өөрчлөлтийн улсын машины шилжилт

void rotaryDT () {if (digitalRead (DT) == LOW) {if (төлөв == IDLE_11) төлөв = SDT_10; өөр бол (төлөв == SDT_01) төлөв = SDT_00; өөр бол (төлөв == SCLK_01) төлөв = SCLK_00; } өөр {хэрэв (төлөв == SDT_10) төлөв = IDLE_11; өөр бол (төлөв == SDT_00) төлөв = SDT_01; өөр бол (төлөв == SCLK_00) төлөв = SCLK_01; өөр бол (төлөв == SCLK_10) {төлөв = IDLE_11; curVal ++; }}}

Алхам 5: Өөгүй интеграцчлал

Янз бүрийн үсрэх эффект бүхий бага хүрээтэй эргэдэг кодлогч байсан ч FSM шийдэл үнэн зөв, хурдан ажилладаг болохыг хавсаргасан видеоноос шалгаж болно.

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