Akcelerometar na micro:bit-u: nagib, tresenje i pokreti

Lekcija 8 od 14 · micro:bit

Na poleđini micro:bit-a nalazi se akcelerometar – senzor koji meri ubrzanje u tri pravca. Pošto na uređaj uvek deluje Zemljina teža, akcelerometar „zna“ kako je micro:bit nagnut. Zato može da prepozna tresenje, okretanje ekrana nagore ili nadole i naginjanje levo-desno. U ovoj lekciji pravimo kockicu za igru, libelu (merač nagiba) i brojač koraka.

Pre nego što počneš: potrebno predznanje – petlje, grananje i Logic paleta.
Kako da učiš: svaki primer složi u MakeCode-u i isprobaj u simulatoru (ili na uređaju), a zadatke na kraju prvo reši sam/a; uputstvo i rešenje otvori tek posle toga. Programi su dati blokovima (opis) i u JavaScript-u iz MakeCode-a: u editoru klikni na JavaScript, nalepi kod i vrati se na Blocks – dobićeš iste blokove.

Tri ose: x, y i z

Akcelerometar meri ubrzanje duž tri ose. Vrednost se daje u mili-g (mg): 1000 mg je ubrzanje Zemljine teže.

OsaPravacKada je vrednost velika
xlevo – desnomicro:bit nagnut udesno (pozitivno) ili ulevo (negativno)
ynapred – nazadnagnut ka sebi ili od sebe
zgore – doleleži na stolu: oko −1000 (ekran nagore)
strengthukupna jačinaoko 1000 u mirovanju, više kad se trese

Blok acceleration (mg) x je u paleti Input → more. Sledeći program pritiskom na dugme prikazuje vrednost jedne ose:

input.onButtonPressed(Button.A, function () {
    basic.showNumber(input.acceleration(Dimension.X))   // nagib levo-desno
})
input.onButtonPressed(Button.B, function () {
    basic.showNumber(input.acceleration(Dimension.Y))   // nagib napred-nazad
})
input.onButtonPressed(Button.AB, function () {
    basic.showNumber(input.acceleration(Dimension.Strength))   // ukupna jačina
})

Isprobaj u simulatoru: mišem pomeraj micro:bit na slici i gledaj kako se brojevi menjaju. Na pravom uređaju nagni ga i pritisni dugme.

Gestovi: tresenje, naginjanje, okretanje

Za najčešće pokrete ne moramo da poredimo brojeve – postoji blok on shake (paleta Input). U padajućoj listi su i drugi gestovi:

GestŠta znači
shakemicro:bit je protresen
logo up / logo downlogo (gornja ivica) okrenut nagore / nadole
screen up / screen downekran okrenut ka nebu / ka stolu
tilt left / tilt rightnagnut ulevo / udesno
free falluređaj pada
3g, 6g, 8gjak udarac (veliko ubrzanje)

Primer: elektronska kockica. Kad se micro:bit protrese, prikazuje slučajan broj od 1 do 6.

input.onGesture(Gesture.Shake, function () {
    let broj = randint(1, 6)    // slučajan broj od 1 do 6
    basic.showNumber(broj)
})
Blokovima:
  • on shake (Input)
  • u njega show number (Basic), a u polje broja pick random 1 to 6 (Math)

Gestovi se mogu kombinovati. Ovaj program pokazuje strelicu u smeru u kom je uređaj nagnut:

input.onGesture(Gesture.TiltLeft, function () {
    basic.showArrow(ArrowNames.West)    // strelica ulevo
})
input.onGesture(Gesture.TiltRight, function () {
    basic.showArrow(ArrowNames.East)    // strelica udesno
})
input.onGesture(Gesture.ScreenDown, function () {
    basic.clearScreen()                 // ekran okrenut ka stolu – gasimo ga
})

Ugao nagiba i libela

Blok rotation (°) pitch daje ugao nagiba napred-nazad, a rotation (°) roll ugao levo-desno, u stepenima (od −180 do 180). Kada micro:bit leži ravno, oba ugla su blizu 0.

Libela pokazuje da li je površina ravna. Na ekranu svetli jedna tačka – „mehurić“. Kada je uređaj ravan, tačka je u sredini (2, 2); kad ga nagnemo, tačka beži na tu stranu. Ugao od −45° do 45° pretvaramo u kolonu od 0 do 4 blokom map (paleta Math):

let x = 2
let y = 2
basic.forever(function () {
    // ugao od -45 do 45 stepeni pretvaramo u kolonu/red od 0 do 4
    x = Math.round(Math.map(input.rotation(Rotation.Roll), -45, 45, 0, 4))
    y = Math.round(Math.map(input.rotation(Rotation.Pitch), -45, 45, 0, 4))
    x = Math.constrain(x, 0, 4)    // ne izlazimo van ekrana
    y = Math.constrain(y, 0, 4)
    basic.clearScreen()
    led.plot(x, y)                 // "mehurić"
    basic.pause(50)
})

Blok constrain „seče“ vrednost na zadate granice: ako je ugao veći od 45°, map bi dao broj veći od 4, a takve kolone nema.

Brojač koraka sa pragom

U lekciji o promenljivama brojač koraka je koristio on shake. Tačnije se broji kada sami odredimo prag: korak je trenutak kada ukupna jačina ubrzanja pređe, na primer, 1500 mg.

let koraci = 0
basic.forever(function () {
    if (input.acceleration(Dimension.Strength) > 1500) {
        koraci += 1
        basic.showNumber(koraci)
        basic.pause(300)    // jedan korak ne brojimo dva puta
    }
})
input.onButtonPressed(Button.A, function () {
    koraci = 0              // nula za novo merenje
    basic.showNumber(koraci)
})

Pauza od 300 ms je važna: jedan korak traje kratko, ali bi ga bez pauze petlja izbrojala više puta. Probaj različite pragove (1300, 1800) i proveri koji najbolje broji tvoje korake.

Zadaci za vežbu

Za svaki zadatak postoji primer, uputstvo i rešenje. Rešenja su provereno tačna na primerima iz teksta.

ZADATAK 01Težina: lako

Merač udarca

Napiši program koji stalno prikazuje grafikon jačine ubrzanja blokom plot bar graph (paleta Led): u mirovanju svetli malo lampica, a kad se micro:bit trese – ceo ekran.

Primer

Izlaz

u mirovanju svetli donji red, pri jakom tresenju ceo ekran
ZADATAK 02Težina: srednje

Drži ravno!

Igra: pritiskom na A počinje merenje. Svake sekunde u kojoj je micro:bit ravan (oba ugla između −10° i 10°) dobija se poen. Kad se uređaj nagne više, igra se završava i prikazuje broj poena.

Primer

Izlaz

posle A: srce dok je uređaj ravan; kad se nagne – broj osvojenih poena
ZADATAK 03Težina: srednje

Kockica sa dve kocke

Kad se micro:bit protrese, „baca“ dve kockice: prikazuje prvi broj, pa drugi, pa njihov zbir. Ako su oba broja ista, prikazuje i srećno lice.

Primer

Izlaz

npr. 3, 5, 8 – ili 4, 4, 8 i srećno lice
Česte greške i saveti
  • Akcelerometar meri i Zemljinu težu – zato micro:bit koji miruje na stolu ne pokazuje nulu na osi z, već oko −1000.
  • U petlji koja meri pokret uvek stavi kratku pauzu, inače se jedan pokret izbroji više puta.
  • Ako blok map može da da vrednost van ekrana, ograniči je blokom constrain.
  • Gest shake je dovoljan za igre; za tačno merenje koristi brojeve i sopstveni prag.

Proveri znanje

Otvori kviz

Akcelerometar

1. Šta meri akcelerometar?




2. Koliko je približno acceleration strength kada micro:bit miruje?




3. Koji gest se dešava kada je micro:bit nagnut ulevo?




4. Čemu služi constrain(x, 0, 4)?