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čiakP8
aP12
– štyri RGB LED diódyP16
– 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čiakP1
aP2
– snímač vzdialenostiP8
aP12
– štyri RGB LED diódyP16
– 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.
