Kráľovská doska Wukong

Milí priatelia robotiky, hľadajúci impozantnú rozširujúcu dosku pre svoje projekty, s výučbovým mikropočítačom micro:bit! Hľadanie je na konci, pretože dnes sa oboznámite s rozširujúcou doskou Wukong.

Samotný názov tejto dosky vystihuje jej nadradenosť nad ostatnými, nakoľko nesie meno hlavnej postavy – opičieho kráľa Sun Wukonga z čínskeho mytologického románu.

Hardvér dosky Wukong

Hardvérová stránka rozširujúcej dosky Wukong je unikátna pre svoje bohaté rozširujúce rozhranie, kompatibilitu so stavebnicami LEGO Technic a rýchlonabíjateľnú batériu.

Balenie uvedenej dosky pozostáva z:

  • rozširujúcej dosky Wukong
  • akumulátora BBR 802035 (3,7V 400mAh)
  • technického dielika LEGO – rám nosníka 5×7 (64179)

Na vrchnej strane zmienenej dosky sa nachádzajú:

  • 1. vypínač
  • 2. indikátor stavu batérie (štyri kontrolné LED diódy)
  • 3. nabíjací konektor micro USB
  • 4. dva konektory na pripojenie motorov
  • 5. osem konektorov na pripojenie servomotorov
  • 6. tri konektory s napätím 5V
  • 7. osem konektorov GVS
  • 8. port pre mikropočítač micro:bit
  • 9. štyri RGB LED diódy
  • 10. vypínač bzučiaku

Spodná strana opísanej dosky obsahuje:

  • 11. bzučiak
  • 12. konektor batérie
  • 13. osem modrých LED diód
  • 14. štyri dištančné stĺpiky s vnútorným závitom M3

Softvér dosky Wukong

Softvérovú stránku rozširujúcej dosky Wukong zabezpečuje jej riadiaca jednotka v podobe mikropočítača micro:bit, ktorý sa dá ľahko naprogramovať pomocou bezplatnej platformy Microsoft MakeCode. Spomenutú platformu je potrebné rozšíriť o Blok Wukong, aby bolo možné využiť všetky vymoženosti tejto dosky.

Samotná doska je primontovaná na technický dielik (rám nosníka 5×7), do ktorého je rozumne umiestnená batéria. Prevádzkový čas batérie je okolo 40 minút, avšak závisí od náročnosti projektu a počtu pripojených servomotorov alebo snímačov. Výhodou je rýchle nabitie batérie (cca 20 minút), pričom batéria je vybavená bezpečnostnými prvkami proti prebitiu a skratu.

Ako riadiacu jednotku tejto dosky je možné použiť akúkoľvek verziu mikropočítača micro:bit, aktuálne sú to verzie V1 a V2.

Pred začatím programovania je vhodné poznať základný ‚layout‘ zapojených pinov uvedenej dosky:

  • P0 – bzučiak
  • P16 – štyri RGB LED diódy

Ukážkový program dosky Wukong

Následné vytvorenie programu je len vecou fantázie a logického myslenia, nakoľko platforma Microsoft MakeCode je užívateľsky prívetivá pre začiatočníkov v rôznom veku.

Rozhodol som sa na účely prezentácie potenciálu rozširujúcej dosky Wukong vytvoriť jedinečný program využívajúci technológiu Bluetooth jej riadiaceho mikropočítača prostredníctvom neplatenej Android aplikácie micro:bit Blue. Pred použitím tejto aplikácie treba spárovať mikropočítač s mobilným telefónom, zakázať jej aktualizácie a zapnúť Bluetooth a GPS.

Pred programovaním som sa nezaobišiel bez nahratia rozširujúcich Blokov Wukong, Neopixel a Blockytalky do zmienenej platformy, pomocou ktorých som sa mohol dopracovať k finálnej verzii programu:

Program JavaScript

bluetooth.onBluetoothConnected(function () {
    count = 0
    countA = 0
    countB = 0
    basic.clearScreen()
    basic.showLeds(`
        . . # # .
        # . # . #
        . # # # .
        # . # . #
        . . # # .
        `)
    music.playTone(494, music.beat(BeatFraction.Half))
    basic.clearScreen()
    wuKong.setLightMode(wuKong.LightMode.OFF)
    strip.showColor(neopixel.colors(NeoPixelColors.Black))
    basic.showString("Press A or B")
})
bluetooth.onBluetoothDisconnected(function () {
    basic.clearScreen()
    basic.showLeds(`
        . . # # .
        # . # . #
        . # # # .
        # . # . #
        . . # # .
        `)
    music.playTone(262, music.beat(BeatFraction.Half))
    basic.clearScreen()
    wuKong.setLightMode(wuKong.LightMode.BREATH)
    strip.showColor(neopixel.colors(NeoPixelColors.Blue))
    basic.showString("W")
})
input.onButtonPressed(Button.A, function () {
    count = 1
    countA = 0
})
input.onButtonPressed(Button.B, function () {
    count = 2
    countB = 0
})
control.onEvent(EventBusSource.MES_DPAD_CONTROLLER_ID, EventBusValue.MICROBIT_EVT_ANY, function () {
    if (count == 1) {
        countA += 1
        if (countA == 1) {
            basic.showString("A")
            basic.clearScreen()
        }
        music.playTone(392, music.beat(BeatFraction.Quarter))
        if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_A_DOWN) {
            wuKong.setLightMode(wuKong.LightMode.BREATH)
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_B_DOWN) {
            wuKong.setLightMode(wuKong.LightMode.OFF)
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_C_DOWN) {
            strip.showRainbow(1, 360)
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_D_DOWN) {
            strip.shift(1)
            strip.show()
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_1_DOWN) {
            strip.showColor(neopixel.colors(NeoPixelColors.Red))
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_2_DOWN) {
            strip.showColor(neopixel.colors(NeoPixelColors.Yellow))
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_3_DOWN) {
            strip.showColor(neopixel.colors(NeoPixelColors.Green))
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_4_DOWN) {
            strip.showColor(neopixel.colors(NeoPixelColors.Black))
        }
    } else if (count == 2) {
        countB += 1
        if (countB == 1) {
            basic.showString("B")
            basic.clearScreen()
        }
        music.playTone(330, music.beat(BeatFraction.Quarter))
        if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_A_DOWN) {
            basic.clearScreen()
            basic.pause(400)
            basic.showNumber(input.temperature() - 5)
            basic.showLeds(`
                # . . # #
                . . # . .
                . . # . .
                . . # . .
                . . . # #
                `)
            basic.clearScreen()
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_B_DOWN) {
            basic.clearScreen()
            basic.pause(400)
            basic.showNumber(input.lightLevel())
            basic.showLeds(`
                # . . . .
                # . . . .
                # . # . #
                # . . # .
                # . # . #
                `)
            basic.clearScreen()
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_C_DOWN) {
            music.playTone(392, music.beat(BeatFraction.Whole))
            music.playTone(523, music.beat(BeatFraction.Whole))
            music.playTone(523, music.beat(BeatFraction.Half))
            music.playTone(587, music.beat(BeatFraction.Half))
            music.playTone(523, music.beat(BeatFraction.Half))
            music.playTone(494, music.beat(BeatFraction.Half))
            music.playTone(440, music.beat(BeatFraction.Whole))
            music.playTone(440, music.beat(BeatFraction.Whole))
            music.playTone(440, music.beat(BeatFraction.Whole))
            music.playTone(587, music.beat(BeatFraction.Whole))
            music.playTone(587, music.beat(BeatFraction.Half))
            music.playTone(659, music.beat(BeatFraction.Half))
            music.playTone(587, music.beat(BeatFraction.Half))
            music.playTone(523, music.beat(BeatFraction.Half))
            music.playTone(494, music.beat(BeatFraction.Whole))
            music.playTone(392, music.beat(BeatFraction.Whole))
            music.playTone(392, music.beat(BeatFraction.Whole))
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_D_DOWN) {
            music.playTone(659, music.beat(BeatFraction.Whole))
            music.playTone(659, music.beat(BeatFraction.Half))
            music.playTone(698, music.beat(BeatFraction.Half))
            music.playTone(659, music.beat(BeatFraction.Half))
            music.playTone(587, music.beat(BeatFraction.Half))
            music.playTone(523, music.beat(BeatFraction.Whole))
            music.playTone(440, music.beat(BeatFraction.Whole))
            music.playTone(392, music.beat(BeatFraction.Half))
            music.playTone(392, music.beat(BeatFraction.Half))
            music.playTone(440, music.beat(BeatFraction.Whole))
            music.playTone(587, music.beat(BeatFraction.Whole))
            music.playTone(494, music.beat(BeatFraction.Whole))
            music.playTone(523, music.beat(BeatFraction.Half))
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_1_DOWN) {
            basic.showLeds(`
                # # . # #
                . . . . .
                . . . . .
                # . . . #
                . # # # .
                `)
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_2_DOWN) {
            basic.showLeds(`
                # # . # #
                . . . . .
                . # # # .
                # . . . #
                . # # # .
                `)
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_3_DOWN) {
            basic.showLeds(`
                # # . # #
                . . . . .
                . . . . .
                . # # # .
                # . . . #
                `)
        } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_4_DOWN) {
            basic.clearScreen()
        }
    }
})
let countB = 0
let countA = 0
let count = 0
let strip: neopixel.Strip = null
led.setBrightness(10)
basic.showString("W")
wuKong.lightIntensity(10)
wuKong.setLightMode(wuKong.LightMode.BREATH)
strip = neopixel.create(DigitalPin.P16, 4, NeoPixelMode.RGB)
strip.setBrightness(10)
strip.showColor(neopixel.colors(NeoPixelColors.Blue))

Program MakeCode

Video

Nakoľko som považoval 8 tlačidiel Android aplikácie za nedostatočný počet, využil som dve tlačidlá mikropočítača na zdvojnásobenie tlačidiel spomenutej aplikácie, čím som vám dokázal rozširujúcu dosku lepšie predviesť.

Záver

K záveru pripájam poďakovanie za ochotu prečítať si tento článok a nechať si poradiť pri výbere vhodnej rozširujúcej dosky. Veľký počet konektorov rozširujúcej dosky Wukong umožňuje pripojenie rôznych kombinácií snímačov, servomotorov a motorov. Stačí zapojiť do hry predstavivosť a nebudete mať núdzu o nové originálne projekty.

V ďalšom článku sa pohrám s dielikmi LEGO zo zaujímavej stavebnice Ring:bit Bricks Pack, takže o zábavu bude postarané.

E-shop

BBC micro:bit V2

Nová verze vylepšená například o integrovaný reproduktor a mikrofon, vypínací tlačítko, logo citlivé na dotek, nový procesor a větší paměť.





BBC micro:bit V1

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




Další příslušenství

Podobné příspěvky

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *