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:
- MakeCode lekcija (5–6 razred): Akcelerometar u MakeCode-u
- MicroPython verzija (7–8 razred): ova lekcija
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/desnoget_y()— napred/nazadget_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:
- broji korake
- ima dnevni cilj (npr. 15 koraka)
- može da se resetuje dugmetom A
- prikazuje rezultat dugmetom B
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?
- Micro:bit stalno meri ubrzanje
- Ako je pokret dovoljno jak → povećava broj
- Kada dostigne cilj → prikazuje poruku
- Dugme A resetuje
- Dugme B proverava rezultat
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:
- Postavi cilj na 30 koraka
- Dodaj animaciju kada se cilj dostigne
- Sačuvaj rekord (najveći broj koraka)
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:
- 500 — osetljiv uređaj
- 700 — srednja osetljivost
- 900 — vrlo grub filter
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")Imageili 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.
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)