Robot KitiBot 2WD sa učí používať snímače

Znovu zdravím priaznivcov robotiky a programovania, ktorých zaujal môj predošlý článok o mačacom (podobnosť s Kitty) robote KitiBot 2WD, ktorý je riadený výučbovým mikropočítačom micro:bit. Určite ste zvedaví na to, ako naučím tento robot sledovať čiaru a vyhýbať sa prekážkam. Aby som uviedol veci na správnu mieru, používam vylepšený robot podľa minulého článku a pod slovom ‚naučím‘ myslím ‚naprogramujem‘. Zase som programoval v platforme Microsoft MakeCode s využitím aj rozširujúcich Blokov KitiBot a APA102. Nestrácajme teda čas a hneď prejdime k prvému programu.

KitiBot 2WD a sledovanie čiary

Robot disponuje nadštandardným počtom piatich snímačov čiary, lebo bežne postačujú len dva. Podľa môjho názoru to zbytočne komplikuje programovanie, pretože pohyb uvedeného robota určuje výsledná hodnota nameraná za pomoci všetkých snímačov čiary. Okrem toho, program taktiež musí zohľadňovať nasledovný ‚layout‘ pinov mikropočítača micro:bit:

  • P0 – bzučiak
  • P8 P12 – štyri RGB LED diódy
  • P16 – servomotor

Na testovanie programu sledovania čiary som si musel vytvoriť väčšiu dráhu, ktorá zodpovedala veľkosti dráhy kolesa robota opísanej pri zatáčaní. Stačí vychádzať z pravidla, čím väčší rádius opisuje koleso pri otáčaní, tým väčšiu dráhu robot potrebuje. Nesprávna veľkosť dráhy sa prejaví tým, že pri vybočení sa robot nestihne vrátiť na dráhu alebo väčšinu času sa pohybuje mimo dráhy. Finálnu verziu môjho programu som bez problémov otestoval na novej (väčšej) dráhe:

Program JavaScript – sledovanie čiary

let dif = 0
let last_P = 0
let D = 0
let P = 0
basic.showLeds(`
    # . # . #
    # . # # .
    # # # . .
    # . # # .
    # . # . #
    `)
let strip = APA102.createStrip(4, PixelMode.RGB)
strip.setBrightness(1)
strip.setPixelColor(0, APA102.colors(PixelColors.Purple))
strip.show()
music.playTone(262, music.beat(BeatFraction.Half))
strip.setPixelColor(1, APA102.colors(PixelColors.Yellow))
strip.show()
music.playTone(330, music.beat(BeatFraction.Half))
strip.setPixelColor(2, APA102.colors(PixelColors.Green))
strip.show()
music.playTone(392, music.beat(BeatFraction.Half))
strip.setPixelColor(3, APA102.colors(PixelColors.Blue))
strip.show()
music.playTone(494, music.beat(BeatFraction.Half))
strip.clear()
strip.show()
KitiBot.Servo(0)
basic.pause(200)
KitiBot.Servo(90)
basic.pause(200)
KitiBot.Servo(180)
basic.pause(200)
KitiBot.Servo(90)
KitiBot.Run(Dir.stop, 0)
basic.pause(500)
basic.forever(function () {
    P = KitiBot.readLine() - 2000
    D = P - last_P
    last_P = P
    dif = Math.idiv(P, 20) + Math.idiv(D, 5)
    dif = Math.max(dif, -70)
    dif = Math.min(dif, 70)
    if (dif > 0) {
        KitiBot.MotorRun(Motors.M1, 70)
        KitiBot.MotorRun(Motors.M2, 70 - dif)
        strip.clear()
        strip.setPixelColor(0, APA102.colors(PixelColors.Orange))
        strip.show()
    } else {
        KitiBot.MotorRun(Motors.M1, 70 + dif)
        KitiBot.MotorRun(Motors.M2, 70)
        strip.clear()
        strip.setPixelColor(3, APA102.colors(PixelColors.Orange))
        strip.show()
    }
})

Program MakeCode – sledovanie čiary

Video – sledovanie čiary

KitiBot 2WD a vyhýbanie sa prekážkam

Robot KitiBot 2WD používa na vyhýbanie sa prekážkam snímač vzdialenosti HC-SR04, ktorý som umiestnil tak, aby plnohodnotne detegoval aj nižšie prekážky s ktorými výrobca robota nepočítal.

Pri samotnom programovaní som mal na zreteli tento ‚layout‘ pinov mikropočítača micro:bit:

  • P0 – bzučiak
  • P1 a P2 – snímač vzdialenosti
  • P8 P12 – štyri RGB LED diódy
  • P16 – servomotor

Testovanie programu prebiehalo bez komplikácií a preto som sa ľahko dopracoval k jeho finálnej verzii:

Program JavaScript – vyhýbanie sa prekážkam

let sonar = 0
basic.showLeds(`
    # . # . #
    # . # # .
    # # # . .
    # . # # .
    # . # . #
    `)
let strip = APA102.createStrip(4, PixelMode.RGB)
strip.setBrightness(1)
strip.setPixelColor(0, APA102.colors(PixelColors.Blue))
strip.show()
music.playTone(494, music.beat(BeatFraction.Half))
strip.setPixelColor(1, APA102.colors(PixelColors.Green))
strip.show()
music.playTone(392, music.beat(BeatFraction.Half))
strip.setPixelColor(2, APA102.colors(PixelColors.Yellow))
strip.show()
music.playTone(330, music.beat(BeatFraction.Half))
strip.setPixelColor(3, APA102.colors(PixelColors.Purple))
strip.show()
music.playTone(262, music.beat(BeatFraction.Half))
KitiBot.Servo(0)
basic.pause(200)
KitiBot.Servo(90)
basic.pause(200)
KitiBot.Servo(180)
basic.pause(200)
KitiBot.Servo(90)
KitiBot.Run(Dir.stop, 0)
basic.pause(200)
basic.forever(function () {
    sonar = KitiBot.Ultrasonic()
    if (sonar < 5 && sonar >= 0) {
        strip.clear()
        strip.setPixelColor(0, APA102.colors(PixelColors.Red))
        strip.setPixelColor(3, APA102.colors(PixelColors.Red))
        strip.show()
        KitiBot.Run(Dir.backward, 70)
        music.playTone(262, music.beat(BeatFraction.Half))
        basic.pause(100)
    } else if (sonar < 10 && sonar >= 5) {
        strip.clear()
        strip.setPixelColor(3, APA102.colors(PixelColors.Orange))
        strip.show()
        KitiBot.Run(Dir.turnLeft, 70)
        music.playTone(349, music.beat(BeatFraction.Whole))
    } else {
        strip.clear()
        strip.setPixelColor(0, APA102.colors(PixelColors.Purple))
        strip.setPixelColor(1, APA102.colors(PixelColors.Yellow))
        strip.setPixelColor(2, APA102.colors(PixelColors.Green))
        strip.setPixelColor(3, APA102.colors(PixelColors.Blue))
        strip.show()
        KitiBot.Run(Dir.forward, 70)
    }
})

Program MakeCode – vyhýbanie sa prekážkam

Video – vyhýbanie sa prekážkam

Záver

Na záver ďakujem, že ste si našli čas na prečítanie môjho článku. Verím, že opísané programy si vyskúšate aj v praxi.

V budúcom článku vám pomôžem diaľkovo ovládať robot KitiBot 2WD, a tým vám umožním zapojiť sa do hry.

E-shop

Waveshare KitiBot 2WD kit pro BBC micro:bit

Sestavte si vlastního robota řízeného BBC micro:bitem.

BBC Micro:bit

Nekonečně programovatelný a rozšiřitelný vzdělávací počítač do kapsy.

Doporučené příslušenství

Podobné příspěvky

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *