Accelerometern

Accelerometer är en sensor på baksidan av din micro:bit som kan känna av acceleration. Med hjälp av den kan din micro:bit veta till exempel om den skakas, tappas, eller lutas i olika vinklar.

Omskakas!

Vi börjar med skakning. I kategorin Input finns ett block som körs igång när en micro:bit skakas, och alla block som ligger i den utförs då. Till exempel kan man bygga ett sten-sax-påse spel som slumpmässigt visar en av tre möjligheter när micro:bit skakas.

let slumpvärde = 0
input.onGesture(Gesture.Shake, () => {
 slumpvärde = Math.random(3)
 if (slumpvärde == 0) {
 basic.showIcon(IconNames.Target)
 }
 if (slumpvärde == 1) {
 basic.showIcon(IconNames.Scissors)
 }
 if (slumpvärde == 2) {
 basic.showIcon(IconNames.Square)
 }
})

Länk till koden.

Andra gester, samma block

Samma block kan även användas till andra händelser än skakning. Genom att trycka på ”skaka” kan det bytas ut till andra händelser som accelerometern kan känna av. Det finns sex olika riktningar du kan hålla micro:bit i, och fyra olika styrka av accelerationskrafter som kan väljas.

Logotyp upp
När du håller micro:bit så att USB-porten pekar uppåt.

Logotyp ner
När du håller micro:bit så att USB-porten pekar neråt.

Skärm upp
När du håller micro:bit så att skärmen pekar uppåt.

Skärm ner
När du håller micro:bit så att skärmen pekar neråt.

Luta vänster
När du håller micro:bit så att sidan där A-knappen sitter pekar neråt.

Luta höger
När du håller micro:bit så att sidan där B-knappen sitter pekar neråt.

Fritt fall
När micro:bit upplever fritt fall. Då känner den ingen tyngdkraft, och ingen acceleration alls.

3g
När micro:bit upplever en kraft tre gånger så stark som tyngdkraften.

6g
När micro:bit upplever en kraft sex gånger så stark som tyngdkraften.

8g
När micro:bit upplever en kraft åtta gånger så stark som tyngdkraften.

Blocket körs igång när händelsen händer. Det vill säga att om vi till exempel väljer ”skärm upp” så körs koden när vi lutar på micro:bit så att skärmen pekar uppåt. Men så länge vi håller den positionen körs koden inte igen. Bara om vi lutar den på något annat sätt, och sen går tillbaka till att ha skärmen uppåt, körs vår kod en gång till.

Följande exempel lyssnar på dom sex olika positioner och visar en pil eller ikon beroende på hur du håller micro:bit.

input.onGesture(Gesture.ScreenUp, () => {
 basic.showIcon(IconNames.Happy)
})
input.onGesture(Gesture.ScreenDown, () => {
 basic.showIcon(IconNames.Sad)
})
input.onGesture(Gesture.LogoDown, () => {
 basic.showArrow(ArrowNames.North)
})
input.onGesture(Gesture.LogoUp, () => {
 basic.showArrow(ArrowNames.South)
})
input.onGesture(Gesture.TiltLeft, () => {
 basic.showArrow(ArrowNames.West)
})
input.onGesture(Gesture.TiltRight, () => {
 basic.showArrow(ArrowNames.East)
})

Länk till koden.

Acceleration

Ibland vill man ha mer fin justerbart kontroll över vad som ska hända beroende på accelerationskrafter. För dom tillfällen finns ”acceleration (mg)”-blocket. Den ger oss ett siffra som berättar hur stor accelerationskraft micro:bit känner precis nu, i en viss riktning. Enheten mg i parenteser är en förkortning av milligravitation. Detta betyder att ett värde av 1000mg är lika med 1g, vilket är styrkan av tyngdkraften på jorden. Nu finns det en liten skillnad med micro:bit, den ger oss 1023 som värde när den upplever 1g.

I blocket kan vi välja i vilken riktning vi vill mäta accelerationen. X-axeln går från vänster (där A-knappen sitter) till höger(där B-knappen sitter), y-axeln går från ner (där pins sitter) till upp (där USB-porten sitter), och z-axeln går från baksidan till framsidan. Så om du lägger micro:bit perfekt platt på ett bord känner den 0 i båda x- och y-riktningen, och 1023 i z-riktningen (i verkligheten kan det skilja sig lite). Om du lägger den perfekt platt med skärmen neråt får du -1023 i z-riktningen, eftersom tyngdkrafterna nu drar i den på precis motsatt håll.

Följande exempel använder sig av accelerationsvärdet i x- och y-axeln, för att flytta en pixel över skärmen. Värdet delas först med 200, för att justera kännsligheten (Testa att ändra den!). Sen ökas den med 2 för att få pixeln att hamna i mitten, på koordinat (2,2), när accelerationsvärdet är 0. ”Tänd”-blocket tänder pixeln, och efter en liten paus (20 millisekunder) släcks alla pixlar igen.

let y = 0
let x = 0
basic.forever(() => {
 x = input.acceleration(Dimension.X) / 200 + 2
 y = input.acceleration(Dimension.Y) / 200 + 2
 led.plot(x, y)
 basic.pause(20)
 basic.clearScreen()
})

Länk till koden.

Vilken riktning som helst

Fjärde valmöjligheten istället för x, y och z är ”styrka”. Om vi väljer den får vi ett värde som är en samling av alla riktningar tillsammans, som alltid är positivt. Om du håller micro:bit stilla, ska du få 1023, oberoende i vilken position du håller den. Styrka kan vi använda till exempel för att bygga vår egen variant på ”när skaka”-blocket där vi själv kan bestämma hur hårt man behöver skaka micro:bit.

basic.forever(() => {
 if (input.acceleration(Dimension.Strength) > 2048) {
   basic.showIcon(IconNames.SmallDiamond)
   basic.showIcon(IconNames.Target)
   basic.showIcon(IconNames.Diamond)
   basic.clearScreen()
 }
})

Länk till koden.

Rotation

Under Mer i Input-kategorin finns även ett ”rotation”-block. Den använder sig av samma värdet vi får från ”acceleration”-blocket, men räknar ut för oss i vilken vinkel (i grader) vi lutar micro:bit. Här kan vi välja ”lutningsgrad” för upp och ner riktningen, och ”roll” för höger och vänster riktningen.

Räckvidd

På samma plats hittar vi också ett block för att ändra räckvidden för accelerationsmetern. Med den ställer man in vad det högsta värdet är sensorn kommer ge oss.

Senast ändrad 2018-03-19