Diaľkovo ovládaný robot AlphaBot2

Zdravím nadšencov robotiky a programovania, ktorí majú doma robot AlphaBot2 riadený výučbovým mikropočítačom micro:bit a radi by ho ovládali diaľkovo.

Možnosti diaľkového ovládania

Výrobca tohto robota počíta len s dvomi možnosťami ovládania:

  1. rádiovou komunikáciou dvoch mikropočítačov
  2. technológiou Bluetooth mikropočítača

Prijímač HX1838 infračerveného (skratka IR) diaľkového ovládača sa bohužiaľ nedá pripojiť, lebo piny P8 a P16 spomínaného mikropočítača sú trvalo obsadené integrovanými komponentmi (RGB LED diódy a IR snímač vyhýbania sa prekážkam), čiže uvedený robot nie je možné ovládať týmto spôsobom.

Prejdem teda rovno k prvej možnosti ovládania, pričom som si na pomoc zobral špeciálny joystick Yahboom.

1. rádiovou komunikáciou dvoch mikropočítačov

Základom rádiovej komunikácie dvoch mikropočítačov micro:bit je princíp vysielača a prijímača. Vysielač vysiela rádiové signály, a to priamo pri manipulácii s ním alebo v tomto prípade za pomoci joysticku Yahboom. Prijímač zase prijíma rádiové signály, na základe ktorých riadi v tomto prípade robot AlphaBot2.

Joystick Yahboom je ľahko programovateľný ovládač (obsahujúci aj vibračný motorček a bzučiak) so širokým repertoárom programov a hier poskytnutých jeho výrobcom, preto jeho kúpu považujem za zmysluplné vynaloženie finančných prostriedkov.

Rozhodol som sa rádiovo ovládať pohyb, štyri RGB LED diódy (P8) a bzučiak (P0) spomenutého robota. Programovanie prebiehalo v platforme Microsoft MakeCode s použitím štandardných aj rozširujúcich Blokov Radio, AlphaBot2Neopixel a GHBit.

Pre lepšiu predstavu ešte uvádzam ‚layout‘ signálov vysielaných mikropočítačom micro:bit osadeného v joysticku Yahboom:

  • páka vľavo – otočenie vľavo
  • páka vpravo – otočenie vpravo
  • páka hore – pohyb dopredu
  • páka dole – pohyb dozadu
  • tlačidlo B1 – rotácia farieb zapnutých RGB LED diód
  • tlačidlo B2 – postupné zapnutie RGB LED diód
  • tlačidlo B3 – prehranie melódie, zobrazenie teploty a obrázku na displeji mikropočítača
  • tlačidlo B4 – postupné vypnutie RGB LED diód

Testovanie prebiehalo bez komplikácií, čo mi umožnilo sa rýchlo dopracovať k finálnej verzii programu vysielača:

Program JavaScript – vysielač

let dif 
led.setBrightness(4)
basic.showLeds(`
    . # # # .
    # . # . #
    # # # # .
    # . # . #
    # . # # .
    `)
radio.setGroup(2)
basic.forever(function () {
    if (GHBit.Rocker(GHBit.enRocker.Up)) {
        radio.sendNumber(1)
    } else if (GHBit.Rocker(GHBit.enRocker.Down)) {
        radio.sendNumber(2)
    } else if (GHBit.Rocker(GHBit.enRocker.Left)) {
        radio.sendNumber(3)
    } else if (GHBit.Rocker(GHBit.enRocker.Right)) {
        radio.sendNumber(4)
    } else if (GHBit.Button(GHBit.enButton.B2, GHBit.enButtonState.Press)) {
        radio.sendNumber(5)
        basic.pause(200)
    } else if (GHBit.Button(GHBit.enButton.B1, GHBit.enButtonState.Press)) {
        radio.sendNumber(6)
        basic.pause(200)
    } else if (GHBit.Button(GHBit.enButton.B4, GHBit.enButtonState.Press)) {
        radio.sendNumber(7)
        basic.pause(200)
    } else if (GHBit.Button(GHBit.enButton.B3, GHBit.enButtonState.Press)) {
        radio.sendNumber(8)
        basic.pause(200)
    } else {
        radio.sendNumber(0)
    }
})

Program MakeCode – vysielač

Program JavaScript – prijímač

Taktiež finálnu verziu programu prijímača som bezproblémovo otestoval:

radio.onReceivedNumber(function (receivedNumber) {
    if (receivedNumber == 1) {
        AlphaBot2.Run(Dir.forward, 40)
    } else if (receivedNumber == 2) {
        AlphaBot2.Run(Dir.backward, 40)
    } else if (receivedNumber == 3) {
        AlphaBot2.Run(Dir.turnLeft, 40)
    } else if (receivedNumber == 4) {
        AlphaBot2.Run(Dir.turnRight, 40)
    } else if (receivedNumber == 5) {
        strip.setPixelColor(0, neopixel.colors(NeoPixelColors.Blue))
        strip.show()
        basic.pause(300)
        strip.setPixelColor(1, neopixel.colors(NeoPixelColors.Green))
        strip.show()
        basic.pause(300)
        strip.setPixelColor(2, neopixel.colors(NeoPixelColors.Yellow))
        strip.show()
        basic.pause(300)
        strip.setPixelColor(3, neopixel.colors(NeoPixelColors.Red))
        strip.show()
    } else if (receivedNumber == 6) {
        for (let index = 0; index < 4; index++) {
            strip.rotate(1)
            strip.show()
            basic.pause(300)
        }
    } else if (receivedNumber == 7) {
        for (let index = 0; index < 4; index++) {
            strip.shift(1)
            strip.show()
            basic.pause(300)
        }
    } else if (receivedNumber == 8) {
        music.beginMelody(music.builtInMelody(Melodies.JumpDown), MelodyOptions.Once)
        basic.clearScreen()
        basic.showNumber(input.temperature())
        basic.clearScreen()
        basic.showLeds(`
            . # # # .
            # . # . #
            # # # # .
            # . # . #
            # . # # .
            `)
    } else if (receivedNumber == 0) {
        AlphaBot2.Run(Dir.stop, 0)
    }
})
let strip: neopixel.Strip = null
led.setBrightness(4)
basic.showLeds(`
    . # # # .
    # . # . #
    # # # # .
    # . # . #
    # . # # .
    `)
music.beginMelody(music.builtInMelody(Melodies.JumpUp), MelodyOptions.Once)
strip = neopixel.create(DigitalPin.P8, 4, NeoPixelMode.RGB)
strip.setBrightness(4)
strip.setPixelColor(0, neopixel.colors(NeoPixelColors.Red))
strip.show()
basic.pause(500)
strip.setPixelColor(1, neopixel.colors(NeoPixelColors.Yellow))
strip.show()
basic.pause(500)
strip.setPixelColor(2, neopixel.colors(NeoPixelColors.Green))
strip.show()
basic.pause(500)
strip.setPixelColor(3, neopixel.colors(NeoPixelColors.Blue))
strip.show()
radio.setGroup(2)

Program MakeCode – prijímač

Video

2. technológiou Bluetooth mikropočítača

Pre ovládanie robota AlphaBot2 technológiou Bluetooth mikropočítača micro:bit som si nainštaloval do mobilného telefónu (vyrobený firmou Samsung) Android aplikáciu micro:bit Blue sprístupnenú výrobcom uvedeného robota. Následne som sa snažil v platforme Microsoft MakeCode vytvoriť program za využitia rozširujúcich Blokov Blockytalky, AlphaBot2Neopixel. Po kliknutí na jednotlivé názvy týchto Blokov získate odkazy, ktoré je nevyhnutné použiť pri vkladaní rozšírení do programovacej platformy, lebo inak na ovládanie RGB LED diód nebude možné využiť technológiu Bluetooth.

Aplikácia micro:bit Blue disponuje až ôsmimi tlačidlami a preto by nemal byť problém ovládať nielen pohyb, ale aj štyri RGB LED diódy (P8) a bzučiak (P0) spomenutého robota. Vychádzajúc z tejto predstavy som navrhol nasledovný ‚layout‘ tlačidiel aplikácie:

  • Button A – pohyb dopredu
  • Button B – pohyb dozadu
  • Button C – otočenie vľavo
  • Button D – otočenie vpravo
  • Button 1 – rotácia farieb zapnutých RGB LED diód
  • Button 2 – zapnutie RGB LED diód
  • Button 3 – postupné vypnutie RGB LED diód
  • Button 4 – prehranie melódie

Vytvorený program som otestoval, a tým som získal jeho finálnu verziu:

Program JavaScript

control.onEvent(EventBusSource.MES_DPAD_CONTROLLER_ID, EventBusValue.MICROBIT_EVT_ANY, function () {
    if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_A_DOWN) {
        AlphaBot2.Run(Dir.forward, 35)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_A_UP) {
        AlphaBot2.Run(Dir.stop, 0)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_B_DOWN) {
        AlphaBot2.Run(Dir.backward, 35)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_B_UP) {
        AlphaBot2.Run(Dir.stop, 0)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_C_DOWN) {
        AlphaBot2.Run(Dir.turnLeft, 40)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_C_UP) {
        AlphaBot2.Run(Dir.stop, 0)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_D_DOWN) {
        AlphaBot2.Run(Dir.turnRight, 40)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_D_UP) {
        AlphaBot2.Run(Dir.stop, 0)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_1_DOWN) {
        for (let index = 0; index < 2; index++) {
            strip.rotate(1)
            strip.show()
            basic.pause(500)
        }
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_2_DOWN) {
        strip.setPixelColor(0, neopixel.colors(NeoPixelColors.Blue))
        strip.setPixelColor(1, neopixel.colors(NeoPixelColors.Green))
        strip.setPixelColor(2, neopixel.colors(NeoPixelColors.Yellow))
        strip.setPixelColor(3, neopixel.colors(NeoPixelColors.Red))
        strip.show()
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_3_DOWN) {
        for (let index = 0; index < 2; index++) {
            strip.shift(1)
            strip.show()
            basic.pause(500)
        }
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_4_DOWN) {
        music.beginMelody(music.builtInMelody(Melodies.BaDing), MelodyOptions.Once)
    }
})
bluetooth.onBluetoothConnected(function () {
    music.beginMelody(music.builtInMelody(Melodies.PowerUp), MelodyOptions.Once)
    basic.showString("C")
    basic.clearScreen()
})
bluetooth.onBluetoothDisconnected(function () {
    music.beginMelody(music.builtInMelody(Melodies.PowerDown), MelodyOptions.Once)
    basic.showString("D")
    basic.clearScreen()
    strip.clear()
    strip.show()
})
let strip: neopixel.Strip = null
led.setBrightness(4)
basic.showLeds(`
    . # # # .
    # . # . #
    # # # # .
    # . # . #
    # . # # .
    `)
strip = neopixel.create(DigitalPin.P8, 4, NeoPixelMode.RGB)
strip.setBrightness(4)
strip.setPixelColor(0, neopixel.colors(NeoPixelColors.Red))
strip.setPixelColor(1, neopixel.colors(NeoPixelColors.Yellow))
strip.setPixelColor(2, neopixel.colors(NeoPixelColors.Green))
strip.setPixelColor(3, neopixel.colors(NeoPixelColors.Blue))
strip.show()

Program MakeCode

Video

Záver

Patrí vám vďaka za prečítanie môjho článku, lebo už tu máme záver. Opísané programy vám umožnia využiť robot AlphaBot2 v praxi pri pretekoch alebo futbale robotov. Predstavivosti sa medze nekladú, takže stačí len zohnať ďalšieho kamaráta s robotom a hra môže začať.

E-shop

E-shop

Waveshare AlphaBot2 pro BBC micro:bit

Sestavte si robota AlphaBot2 pro BBC micro:bit.

BBC Micro:bit

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

Yahboom Gamepad a dálkový ovladač pro BBC micro:bit

Ovladač s integrovaným joystickem, tlačítkem, bzučákem, vibračním motorem a dalšími moduly.

Doporučené příslušenství

Napsat komentář