Kompas i temperatura na micro:bit-u


Pored LED matrice i dugmadi, micro:bit ima i ugrađene senzore koji mu omogućavaju da „oseti“ okruženje. U ovoj lekciji upoznaćemo dva važna senzora: kompas i senzor temperature.


Ovi senzori se često koriste u igrama, navigaciji i pametnim uređajima, a u MicroPython-u su vrlo jednostavni za korišćenje.


Senzor temperature


Micro:bit može da meri temperaturu okoline (u stepenima Celzijusa). U MicroPython-u koristimo modul temperature.



from microbit import *

while True:
    t = temperature()
    display.scroll(str(t) + "C")
    sleep(2000)

Ovaj program:

  • očita trenutnu temperaturu
  • pretvori broj u tekst
  • prikaže je na LED matrici
  • sačeka 2 sekunde i ponovi proces

□ Temperatura se menja ako dodirneš micro:bit prstima, jer se senzor zagreva.


Kompas (orijentacija prema severu)


Micro:bit ima ugrađen digitalni kompas koji može da odredi u kom pravcu je okrenut uređaj. Vrednost se meri u stepenima (0–360°).


Pre prve upotrebe kompas mora da se kalibriše. MicroPython to radi automatski kada pozoveš funkciju za kompas.


Kako radi kompas na micro:bit-u

Kompas koristi magnetometar koji detektuje Zemljino magnetno polje. Na osnovu toga micro:bit može da odredi pravac u stepenima od 0 do 360.


from microbit import *
compass.calibrate() #kalibracija kompasa
while True:
    pravac = compass.heading()
    display.scroll(str(pravac))
    sleep(1000)

Vrednosti znače:

  • 0° — sever
  • 90° — istok
  • 180° — jug
  • 270° — zapad

Primer: Pronađi sever


U ovom primeru micro:bit prikazuje strelicu kada je okrenut ka severu.



from microbit import *

while True:
    pravac = compass.heading()

    if pravac < 10 or pravac > 350:
        display.show(Image.ARROW_N)
    else:
        display.clear()

    sleep(300)

Na ovaj način vidiš kako se senzori kombinuju sa:

  • uslovima (if)
  • petljama
  • grafikom na LED matrici

Poređenje sa MakeCode-om


Ako si ranije radio u MakeCode-u, ovo je isto kao blokovi:

  • temperature (°C)
  • compass heading (°)

Razlika je što sada:

  • jasno vidiš tok programa
  • učiš pravu sintaksu Python-a
  • lakše prelaziš na složenije projekte

□ Više o blokovima možeš videti na zvaničnoj MakeCode micro:bit stranici:
https://makecode.microbit.org



Napredniji rad sa temperaturom


Primer 1 — Digitalni termometar sa indikatorom


from microbit import *

while True:
    t = temperature()

    if t < 18:
        display.show(Image.SAD)
    elif 18 <= t <= 25:
        display.show(Image.HAPPY)
    else:
        display.show(Image.ANGRY)

    sleep(1000)

Micro:bit prikazuje različitu ikonicu u zavisnosti od temperature.


Primer 2 — Dugme B prikazuje temperaturu


from microbit import *

while True:
    if button_b.was_pressed():
        t = temperature()
        display.scroll(str(t) + "C")

Temperatura se prikazuje samo kada pritisneš dugme.


Mini projekat — Pametni termometar


Napravimo uređaj koji:

  • meri temperaturu
  • pamti najvišu izmerenu vrednost
  • dugme A prikazuje trenutnu temperaturu
  • dugme B prikazuje maksimalnu temperaturu


from microbit import *

max_temp = temperature()

while True:
    t = temperature()

    if t > max_temp:
        max_temp = t

    if button_a.was_pressed():
        display.scroll("T:" + str(t))

    if button_b.was_pressed():
        display.scroll("MAX:" + str(max_temp))

    sleep(500)

Primer — Prikaz pravca strelicom



from microbit import *

while True:
    pravac = compass.heading()

    if pravac < 45 or pravac > 315:
        display.show(Image.ARROW_N)
    elif 45 <= pravac < 135:
        display.show(Image.ARROW_E)
    elif 135 <= pravac < 225:
        display.show(Image.ARROW_S)
    else:
        display.show(Image.ARROW_W)

    sleep(300)

Micro:bit sada pokazuje jedan od četiri glavna pravca.


Mini projekat — Pronađi sever


Zadatak: Okreni micro:bit ka severu. Ako je tačno usmeren, prikazuje se ✓.


from microbit import *

while True:
    pravac = compass.heading()

    if pravac < 10 or pravac > 350:
        display.show(Image.YES)
    else:
        display.show(Image.NO)

    sleep(200)

Kako kompas meri pravac?

           0° (Sever)
                ↑
 270° (Zapad) ←   → 90° (Istok)
                ↓
           180° (Jug)

Kompas daje broj između 0 i 360. Mi taj broj delimo na intervale.


Mini projekat — Ekspedicioni uređaj


Uređaj koji:

  • Dugme A — pokazuje temperaturu
  • Dugme B — pokazuje pravac
  • Ako je temperatura preko 30°C → upozorenje


from microbit import *

while True:
    if button_a.was_pressed():
        t = temperature()
        display.scroll(str(t) + "C")

        if t > 30:
            display.show(Image.SKULL)
            sleep(1000)

    if button_b.was_pressed():
        pravac = compass.heading()
        display.scroll(str(pravac))

    sleep(200)

Mini projekat — Digitalni kompas

U ovom mini projektu napravićemo digitalni kompas koji prikazuje glavne strane sveta: N, E, S, W.

Micro:bit koristi magnetometar da detektuje pravac u stepenima od 0 do 360. Na osnovu te vrednosti možemo odrediti gde je sever, istok, jug i zapad.

Pre korišćenja kompasa, potrebno je izvršiti kalibraciju. Micro:bit će tražiti da ga pomeraš u obliku kruga.


from microbit import *

# kalibracija kompasa
compass.calibrate()

while True:

    pravac = compass.heading()

    if pravac < 45 or pravac > 315:
        display.show("N")

    elif pravac < 135:
        display.show("E")

    elif pravac < 225:
        display.show("S")

    else:
        display.show("W")

    sleep(500)

Kako radi program

Testiraj program

Izazov (napredni zadatak)

Pokušaj da prikažeš i dijagonalne pravce:

Ovaj projekat je osnova za:


Zadaci za samostalan rad


Zadatak 1

Napravi program koji prikazuje:

  • LED tačku koja se pali ako je temperatura ispod 15°C

Zadatak 2

Prikaži strelicu samo kada je uređaj okrenut ka istoku.

Zadatak 3

Napravi kombinovani uređaj:

  • Ako je temperatura veća od 28°C i uređaj je okrenut ka jugu → prikaži "HOT"

Zadatak 4 (izazov)

Sačuvaj minimalnu i maksimalnu temperaturu tokom časa.


Mini projekat — Mala meteorološka stanica


Napravimo malu meteorološku stanicu koja:

  • meri temperaturu
  • pokazuje pravac (kompas)
  • pamti minimalnu i maksimalnu temperaturu
  • dugme A — trenutna temperatura
  • dugme B — pravac kretanja
  • dugme A+B — MIN i MAX temperatura

Program


from microbit import *

# Početne vrednosti
trenutna = temperature()
min_temp = trenutna
max_temp = trenutna

while True:

    trenutna = temperature()

    # Ažuriranje minimalne i maksimalne temperature
    if trenutna < min_temp:
        min_temp = trenutna

    if trenutna > max_temp:
        max_temp = trenutna

    # Dugme A - trenutna temperatura
    if button_a.was_pressed():
        display.scroll("T:" + str(trenutna) + "C")

    # Dugme B - pravac (kompas)
    if button_b.was_pressed():
        pravac = compass.heading()
        display.scroll(str(pravac) + "deg")

    # Dugme A+B - min i max
    if button_a.is_pressed() and button_b.is_pressed():
        display.scroll("MIN:" + str(min_temp))
        display.scroll("MAX:" + str(max_temp))

    sleep(300)

Kako projekat funkcioniše?

  • Program stalno meri temperaturu
  • Pamti najnižu i najvišu vrednost
  • Kompas daje orijentaciju u stepenima
  • Dugmad biraju šta želimo da vidimo

Vizuelno objašnjenje (tok programa)

          START
             ↓
     očitaj temperaturu
             ↓
   ažuriraj MIN i MAX
             ↓
  da li je pritisnuto dugme?
        ↓        ↓
        A        B
      prikaži    prikaži
      temp.      pravac

Proširena verzija — Upozorenja

Dodaj upozorenja za ekstremne temperature:


    if trenutna > 30:
        display.show(Image.SKULL)
        sleep(1000)

    if trenutna < 5:
        display.show(Image.SAD)
        sleep(1000)

Eksperiment za čas

  • Dodirni micro:bit prstima i prati MAX temperaturu
  • Iznesi ga pored prozora (hladnije mesto)
  • Uporedi rezultate između grupa učenika

Zadaci za samostalan rad

Zadatak 1

Prikaži strelicu severa kada je dugme B pritisnuto, umesto brojčane vrednosti.

Zadatak 2

Dodaj "reset meteorološke stanice" kada se micro:bit protrese.

Zadatak 3 (izazov)

Ako je temperatura iznad 28°C i uređaj je okrenut ka jugu — prikaži poruku "TOPLO NA JUGU".


Obrazovni ciljevi

  • Kombinovanje više senzora
  • Rad sa minimum/maximum logikom
  • Složeni uslovi (AND)
  • Projektno razmišljanje
  • Povezivanje sa geografijom i fizikom

Mini projekat — Digitalni navigator


U ovom projektu micro:bit postaje mali navigator. Uređaj:

  • pokazuje pravac (kompas)
  • reaguje na nagib (akcelerometar)
  • pomaže da pronađeš zadati smer

Ideja projekta

Zadamo cilj — na primer ISTOK (90°). Micro:bit prikazuje:

  • ✓ ako si okrenut ka cilju
  • strelicu levo/desno ako treba da se okreneš
  • nagib napred/nazad menja režim rada

Osnovna verzija


from microbit import *

CILJ = 90   # Istok

while True:
    pravac = compass.heading()

    razlika = pravac - CILJ

    if abs(razlika) < 10:
        display.show(Image.YES)

    elif razlika > 0:
        display.show(Image.ARROW_W)  # treba ulevo

    else:
        display.show(Image.ARROW_E)  # treba udesno

    sleep(200)

Kako ovo funkcioniše?

  • Kompas daje ugao 0–360°
  • Računamo razliku od ciljnog ugla
  • Ako je razlika mala → stigli smo
  • Ako nije → pokazujemo smer korekcije

Proširena verzija — Nagib menja cilj

Ako nagneš micro:bit:

  • ulevo → cilj je ZAPAD (270°)
  • udesno → cilj je ISTOK (90°)
  • ravan položaj → cilj je SEVER (0°)

from microbit import *

CILJ = 0

while True:

    # Promena cilja nagibom
    x = accelerometer.get_x()

    if x > 300:
        CILJ = 90
    elif x < -300:
        CILJ = 270
    else:
        CILJ = 0

    pravac = compass.heading()
    razlika = pravac - CILJ

    if abs(razlika) < 10:
        display.show(Image.YES)
    elif razlika > 0:
        display.show(Image.ARROW_W)
    else:
        display.show(Image.ARROW_E)

    sleep(200)

Vizuelno objašnjenje

       0° (Sever)
           ↑
 270° ←        → 90°
           ↓
        180°

Nagib bira cilj.
Kompas proverava da li si okrenut ka tom cilju.

Mini izazov — Režim istraživača

Dodaj dugme A:

  • Dugme A bira nasumičan pravac
  • Učenik mora da ga pronađe

from microbit import *
import random

CILJ = 0

while True:

    if button_a.was_pressed():
        CILJ = random.randint(0, 359)

    pravac = compass.heading()
    razlika = pravac - CILJ

    if abs(razlika) < 10:
        display.show(Image.HAPPY)
    else:
        display.show(Image.ARROW_E)

    sleep(200)

Zadaci za samostalan rad

Zadatak 1

Umesto samo levo/desno, dodaj i strelice gore/dole za sever i jug.

Zadatak 2

Dodaj zvučni signal (ako koristiš micro:bit v2) kada je cilj pronađen.

Zadatak 3 (napredni)

Uvedi toleranciju od 5° umesto 10°. Da li je teže pogoditi cilj?


Šta učenici uče?

  • Rad sa uglovima (0–360°)
  • Računanje razlike vrednosti
  • Kombinovanje dva senzora
  • Projektno razmišljanje
  • Vezu matematike i programiranja

Mini projekat — Igra „Lov na blago“


Micro:bit bira nasumičan pravac (tajnu lokaciju blaga). Tvoj zadatak je da se okrećeš dok ne pronađeš tačan smer.

  • Dugme A — započinje novu igru
  • Kompas vodi igrača
  • Kada je pravac pogođen — pojavljuje se nagrada

Kako igra funkcioniše?

  • Micro:bit izabere nasumičan ugao (0–359°)
  • Igrač se okreće
  • Ako je blizu cilja (±10°) — pronašao je blago

Program


from microbit import *
import random

CILJ = None
TOLERANCIJA = 10

while True:

    # Pokretanje nove igre
    if button_a.was_pressed():
        CILJ = random.randint(0, 359)
        display.scroll("GO!")

    if CILJ is not None:
        pravac = compass.heading()
        razlika = abs(pravac - CILJ)

        # Korekcija za prelaz preko 0°
        if razlika > 180:
            razlika = 360 - razlika

        if razlika <= TOLERANCIJA:
            display.show(Image.DIAMOND)
        else:
            display.show(Image.ARROW_E)

    sleep(200)

Važno objašnjenje — Zašto koristimo 360 - razlika?

Ako je cilj 350°, a kompas pokazuje 10°, razlika nije 340° — već samo 20°.

350°   ...   0°   ...   10°
      ← 20° →

Zato koristimo kružno računanje.


Proširena verzija — Toplo / hladno

Umesto jedne strelice, igra može pokazivati koliko si blizu:

  • □ — blizu si
  • □ — srednje udaljen
  • ❄ — daleko

if razlika <= 10:
    display.show(Image.DIAMOND)
elif razlika <= 30:
    display.show(Image.HAPPY)
elif razlika <= 60:
    display.show(Image.ASLEEP)
else:
    display.show(Image.SAD)

Napredna verzija — Dodaj nagib

Nagib uređaja može služiti za:

  • Promenu težine igre
  • Podešavanje tolerancije
Primer:

x = accelerometer.get_x()

if x > 300:
    TOLERANCIJA = 5     # teže
elif x < -300:
    TOLERANCIJA = 20    # lakše
else:
    TOLERANCIJA = 10

Organizacija časa (aktivnost)

  • Učenici rade u parovima
  • Jedan drži uređaj i traži blago
  • Drugi beleži broj pokušaja
  • Pobednik je onaj ko najbrže pronađe pravac

Zadaci za samostalan rad


Zadatak 1

Dodaj brojač pokušaja.

Zadatak 2

Dodaj odbrojavanje vremena (30 sekundi).

Zadatak 3 (napredni)

Ako igrač ne pronađe blago za 30 sekundi — igra se resetuje.


Šta učenici uče?

  • Kružno računanje (360°)
  • Razliku uglova
  • Rad sa nasumičnim vrednostima
  • Kombinovanje kompas + akcelerometar
  • Razvoj algoritamskog razmišljanja

Skriveni mini kviz — Kompas i temperatura

Proveri da li razumeš kako rade kompas i temperaturni senzor u MicroPython-u.

Otvori kviz

Mini kviz: Kompas i temperatura

1. Koja funkcija vraća pravac kompasa?




2. Koji opseg vrednosti vraća kompas?




3. Koja funkcija meri temperaturu?




4. Šta znači vrednost kompasa 0°?




5. Zašto je potrebna kalibracija kompasa?







Mini projekat — Automatsko svetlo

Ovaj mini projekat povezuje senzor svetla sa LED ili drugim aktuatorom. Ideja: kada je ambijentalno svetlo slabo, uređaj uključuje svetlo; kada je svetla dovoljno, svetlo se isključuje.


from microbit import *

while True:
    svetlo = pin0.read_analog()  # čitanje sa svetlosnog senzora

    if svetlo < 300:              # ako je svetlo manje od praga
        pin1.write_digital(1)     # uključi svetlo
    else:
        pin1.write_digital(0)     # isključi svetlo

    sleep(200)                    # kratka pauza
  

Šta učiš ovim projektom:

  • Čitanje analognih senzora (read_analog())
  • Upravljanje digitalnim izlazom (write_digital())
  • Primena uslovnih naredbi (if) u realnom projektu
  • Petlja za stalno izvršavanje (while True)

Preporuke za dalje

Možeš dodati:

  • Više senzora za istovremeno detektovanje svetla i pokreta
  • Servo motor koji se pomera kada senzor detektuje mračan prostor
  • Mini kviz ili vežbu da proveriš razumevanje analognih i digitalnih signala