Level 3Python: Bevegelse

Skrevet av: Oversatt fra microbit-micropython.readthedocs.io

Oversatt av: Øistein Søvik og Susanne Rynning Seip

Kurs: Microbit
Tema: Elektronikk, Tekstbasert, Lyd
Fag: Programmering, Musikk, Naturfag
Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregående skole

Denne oppgaven er en del av oppgavesamlingen Programmering i micro-python og bygger videre på Python: Input og output.

Vi anbefaler at du laster ned og skriver koden din i mu editor når du jobber med disse oppgavene. Instruksjoner for hvordan man laster ned Mu finner du på nettsiden via linken.

Når Mu er installert kan du koble micro:biten din til datamaskinen via en USB-kabel. Skriv koden din i editor-vinduet og trykk på “Flash”-knappen for å laste koden over på micro:biten. Hvis det ikke fungerer, sørg for at micro:biten har dukket opp som en USB-enhet på datamaskinen din.

Introduksjon

Din micro:bit er utstyrt med et akselerometer som måler bevegelse langs tre akser:

  • X - tilte fra venstre til høyre.

  • Y - tilte fremmover og bakover.

  • Z - bevegelse opp og ned.

Det er en funksjon for hver akse som returnerer et positivt eller negativt tall som indikerer antall milli-g krefter. Den viser 0 når du står i vater langs den aksen.

For eksempel, her er et enkelt program som viser deg hvor mye i vater enheten din er langs X aksen:

from microbit import *

while True:
    reading = accelerometer.get_x()
    if reading > 20:
        display.show("H")
    elif reading < -20:
        display.show("V")
    else:
        display.show("-")

Dersom du holder enheten flatt skal den vise -; om du derimot roterer den til venstre eller høyre burde den respektivt vise V og H.

Siden vi ønsker at enheten vår skal reagere på forandring hele tiden bruker vi en while-løkke. Den første tingen som skjer inne i while-løkka er at den måler langs X aksen og lagrer resultatet i variabelen reading. Fordi akselerometerer er sensitivt har jeg gitt den et slingringsmonn på +/-20. Det er derfor if og elif-setningene sjekker for respektivt > 20 and < -20. Mens else-setningen betyr at dersom verdien til reading er mellom -20 og 20 så sier vi at enheten er i vater. For hver av disse setningene så bruker vi displayet til å vise passende tekst.

Det er og en get_y metode for Y aksen og en get_z metode for Z aksen.

Dersom du lurer på hvordan en mobiltelefon vet om du holder mobilen horisontalt eller vertikalt så er det fordi den bruker et akselerometer på akkuratt samme måte som programmet ovenfor. Spillkontrollere inneholder også akselerometer som kan hjelpe deg å navigere.

Musikalsk galskap

En av de beste egenskapene til MicroPython er hvor sømløst du kan sette sammen ulike funksjoner til micro: bit'en. For eksempel, la oss forvandle enheten til et "musikalsk" instrument. Hvorfor jeg satte hermetegn omkring musikalsk finner du nok fort ut 😉

Sett inn en høytaler slik som du gjorde i oppgaven "Lage musikk med micro:bit". Bruk krokodilleklemmer til å feste pin 0 og GND (jord) til den positive og negative inngangen på høytaleren - det spiller ingen rolle hvilken vei de er koblet.

Bilde av en micro'bit med krokodilleklemmer til pin 0 og GND

Hva skjer dersom vi leser av akselerometer og spiller de som toner? La oss finne det ut:

from microbit import *
import music

while True:
    music.pitch(accelerometer.get_y(), 10)

Den viktigste linjen er uten tvil på slutten, og den er relativt enkel. Vi nøster lesingen fra Y aksen som frekvensen og mater den inn i music.pitch metoden. Vi lar denne freksenen bare spille i 10 millisekunder fordi vi ønsker å forandre tone raskt når enheten tippes til en side. Siden jeg bruker en while-løkke som går for alltid så leser den hele tiden endringene til Y aksen.

Det er alt!

Tipp enheten fremmover og bakover. Dersom lesingen langs Y aksen er positive så vil den endre tonehøyden avspilt av micro:bit'en.

Klarer du å spille en melodi på dette enkle instrumentet? I siste del skal vi se på noen enkle forbedringer du kan gjøre.

checkPrøv det ut selv

Dette kan for eksempel gjøres ved enten å legge inn en ifsetning, eller med å bruke abs funksjonen

Vi mennesker har problemer med å høre frekvenser over 18 000Hz og under 40Hz. Mens de frekvensene som er behagelige å høre på gjerne ligger mellom 80 - 400Hz. For å fikse micro:bit'en slik at den bare spiller toner i dette intervalet kan vi gjøre noe som ligner på dette

from microbit import *
import music

while True:
    Y = A * abs(accelerometer.get_y())
    if Y < 80:
        Y = 80
    elif Y > 400:
        Y = 400
    Z = abs(accelerometer.get_z())
    music.pitch(Y, Z)

Neste oppgave i samlingen er Python: Nettverk. Klikk videre for å fortsette gjennom samlingen.

Forbedre denne siden

Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!