Microbit – akcelerometer

Táto súčasť microbitu meria pohyb v 3 osách:

 x- nakláňanie vľavo a vpravo
 y- nakláňanie dopredu a dozadu
 z- pohyb hore a dole 

Pre zistenie hodnôt merania poslúži tento program:

from microbit import * 
while True:     
    x = accelerometer.get_x()     
    y = accelerometer.get_y()     
    z = accelerometer.get_z()     
    print("x, y, z:", x, y, z)     
    sleep(500) 

Príkaz print nevypíše údaje na displej microbitu ale do serial monitoru – časť MU editoru, ktorý otvoríte kliknutím na tlačidlo REPL.

Hodnoty X a Y sa menia podľa toho ako nakláňate microbit od -1024 do 1024 .Hodnota Z ukazuje gravitačné zrýchlenie. Pri držaní je hodnota 1024 a pri pohyboch sa bude meniť smerom dole (malé zrýchlenie) alebo hore (veľké zrýchlenie) až k 2048.

Pomocou akcelerometra môžete v microbite detekovať gestá:

from microbit import * 
while True:     
    gesto = accelerometer.current_gesture()     
    if gesto == "face up":         
        display.show(Image.HAPPY)     
    else:         
        display.show(Image.ANGRY) 

V nekonečnom cykle sa pomocou príkazu accelerometer.current_gesture() detekuje gesto a uloží do premennej gesto. Ak je to gesto “face up” tak sa zobrazí smajlík inak nahnevaná tvárička. Tu je zoznam všetkych dostupných gést:

updownleftrightface upface downfreefall3g6g8gshake 

Treba si ich vyskúšať. Anglický názov napovie druh gesta. Gestá 3g, 6g a 8g označujú rýchlosť akcelerácie 3g až 8g. Čím rýchlejšie presuniete vo vzduchu microbit, tým bude väčšia rýchlosť akcelerácie.

Veľmi užitočné je možnosť určiť veľkosť náklonu pri ktorom sa niečo vykoná. Ako napríklad:

from microbit import *
while True:
    naklon = accelerometer.get_x()
    if naklon > 500:        
        display.show(Image.ARROW_E) 
    elif naklon < -500:     
        display.show(Image.ARROW_W) 
    else:     
        display.show('X')

Ak je náklon väčší ako 500 (rozsah je od -1024 po +1024) tak sa zobrazí šipka vpravo, ak menej ako -500 tak šipka vľavo. Inak sa zobrazí X.

Microbit – tlačidlá

Na Microbite sú po bokoch displeja 2 tlačidlá označené ako “A” a “B”. Pomocou podmienky (if) v programe a príslušného príkazu môžeme určiť čo sa vykoná ak budú tlačidlá stlačené:

from microbit import * 
while True:         
        if button_a.is_pressed():                 
            display.show(Image.HAPPY)         
        else:                 
            display.show(Image.SAD) 

Ak sa stlačí tlačidlo A ( if button_a.is_pressed(): ) tak sa zobrazí smajlík inak bude zobrazená smutná tvárička. Podmienka sa opakuje v cykle while True , ktorý sa opakuje neustále. Tento cyklus sa používa veľmi často.

Okrem príkazu button_a.is_pressed(), ktorý zisťuje len či je momentálne tlačidlo stlačené je možné použiť aj príkaz button_a.was_pressed(). Ten sa používa na zistenie či bolo stlačené ale teraz už nie je stlačené:

from microbit import * 
while True:         
        if button_a.was_pressed():                 
            display.show(Image.HAPPY)         
        else:                 
            display.show(Image.SAD)  
        sleep(1000)

Príkaz sleep(1000) zastaví opakovanie cyklu na 1000 milisekúnd (1 sekunda). Microbit si chvílku pamätá, že bol stlačené tlačidlo A a program teda vykreslí smajlíka. Po chvíli to zabudne a vykreslí sa smutná tvárička.

Ak chcete zistiť či je stlačené tlačidlo A aj B zároveň a zároveň aj zistiť stlačenie obidvoch tlačidiel samostatne je najlepšie to napísať takto:

from microbit import * 
while True:     
        if button_a.is_pressed() and button_b.is_pressed():
            display.scroll("AB")              
        elif button_a.is_pressed():         
            display.show("A")     
        elif button_b.is_pressed():         
            display.show("B")     
        sleep(100) 

Pre zistenie počtu stlačení tlačidla môžete použiť príkazy button_a.get_presses() alebo button_b.get_presses() :

from microbit import * 
while True:    
        sleep(2000)    
        pocet = button_a.get_presses()    
        display.scroll(str(pocet)) 

Cyklus sa zastaví na 2 sekundy a potom vypíše počet stlačení tlačidla A. Počet stlačení sa uloží do premennej pocet ako číslo. Skôr ako sa vypíše na displej sa musí previesť na reťazec ( str(pocet) ) – to je bežný proces v programovacom jazyku Python.

Microbit – úvod a displej

Obľúbený mikrokontrolér vyvinutý v Británií spoločnosťou BBC ako nástroj pre popularizáciu programovania a robotiky na britských školách sa rozšíril do celého sveta. Na jeho programovanie sa obvykle používa prostredie MAKECODE, ale je možné použiť aj PYTHON. A táto séria článkov sa zaoberá práve ním.

Najprv je potrebné stiahnuť program, kde budeme písať program. A to konkrétne MU Editor.

Môžete ho stiahnuť tu: https://codewith.mu/en/download

Po nainštalovaní je potrebné pri spustení v prvom okne, ktoré sa objaví zvoliť Microbit ako používaný mikrokontrolér.

Potom pripojte Microbit pomocou USB kábla k počítača a hotovo.

Na Microbite je “displej” tvorený maticou LEDiek 5×5. Začneme tým, že si na ňom niečo zobrazíme.

Do prvého riadku programu napíšeme vždy:

from microbit import * 

Tento príkaz priradí do programu všetky knižnice príkazov, ktoré budeme používať. A teraz môžeme napísať prvý príkaz. Tento zobrazí na displeji “AHOJ”:

from microbit import * 
display.show("Ahoj") 

Program odošlete do microbitu stlačením tlačidla FLASH v MU editore.

Keďže je displej malinký tak sa zobrazí text ako jedno písmenko za druhým. Čo nieje práve moc dobré. Preto príkaz display.show budeme používať na zobrazenie textov a grafiky vhodnej k veľkosti displeja. Ako napríklad jeden znak alebo písmeno alebo:

from microbit import * 
display.show(Image.HAPPY) 

Na displeji sa zobrazí obrázok smajlíka – “Image.HAPPY”. Na microbite môžete zobrazovať obrázky s tejto ponuky – stačí ich názvy vpísať namiesto Image.HAPPY:

Image.HEARTImage.HEART_SMALL
Image.HAPPYImage.SMILEImage.SADImage.CONFUSEDImage.ANGRYImage.ASLEEPImage.SURPRISEDImage.SILLYImage.FABULOUSImage.MEHImage.YESImage.NO
Image.ARROW_NImage.ARROW_NEImage.ARROW_EImage.ARROW_SEImage.ARROW_SImage.ARROW_SWImage.ARROW_WImage.ARROW_NW
Image.MUSIC_CROTCHETImage.MUSIC_QUAVERImage.MUSIC_QUAVERS
Image.XMASImage.PACMANImage.TARGETImage.ROLLERSKATEImage.STICKFIGUREImage.GHOSTImage.SWORDImage.UMBRELLA
Image.RABBITImage.COWImage.DUCKImage.HOUSEImage.TORTOISE,
Image.BUTTERFLYImage.GIRAFFEImage.SNAKE 

Na zobrazovanie dlhších textov je vhodnejší príkaz:

from microbit import * 
display.scroll("TEXT TEXT") 

Text sa bude pomaly skrolovať sprava doľava na displeji. Prikaz má aj užitočné možnosti:

from microbit import * 
display.scroll("TEXT TEXT", delay = 300, loop = True)

Parameter delay určuje rýchlosť skrolovania a parameter loop určuje či sa skrolovanie bude opakovať (TRUE) alebo nie (FALSE).

Na displeji je možné zobraziť aj ľubovoľný pixel takto:

from microbit import * 
display.set_pixel(0, 0, 9)        
display.set_pixel(1, 0, 9) 

Program zobrazí prvý a druhý pixel v prvom riadku displeja. Prvé číslo v zátvorke určuje poradie pixelu v riadku, druhé určuje ktorý riadok to bude a tretie číslo intenzitu (od 0-nesvieti do 9-svieti s max. intenzitou). Uvedomte si, že v Pythone sa všetko čísluje od nuly.

Tiež je možné si vytvoriť vlastný obrázok:

from microbit import * 
lodka = Image("05500:"                 
              "05050:"                 
              "05005:"                 
              "99999:"                 
              "09990") 
display.show(lodka) 

V zátvorkách je možné presne určiť , ktorá LEDka na displeji bude rozsvietená a aj s akou intenzitou (od 0-nesvieti do 9-svieti s max. intenzitou).

Ďalej je možné zobraziť aj dve animácie Image.ALL_CLOCKS a Image.ALL_ARROWS a to takto:

 from microbit import * 
display.show(Image.ALL_CLOCKS, delay = 100, loop = True ) 

Animácie si môžete vytvoriť aj vlastné:

 from microbit import * 
ciara1 = Image("20000:"               
               "03050:"               
               "00500:"               
               "00070:"               
               "00009") 
ciara2 = Image("00002:"               
               "00030:"               
               "00500:"               
               "07000:"               
               "90000") 
while True:
    ciara = [ciara1, ciara2] 
    display.show(ciara, delay=200) 

No a nakoniec ak potrebujete vymazať displej tak použite tento príkaz:

display.clear() 

Arduino -RGB Ledka

RGB Ledka dokáže svietiť ľubovoľnou farbou čo dokáže mixovaním troch farieb -červenej, zelenej a modrej.

Najdlhší káblik na Ledke sa pripája na GND na Arduine. Na zapojenie okrem Ledky potrebujeme 3x 100 ohmový odpor (ide to aj bez nich ale znižuje sa tým životnosť Ledky) , nepájivé pole a Arduino. Zapojenie vyzerá takto:

Zdroj: create.arduino.cc

Program vyzerá takto:

void setup() {
   pinMode(9, OUTPUT);
   pinMode(10, OUTPUT);
   pinMode(11, OUTPUT);
 }
 void loop() {
   RGB_color(255, 0, 0); // Červená
   delay(1000);
   RGB_color(0, 255, 0); // Zelená
   delay(1000);
   RGB_color(0, 0, 255); // Modrá
   delay(1000);
   RGB_color(255, 255, 0); // Žltá
   delay(1000);
   RGB_color(255, 255, 255); // Biela
   delay(1000);
 }
 void RGB_color(int red_light_value, int green_light_value, int blue_light_value)
  {
   analogWrite(11, red_light_value);
   analogWrite(10, green_light_value);
   analogWrite(9, blue_light_value);
 }

Program každú sekundu necháva zasvietiť inú farbu. Na pomoc používa procedúru RGB_color. Tá je tam kvôli jednoduchšiemu použitiu programu. Vysvietenú farbu môžete meniť parametrami v RGB_color( x , x , x) .

Arduino-akcelerometer, gyroskop, teplomer

Modul nazvaný LSM6D3 za pár centov z Číny je akcelerometer, gyroskop a teplomer v jednom.

Na zapojenie potrebujeme samotný modul , Arduino a pár káblikov. Zapojenie vyzerá takto:

Na správne fungovanie programu potrebujeme stiahnuť a nainštalovať knižnicu  SparkFun_LSM6DS3  do počítača. Najprv stiahnite knižnicu na stránke  https://github.com/sparkfun/SparkFun_LSM6DS3_Arduino_Library  (kliknite na Clone or download a potom na Dowload ZIP). V programe Arduino IDE choďte do ponuky Projekt-Zahrnúť knižnice-Pridať ZIP. knižnicu ,vyberte priečinok so stiahnutou knižnicou a stlačte tlačidlo Open.

Program vyzerá takto:

 #include "SparkFunLSM6DS3.h"
 #include "Wire.h"
 #include "SPI.h"
 LSM6DS3 myIMU; 
 void setup() {
 Serial.begin(9600);
 delay(1000);
 myIMU.begin(); 
 } 
 void loop()
 {
 Serial.print("\nAkcelerometer:\n");
 Serial.print(" X = ");
 Serial.print(myIMU.readFloatAccelX(), 4);
 Serial.print(" Y = ");
 Serial.print(myIMU.readFloatAccelY(), 4);
 Serial.print(" Z = ");
 Serial.println(myIMU.readFloatAccelZ(), 4);
 Serial.print("\nGyroskop:\n");
 Serial.print(" X = ");
 Serial.print(myIMU.readFloatGyroX(), 4);
 Serial.print(" Y = ");
 Serial.print(myIMU.readFloatGyroY(), 4);
 Serial.print(" Z = ");
 Serial.println(myIMU.readFloatGyroZ(), 4);
 Serial.print("\nTeplomer:\n");
 Serial.print(" Degrees C = ");
 Serial.println(myIMU.readTempC(), 4);
 Serial.print(" Degrees F = ");
 Serial.println(myIMU.readTempF(), 4);
 delay(1000);
 }

Po nahratí programu do Arduina v Arduino IDE kliknite na monitor sériového portu v hornom pravom rohu:

Na monitore sa budú každú sekundu zobrazovať údaje z modulu. Keby sa vám zobrazované údaje nezdali berte na vedomie ,že pri testoch zariadenia sa zistilo, že zobrazovanie údajov z akcelerometra a gyroskopa je vzájomne prehodené. Vo vašom prípade to môže ale nemusí byť tiež tak.