Tretí spôsob ovládania robota KitiBot 2WD
KitiBot 2WD a IR diaľkový ovládač
Na ovládanie robota KitiBot 2WD som použil IR diaľkový ovládač s prijímačom HX1838, ktorý je cenovo nenáročný a je napájaný batériou CR2025, ktorú si treba dokúpiť. Samotný ‚hack‘ spočíva v pripojení spomenutého prijímača k robotu KitiBot namiesto servomotora. Postupoval som tak, že kábel servomotora som v polovici prestrihol a na novovzniknuté konce som nakrimpoval dva konektory NSG 25-3. Takto mi vznikol servomotor s konektorom NSG a kábel s pôvodným konektorom JST a novým konektorom NSG. Nič mi už nestálo v ceste k pripojeniu uvedeného prijímača k doske plošných spojov tohto robota. Prijímač som ešte priskrutkoval k robotu s využitím jedného kruhového otvoru so závitom pri servomotore.
Dopracoval som sa tak k možnosti IR diaľkovým ovládačom ovládať nasledovnú výbavu robota KitiBot 2WD:
- dva elektromotory
- bzučiak (pin P0)
- snímač vzdialenosti (piny P1 a P2)
- snímače čiary
- štyri RGB LED diódy (piny P8 a P12)
Na programovanie som použil platformu Microsoft MakeCode rozšírenú o Bloky KitiBot, APA102 a OSOYOO_IR. Zmysluplne som zvolil ‚layout‘ tlačidiel opísaného diaľkového ovládača, ktoré je prekvapením, aby som vás motivoval k vyskúšaniu programu v praxi.
Postupne som naprogramoval a otestoval všetky tlačidlá IR diaľkového ovládača, až som sa dopracoval k finálnej verzii programu:
Program JavaScript – IR diaľkový ovládač
OSOYOO_IR.onPressEvent(RemoteButton.CH_MINUS, function () {
basic.clearScreen()
basic.showNumber(input.lightLevel())
basic.showLeds(`
# . . . .
# . . . .
# . # . #
# . . # .
# # # . #
`)
basic.clearScreen()
})
OSOYOO_IR.onPressEvent(RemoteButton.CH, function () {
basic.clearScreen()
basic.showNumber(input.temperature())
basic.showLeds(`
# . . # #
. . # . .
. . # . .
. . # . .
. . . # #
`)
basic.clearScreen()
})
OSOYOO_IR.onPressEvent(RemoteButton.CH_Add, function () {
music.playTone(262, music.beat(BeatFraction.Half))
music.playTone(330, music.beat(BeatFraction.Half))
music.playTone(392, music.beat(BeatFraction.Half))
music.playTone(494, music.beat(BeatFraction.Half))
})
OSOYOO_IR.onPressEvent(RemoteButton.NEXT, function () {
basic.clearScreen()
basic.showNumber(Math.round(KitiBot.readLine()))
basic.clearScreen()
})
OSOYOO_IR.onPressEvent(RemoteButton.PREV, function () {
basic.clearScreen()
basic.showNumber(Math.round(KitiBot.Ultrasonic()))
basic.clearScreen()
})
OSOYOO_IR.onPressEvent(RemoteButton.PLAY, function () {
music.playTone(494, music.beat(BeatFraction.Half))
music.playTone(392, music.beat(BeatFraction.Half))
music.playTone(330, music.beat(BeatFraction.Half))
music.playTone(262, music.beat(BeatFraction.Half))
})
OSOYOO_IR.onPressEvent(RemoteButton.Add, function () {
strip.setPixelColor(0, APA102.colors(PixelColors.Indigo))
strip.setPixelColor(1, APA102.colors(PixelColors.Orange))
strip.setPixelColor(2, APA102.colors(PixelColors.Cyan))
strip.setPixelColor(3, APA102.colors(PixelColors.White))
strip.show()
})
OSOYOO_IR.onPressEvent(RemoteButton.Minus, function () {
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()
})
OSOYOO_IR.onPressEvent(RemoteButton.EQ, function () {
strip.setPixelColor(0, APA102.colors(PixelColors.Blue))
strip.setPixelColor(1, APA102.colors(PixelColors.Green))
strip.setPixelColor(2, APA102.colors(PixelColors.Yellow))
strip.setPixelColor(3, APA102.colors(PixelColors.Purple))
strip.show()
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM_100, function () {
for (let index = 0; index < 4; index++) {
strip.rotate(1)
strip.show()
basic.pause(500)
}
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM0, function () {
for (let index = 0; index < 4; index++) {
strip.shift(1)
strip.show()
basic.pause(500)
}
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM_200, function () {
strip.clear()
strip.show()
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM2, function () {
front += 70
KitiBot.Run(Dir.forward, front)
basic.showArrow(ArrowNames.North)
back = 0
left = 0
right = 0
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM5, function () {
KitiBot.Run(Dir.stop, 0)
basic.showLeds(`
. . . . .
# . # # .
# . # . #
# . # # .
# . # . #
`)
front = 0
back = 0
left = 0
right = 0
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM4, function () {
left += 70
KitiBot.Run(Dir.turnLeft, left)
basic.showArrow(ArrowNames.East)
front = 0
back = 0
right = 0
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM6, function () {
right += 70
KitiBot.Run(Dir.turnRight, right)
basic.showArrow(ArrowNames.West)
front = 0
back = 0
left = 0
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM8, function () {
back += 70
KitiBot.Run(Dir.backward, back)
basic.showArrow(ArrowNames.South)
front = 0
left = 0
right = 0
})
let right = 0
let left = 0
let back = 0
let front = 0
let strip: APA102.Strip = null
basic.showLeds(`
. . . . .
# . # # .
# . # . #
# . # # .
# . # . #
`)
strip = APA102.createStrip(4, PixelMode.RGB)
strip.setBrightness(1)
front = 0
back = 0
left = 0
right = 0
OSOYOO_IR.init(Pins.P16)
Program MakeCode – IR diaľkový ovládač
Video
Záver
So záverom prichádza moje vyjadrenie, že som vďačný za prečítanie tohto článku, ktorý vám mal nielen rozšíriť obzor, ale aj ukázať nekonvenčný prístup k použitiu robota KitiBot 2WD v praxi.
V nasledujúcom článku sa budem venovať novému produktu, ale či robotovi alebo súprave, tak to bude ďalšie prekvapenie.
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.