Mundarija:
- 1 -qadam: aralashtirish usuli »Yo'q
- 2 -qadam: Usul usuli »Aylantirish
- 3 -qadam: Usul usuli »Oddiy
- 4 -qadam: Metod usuli »mutanosib
Video: Kanallarni aralashtirishni tushunish: 4 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:28
Agar siz hech qachon masofadan boshqarish pultining shassisini boshqargan bo'lsangiz, aralashtirishni ishlatgan bo'lishingiz mumkin, garchi siz buni bilmagan bo'lsangiz ham. Xususan, agar siz rulni boshqaruvchi yoki differentsial ruldan foydalanadigan transport vositasini boshqarish uchun bitta joystick yoki gimble ishlatgan bo'lsangiz, siz aralashtirishdan foydalangan bo'lasiz.
Aralashtirish - bu shassining har bir tomoniga qancha quvvat berish kerakligini aniqlash uchun joystikdan olingan ma'lumotlar.
Agar siz joystikni ochsangiz, odatda ikkita potentsiometrni ko'rasiz. Ulardan biri hozirgi o'qingizni Y o'qi bo'ylab (yuqoriga va pastga) o'lchash uchun, ikkinchisi X o'qi bo'ylab (yonma -yon) o'lchash uchun.
Menda bu mavzu bo'yicha rasmiy ta'lim bo'lmasa -da, men oldin kodni aralashtirishga majbur bo'ldim va yaqinda men bu mavzuga biroz chuqurroq kirib borishni xohladim.
Birinchidan, shuni ta'kidlashni istardimki, ko'pgina RC transmitterlari ko'plab motor boshqaruvchilari singari aralashtirish qobiliyatiga ega. Agar siz o'zingizni kodingizga aralashtirishingiz kerak bo'lsa, bu ma'lumot eng foydali bo'ladi. Aytaylik, agar siz Arduino -dan RC qabul qiluvchisidan aralashmagan ma'lumotlarni o'qish uchun foydalanayotgan bo'lsangiz yoki kostryulkalardan analog ma'lumotlarni joystikda o'qiyotgan bo'lsangiz yoki mobil ilovadagi raqamli joystikdan koordinatalarni o'qiyotgan bo'lsangiz.
Keling, har xil aralashtirish usullarini ko'rib chiqaylik.
1 -qadam: aralashtirish usuli »Yo'q
Avval aralashtirishni umuman ishlatmasangiz nima bo'lishini ko'rib chiqaylik. Agar siz ma'lumotni bitta o'qdan shassisning bir tomoniga va boshqa o'qdan boshqa tomonga yuborsangiz, sizning avtomobilingiz siz xohlagan tarzda javob bermaydi.
Masalan, agar siz joystikni to'liq oldinga siljitsangiz, Y o'qi to'liq gaz kelepchasida, X o'qi 0 da. Shunday qilib, siz to'g'ridan -to'g'ri emas, balki aylana bo'ylab haydagan bo'lar edingiz.
2 -qadam: Usul usuli »Aylantirish
Bir kuni hamkasbim menga kambag'al odam aralashmasi uchun uzatgichni 45 gradusga burish mumkinligini aytdi. Agar siz joystikdagi ikkita potentsiometrning qiymatlarini panjara bo'yicha x o'qi o'qi deb hisoblasangiz (ikkala o'qi -100 dan +100 gacha), bu juda mantiqiy, chunki siz ikkala o'qda +100 ga borasiz. siz joystikni yuqoriga va o'ngga surganingizda. Shunday qilib, agar bu sizning ikkita shassi kanalingizga (robotingizning chap va o'ng tomoniga) to'g'ri kelsa, bu sizning robotingizni oldinga siljishiga olib keladi.
Shunday qilib, men aralashtirgan birinchi usul, x va y koordinatalarini gridning markaziy nuqtasi atrofida 45 gradusga matematik ravishda aylantirish edi.
Bu yaxshi ishlaydi, lekin men 100% quvvat bilan oldinga siljiy olmayman, chunki siz aylanayotganda umumiy harakat panjara ichidagi aylana bilan cheklangan, demak siz hech qachon o'ng yuqori burchakka kira olmaysiz.
Bu ham tarmoqning burchaklari ishlatilmasligiga olib keladi. Agar siz harakatlanishingizni cheklaydigan joystick/gimple ishlatayotgan bo'lsangiz, bu muammo emas, aks holda siz tarmoqning bu qismi sizning harakatlaringiz to'liq mutanosib bo'lishi uchun biror narsa qilishini xohlaysiz.
Agar siz men kabi vizual o'rganuvchi bo'lsangiz, ushbu ko'rsatmaning boshidagi videoni tomosha qilib, ushbu kontseptsiyani tushunish osonroq bo'lishi mumkin.
Keling, ba'zi kod misollarini ko'rib chiqaylik.
MENING KOD MASALALARIM HAQIDA QAYDLAR: Men sizning loyihangizga qarab o'zgarishi mumkin bo'lgan joystick_x va joystick_y qiymatlarini qanday olishini ko'rsatmayman. Bundan tashqari, men ± 100 ni xaritalash/cheklash bilan shug'ullanaman, lekin siz PWM uchun 1000 - 2000 yoki analog chiqish uchun 0 - 255 va hokazolarni xaritalashingiz kerak bo'lishi mumkin.
Arduino misoli:
// matematik tarzda aylantirish
er -xotin rad = -45*M_PI/180; int leftThrottle = joystick_x * cos (rad) - joystick_y * sin (rad); int rightThrottle = joystick_y * cos (rad) + joystick_x * sin (rad); // cheklash chapThrottle = cheklash (leftThrottle, -100, 100); rightThrottle = cheklash (rightThrottle, -100, 100);
JavaScript misoli:
// matematik rotatevar rad = -45*Math. PI/180; leftThrottle = joystick_x * Math.cos (rad) - joystick_y * Math.sin (rad); o'ngThrottle = joystick_y * Math.cos (rad) + joystick_x * Math.sin (rad); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (son, min), max); };
3 -qadam: Usul usuli »Oddiy
Keyingi navbatda bizda Shawn Hymelning Science SparkFun sarguzashtlari videolaridan birida u men ishlagan loyihaga juda o'xshash loyihada ishlagan.
Bu tenglama sizga oldinga siljishda to'liq tezlikka erishishga imkon beradi, lekin aylantirish usuliga o'xshab, u tarmoqning burchak maydonlarini inobatga olmaydi. Buning sababi shundaki, ba'zi hollarda maksimal 100, ba'zi hollarda maksimal 200 bo'ladi. Demak, siz 100dan keyin hech narsaga e'tibor bermaslik uchun cheklash funktsiyasidan foydalanasiz.
Aytgancha, men bu oddiy narsani kamsituvchi deb atamayman … soddaligida go'zallik bor.
Arduino misoli:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // cheklash chapThrottle = cheklash (leftThrottle, -100, 100); rightThrottle = cheklash (rightThrottle, -100, 100);
JavaScript misoli:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // leftChannel = constrain (leftChannel, -100, 100); rightChannel = cheklash (rightChannel, -100, 100); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (son, min), max); };
4 -qadam: Metod usuli »mutanosib
Men har ikki dunyo tenglamasini eng yaxshi qilishiga umid qilib, oddiy usulni tanladim. Bu erda fikr, diagonal bo'yicha, har tomonga to'liq mutanosib bo'lishdir, garchi siz katta masofani bosib o'tayotgan bo'lsangiz ham, u vertikal harakat qilganingizdagidek kichikroq masofaga ega.
Siz mening misolimda barcha yo'nalishlarda -200 dan +200 gacha bo'lgan shkala bilan yakun topaman, men buni ± 100 ga xaritada ko'rsataman, chunki u har bir kanalga ketadigan quvvatning foizini ifodalaydi - lekin siz uni ishlatayotgan narsangiz bilan taqqoslashni xohlaysiz. vosita boshqaruvchisi uchun sumka. Masalan, agar siz PWM signalini yuborayotgan bo'lsangiz, uni 1000 dan 2000 gacha xaritaga kiritishingiz mumkin yoki analog signalni yuborayotgan bo'lsangiz, uni 0-255 ga xaritada ko'rsatishingiz va yo'nalishni mantiqiy qilib belgilashingiz mumkin.
Arduino misoli:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // ba'zi hollarda maksimal 100, ba'zi hollarda 200 bo'ladi // farqni hisobga olamiz, shuning uchun maksimal har doim 200int diff = abs (abs (joystick_y) - abs (joystick_x)); chapThrottle = chapThrottle <0? leftThrottle - farq: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - farq: rightThrottle + farq; // Xaritalar ± 200 dan ± 100 gacha yoki siz xohlagan diapazonda ignaTThrottle = map (leftThrottle, 0, 200, -100, 100); rightThrottle = map (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = cheklash (leftThrottle, -100, 100); rightThrottle = cheklash (rightThrottle, -100, 100);
JavaScript misoli:
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // ba'zi hollarda maksimal 100, ba'zi hollarda 200, // farqni hisobga olamiz, shuning uchun maksimal har doim 200var farq = Math.abs (Math.abs (joystick_y) - Math.abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - farq: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle -farq: rightThrottle + diff; // Xaritada ± 200 dan ± 100 gacha yoki siz nima qilasizThrottle = map (chapThrottle, -200, 200, -100, 100); -100, 100); // leftThrottle = cheklash (leftThrottle, -100, 100); rightThrottle = cheklash (rightThrottle, -100, 100); // ba'zi yordamchi funktsiyalarvar constrain = function (son, min, max) {qaytish Math.min (Math. maksimal (son, min), maksimal); }; var map = funktsiyasi (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, xaritada; inMin = inMin + inMax; son = son + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (son/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); mapped = outSpan*(p/100) - (outMax/2); qaytish xaritada;};
Tavsiya:
AWS IOT bilan Android ilovasini qanday ulash mumkin va ovozni aniqlash API -ni tushunish: 3 qadam
AWS IOT bilan Android ilovasini qanday ulash mumkin va ovozni aniqlash API -ni tushunish: Bu qo'llanma foydalanuvchiga Android ilovasini AWS IOT serveriga ulashni va qahva mashinasini boshqaruvchi ovozni aniqlash API -ni tushunishni o'rgatadi. Ilova qahva mashinasini Alexa orqali boshqaradi. Ovozli xizmat, har bir ilovada
Motor asoslari - Tajriba bilan tushunish oson bo'lgan tushuncha: 7 qadam (rasmlar bilan)
Motor asoslari | Tajriba bilan tushunish oson bo'lgan tushuncha: Men sizga bu dvigatellarning asosiy printsipi haqida o'rgataman. Atrofimizdagi barcha motorlar shu tamoyil asosida ishlaydi. Hatto generatorlar ham bu qoidaning o'zaro bayonoti ustida ishlaydilar, men Flemingning chap qo'li haqida gapirayapman
Konditsionerning masofadan boshqarish pultlarining IQ protokolini tushunish: 9 qadam (rasmlar bilan)
Havo konditsionerining masofadan boshqarish pultlarining IQ protokolini tushunish: Men anchadan beri IR protokollari bilan tanishaman. IR signallarini qanday yuborish va qabul qilish kerak. Hozirgi vaqtda qolgan yagona narsa - bu masofadan boshqarish pultlarining IQ protokoli, deyarli barcha elektron qurilmalarning (masalan, televizorning) an'anaviy masofadan boshqarish pultlaridan farqli o'laroq
Kartoshka batareyasi: kimyoviy va elektr energiyasini tushunish: 13 qadam (rasmlar bilan)
Kartoshka batareyasi: kimyoviy va elektr energiyasini tushunish: lampochkani bir yoki ikki kartoshka bilan quvvatlantirish mumkinligini bilarmidingiz? Ikki metall orasidagi kimyoviy energiya elektr energiyasiga aylanadi va kartoshka yordamida zanjir hosil qiladi! Bu kichik elektr zaryadini hosil qiladi, u
PIC mikrokontrollerlari uchun ICSPni tushunish: 4 qadam (rasmlar bilan)
PIC mikrokontrollerlari uchun ICSPni tushunish: mikrokontrollerlarni dasturlash qiyin emas. Dasturchi yaratish elektronika uchun birinchi ajoyib loyihani yaratadi. Ushbu ko'rsatmaning maqsadi Microchip PIC bilan ishlatiladigan oddiy "sxemali ketma -ket dasturlash" usulini tushuntirishdir