CANON_leto2024 CANON_leto2024 CANON_leto2024

IoT prakticky – micro:bit obsluha udalostí od hardvéru, pripojenie serva a motorčeka

Technológie
0

Dosiaľ sme programovali mikropočítačovú dosku klasicky tak, že hlavný program ktorý niečo jednoduché robil periodicky bežal v nekonečnej slučke vytvorenej pomocou cyklu forever. Ak vytvárate aplikáciu, ktorá reaguje na podnety od používateľa, alebo od senzorov monitorujúcich veličiny z okolia, alebo nejakého procesu, bolo by monitorovanie týchto udalostí v slučke trochu komplikované na naprogramovanie podmienok. Kód by bol neprehľadný a hlavne mikroprocesor by musel stále bežať v normálnom režime a spotrebovávať adekvátne množstvo energie a to aj v prípade, ak by sa pol dňa, prípadne dlhšie nedialo vôbec nič.  Oveľa jednoduchšie a pri správnom naprogramovaní aj energeticky úspornejšie je vytvoriť udalosťami riadený program a naprogramovať obsluhu udalostí generovaných hardvérom. Všetky príklady z tohoto dielu sú názorne ukázané v našom videu

Obsluha udalostí od používateľa rozlišuje interný hardvér, napríklad ak používateľ zatlačí niektoré z tlačidiel A a B integrovaných priamo na doske, prípadne ich zatlačí súčasne, prípadne udalosť od niektorého senzora, napríklad akcelerometra, snímača teploty, či osvetlenia a externý hardvér pripojený na zbernicu dosky micro:bit. V princípe v tom nie je žiadny rozdiel, akurát interný hardvér je možné vo vývojovom prostredí aj emulovať a graficky znázorniť. Nová verzia vývojového prostredia dokáže znázorniť aj fungovanie niektorých knižníc obsluhujúcich externý hardvér pripojený na zbernicu, napríklad servomotor.

V prvom príklade ukážeme rozsvietenie RGB LED, ktorej tri vývody sú pripojené k portom P0, P1 a P2. Farba LED sa nastaví podľa toho, či používateľ stlačil tlačidlo A, tlačidlo B, alebo obidva tlačidlá súčasne. Všimnite si, že hlavná slučka, čiže cyklus forever neobsahuje žiadny kód, všetko sa odohráva v obsluhe udalostí zatlačenia tlačidiel input.onButtonPressed.

JavaScript: 

input.onButtonPressed(Button.A, function () {
   pins.digitalWritePin(DigitalPin.P0, 1)
   pins.digitalWritePin(DigitalPin.P1, 0)
   pins.digitalWritePin(DigitalPin.P2, 0)
})
input.onButtonPressed(Button.B, function () {
   pins.digitalWritePin(DigitalPin.P0, 0)
   pins.digitalWritePin(DigitalPin.P1, 1)
   pins.digitalWritePin(DigitalPin.P2, 0)
})
input.onButtonPressed(Button.AB, function () {
   pins.digitalWritePin(DigitalPin.P0, 0)
   pins.digitalWritePin(DigitalPin.P1, 0)
   pins.digitalWritePin(DigitalPin.P2, 1)
})
 
basic.forever(function () {
       
})

Druhý príklad v ktorom tlačidlom s aretáciou zapíname a vypíname LED diódu je zdanlivo nezmyselný. Stačilo by zapojiť do série zdroj napätia, LED diódu, obmedzovací odpor a tlačidlo a zapínanie LED diódy by fungovalo aj bez mikropočítačovej dosky. Zmysel príkladu je v tom, rozlíšiť pri spínaní, alebo impulzoch reakciu softvéru na nábežnú hranu a zostupnú hranu a softvérovo obslúžiť príslušné udalosti

JavaScript: 

control.onEvent(EventBusSource.MICROBIT_ID_IO_P0, EventBusValue.MICROBIT_PIN_EVT_FALL, function () {
   pins.digitalWritePin(DigitalPin.P2, 1)
})
 
control.onEvent(EventBusSource.MICROBIT_ID_IO_P0, EventBusValue.MICROBIT_PIN_EVT_RISE, function () {
   pins.digitalWritePin(DigitalPin.P2, 0)
})
 
pins.setEvents(DigitalPin.P0, PinEventType.Edge)
pins.setPull(DigitalPin.P0, PinPullMode.PullUp)

Okrem obsluhy udalostí, ukážeme aj ďalšie hardvérové možnosti. V nasledujúcom príklade je generovanie zvuku. Vo videu si všimnite ako sa interaktívne dajú nastaviť tóny buď podľa hudobnej stupnice, klaviatúry klavíra, alebo zadaním frekvencie. Nakoľko bzučiak má väčší prúdový odber, nepripojíme ho priamo na port P0, ale cez NPN tranzistor.

JavaScript: 

basic.forever(function () {
   music.ringTone(262)
   basic.pause(100)
   music.ringTone(330)
   basic.pause(100)
   music.ringTone(392)
   basic.pause(100)
   music.ringTone(330)
   basic.pause(100)
})

Ukážeme aj obsluhu serva, ktoré často využívajú modelári a konštruktéri robotov. Servo je komplexná súčiastka umožňujúca pootočenie osky s ramenom. Môžete si ho predstaviť ako motor s prevodovkou, so spätnoväzobným potenciometrom, ktorým sa meria uhol natočenia a riadiacim obvodom.

Pomocou PWM impulzov, čiže impulzov so šírkovou moduláciou môžete regulovať uhol jeho natočenia. Servo je k riadiacej jednotke pripojené pomocou troch rôznofarebných vodičov. Na červenom vodiči je kladné napájacie napätie, na čiernom (niekedy hnedom) vodiči je zem a na oranžový vodič sa privádzajú signály.

Frekvencia impulzov privádzaných na oranžový vodič je 50 Hz. Uhol natočenia sa ovláda šírkou pozitívneho pinu. Napríklad u modelárskeho serva SG90 je šírka pulzu 500 až 2400 μs a tejto hodnote zadpovedá uhol natočenia  0°až 180. Na prvý pohľad to znie zložito, ale vďaka knižnici integrovanej do vývojového prostredia je ovládanie servomotorov veľmi jednoduché. Servomotor má väčší odber, než je schopná doska dodať pri napájaní cez USB, preto je potrebné napájať dosku z batérií. Oranžový vodič je vo vnútri serva pripojený na riadiacu elektroniku, nemá veľký prúdový odber, takže ho môžete pripojiť priamo na port. Pre servo pripojené na port P0 sa graficky zobrazuje emulácia jeho natáčania.

JavaScript: 

basic.forever(function () {
   pins.servoWritePin(AnalogPin.P0, 0)
   basic.pause(2000)
   pins.servoWritePin(AnalogPin.P0, 180)
   basic.pause(2000)
})

No a na záver ovládanie jednosmerného motore. Smer otáčania jednosmerných motorov závisí od polarity privedeného napätia. Preto v niektorom z ďalších dielov ukážeme ako sa dá smer otáčania jednosmerných motorov meniť pomocou takzvaného H-mostíka. V tejto časti sa obmedzíme len na zapnutie a vypnutie motora zopnutím logickej úrovne na porte P0. Saj v tomto prípade motor má väčší odber, než je schopná doska dodať pri napájaní cez USB, preto je potrebné napájať dosku z batérií a motor sa spína cez NPN tranzistor.

JavaScript: 

pins.digitalWritePin(DigitalPin.P0, 1)
basic.forever(function () {
   pins.digitalWritePin(DigitalPin.P0, 0)
    basic.pause(1000)
   pins.digitalWritePin(DigitalPin.P0, 1)
   basic.pause(1000)
})

 

V budúcom pokračovaní predstavíme sadu Grove pre Microbit (na obrázku v pozadí)

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
IoT internet veci micro:bit BBC micro:bit MicroBit Internet of thimgs scratch JavaScript

Pridať komentár