Tretí spôsob ovládania robota KitiBot 2WD

Pozdravujem prívržencov robotiky a programovania, ktorí sú zvedaví na ovládanie robota KitiBot 2WD infračerveným (skratka IR) diaľkovým ovládačom. Podaril sa mi vynájsť ‚hack‘, ktorý mi umožnil pripojenie IR prijímača, s ktorým nepočítal ani výrobca. Ak vám pojem krimpovanie konektorov nie je cudzí, tak tento článok je pre vás ako stvorený. Nie je to nič komplikované, takže to vládne aj začiatočník. Pre úplnosť ešte uvádzam, že zmienený robot riadi výučbový mikropočítač micro:bit a ako zdroj energie mu slúži jedna batéria typu 18650.

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, APA102OSOYOO_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.

Doporučené příslušenství

Leave a Reply