Mundarija:
- 1 -qadam: Ichkarida aylanadigan kodlovchi
- 2 -qadam: Ko'pchilik uchun haqiqiy og'riq keltiradigan baxtsizlik
- 3 -qadam: Cheklangan holat mashinasi (FSM) yechimi
- 4 -qadam: Arduino kodi
- 5 -qadam: benuqson integratsiya
Video: To'liq Arduino Rotary yechimi: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
Aylanadigan kodlovchi - bu elektron loyihalar uchun aylanadigan boshqaruv tugmalari, ko'pincha Arduino oilasining mikrokontrollerlari bilan ishlatiladi. Ular parametrlarni sozlash, menyularda harakatlanish, ob'ektlarni ekranda ko'chirish, har qanday qiymatlarni o'rnatish uchun ishlatilishi mumkin. Ular potentsiometrlarning umumiy almashinuvidir, chunki ularni aniqroq va cheksiz aylantirish mumkin, ular bir vaqtning o'zida bitta diskret qiymatni oshiradi yoki kamaytiradi va ko'pincha tanlash funktsiyalari uchun itariladigan kalit bilan birlashtiriladi. Ular har xil shakl va o'lchamlarda bo'ladi, lekin eng past narx oralig'ini quyida aytib o'tilganidek o'zaro bog'lash qiyin.
Rotary enkoderlarining ishlash tafsilotlari va ulardan foydalanish usullari haqida son -sanoqsiz maqolalar va ulardan foydalanish bo'yicha ko'plab namunali kodlar va kutubxonalar mavjud. Yagona muammo shundaki, ularning hech biri Xitoyning aylanadigan modullarining eng past narxlari bilan 100% aniq ishlamaydi.
1 -qadam: Ichkarida aylanadigan kodlovchi
Enkoderning aylanadigan qismida uchta pim bor (va ixtiyoriy kalit uchun yana ikkita). Ulardan biri umumiy asos (qora GND), ikkinchisi - tugma burilganda yo'nalishni aniqlash uchun (ular ko'pincha ko'k CLK va qizil DT deb ataladi). Ularning ikkalasi ham mikrokontrollerning PULLUP kirish piniga ulangan, bu esa yuqori darajani standart o'qishga aylantiradi. Tugma oldinga (yoki soat yo'nalishi bo'yicha) burilganda, avval ko'k CLK LOW darajasiga tushadi, keyin qizil DT keladi. Yana o'girilib, ko'k CLK yana yuqori darajaga ko'tariladi, keyin umumiy GND tuzatish ikkala ulagichdan ham chiqib ketganda, qizil DT ham yana yuqoriga ko'tariladi. Shunday qilib, bitta to'liq belgilash FWD (yoki soat yo'nalishi bo'yicha). BWD boshqa yo'nalishda ham (yoki soat sohasi farqli o'laroq) ketadi, lekin hozir qizil birinchi bo'lib tushadi va ko'k mos ravishda ikki darajali rasmda ko'rsatilgandek oxirgi marta ko'tariladi.
2 -qadam: Ko'pchilik uchun haqiqiy og'riq keltiradigan baxtsizlik
Arduino havaskorlari uchun umumiy muammo shundaki, arzon Rotary kodlovchi modullari chiqish darajasida qo'shimcha o'zgarishlarni keltirib chiqaradi, bu esa yo'nalishlarning qo'shimcha va noto'g'ri o'qilishini keltirib chiqaradi. Bu nuqsonli sanashni oldini oladi va bu modullarni aniq aylanuvchi loyihalarga qo'shib bo'lmaydi. Bu qo'shimcha sakrashlar aloqa pimlari ustidagi yamoqlarning mexanik harakatlari natijasida yuzaga keladi va hatto qo'shimcha kondansatkichlarni qo'llash ham ularni butunlay yo'q qila olmaydi. To'ntarish to'liq tsiklning istalgan joyida paydo bo'lishi mumkin va ular tasvirlardagi real hayot stsenariylari bilan tasvirlangan.
3 -qadam: Cheklangan holat mashinasi (FSM) yechimi
Rasmda ikkita pin uchun (ko'k CLK va qizil DT) to'g'ri va noto'g'ri sakrashlar uchun mumkin bo'lgan darajadagi o'zgarishlarning to'liq holati ko'rsatilgan. Ushbu davlat mashinasi asosida har doim 100% aniq ishlaydigan to'liq echimni dasturlash mumkin. Filtrni kechiktirishga hojat yo'qligi sababli, bu ham eng tezdir. Pimlarning bo'sh joyini ish rejimidan ajratishning yana bir afzalligi shundaki, xohlaganingizcha so'rov yoki uzilish rejimini qo'llash mumkin. Ovoz berish yoki uzilishlar pimlardagi darajadagi o'zgarishlarni aniqlay oladi va alohida tartib yangi holatni hozirgi holat va darajadagi o'zgarishlarning haqiqiy hodisalari asosida hisoblab chiqadi.
4 -qadam: Arduino kodi
Quyidagi kod ketma -ket monitorda FWD va BWD belgilarini hisobga oladi va ixtiyoriy almashtirish funktsiyasini birlashtiradi.
// Piter Csurgay 2019-04-10
// Arduino portlariga aylanadigan pinlar
#ta'rif SW 21 #define CLK 22 #define DT 23
// Aylanadigan dastgohning joriy va oldingi qiymati
int curVal = 0; int prevVal = 0;
// FSMning etti holati (cheklangan holat mashinasi)
#delefilm IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #deffine SDT_01 6 int state = IDLE_11;
bo'sh o'rnatish () {
Serial.begin (250000); Serial.println ("Boshlash …"); // pinMode (SW, INPUT_PULLUP) pinlari uchun HIGH darajasi standart bo'ladi; pinMod (CLK, INPUT_PULLUP); pinMod (DT, INPUT_PULLUP); // CLK ham, DT ham barcha darajadagi o'zgarishlar uchun uzilishlarni ishga soladi attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
void loop () {
// ixtiyoriy kalitni boshqarish, agar (digitalRead (SW) == LOW) {Serial.println ("Bosilgan"); while (! digitalRead (SW)); } // Hisoblagich qiymatidagi har qanday o'zgarish Serial Monitorda ko'rsatiladi, agar (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// CLK darajasidagi o'zgarishlar uchun davlat mashinasi o'tishlari
bekor rotaryCLK () {if (digitalRead (CLK) == LOW) {if (holat == IDLE_11) holat = SCLK_01; aks holda (holat == SCLK_10) holat = SCLK_00; aks holda (holat == SDT_10) holat = SDT_00; } boshqa {agar (holat == SCLK_01) holat = IDLE_11; aks holda (holat == SCLK_00) holat = SCLK_10; aks holda (holat == SDT_00) holat = SDT_10; aks holda (holat == SDT_01) {holat = IDLE_11; curVal--; }}}
// DT darajasidagi o'zgarishlar uchun davlat mashinasi o'tishlari
void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; aks holda (holat == SDT_01) holat = SDT_00; aks holda (holat == SCLK_01) holat = SCLK_00; } boshqa {agar (holat == SDT_10) holat = IDLE_11; aks holda (holat == SDT_00) holat = SDT_01; aks holda (holat == SCLK_00) holat = SCLK_01; aks holda (holat == SCLK_10) {holat = IDLE_11; curVal ++; }}}
5 -qadam: benuqson integratsiya
Siz qo'shilgan videodan FSM yechimining har xil sporadik sakrash effektlari bo'lgan past diapazonli aylanma kodlovchi bo'lsa ham aniq va tez ishlashini tekshirishingiz mumkin.
Tavsiya:
Yengil ifloslanish yechimi - Artemida: 14 qadam
Yorug'lik ifloslanishining echimi - Artemis: Yorug'likning ifloslanishi butun dunyoda hammamizga ta'sir qiladigan narsadir. Lampochka ixtiro qilinganidan buyon yorug'lik ancha ommalashib ketdi va Nyu -York va Chikago kabi yirik shaharlarda ishlatila boshladi. Bu nurlarning hammasi ta'sir qilishi mumkin
Velosipedni almashish uchun IOT yechimi: 6 qadam
Birgalikda velosiped uchun IOT Qarori: Hozirgi kunda Xitoyda almashish velosipedlari juda mashhur. Bozorda velosiped almashishning 10 dan ortiq brendlari mavjud va "mobike &rdquo"; eng mashhuri, u 100 milliondan ortiq foydalanuvchini ro'yxatdan o'tkazgan va boshqa shaharlarga tarqalgan
Barmoq izi sensoridan XAMP yechimi bilan birgalikda vaqtni ko'rish uchun foydalanish: 6 qadam (rasmlar bilan)
Barmoq izi sensoridan XAMP yechimlari bilan birgalikda vaqtga qatnashish uchun foydalanish: Maktab loyihasi uchun biz o'quvchilarning davomatini kuzatish bo'yicha yechim qidirayotgan edik. Ko'plab talabalarimiz kech kelishadi. Ularning borligini tekshirish zerikarli ish. Boshqa tomondan, juda ko'p munozaralar bor, chunki talabalar ko'pincha shunday deyishadi
Ko'rilgan LoRa IoTea yechimi: 5 qadam
Ko'rilgan LoRa IoTea Qarori: Choy plantatsiyalarida qo'llaniladigan ma'lumotlarni avtomatik yig'ish tizimi. Bu aqlli qishloq xo'jaligi ma'lumotlarini yig'ishning bir qismidir
SKY CAM havo kamerasi yechimi: 10 qadam (rasmlar bilan)
SKY CAM havo kamerasi yechimi: Bu ko'rsatma sizga maktabda GCSE elektron mahsulotlar loyihasi uchun masofadan boshqarish pulti (yarim avtonom) kabel tizimini qanday yaratganimni ko'rsatib beradi va umid qilamanki, sizga o'z tizimingizni yaratishga imkon beradi! Bu qo'pol qo'llanma sifatida mo'ljallangan