Inteligentné osvetlenie
Čo budeme potrebovať:
micro:bit, sonsor:bit doska, senzor intenzity osvetlenia (light sensor), senzor intenzity zvuku (noise sensor), programovateľná LED (rainbow LED), OLED displej, prepojovacie vodiče.
Programovať budeme v prostredí makecode.microbit.org.
1. Meranie intenzity svetla
Najprv sa naučíme ako odmerať intenzitu osvetlenia a vypísať ju na OLED displej.
Vedeli ste, že micro:bit vie merať intenzitu osvetlenia aj bez pripojenia špeciálneho senzoru? V tejto aktivite si porovnáme oba spôsoby merania intenzity osvetlenia, a to so zabudovaným senozorom a externým senzorom zo SmartHome Kitu. Budeme vidieť hodnoty z oboch, a tak budeme môcť porovnať ich citlivosť.
1.1. Meranie so zabudovaným svetelným senzorom
Vypisovanie na zabudovaný displej micro:bita je trochu nepraktické a preto sa najskôr naučíme hodnoty vypisovať na OLED displej zo Smarthome sady. Displej musíme pripojiť na senzor:bit dosku. Na spodnej časti dosky, na ľavej strane sú 4 otvory na kolíky (GVClCa). OLED displej do nich zapojíme. Kvôli prehľadnosti nasledujúcich schém na nich OLED displej nebude zobrazovaný, ale neodpájame ho.
Počas spustenia micro:bita musíme OLED displej inicializovať. Týmto nastavíme šírku a výšku plochy dostupnej na vypisovanie. OLED displej zo SmartHome Kitu má šírku 128 pixelov a výšku 64 pixelov. Na inicializáciu použijeme príkaz initialize OLED with width 128 height 64
z kategórie OLED
.
Keďže chceme aby sa výpis a meranie opakovalo, aby sme mali vždy aktuálnu hodnotu osvetlenia, tak použijeme nekonečnú slučku vždy
. Výpis na displej zabezpečia príkazy show (without newline) string
, na zobrazenie reťazca, a show (without newline) number
, na zobrazenie čísla, z kategórie OLED
. Použitím týchto dvoch príkazov, môžeme na displej vypísať hodnoty vedľa seba v jednom riadku. Ak by sme chceli vypisovať hodnoty pod seba môžeme použiť príkaz show string
a show number
, ktorý automaticky po výpise odriadkuje. Na získanie hodnoty osvetlenia z integrovaného senzora použijeme príkaz úroveň osvetlenia
z kategórie Vstup
.
Edituj a stiahni: http://makecode.microbit.org/_2HyUurTFUhTU
Keď program nahráme do micro:bitu všimneme si, že výpis na OLED je veľmi neprehľadný, lebo nové hodnoty sa vypisujú stále za sebou, pričom staré hodnotu ostávajú na displeji. Aby sme si program sprehľadnili, musíme pridať ešte jeden príkaz na vyčistenie displeja clear OLED display
.
Edituj a stiahni: http://makecode.microbit.org/_C0dLq30w92C0
Keď sa bude teraz zobrazovať nová hodnota, tak sa tá predchádzajúca z displeja vymaže.
TIP
Výpis je teraz síce prehľadnejší, ale displej nám bliká. Bliká preto, že sa výpis realizuje vo veľkej frekvencii.
Procesy v počítači sú totiž veľmi rýchle a keď chceme blikanie spomaliť musíme spomaliť procesy. Ak do programu dáme príkaz pozastaviť (ms)
z kategórie Základné
a určíme si interval v ktorom sa má OLED displej premazať a znovu vypisovať, blikanie sa spomalí. Blikanie však úplne neodstránime.
Keď už máme program funkčný môžeme skontrolovať hodnoty, ktoré sa vypisujú. Skúsime zakrývať rôzne časti micro:bita aby sme zistili, kde sa integrovaný senzor nachádza. Hodnoty by sa mali zmeniť v momente, keď zakryjeme LED displej na micro:bite. Micro:bit totiž nemá skutočný vstavaný plnohodnotný senzor. Meria sa len intenzita svetla dopadajúceho na vstavaný LED displej.
Skúsme ešte poslednýkrát zasvietiť na LED displej, zakryť ho, odokryť, aby sme videli, aké hodnoty sa vypisujú.
Pozorovaním by sme mali zistiť:
- Zabudovaný senzor nie je veľmi citlivý na rozptýlené svetlo.
- Senzor nám vracia hodnoty v intervale 0 – 255.
1.2. Meranie s externým senzorom intenzity svetla zo SmartHome Kitu
Teraz si môžeme porovnať hodnoty s externým senzorom. Prvýkrát si vyskúšame zapojiť senzor na senzor:bit dosku. Zoberieme svetlocitlivý senzor a prepojovací vodič (žlto-červeno-čierny). Jednu stranu zacvakneme do senzora a tú druhú stranu, kde sú len otvory nasunieme na kolík s označením 1. Dávame si pozor na farby na kolíkoch, aby išiel žltý do žltého, červený do červeného a čierny do čierneho káblika.
Nový kód bude podobný, zmeníme len hodnotu, ktorá sa bude vypisovať. Namiesto hodnoty zo zabudovaného senzoru použijeme príkaz value of light intensity(0-100) at P1
z kategórie Smarthome
(hodnota zo svetelného senzora). Treba si dať pozor na správne nastavenie kolíka v parametri príkazu. My sme zapojili senzor do P1 (kolík/pin 1). Teraz môžeme program nahrať do micro:bita.
Edituj a stiahni: http://makecode.microbit.org/_h5dAL0eiWP91
Opäť môžeme zakrývať senzor, odokrývať ho a svietiť na neho, aby sme mohli pozorovať aké hodnoty sa vypisujú.
Pozorovaním by sme mali zistiť:
- Externý senzor je citlivejší na rozptýlené svetlo.
- Snímač nám vracia hodnoty v intervale 0 – 100.
Na ďalšie projekty budeme používať presnejší externý senzor.
2. Práca s LED svetielkom
Teraz sa naučíme ako pracovať s LED svetielkom zo SmartHome Kitu. Vyskúšame si ho naprogramovať tak, aby sme ho vedeli zapnúť a vypnúť pomocou tlačidiel na micro:bite. Môžeme si to predstaviť ako klasickú lampu, ktorú zapíname a vypíname pomocou vypínača.
Svetielko si rovnako ako svetelný senzor pomocou káblika zapojíme na senzor:bit dosku na kolík označený číslom 2. Svetlocitlivý senzor z predchádzajúcej úlohy však nemusíme odpájať, ani nemusíme mazať pôvodný kód, ktorý budeme potrebovať na ďalšiu aktivitu. Opäť dávame pozor na farby na kolíkoch a kábliku.
Príkazy na prácu s LED svetielkom nájdeme v kategórii Neopixel
. Do udalosti počas spustenia
pridáme príkaz nastaviť strip na Neopixel at pin P0 with 24 leds as RGB (GRB format)
. Inicializáciou nastavíme kolík, do ktorého sme svetielko zapojili, u nás P2 (kolík/pin 2), a určíme počet RGB svetielok, my máme len jednu.
V udalosti keď sa tlačidlo A stlačí
nastavíme svetielku bielu farbu a keď sa tlačidlo B stlačí
farbu čiernu (čierna simuluje vypnutie). Použijeme príkaz strip show color red
z kategórie Neopixel
a vyberieme vhodnú farbu. Program si nahráme do micro:bita.
Edituj a stiahni: http://makecode.microbit.org/_F51et8HKre9w
TIP
Farby si vieme nastaviť aj pomocou RGB zápisu. Kde vieme nastaviť zvlášť červenú, zelenú a modrú zložku svetla, vďaka čomu si vieme lepšie namiešať ľubovoľnú farbu. Klasické biele svetlo vznikne, keď sú všetky časti svetla na plnej intenzite red 255 green 255 blue 255
. Vypnutie simulujeme nastavením farby na čiernu, kde všetky zložky svetla sú na minime red 0 green 0 blue 0
. Príkaz na nastavenie RGB hodnoty red 255 green 255 blue 255
nájdeme v kategórii Neopixel
, kliknutím na ponuku viac
.
3. Automatické osvetlenie
Automatizáciu zavedieme spojením predchádzajúcich častí. Už nebudeme svetielka rozsvecovať manuálne pomocou tlačidiel. Rozsvietime ich na základe nameranej intenzity svetla automaticky. Takto budeme v podstate simulovať automatické pouličné osvetlenie, ktoré sa zapne v momente, keď sa zotmie a vypne, keď sa rozvidnie. Hodnotu intenzity svetla pri ktorej sa svetielko rozsvieti si určíme na základe predošlého pozorovania.
Senzor aj svetielko by sme mali mať už zapojené z predchádzajúcich aktivít, čiže nám stačí len trochu upraviť kód. Keď chceme hodnotou zo senzora použiť viackrát, je lepšie uložiť si hodnotu do samostatnej premennej, aby sme pri ďalších krokoch používali rovnakú hodnotu a aby sme nemuseli merať viackrát v jednom cykle. Preto si na začiatku nastavíme premennú, do ktorej si budeme nameranú intenzitu svetla ukladať. Premennú si vytvoríme v kategórii Premenná
, kde klikneme na Vytvoriť premennú
a zadáme jej meno. Hodnotu premennej nastavíme cez príkaz nastaviť premennú na 0
. Tento príkaz vložíme na začiatok cyklu vždy
. Na voľné miesto vložíme príkaz value of light intensity(0-100) at pin P1
.