Image
2.8.2019 0 Comments

Robotika - joystick na ovládanie zariadení s Micro:bitom

článku  sme ukázali ako je možné ovládať robotické autíčko riadené doskou Micro:bit pomocou druhého Micro:bitu, ktorý držíte v ruke, pričom obidva Micro:bity sú navzájom prepojené. Na ovládanie ste mohli využiť tlačidlá A a B a nakláňanie dosky v ruke, pričom sa do riadiacej dosky robota posielali údaje z akceleometra v osiach X a Y. Efektné, ale nie príliš presné. Oveľa presnejšie dokážete robotické autíčko, robotické rameno alebo akýkoľvek iný projekt s Micro:bitom ovládať pomocou joysticku. Modul joystick:bit má joystick pre pohyb v osiach X a Y a 6 tlačidiel. Má aj vlastný držiak batérií a tiež ochranné plexi. Všetkým ovládacím prvkom môžete v programe priradiť ľubovoľnú funkciu a vytvoriť bezdrôtový herný ovládač pre akýkoľvek projekt alebo robota s Micro:bitom.

Video ukazuje, ako fungujú všetky príklady v článku

Na doske je tiež držiak pre 3 batérie AAA, ktoré slúžia ako zdroj napätia. Nechýba ani hlavný vypínač a indikácia napájania.

K dispozícii sú aj konektory s ďalšími GPIO signály micro: bit a komunikačné rozhranie I2C, SPI alebo UART.

Niektoré piny sú vyvedené v rozložení GVS, ktoré uľahčuje pripojenie rozširujúcich modulov. GVS zodpovedajú signály GND (G), VCC (V), Signál (S). Na doske sú tiež spájkovacej plôšky pre externé napájanie. V balení je montážny materiál a ochranné plexisklo.

V prvom príklade na displeji microbitu zasunutého v Joysticku zobrazíme číslo zatlačeného tlačidla, v prípade pohybu páčkou smer, čiže X a -X a Y a -Y. Tlačidlá nie sú pripopjené na digitálne vstupy, ale premosťujú rezistory deliča napätia, ktorý je pripojený na pin P2, ktorý je nakonfigurovaný ako analógový vstup. Podľa toho, ktoré tlačidlo je zatlačené sa na pin P2 privedie analógové napätie. Ak je hodnota načítaná na analógovom vstupe v intervale hodnôt 0 - 256 je zatlačené tlačidlo 1, v intervale 256 - 597 tlačidlo 2, hodnoty v intervale 598 - 725 indikujú tlačidlo 3 a tak ďalej. Intervaly sú v kóde. Hodnoty vychýlenia ovládacej páčky joysticku sú analógové hodnoty na pinoch P0 a P1

JavaScript

function button () {
    btVal = pins.analogReadPin(AnalogPin.P2)
    if (btVal < 256) {
       btNum = 1
    } else {
       if (btVal < 597) {
           btNum = 2
        } else {
           if (btVal < 725) {
               btNum = 3
           } else {
               if (btVal < 793) {
                    btNum = 4
               } else {
                    if (btVal < 836) {
                        btNum = 5
                    } else {
                        if (btVal < 938) {
                            btNum = 6
                        } else {
                            btNum = 0
                        }
                    }
               }
           }
        }
    }
}
 
let btVal = 0
let btNum = 0
btNum = 0
basic.forever(function () {
   button()
    if (btNum) {
       basic.showNumber(btNum)
    } else {
       if (pins.analogReadPin(AnalogPin.P0) < 400) {
           basic.showString("-X")
        } else {
           if (pins.analogReadPin(AnalogPin.P0) > 600) {
               basic.showString("X")
           } else {
               if (pins.analogReadPin(AnalogPin.P1) < 400) {
                   basic.showString("-Y")
               } else {
                    if (pins.analogReadPin(AnalogPin.P1) > 600) {
                       basic.showString("Y")
                    } else {
                        basic.clearScreen()
                    }
               }
           }
        }
    }
})

V druhom príklade ukážeme ovládanie robotického autíčka. Už nebudeme údaje o zatlačených tlačidlách, alebo polohe joysticku zobrazovať na displeji ale budú sa bezdrôtovo prenášať do druhého Micro:bitu, ktorý v tomto prípade riadi motorčeky a ostatný hardvér robotického autíčka

Micro:bit umožňuje vytvorenie rádiového prepojenia medzi dvomi, prípadne viacerými doskami, takže jedna doska môže riadiť hardvér robotického podvozku a pomocou druhej dosky môžete robotické vodidlo ovládať. Ešte zopakujeme princíp pohybu robotického podvozku s dvoma kolesami, pričom každé poháňa samostatný motor. Ak sa kolieska robotického podvozku otáčajú rovnakou rýchlosťou jedným, alebo druhým smerom, podvozok sa pohybuje priamo dopredu, alebo dozadu. Ak sa kolieska otáčajú rôznou rýchlosťou, robot zatáča do tej strany, na ktorej sa koliesko pohybuje pomalšie. Ak jedno z kolies úplne zastane a druhé sa otáča, tak robot sa začne otáčať na mieste, pričom stredom otáčania je koleso, ktoré sa nepohybuje a polomer otáčania je daný vzdialenosťou medzi kolesami. Ak potrebujete robotický podvozok otočiť na mieste ale na menšom priemere, tak kolieska sa musia otáčať opačným smerom. Vtedy bude polomer otáčania rovný polovičke vzdialenosti medzi kolesami a os otáčania bude v strede pomyslenej spojnice kolies.

Do mikropočítača ovládajúceho autíčko budeme posielať údaje o smere a veľkosti vychýlenia joysticku a tiež údaj o tom aké tlačidlo bolo prípadne stlačené. V inicializačnom bloku je potrebné nastaviť rádiový kanál, konkrétne číslo skupiny. Toto číslo musí byť rovnaké pre obidve dosky, ktoré majú spolu komunikovať. V príklade je pomocou príkazu setGroup() ako číslo skupiny nastavené 1. 

Kód pre Micro:bit v joysticku obsahuje aj vysielanie hodnôt zatlačených tlačidiel, takže je univerzálny. 

JavaScript

function button () {
    btVal = pins.analogReadPin(AnalogPin.P2)
    if (btVal < 256) {
       btNum = 1
    } else {
       if (btVal < 597) {
           btNum = 2
        } else {
           if (btVal < 725) {
               btNum = 3
           } else {
               if (btVal < 793) {
                    btNum = 4
               } else {
                    if (btVal < 836) {
                        btNum = 5
                   } else {
                        if (btVal < 938) {
                            btNum = 6
                        } else {
                            btNum = 0
                        }
                    }
               }
           }
        }
    }
}
let btVal = 0
let btNum = 0
btNum = 0
radio.setGroup(1)
basic.forever(function () {
   button()
    if (btNum) {
       radio.sendValue("b", btNum)
    } else {
       radio.sendValue("x", pins.analogReadPin(AnalogPin.P0))
       basic.pause(100)
       radio.sendValue("y", pins.analogReadPin(AnalogPin.P1))
       basic.pause(100)
    }
})

 

V hlavnej slučke sa spracovávajú povely, ktoré obsahujú informácie z joysticku. Na ovládanie pohybu robota do strán sa použije hodnota naklonenia páčky joysticku v osi X a na pohyb dopredu, či dozadu hodnota naklonenia páčky joysticku v osi Y

Kód pre Micro:bit v robotickom podvozku Ring:bit V2

JavaScript

radio.setGroup(1)
radio.onDataPacketReceived(function ({ receivedString: name, receivedNumber: value }) {
    if (name == "x") {
       xJoy = value
    } else {
       if (name == "y") {
           yJoy = value
        }
    }
 
    if (bolaKalibracia == 0) {
       xZero = xJoy
       yZero = yJoy
       bolaKalibracia = 1
    }
})
 
 
let rightwheel = 0
let leftwheel = 0
 
let yJoy = 0
let xJoy = 0
 
let yValue = 0
let xValue = 0
RingbitCar.init_wheel(AnalogPin.P2, AnalogPin.P1)
basic.showIcon(IconNames.Triangle)
let xZero = 0
let yZero = 0
 
let bolaKalibracia = 0
 
basic.forever(function () {
   xValue = xJoy - xZero
   yValue = yJoy - yZero
   leftwheel = yValue + xValue
   rightwheel = yValue - xValue
   RingbitCar.freestyle(leftwheel, rightwheel)
})

 

Kód na prijímanie a vyhodnocovanie povelov je trochu zložitejší. V hlavnej slučke sa na základe prijatých povelov, ktoré obsahujú informácie o polohe joysticku, pričom pohyb v každej osi generuje hodnoty od 0 do 1023. To sú krajné hodnoty. Pokiaľ je joystick v kľudovej polohe v strede, obidve hodnoty by mali byť okolo 512. Treba to však vedieť presne, preto sa tieto hodnoty zisťujú pri kalibrácii. Preto je potrebné najskôr zapnúť joystick, nechať ovládaciu páku v strednej polohe a až potom zapnúť robotický podvozok. Vtedy sa vykoná kalibrácia. Tento kód sa spustí iba raz

let bolaKalibracia = 0
...
if (bolaKalibracia == 0) {
       xZero = xJoy
       yZero = yJoy
       bolaKalibracia = 1
    }

Hodnoty zistené kalibráciou sa odpočítajú od aktuálne prijatých hodnôt z jopysticka

   xValue = xJoy - xZero
   yValue = yJoy - yZero

Pohyb dopredu, dozadu a do strán je odvodený od aktuálnej polohy ovládacej páčky. Predpokladajme zatiaľ, že naklonenie páčky v  osi X je nulové. V takom prípade, ak je páčka ovládača naklonená dopredu potrebujete aby sa robot pohyboval dopredu a naopak. Preto ak je hodnota Y kladná budú sa kolesá otáčať takým smerom, aby sa robotický podvozok pohyboval dopredu a pokiaľ je hodnota Y záporná, tak dozadu. V obidvoch prípadoch sa budú kolesá otáčať rovnakou rýchlosťou. Na ovládanie pohybu robota do strán sa použije hodnota naklonenia páčky ovládača v osi X. Vtedy sa budú kolesá otáčať každé iným smerom. Pre ľavé koleso sa použije hodnota nameraná v osi X priamo a pre pravé hodnota s prevráteným znamienkom. 

Z toho vyplývajú vzorce pre otáčky kolies:

   leftwheel = yValue + xValue
   rightwheel = yValue - xValue

Na základe znamienok hodnôt v jednotlivých osiach sa určí smer otáčania motorčekov poháňajúcich kolesá. Ak sú hodnoty kladné definuje sa smer otáčania „forward“ a ak sú záporné tak opačný smer „reverse“. V blokoch pre opačný chod sa počíta absolútna hodnota, pretože funkcie na ovládanie motorov vyžadujú pre rýchlosť ako parameter kladné číslo.

V budúcom pokračovaní ukážeme ako pomocou joysticku ovládať robota s viacerými funkciami. Napríklad pohyb lyžicce bagra hore a dole 

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Mikrokontroléry

IoT prakticky: Python na ESP32, vývojové dosky, inštalácia Micropythonu

17.10.2019 00:10

Po experimentoch s populárnou „školskou“ mikropočítačovou doskou BBC Micro:bit pre tých, ktorých táto problematika oslovila a chcú sa jej venovať ako hobby, skôr, či neskôr nastane moment, kedy si pol ...

Mikrokontroléry

Robotika – robot s kolesami Mecanum sa môže pohybovať všetkými smermi

15.10.2019 00:10

V našom dlhodobom seriáli venovanom robotickým konštrukciám a podvozkom sme dosiaľ predstavili dva spôsoby manévrovania robotických podvozkov. Robotické podvozky ktoré majú dve samostatne poháňané kol ...

Mikrokontroléry

Robotika: Robotický podvozok Cutebot s Microbitom vhodný aj pre začiatočníkov

07.10.2019 00:01

Prvé, čo vás na tomto robotickom podvozku prekvapí je rýchlosť jeho pohybu, ktorou prekonáva väčšinu robotov, ktoré sme dosiaľ predstavili v našom seriáli. Rýchlosť na jednej strane znamená, že v príp ...

Žiadne komentáre

Vyhľadávanie

Brother_300x600

Najnovšie videá

SlovakiaTech 2019
MANDAYIT 2019