MicroPython — senzori: ubrzanje, nagib i pedometar


Micro:bit ima ugrađeni akcelerometar — senzor koji meri kretanje, nagib i ubrzanje. U ovoj lekciji naučićeš kako da:

  • otkriješ nagib uređaja
  • reaguješ na pokret (shake)
  • napraviš jednostavan brojač koraka (pedometer)

Ovo su iste ideje koje si možda već video u MakeCode-u, ali sada ih radimo u MicroPython-u.


Detekcija nagiba micro:bit-a


MicroPython funkcija accelerometer.get_x() meri nagib po X osi.



from microbit import *

while True:
    x = accelerometer.get_x()

    if x > 300:
        display.show(Image.ARROW_E)
    elif x < -300:
        display.show(Image.ARROW_W)
    else:
        display.clear()

Kada nagneš micro:bit ulevo ili udesno, na ekranu će se pojaviti strelica.


Detekcija pokreta (shake)


MicroPython ima metodu was_gesture() koja proverava da li se desio određeni pokret.



from microbit import *

while True:
    if accelerometer.was_gesture("shake"):
        display.show(Image.SURPRISED)
        sleep(1000)
        display.clear()

Protresi micro:bit — pojaviće se ikonica iznenađenja.


Jednostavan brojač koraka (pedometer)


Kombinovanjem senzora i promenljivih možemo napraviti brojač pokreta.



from microbit import *

koraci = 0

while True:
    if accelerometer.was_gesture("shake"):
        koraci += 1
        display.show(str(koraci))
        sleep(500)

Svaki jači pokret povećava broj koraka. Ovo je osnova za pedometer.


Poređenje sa MakeCode micro:bit


Ako si radio/la micro:bit u MakeCode okruženju, ove funkcije si koristio kroz blokove:

  • on shake
  • acceleration (x)
  • tilt left / right

Možeš uporediti:


Ideja je ista — razlikuje se način pisanja programa.


Zašto su senzori važni?


  • koriste se u igrama, sportskim aplikacijama i merenjima
  • osnova su za projekte sa robotima
  • uvežbavaju rad sa uslovima i promenljivama


Napredni rad sa akcelerometrom


Akcelerometar može meriti ubrzanje po tri ose:

  • get_x() — levo/desno
  • get_y() — napred/nazad
  • get_z() — gore/dole

Primer 1 — Detekcija nagiba u svim pravcima



from microbit import *

while True:
    x = accelerometer.get_x()
    y = accelerometer.get_y()

    if x > 300:
        display.show(Image.ARROW_E)
    elif x < -300:
        display.show(Image.ARROW_W)
    elif y > 300:
        display.show(Image.ARROW_S)
    elif y < -300:
        display.show(Image.ARROW_N)
    else:
        display.clear()

Sada micro:bit reaguje na nagib u četiri pravca.


Primer 2 — Brojač koraka sa reset dugmetom



from microbit import *

koraci = 0

while True:
    if accelerometer.was_gesture("shake"):
        koraci += 1
        display.show(str(koraci))
        sleep(500)

    if button_a.was_pressed():
        koraci = 0
        display.show("0")

Dugme A resetuje broj koraka.


Primer 3 — Cilj 10 koraka



from microbit import *

koraci = 0

while True:
    if accelerometer.was_gesture("shake"):
        koraci += 1
        display.show(str(koraci))
        sleep(400)

        if koraci == 10:
            display.show(Image.HAPPY)
            sleep(1500)
            koraci = 0

Kada dostigneš 10 pokreta, pojavljuje se smajli.


Primer 4 — Digitalna libela



from microbit import *

while True:
    x = accelerometer.get_x()
    y = accelerometer.get_y()

    if -100 < x < 100 and -100 < y < 100:
        display.show(Image.YES)
    else:
        display.show(Image.NO)

Ako je uređaj skoro ravan — prikazuje se ✔.



Zadaci za samostalan rad


Zadatak 1 — Nagib + LED animacija

Napravi program koji:

  • Prikazuje strelicu kada je nagib veći od 300
  • Prikazuje srce kada je uređaj ravan

Zadatak 2 — Brojač koraka sa ciljem 20

Kada dođeš do 20 koraka:

  • Prikaži poruku "BRAVO"
  • Resetuj brojač

Zadatak 3 — Digitalna igra

Kombinuj:

  • taster A
  • nagib ulevo/desno

Ideja: pomeraj tačku po ekranu naginjanjem.

Zadatak 4 — Alarm za jak pokret

Ako je ubrzanje po X osi veće od 800:

  • Prikaži znak uzvika
  • Treperi ekran 3 puta

Rešenja zadataka (za nastavnika)


Rešenje 1 — Nagib + LED animacija



from microbit import *

while True:
    x = accelerometer.get_x()

    if x > 300:
        display.show(Image.ARROW_E)
    elif x < -300:
        display.show(Image.ARROW_W)
    else:
        display.show(Image.HEART)

Ako nema većeg nagiba, prikazuje se srce.


Rešenje 2 — Brojač koraka sa ciljem 20


from microbit import *

koraci = 0

while True:
    if accelerometer.was_gesture("shake"):
        koraci += 1
        display.show(str(koraci))
        sleep(400)

        if koraci == 20:
            display.scroll("BRAVO")
            koraci = 0

Kada se dostigne 20 pokreta, poruka se ispisuje, a brojač se resetuje.


Rešenje 3 — Pomeranje tačke naginjanjem


from microbit import *

x = 2
y = 2

while True:
    display.clear()
    display.set_pixel(x, y, 9)

    nagib = accelerometer.get_x()

    if nagib > 300 and x < 4:
        x += 1
    elif nagib < -300 and x > 0:
        x -= 1

    sleep(200)

Tačka se pomera levo/desno naginjanjem uređaja.


Rešenje 4 — Alarm za jak pokret


from microbit import *

while True:
    x = accelerometer.get_x()

    if x > 800 or x < -800:
        for i in range(3):
            display.show("!")
            sleep(200)
            display.clear()
            sleep(200)

Ako je ubrzanje jako, znak uzvika treperi tri puta.



Mini projekat — Fitnes narukvica


Napravimo jednostavnu „fitnes narukvicu“ koja:


Kako ćemo brojati korake?

Nećemo koristiti samo shake, jer to nije precizno. Umesto toga, merićemo naglu promenu ubrzanja po X osi. Ako je vrednost veća od određene granice — brojimo korak.


Program


from microbit import *

koraci = 0
cilj = 15

while True:
    x = accelerometer.get_x()

    # Detekcija jačeg pokreta
    if x > 700 or x < -700:
        koraci += 1
        display.show(str(koraci))
        sleep(300)  # kratka pauza da ne broji isti pokret više puta

        # Provera cilja
        if koraci >= cilj:
            display.scroll("CILJ!")
            display.show(Image.HAPPY)
            sleep(1000)
            koraci = 0

    # Dugme A resetuje broj
    if button_a.was_pressed():
        koraci = 0
        display.show("0")

    # Dugme B prikazuje trenutni broj
    if button_b.was_pressed():
        display.scroll(str(koraci))

Kako projekat funkcioniše?


Zašto koristimo sleep(300)?

Bez pauze, micro:bit bi mogao da prebroji više koraka za jedan jedini pokret. Ovo je jednostavan način filtriranja buke.


Napredna verzija (izazov)

Pokušaj da unaprediš projekat:


Kako funkcioniše filtriranje pokreta?


Akcelerometar stalno meri ubrzanje. Vrednosti se brzo menjaju i često sadrže "šum" (male nasumične promene).

Ako bismo brojili svaki mali pokret, brojač bi rastao prebrzo. Zato uvodimo prag (threshold).


Grafičko objašnjenje

Ubrzanje (X osa)

 900 |           *        *
 800 |         *   *    *
 700 |-----------------------------  ← PRAG
 600 |      *
 500 |   *
 400 |
 300 |  *
 200 |
 100 |
   0 |____________________________________
         vreme →

Samo vrednosti iznad 700 brojimo kao korak.

Sve vrednosti ispod praga ignorišemo.


Primer bez filtriranja (loš primer)


from microbit import *

koraci = 0

while True:
    x = accelerometer.get_x()
    if x > 100:
        koraci += 1
        display.show(str(koraci))

⚠ Problem: Brojač raste prebrzo jer su 100 male oscilacije.


Primer sa filtriranjem (dobar primer)


from microbit import *

koraci = 0
PRAG = 700

while True:
    x = accelerometer.get_x()

    if x > PRAG or x < -PRAG:
        koraci += 1
        display.show(str(koraci))
        sleep(300)

Zašto koristimo i sleep()?

Kada se desi jak pokret, signal traje nekoliko milisekundi. Bez pauze, program bi mogao da ga izbroji više puta.

Sleep pravi mali „odmor“ — i time simulira pravi pedometar.


Eksperiment za čas

Neka učenici probaju različite vrednosti praga:

Diskusija: Koja vrednost je najrealnija? Zašto?


Napredna vizualizacija (bonus demonstracija)


from microbit import *

while True:
    x = accelerometer.get_x()

    nivo = abs(x) // 200   # skaliranje
    if nivo > 4:
        nivo = 4

    display.clear()
    display.set_pixel(2, 4-nivo, 9)
    sleep(100)

Tačka se pomera gore-dole u zavisnosti od jačine pokreta. Ovo je jednostavna „mini-grafika“ signala.

Vežbe — rad sa senzorima pokreta


Sledeće vežbe pomažu da utvrdiš rad sa akcelerometrom i razviješ sopstvene MicroPython programe koji reaguju na pokret uređaja.


Vežba 1 — Brojač nagiba

Zadatak:
Prikaži broj nagiba ulevo i broj nagiba udesno na LED ekranu.

Kada korisnik nagne micro:bit ulevo, povećava se brojač za levo. Kada nagne udesno, povećava se brojač za desno.

Savet: koristi:

  • accelerometer.get_x()
  • promenljive za brojanje
  • display.scroll()

Primer rešenja:

from microbit import *

levo = 0
desno = 0

while True:
    x = accelerometer.get_x()

    if x < -300:
        levo += 1
        display.scroll("L:" + str(levo))
        sleep(500)

    if x > 300:
        desno += 1
        display.scroll("D:" + str(desno))
        sleep(500)

Vežba 2 — Alarm pokreta

Zadatak:
Prikaži znak upozorenja kada se uređaj protrese.

MicroPython ima ugrađenu funkciju koja detektuje shake događaj.

Savet: koristi:

  • accelerometer.was_gesture("shake")
  • Image ili tekst

Primer rešenja:

from microbit import *

while True:
    if accelerometer.was_gesture("shake"):
        display.show(Image.SKULL)
        sleep(1000)
        display.clear()

Izazov (napredni zadatak)

Pokušaj da napraviš alarm koji:

  • uključuje alarm posle 3 uzastopna potresa
  • ili prikazuje različite simbole za različite pokrete

Ovo je odlična osnova za projekte kao što su:

  • alarm protiv krađe
  • pedometar (brojač koraka)
  • kontroler za igru

Skriveni mini kviz — MicroPython senzori pokreta

Klikni na kviz i proveri da li razumeš rad sa akcelerometrom, nagibom i shake gestom u MicroPython-u.

Otvori kviz

Mini kviz: MicroPython senzori

1. Koja funkcija čita nagib po X osi?




2. Šta znači vrednost X > 0?




3. Koja funkcija detektuje potres (shake)?




4. Koja komanda prikazuje tekst na LED ekranu?




5. Koja vrednost znači da je uređaj skoro ravan?







Kviz — MicroPython senzori pokreta (bodovanje)

Reši kviz i proveri svoje znanje o akcelerometru, nagibu i shake gestu. Na kraju ćeš dobiti broj poena i procenat uspeha.

1. Kako čitamo nagib po X osi?



2. Koja funkcija detektuje shake?



3. Šta znači vrednost blizu 0?



4. Kako prikazujemo tekst na ekranu?



5. Koji senzor meri pokret?





Vizualizacija podataka senzora u Python Processing-u

MicroPython omogućava očitavanje podataka sa senzora, ali pravi potencijal dolazi kada te podatke prikažemo kao grafiku na računaru. To možemo uraditi pomoću alata Processing (Python Mode).

Na primer, možemo prikazati:

  • grafikon broja koraka u realnom vremenu
  • vizualizaciju nagiba uređaja
  • animaciju koja reaguje na pokret
  • interaktivne projekte i igre

Podaci se šalju sa micro:bit-a preko USB kabla koristeći serijsku komunikaciju, a Processing ih pretvara u grafiku.

Saznaj kako da povežeš MicroPython i Processing u sledećoj lekciji:

MicroPython i Processing — serijska komunikacija i vizualizacija podataka

Ako želiš da naučiš kako da praviš grafiku i animacije u Processing-u, pogledaj kompletan kurs:

Python i Processing — kreativno programiranje (kompletan kurs)