Diaľkové ovládanie zázračnej stavebnice

Drahí rodičia školákov, ktorí by radi darovali svojim deťom hračku na diaľkové ovládanie! So stavebnicou Wonder Building Kit dokážete postaviť veľa projektov ovládaných na diaľku, dokonca si môžete vybrať rôzne spôsoby ovládania.

Riadiacou jednotkou tejto stavebnice je výučbový mikropočítač micro:bit (predajný samostatne) podporujúci nielen technológiu Bluetooth, ale po pripojení infračerveného (skratka IR) snímača, aj IR diaľkový ovládač.

Na tento účel som si vytvoril vlastný projekt s názvom The Tricycle (v preklade trojkolka) ovládaný obidvomi spôsobmi. Pretože raz vidieť je lepšie ako stokrát počuť, prejdem rovno k predstaveniu zmieneného projektu v praxi.

Projekt The Tricycle – IR ovládanie

Projekt The Tricycle ovládaný IR diaľkovým ovládačom pracuje na princípe dvoch IR diód, pričom jedna slúži na vysielanie a druhá na prijímanie IR signálu. V uvedenom projekte som použil cenovo dostupnú sadu IR prijímača a vysielača, plne postačujúcu na tento účel. Treba pripomenúť, že spomenutý diaľkový ovládač je napájaný batériou CR 2025, ktorá nie je súčasťou balenia.

IR prijímač som priskrutkoval skrutkou a maticou veľkosti M3 k hornej časti trojkolky a prepojil prepojovacím káblom (s konektormi DuPont) s pinom P1 rozširujúcej dosky Wukong. Doska, kábel, matica a skrutka sú súčasťou zázračnej stavebnice. Červený motor som pripojil na pin M1 a sivý servomotor zase na pin S0.

Následne som do voľne dostupnej platformy Microsoft MakeCode stiahol rozširujúce Bloky Wukong, Neopixel a Osoyoo_IR_v1.5, pomocou ktorých som dokázal hravo vytvoriť finálnu verziu programu IR ovládania:

Program JavaScript

IR_V15.onPressEvent(RemoteButton.CH_MINUS, function () {
    basic.clearScreen()
    basic.showNumber(input.temperature() - 5)
    basic.showLeds(`
        # . . # #
        . . # . .
        . . # . .
        . . # . .
        . . . # #
        `)
    basic.clearScreen()
    basic.showString("W")
})
IR_V15.onPressEvent(RemoteButton.NUM5, function () {
    basic.clearScreen()
    strip.showColor(neopixel.colors(NeoPixelColors.Black))
    wuKong.setServoAngle(wuKong.ServoList.S0, 90)
    wuKong.stopMotor(wuKong.MotorList.M1)
    basic.showString("W")
})
IR_V15.onPressEvent(RemoteButton.NUM2, function () {
    basic.showArrow(ArrowNames.North)
    strip.showColor(neopixel.colors(NeoPixelColors.White))
    wuKong.setServoAngle(wuKong.ServoList.S0, 90)
    wuKong.setMotorSpeed(wuKong.MotorList.M1, 50)
})
IR_V15.onPressEvent(RemoteButton.NUM_200, function () {
    basic.showArrow(ArrowNames.West)
    strip.showColor(neopixel.colors(NeoPixelColors.Orange))
    wuKong.setServoAngle(wuKong.ServoList.S0, 105)
    wuKong.setMotorSpeed(wuKong.MotorList.M1, -70)
})
IR_V15.onPressEvent(RemoteButton.NUM4, function () {
    basic.showArrow(ArrowNames.West)
    strip.showColor(neopixel.colors(NeoPixelColors.Orange))
    wuKong.setServoAngle(wuKong.ServoList.S0, 75)
    wuKong.setMotorSpeed(wuKong.MotorList.M1, 50)
})
IR_V15.onPressEvent(RemoteButton.CH, function () {
    basic.clearScreen()
    basic.showNumber(input.lightLevel())
    basic.showLeds(`
        # . . . .
        # . . . .
        # . # . #
        # . . # .
        # . # . #
        `)
    basic.clearScreen()
    basic.showString("W")
})
IR_V15.onPressEvent(RemoteButton.NUM_100, function () {
    count += 1
    if (count == 1) {
        wuKong.setLightMode(wuKong.LightMode.OFF)
    } else if (count == 2) {
        wuKong.setLightMode(wuKong.LightMode.BREATH)
        count = 0
    }
})
IR_V15.onPressEvent(RemoteButton.Minus, function () {
    strip.showRainbow(1, 360)
})
IR_V15.onPressEvent(RemoteButton.PREV, function () {
    strip.showColor(neopixel.colors(NeoPixelColors.Yellow))
})
IR_V15.onPressEvent(RemoteButton.CH_Add, function () {
    strip.clear()
    strip.show()
})
IR_V15.onPressEvent(RemoteButton.Add, function () {
    for (let index = 0; index < 4; index++) {
        strip.rotate(1)
        strip.show()
        basic.pause(500)
    }
})
IR_V15.onPressEvent(RemoteButton.NUM6, function () {
    basic.showArrow(ArrowNames.East)
    strip.showColor(neopixel.colors(NeoPixelColors.Orange))
    wuKong.setServoAngle(wuKong.ServoList.S0, 105)
    wuKong.setMotorSpeed(wuKong.MotorList.M1, 50)
})
IR_V15.onPressEvent(RemoteButton.PLAY, function () {
    strip.showColor(neopixel.colors(NeoPixelColors.Purple))
})
IR_V15.onPressEvent(RemoteButton.NUM0, function () {
    basic.showArrow(ArrowNames.East)
    strip.showColor(neopixel.colors(NeoPixelColors.Orange))
    wuKong.setServoAngle(wuKong.ServoList.S0, 75)
    wuKong.setMotorSpeed(wuKong.MotorList.M1, -70)
})
IR_V15.onPressEvent(RemoteButton.EQ, function () {
    for (let index = 0; index < 4; index++) {
        strip.shift(1)
        strip.show()
        basic.pause(500)
    }
})
IR_V15.onPressEvent(RemoteButton.NEXT, function () {
    strip.showColor(neopixel.colors(NeoPixelColors.Green))
})
IR_V15.onPressEvent(RemoteButton.NUM8, function () {
    basic.showArrow(ArrowNames.South)
    strip.showColor(neopixel.colors(NeoPixelColors.Red))
    wuKong.setServoAngle(wuKong.ServoList.S0, 90)
    wuKong.setMotorSpeed(wuKong.MotorList.M1, -70)
})
let count = 0
let strip: neopixel.Strip = null
wuKong.setServoAngle(wuKong.ServoList.S0, 90)
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))
IR_V15.init(Pins.P1)
count = 0

Program MakeCode

Návod na postavenie opísaného projektu spolu s programom sa dá stiahnuť po kliknutí na zelené tlačidlo.

Video

Sedemnásť tlačidiel ovládača umožňuje zobraziť hodnoty integrovaných snímačov mikropočítača micro:bit, ovládať všetky LED diódy rozširujúcej dosky Wukong a riadiť pohyb pripojeného motora a servomotora.

Projekt The Tricycle – technológia Bluetooth

              Projekt The Tricycle ovládaný technológiou Bluetooth vyžaduje inštaláciu bezplatnej Android aplikácie micro:bit Blue do mobilného telefónu a jeho spárovanie s mikropočítačom micro:bit. Pre predstavenú aplikáciu treba zakázať aktualizácie a pri jej používaní mať vždy zapnuté Bluetooth a GPS.

Pred začatím programovania je potrebné platformu Microsoft MakeCode rozšíriť o Bloky Wukong, Neopixel a Blockytalky. Finálna verzia programu (ovládania technológiou Bluetooth) obsahuje aj príkazy štandardného Bloku Control:

Program JavaScript

bluetooth.onBluetoothConnected(function () {
    basic.clearScreen()
    basic.showLeds(`
        . . # # .
        # . # . #
        . # # # .
        # . # . #
        . . # # .
        `)
    basic.clearScreen()
    wuKong.setLightMode(wuKong.LightMode.OFF)
    strip.showColor(neopixel.colors(NeoPixelColors.Black))
})
bluetooth.onBluetoothDisconnected(function () {
    basic.clearScreen()
    basic.showLeds(`
        . . # # .
        # . # . #
        . # # # .
        # . # . #
        . . # # .
        `)
    basic.clearScreen()
    wuKong.setLightMode(wuKong.LightMode.BREATH)
    strip.showColor(neopixel.colors(NeoPixelColors.Blue))
    basic.showString("W")
})
control.onEvent(EventBusSource.MES_DPAD_CONTROLLER_ID, EventBusValue.MICROBIT_EVT_ANY, function () {
    if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_A_DOWN) {
        basic.showArrow(ArrowNames.North)
        strip.showColor(neopixel.colors(NeoPixelColors.White))
        wuKong.setMotorSpeed(wuKong.MotorList.M1, 50)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_A_UP) {
        basic.clearScreen()
        strip.showColor(neopixel.colors(NeoPixelColors.Black))
        wuKong.stopMotor(wuKong.MotorList.M1)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_B_DOWN) {
        basic.showArrow(ArrowNames.South)
        strip.showColor(neopixel.colors(NeoPixelColors.Red))
        wuKong.setMotorSpeed(wuKong.MotorList.M1, -70)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_B_UP) {
        basic.clearScreen()
        strip.showColor(neopixel.colors(NeoPixelColors.Black))
        wuKong.stopMotor(wuKong.MotorList.M1)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_C_DOWN) {
        basic.showArrow(ArrowNames.West)
        strip.showColor(neopixel.colors(NeoPixelColors.Orange))
        wuKong.setServoAngle(wuKong.ServoList.S0, 75)
        wuKong.setMotorSpeed(wuKong.MotorList.M1, 50)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_C_UP) {
        basic.clearScreen()
        strip.showColor(neopixel.colors(NeoPixelColors.Black))
        wuKong.setServoAngle(wuKong.ServoList.S0, 90)
        wuKong.stopMotor(wuKong.MotorList.M1)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_D_DOWN) {
        basic.showArrow(ArrowNames.East)
        strip.showColor(neopixel.colors(NeoPixelColors.Orange))
        wuKong.setServoAngle(wuKong.ServoList.S0, 105)
        wuKong.setMotorSpeed(wuKong.MotorList.M1, 50)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_D_UP) {
        basic.clearScreen()
        strip.showColor(neopixel.colors(NeoPixelColors.Black))
        wuKong.setServoAngle(wuKong.ServoList.S0, 90)
        wuKong.stopMotor(wuKong.MotorList.M1)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_1_DOWN) {
        basic.showNumber(input.temperature() - 5)
        basic.showLeds(`
            # . . # #
            . . # . .
            . . # . .
            . . # . .
            . . . # #
            `)
        basic.clearScreen()
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_2_DOWN) {
        basic.showNumber(input.lightLevel())
        basic.showLeds(`
            # . . . .
            # . . . .
            # . # . #
            # . . # .
            # . # . #
            `)
        basic.clearScreen()
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_3_DOWN) {
        basic.showArrow(ArrowNames.East)
        strip.showColor(neopixel.colors(NeoPixelColors.Orange))
        wuKong.setServoAngle(wuKong.ServoList.S0, 75)
        wuKong.setMotorSpeed(wuKong.MotorList.M1, -70)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_3_UP) {
        basic.clearScreen()
        strip.showColor(neopixel.colors(NeoPixelColors.Black))
        wuKong.setServoAngle(wuKong.ServoList.S0, 90)
        wuKong.stopMotor(wuKong.MotorList.M1)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_4_DOWN) {
        basic.showArrow(ArrowNames.West)
        strip.showColor(neopixel.colors(NeoPixelColors.Orange))
        wuKong.setServoAngle(wuKong.ServoList.S0, 105)
        wuKong.setMotorSpeed(wuKong.MotorList.M1, -70)
    } else if (control.eventValue() == EventBusValue.MES_DPAD_BUTTON_4_UP) {
        basic.clearScreen()
        strip.showColor(neopixel.colors(NeoPixelColors.Black))
        wuKong.setServoAngle(wuKong.ServoList.S0, 90)
        wuKong.stopMotor(wuKong.MotorList.M1)
    }
})
let strip: neopixel.Strip = null
wuKong.setServoAngle(wuKong.ServoList.S0, 90)
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

Program uvedeného projektu spolu s návodom na postavenie je možné stiahnuť po kliknutí na zelené tlačidlo.

Video

Aplikácia micro:bit Blue disponuje len ôsmimi tlačidlami, preto je uprednostnený pohybový prejav trojkolky pred svetelnými efektmi rozširujúcej dosky Wukong. Avšak na zobrazenie nameraných hodnôt integrovaných snímačov mikropočítača micro:bit sa priestor našiel.

Taktiež existuje alternatívna Android aplikácia s názvom Kitronik Move nahrádzajúca horeuvedenú aplikáciu.

Záver

Na záver ďakujem za váš čas strávený pri čítaní môjho článku. Verím, že som vás inšpiroval pri hľadaní vhodného darčeka pre vaše ratolesti. Stavebnica Wonder Building Kit, nielenže dáva priestor na realizáciu nevyčerpateľnej studnice nápadov, ale aj rozvíja tvorivé a logické myslenie adolescentov. Zároveň umožňuje nadobudnúť základné znalosti z programovania a robotiky, čo predstavuje pridanú hodnotu najmä v dnešnej dobe informačných technológií a umelej inteligencie.

Nabudúce sa budem zaoberať rozširujúcou doskou Wukong, ktorej nebola doteraz venovaná taká pozornosť, akú si zaslúži jej značný potenciál.

E-shop

Elecfreaks Micro:bit Wonder Building Kit (bez micro:bitu)

Interaktivní stavebnice (400+ dílků), elektronické senzory a 20 projektů, které obohatí vaše hrátky s micro:bitem o nové výzvy a spoustu zábavy.




BBC micro:bit V2

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 *