Robot KitiBot 2WD sa učí používať snímače
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.