Smart Home na diaľku

Opäť zdravím fanúšikov robotiky a programovania zapodievajúcich sa šikovnou domácnosťou (anglicky Smart Home) prostredníctvom súpravy Smart Home Kit a výučbového mikropočítača micro:bit. Na zvýšenie komfortu ovládania modulov tejto súpravy som si zobral na pomoc infračervený (skratka IR) diaľkový ovládač. Nebudem vás napínať a prejdem rovno k vytvoreniu ovládania šikovnej domácnosti na diaľku.

Diaľkový ovládač šikovnej domácnosti

V prvom rade som si kúpil cenovo dostupný IR diaľkový ovládač s prijímačom HX1838batériu CR2025, ktorá nebýva súčasťou balenia. Následne som zvážil ‚layout‘ obsadených pinov mikropočítača Micro:bit modulmi súpravy Smart Home Kit:

  • P1 – snímač vlhkosti pôdy
  • P2 – snímač teploty
  • P3 – snímač intenzity svetla
  • P4 – snímač hluku
  • P8 – RGB LED dióda
  • P13 – 180-stupňový servomotor
  • P16 – IR prijímač
  • P19 a P20 – OLED displej

Pre správnu funkčnosť vymenovaných modulov som uvedený mikropočítač napájal cez konektor USB, aby som pokryl ich energetickú náročnosť. Moduly (vrátane IR prijímača) som pripojil pomocou prepojovacích káblov k hlavnému modulu sensor:bit, do ktorého som osadil spomínaný mikropočítač.

Potom som tieto moduly umiestnil do kartónovej makety čelnej steny domu, pričom som prihliadal na vizuálny prejav RGB LED diódy, 180-stupňového servomotora a OLED displeja. Jednalo sa teda o svetelný, pohybový a zobrazovací prejav zmienených troch modulov.

Ďalej ma čakalo programovanie v platforme Microsoft MakeCode za použitia rozširujúcich Blokov Smarthome (obsahujúci Bloky OLED, Smarthome a Neopixel) a OSOYOO_IR. Netrvalo dlho a vytvorený program som úspešne otestoval, čím som získal jeho finálnu verziu:

Program JavaScript

OSOYOO_IR.onPressEvent(RemoteButton.CH_MINUS, function () {
    OLED.clear()
    OLED.newLine()
    OLED.writeString("HLUK (dB): ")
    OLED.writeNum(smarthome.ReadNoise(AnalogPin.P4))
    basic.pause(3000)
})
OSOYOO_IR.onPressEvent(RemoteButton.CH_Add, function () {
    OLED.clear()
    OLED.newLine()
    OLED.writeString("INTENZITA SVETLA     (0-100): ")
    OLED.writeNum(smarthome.ReadLightIntensity(AnalogPin.P3))
    basic.pause(3000)
})
OSOYOO_IR.onPressEvent(RemoteButton.CH, function () {
    OLED.clear()
    OLED.newLine()
    OLED.writeString("TEPLOTA (C): ")
    OLED.writeNum(smarthome.ReadTemperature(TMP36Type.TMP36_temperature_C, AnalogPin.P2))
    basic.pause(3000)
})
OSOYOO_IR.onPressEvent(RemoteButton.NEXT, function () {
    OLED.clear()
    strip.showColor(neopixel.colors(NeoPixelColors.White))
    OLED.newLine()
    OLED.writeString("SVIETI BIELE SVETLO")
})
OSOYOO_IR.onPressEvent(RemoteButton.PLAY, function () {
    OLED.clear()
    strip.showColor(neopixel.colors(NeoPixelColors.Red))
    OLED.newLine()
    OLED.writeString("SVIETI CERVENE SVETLO")
})
OSOYOO_IR.onPressEvent(RemoteButton.PREV, function () {
    OLED.clear()
    OLED.newLine()
    OLED.writeString("VLHKOST PODY V       KVETINACI (0-100): ")
    OLED.writeNum(smarthome.ReadSoilHumidity(AnalogPin.P1))
    basic.pause(3000)
})
OSOYOO_IR.onPressEvent(RemoteButton.Add, function () {
    OLED.clear()
    strip.showColor(neopixel.colors(NeoPixelColors.Green))
    OLED.newLine()
    OLED.writeString("SVIETI ZELENE SVETLO")
})
OSOYOO_IR.onPressEvent(RemoteButton.EQ, function () {
    OLED.clear()
    strip.showColor(neopixel.colors(NeoPixelColors.Blue))
    OLED.newLine()
    OLED.writeString("SVIETI MODRE SVETLO")
})
OSOYOO_IR.onPressEvent(RemoteButton.Minus, function () {
    OLED.clear()
    OLED.newLine()
    OLED.writeString("DVERE OTVORENE")
    pins.servoWritePin(AnalogPin.P13, 160)
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM_100, function () {
    OLED.clear()
    strip.clear()
    strip.show()
    OLED.newLine()
    OLED.writeString("NESVIETI SVETLO")
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM0, function () {
    OLED.clear()
    OLED.newLine()
    OLED.writeString("DVERE ZATVORENE")
    pins.servoWritePin(AnalogPin.P13, 0)
})
OSOYOO_IR.onPressEvent(RemoteButton.NUM_200, function () {
    OLED.clear()
    music.beginMelody(music.builtInMelody(Melodies.PowerDown), MelodyOptions.Once)
    OLED.newLine()
    OLED.writeString("MELODIA SA PREHRALA")
})
let strip: neopixel.Strip = null
led.enable(false)
music.beginMelody(music.builtInMelody(Melodies.PowerUp), MelodyOptions.Once)
strip = neopixel.create(DigitalPin.P8, 1, NeoPixelMode.RGBW)
pins.servoWritePin(AnalogPin.P13, 0)
OLED.init(128, 64)
OSOYOO_IR.init(Pins.P16)

Program MakeCode

Video

Pravdepodobne ste zistili, že som nenaprogramoval všetky tlačidlá IR diaľkového ovládača, čím som vám nechal priestor na dotvorenie môjho programu podľa vašich predstáv.

Záver

Záver článku je predzvesťou konca témy o súprave Smart Home Kit a jej použití v praxi. Zostáva mi už len vysloviť vďaku za vytrvalosť, s akou ste si prečítali môj článok.

Namieste je otázka, akému produktu sa budem venovať v nasledujúcom článku. Zatiaľ som sa nerozhodol, lebo možností je viac, jedna lákavejšia než druhá. Určite sa máte načo tešiť, nielen na zaujímavé poznatky, ale aj na praktické programy.

E-shop

Elecfreaks Smart Home Kit (bez BBC micro:bit)

Projektový box pro vytvoření chytré domácnosti!





BBC micro:bit

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




Další příslušenství


Leave a Reply