SAMSUNG_022024A Advertisement SAMSUNG_022024A Advertisement SAMSUNG_022024A Advertisement

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

Mikrokontroléry
0

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ípadných pretekoch robotov pri sledovaní čiary, alebo pri úniku z labyrintu veľmi pravdepodobne zvíťazíte, avšak rýchlosť pohybu je zároveň aj výzvou pre programovanie, aby robot predpísaný úkon zvládol čo najrýchlejšie, no aby nevybočil z dráhy, nespadol zo stola a podobne. Samozrejme Cutebot sa v prípade potreby dokáže pohybovať aj pomaly.

Možnosti robotického podvozku Cutebot ukazuje video

Robotický podvozok tvorí plošný spoj, kde je integrované všetko potrebné. Vďaka jednoduchej konštrukcii je robotický podvozok pripravený k experimentovaniu za pár minút.  Stačí do slotu zasunúť mikropočítačovú dosku BBC Micro:bit a vložiť batérie do držiaku.  Na doske sú pripevnené aj motory, ktoré poháňajú dva zadné kolesá. Motory 300RPM sú vybavené kovovou prevodovkou, takže by mali niečo vydržať. V hornej časti sú dva RGB LED svetlomety a nechýba mu ani efektné osvetlenie podvozku s RGB LED Neopixel, takže ešte skôr než sa robot pohne môžete sa naučiť programovať tieto dva efektne svietiace komponenty. Pomocou bzučiaka dokáže Cutebot aj trúbiť. Vďaka dvojici infračervených senzorov v spodnej časti vie tento robotický podvozok jazdiť po čiare a s využitím ultrazvukového snímača vzdialenosti v prednej časti sa dokáže vyhýbať prekážkam. Môžete ho tiež ovládať ďalším microbitom, či už priamo naklápaním, alebo umiestnením ovládacieho microbitu do modulu  joysticku. V balení nájdete aj plán s dráhou na testovanie jazdy po čiare. Plán má rozmery 47 x 36 cm.

Základná doska podvozku umožňuje pripojenie ďalších elektronických modulov využívajúcich trojvodičové pripojenie GVS, alebo zbernicu I2C, takže s vhodnými modulmi napríklad zo súpravy Smart Home Kit, alebo Grove for Microbit môžete vytvoriť napríklad projekt automatického zavlažovania kvetov, ovládanie osvetlenia, alebo iné zaujímavé veci. 

Pokiaľ programujete v prostredí MakeCode, je potrebné doinštalovať rozširujúci balíček Cutebot, ktorý obsahuje funkcie na ovládanie hardvéru robotického vozidla. Súčasťou rozširujúceho balíka je aj knižnica pre RGB LED diódy Neopixel.

Pre programovanie mimo prostredia MakeCode, napríklad v Pythone je potrebné poznať ktoré porty ovládajú aké hardvérové komponenty, prípadne na ktoré konektory sú vyvedené. 

  • Bzučiak je pripojený na porte P0
  • Predné IR diódy na sledovanie čiary sú na portoch P13 a P14. V hornej časti sú na rovnakých portoch vyvedené miniatúrne LED diódy
  • RGB LED diódy Neopixel sú na porte P15
  • Zadná IR dióda je na porte P16
  • Konektor I2C na pripojenie ultrazvukového snímača vzdialenosti HC-SR04 využíva porty P19 a P20. Tie isté porty sú privedené aj na I2C konektor v zadnej časti batériového modulu.
  • Porty P1 a P2 sú vyvedené na GVS konektory v. zadnej časti plošného spoja.

Ako prvý príklad skúsime nechať robotický podvozok po zatlačení tlačidla A ísť pol sekundy (500 ms) dopredu a následne pol sekundy dozadu. Uvidíte, že v porovnaní s ostatnými robotmi predstavenými v tomto seriáli sa pohybuje oveľa rýchlejšie. 

input.onButtonPressed(Button.A, function () {
    cuteBot.forward()
    basic.pause(500)
    cuteBot.back()
    basic.pause(500)
    cuteBot.motors(0, 0)
})
basic.showIcon(IconNames.Heart)

V ďalšom príklade robot opíše osmičku. Aj v tomto prípade mu treba nechať dostatočný priestor, najlepšie na podlahe, prípadne na dostatočne veľkom stole so zábranami aby z neho nespadol

basic.showIcon(IconNames.Asleep)
basic.pause(1000)
basic.showIcon(IconNames.Happy)
basic.forever(function () {
    cuteBot.forward()
    basic.pause(200)
    cuteBot.motors(100, 40)
    basic.pause(1000)
    cuteBot.forward()
    basic.pause(200)
    cuteBot.forward()
    basic.pause(200)
    cuteBot.motors(40, 100)
    basic.pause(1000)
    cuteBot.forward()
    basic.pause(200)
})

 

V nasledujúcom príklade ukážeme automatické rozsvietenie svetiel pri nízkej úrovni okolitého svetla. Nakoľko intenzita osvetlenia sa meria LED diódami tvoriacimi maticový displej, musí byť displej odkrytý, takže ultrazvukový senzor na meranie vzdialenosti, ktorý v tomto príklade nemá žiadnu funkciu je potrebné odobrať. 

basic.forever(function () {
    if (input.lightLevel() < 10) {
        cuteBot.rgblight(cuteBot.RGBLights.RGB_R, 255, 255, 255)
        cuteBot.rgblight(cuteBot.RGBLights.RGB_L, 255, 255, 255)
    } else {
        cuteBot.rgblight(cuteBot.RGBLights.RGB_R, 0, 0, 0)
        cuteBot.rgblight(cuteBot.RGBLights.RGB_L, 0, 0, 0)
    }
})

V ďalšom príklade využijeme infračervené senzory na spodnej strane podvozku v prednej časti, ktoré sú primárne určené na sledovanie čiary. Dajú sa však použiť aj na detekciu hrany stola, aby robot z neho nespadol. Ak sa čidlo dostane nad hranu stola, robot rýchlo cúvne, náhodne zmení smer a znovu sa začne pohybovať pomaly dopredu, až kým sa senzory znovu nedostanú nad hranu stola

basic.forever(function () {
    if (!(cuteBot.tracking(cuteBot.TrackingState.L_R_line))) {
        cuteBot.motors(20, 20)
    } else {
        cuteBot.motors(-50, -50)
        basic.pause(300)
        cuteBot.motors(0, Math.randomRange(50, 100))
        basic.pause(100)
        cuteBot.motors(0, 0)
        basic.pause(1000)
    }
})

Podobne jednoduchý je aj algoritmus na sledovanie čiernej čiary na svetlom podklade. Pokiaľ ľavý, alebo pravý senzor vybočí z čiernej čiary na bielu plochu, podvozok zmení smer tak, aby sa vrátil nad čiaru. 

basic.forever(function () {
    if (cuteBot.tracking(cuteBot.TrackingState.L_unline_R_line)) {
        cuteBot.motors(50, 25)
    }
    if (cuteBot.tracking(cuteBot.TrackingState.L_line_R_unline)) {
        cuteBot.motors(25, 50)
    }
    if (cuteBot.tracking(cuteBot.TrackingState.L_R_line)) {
        cuteBot.motors(50, 50)
    }
})

 

V ďalšom príklade bude robotický podvozok využívať ultrazvukový senzor, aby detegoval prekážku a vyhol sa jej. Pre tento príklad treba do konektoru v prednej časti podvozku zasunúť ultrazvukový senzor HC-SR04 

let sonar = 0
cuteBot.forward()
basic.forever(function () {
    sonar = cuteBot.ultrasonic(cuteBot.SonarUnit.Centimeters)
    if (sonar < 20 == sonar > 1) {
        cuteBot.motors(0, -50)
        basic.pause(Math.randomRange(100, 200))
    } else {
        cuteBot.forward()
    }
})

 

Modifikáciou príkladu získate robota, ktorý sa bude pohybovať tak, aby bol v konštantnej vzdialenosti od vašej ruky

let sonar = 0
cuteBot.motors(30, 30)
basic.forever(function () {
    sonar = cuteBot.ultrasonic(cuteBot.SonarUnit.Centimeters)
    if (sonar > 5 && sonar < 10) {
        cuteBot.motors(0, 0)
    } else if (sonar < 5) {
        cuteBot.motors(-30, -30)
    } else {
        cuteBot.motors(30, 30)
    }
})

Robotický podvozok môžete ovládať pomocou druhého Micro:bitu, ktorý rádiovo komunikuje s Micro:bitom v podvozku. Najjednoduchší variant je použiť tlačidlá A a B na zmenu smeru a súčasné stlačenie tlačidiel A+B na rozbeh a pri ďalšom stlačení A+B na zastavenie robota. Sofistikovanejším variantom je ovládať Cutebot nakláňaním Micro:bitu v ruke. Najpohodlnejšie sa vám bude robotický podvozok ovládať, ak použijete modul typu joystick. V našom prípade použijeme modul Joystick:bit, ktorý má ovládač pre pohyb v osiach X a Y a 6 tlačidiel.

Kvôli prehľadnosti kódu budeme snímať len polohu páčky, pretože pre najjednoduchšie ovládania tlačidlá nevyužijeme. Na výstupe analógovo digitálnych prevodníkov na portoch P0 a P1 sú v závislosti od polohy páčky hodnoty od 0 do 1023. Tieto hodnoty pretransformujeme na interval hodnôt -100 až 100, aby sa hodnoty prijaté z joysticku dali priamo použiť na ovládanie rýchlosti motorov.

let y = 0
let x = 0
radio.setGroup(1)
basic.forever(function () {
    x = Math.map(pins.analogReadPin(AnalogPin.P0), 1023, 0, -100, 100)
    y = Math.map(pins.analogReadPin(AnalogPin.P1), 1023, 0, -100, 100)
    radio.sendValue("x", x)
    basic.pause(100)
    radio.sendValue("y", y)
    basic.pause(100)
})

Kód pre Micro:bit v robotickom podvozku. 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

radio.onReceivedValue(function (name, value) {
    if (name == "x") {
        xValue = value
    }
    if (name == "y") {
        yValue = value
    }
})
let yValue = 0
let xValue = 0
radio.setGroup(1)
basic.forever(function () {
    cuteBot.motors(yValue + xValue, yValue - xValue)
})

Rýchlosť pohybu a snímač vzdialenosti predurčuje tohoto robota na aktivity typu preteky,  súboj robotov, či robotický futbal. 

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
MicroBit BBC micro:bit Cutebot elecfreaks robotika programovanie informatika

Pridať komentár