Turinys:
- 1 žingsnis: Maišymo metodas »Nėra
- 2 žingsnis: metodo metodas »Pasukti
- 3 žingsnis: metodo metodas »Paprasta
- 4 žingsnis: metodo metodas »Proporcingas
Video: Kanalų maišymo supratimas: 4 žingsniai (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Jei kada nors vairavote nuotolinio valdymo važiuoklę, yra didelė tikimybė, kad naudojote maišymą, net jei to nežinojote. Tiksliau, jei transporto priemonei, naudojančiai slydimo vairavimą arba diferencialinį vairavimą, valdyti naudojote vieną vairasvirtę ar trinkelę, naudojote maišymą.
Maišymas yra tiesiog tai, kaip jūsų kreiptuko duomenys naudojami norint nustatyti, kiek energijos reikia tiekti į kiekvieną važiuoklės pusę.
Jei atidarysite vairasvirtę, paprastai pamatysite du potenciometrus. Vienas iš jų matuoja jūsų dabartinę padėtį išilgai Y ašies (aukštyn ir žemyn), o kitas - jūsų buvimo vietą išilgai X ašies (iš vienos pusės į kitą).
Nors neturiu jokio oficialaus mokymo šia tema, anksčiau turėjau maišyti kodą ir neseniai norėjau šiek tiek pasinerti į temą.
Pirmiausia noriu pažymėti, kad dauguma RC siųstuvų turi maišymo galimybę, kaip ir daugelis variklių valdiklių. Ši informacija bus labai naudinga, jei turėsite maišyti savo kodą patys. Tarkime, pavyzdžiui, jei naudojate „Arduino“skaityti nesumaišytus duomenis iš RC imtuvo, arba skaitote analoginius duomenis iš puodų vairasvirtėje, arba skaitote koordinates iš skaitmeninės vairasvirtės programoje mobiliesiems.
Pažvelkime į keletą skirtingų maišymo būdų.
1 žingsnis: Maišymo metodas »Nėra
Pirmiausia pažiūrėkime, kas atsitiks, jei nenaudosite maišymo. Jei tik siunčiate duomenis iš vienos ašies į vieną važiuoklės pusę, o kitą ašį į kitą pusę, jūsų automobilis nereaguos taip, kaip norite.
Pavyzdžiui, jei stumiate vairasvirtę iki galo tiesiai, Y ašis yra visu greičiu, o X ašis - 0. Taigi važiuotumėte ratais, o ne važiuotumėte tiesiai.
2 žingsnis: metodo metodas »Pasukti
Kartą vienas bendradarbis man atkreipė dėmesį, kad, žiupsneliu, galite pasukti siųstuvą 45 laipsnių kampu, kad gautumėte vargšo mišinį. Jei manote, kad dviejų vairasvirtėje esančių potenciometrų vertės yra x x y ašis tinklelyje (kai abi ašys yra nuo -100 iki +100), tai yra labai prasminga, nes jūs ketinate pasiekti +100 abiejose ašyse stumdami vairasvirtę aukštyn ir į dešinę. Taigi, jei tai bus nukreipta tiesiai į du jūsų važiuoklės kanalus (kairę ir dešinę jūsų roboto puses), jūsų robotas eis į priekį.
Taigi pirmasis maišymo metodas, kurį aš kada nors bandžiau, buvo matematiškai pasukti x ir y koordinates 45 laipsniais apie tinklelio centrinį tašką.
Tai veikia gerai, tačiau negaliu eiti į priekį su 100% galia, nes kai sukasi, bendras judėjimas yra apribotas apskritimu tinklelyje, o tai reiškia, kad niekada negali patekti į tą viršutinį dešinįjį kampą.
Dėl to taip pat nebus naudojami tinklelio kampai. Tai nėra problema, jei naudojate vairasvirtę/rankenėlę, kuri riboja jūsų judėjimą, kad tos zonos niekada nepasiektų, tačiau priešingu atveju norėsite, kad ta tinklelio dalis kažką padarytų, kad jūsų judesiai būtų visiškai proporcingi.
Jei esate vizualiai besimokantis kaip aš, šią sąvoką būtų lengviau suprasti žiūrint vaizdo įrašą šios instrukcijos pradžioje.
Pažvelkime į keletą kodo pavyzdžių.
PASTABOS APIE MANO KODO PAVYZDŽIUS: Aš nenurodau, kaip jūs gaunate joystick_x ir joystick_y reikšmes, nes jos keisis priklausomai nuo jūsų projekto. Taip pat aš būsiu kartografavimas/apribojimas iki ± 100, bet jums greičiausiai reikės susieti su 1000–2000 PWM arba 0–255 analoginei išvestiai ir pan. Aš visada apriboju … tik tuo atveju.
„Arduino“pavyzdys:
// matematiškai pasukti
dvigubas rad = -45*M_PI/180; int leftThrottle = vairasvirtė_x * cos (rad) - vairasvirtė_y * sin (rad); int rightThrottle = vairasvirtė_y * cos (rad) + vairasvirtė_x * sin (rad); // apriboti leftThrottle = apriboti (leftThrottle, -100, 100); dešinysis droselis = apriboti (dešinysis droselis, -100, 100);
„JavaScript“pavyzdys:
// matematiškai rotatevar rad = -45*Math. PI/180; leftThrottle = vairasvirtė_x * Math.cos (rad) - vairasvirtė_y * Math.sin (rad); rightThrottle = vairasvirtė_y * Math.cos (rad) + vairasvirtė_x * Math.sin (rad); // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // pagalbinis funkcinis apribojimas = funkcija (num, min, max) {return Math.min (Math.max (num, min), max); };
3 žingsnis: metodo metodas »Paprasta
Toliau turime labai paprastą lygtį, kurią pirmą kartą paėmiau iš vieno Shawno Hymelio nuotykių „Science SparkFun“vaizdo įrašuose, kur jis atsitiko dirbdamas labai panašų projektą kaip ir aš.
Ši lygtis leidžia pasiekti maksimalų greitį einant į priekį, tačiau panašiai kaip pasukimo metodas, neatsižvelgiama į kampines tinklelio sritis. Taip yra todėl, kad kai kuriais atvejais didžiausias yra 100, o kai kuriais atvejais - 200. Taigi, norėdami nepaisyti nieko po 100, naudosite apribojimo funkciją.
Ir, beje, aš to nevadinu niekinančiu paprastu dalyku … paprastume slypi grožis.
„Arduino“pavyzdys:
int leftThrottle = vairasvirtė_y + vairasvirtė_x;
int rightThrottle = vairasvirtė_y - vairasvirtė_x; // apriboti leftThrottle = apriboti (leftThrottle, -100, 100); dešinysis droselis = apriboti (dešinysis droselis, -100, 100);
„JavaScript“pavyzdys:
var leftChannel = vairasvirtė_y + vairasvirtė_x;
var rightChannel = vairasvirtė_y - vairasvirtė_x; // apriboti leftChannel = apriboti (leftChannel, -100, 100); rightChannel = apriboti (rightChannel, -100, 100); // pagalbininkas functionvaržas constrain = funkcija (num, min, max) {return Math.min (Math.max (num, min), max); };
4 žingsnis: metodo metodas »Proporcingas
Aš atsisakiau paprasto metodo, tikėdamasis padaryti geriausią abiejų pasaulių lygtį. Idėja yra būti visiškai proporcinga visomis kryptimis, net įstrižai, nepaisant to, kad judate didesnį atstumą, jo diapazonas yra toks pat kaip judant vertikaliai, o tai yra mažesnis atstumas.
Galų gale mano pavyzdžių skalė yra nuo -200 iki +200 visomis kryptimis. Aš priskiriu tai ± 100, nes tai reiškia kiekvienam kanalui tenkančios galios procentą, tačiau norėsite susieti jį su tuo, kas jums naudinga - jūsų variklio valdiklio dėklas. Pavyzdžiui, jei siunčiate PWM signalą, galite jį susieti su 1000–2000 arba, jei siunčiate analoginį signalą, galite susieti jį su 0–255 ir nustatyti kryptį kaip loginę ir pan.
„Arduino“pavyzdys:
int leftThrottle = vairasvirtė_y + vairasvirtė_x;
int rightThrottle = vairasvirtė_y - vairasvirtė_x; // kai kuriais atvejais maksimumas yra 100, kai kuriais atvejais - 200 // įskaičiuokime skirtumą, todėl maksimumas visada yra 200int dif = abs (abs (joystick_y) - abs (vairasvirtė_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightDroselis <0? rightThrottle - diff: rightThrottle + diff; // Žemėlapis nuo ± 200 iki ± 100 arba bet koks diapazonas, į kurį nukreipiate // constrainleftThrottle = apriboti (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);
„JavaScript“pavyzdys:
var leftThrottle = vairasvirtė_y + vairasvirtė_x; var dešinėThrottle = vairasvirtė_y - vairasvirtė_x; // kai kuriais atvejais maksimumas yra 100, kai kuriais atvejais - 200, // įskaičiuokime skirtumą, todėl maksimumas visada yra 200var diff = Math.abs (Math.abs (vairasvirtė_y) - Math.abs (vairasvirtė_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightDroselis <0? rightThrottle -diff: rightThrottle + diff; // Žemėlapis nuo ± 200 atgal iki ± 100 arba bet koks adatas Throttle = žemėlapis (leftThrottle, -200, 200, -100, 100); rightThrottle = žemėlapis (rightThrottle, -200, 200, -100, 100); // apriboti leftThrottle = apriboti (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // kai kurios pagalbinės funkcijosvaržyti = funkcija (num, min, max) {return Math.min (Mat. maks (num, min), max); }; var map = funkcija (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, susieta; inMin = inMin + inMax; num = num + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (num/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); susieta = outSpan*(p/100) - (outMax/2); grąžinimas suplanuotas;};
Rekomenduojamas:
„Jumbleum“maišymo MP3 muzikos grotuvas: 8 žingsniai (su paveikslėliais)
„Jumbleum“maišymo MP3 muzikos grotuvas: šiam projektui nusprendžiau sukurti lengvai naudojamą, galingą grotuvą, kurį galėčiau naudoti savo dirbtuvėse. Išbandęs kai kuriuos kitus MP3 modulius, pasirinkau lengvai prieinamą, pigų „DFPlayer Mini“; modulis. Jame yra " Atsitiktinis paleidimas " režimas BET todėl, kad aš
MESOMIX - automatinė dažų maišymo mašina: 21 žingsnis (su paveikslėliais)
MESOMIX - automatinė dažų maišymo mašina: Ar esate dizaineris, menininkas ar kūrybingas žmogus, mėgstantis mesti spalvas ant savo drobės, bet dažnai tai yra kova, kai reikia sukurti norimą atspalvį. Taigi, ši meno technologijų instrukcija išnyks kad kova į orą. Kaip šis prietaisas, jūs
Belaidis nuotolinis valdymas naudojant 2,4 GHz NRF24L01 modulį su „Arduino“- Nrf24l01 4 kanalų / 6 kanalų siųstuvo imtuvas keturkopteriui - Rc sraigtasparnis - Rc lėktuvas naudojant „Arduino“: 5 žingsniai (su nuotraukomis)
Belaidis nuotolinis valdymas naudojant 2,4 GHz NRF24L01 modulį su „Arduino“| Nrf24l01 4 kanalų / 6 kanalų siųstuvo imtuvas keturkopteriui | Rc sraigtasparnis | Rc lėktuvas naudojant „Arduino“: valdyti Rc automobilį | Kvadopteris | Dronas | RC plokštuma | RC valtis, mums visada reikia imtuvo ir siųstuvo, tarkime, kad RC QUADCOPTER mums reikia 6 kanalų siųstuvo ir imtuvo, o tokio tipo TX ir RX yra per brangus, todėl mes jį pagaminsime savo
Oro kondicionieriaus nuotolinio valdymo pulto IR protokolo supratimas: 9 žingsniai (su nuotraukomis)
Oro kondicionieriaus nuotolinio valdymo pulto IR protokolo supratimas: jau kurį laiką mokausi apie IR protokolus. Kaip siųsti ir priimti IR signalus. Šiuo metu lieka tik kintamosios srovės nuotolinio valdymo pulto IR protokolas. Skirtingai nuo tradicinių beveik visų elektronikos prietaisų (tarkime, televizoriaus) nuotolinio valdymo pulto, kuriame
PIC mikrovaldiklių ICSP supratimas: 4 žingsniai (su paveikslėliais)
PIC mikrovaldiklių ICSP supratimas: mikrokontrolerių programavimas nėra sudėtingas. Sukūrus programuotoją sukuriamas puikus pirmasis elektronikos projektas. Šios instrukcijos tikslas yra paaiškinti paprastą „grandinės serijinio programavimo“metodą, naudojamą su „Microchip PIC“