Accelerometer & Gyroskop¶
Grundlæggende¶
M5StickC indeholder en bevægelsessensor, (SH200Q/MPU6886), der består af et accelerometer og et gyroskop. Bevægelsessensoren kan fx bruges til at måle:
hvor hurtigt man roterer (gyroskop)
hvor hurtigt man accelererer eller bremser (accelerometer)
tyngdekraften fra jorden, og dermed hvilken retning er nedad (accelerometer)
Bevægelsessensoren er derfor vigtig komponent i fx i biler til at udløse airbags, i fly til styring. I mobiltelefoner og smart watches bruges bevægelsessensoren fx til at finde ud af hvilken vej den vender, eller til den indbyggede skridttæller.
En bevægelsessensor af denne type kaldes en IMU - inertial measurement unit, og den IMU der er indbygget i M5StickC har 6 grader af frihed.
For at starte med at bruge bevægelsessensoren, skal imu-biblioteket importeres og objektet myIMU
initieres:
import imu
myIMU = imu.IMU()
Accelerometer¶
Accelerometeret registrerer den acceleration hvormed M5StickC bevæges i retning frem/tilbage eller op/ned langs en akse i tre dimensioner.
Man kan forestille sig at hver akse er forsynet med en lille fjeder med en vægt, og så måler om fjederen bliver strakt eller trykket sammen.
Ved hjælp af myIMU.acceleration
kan man hente de rå aflæsninger fra accelerometeret.:
import imu
import time
myIMU = imu.IMU()
while True:
time.sleep_ms(10)
print(myIMU.acceleration)
Klik på Run og derefter Plotter
i mu-editoren, for at få vist en graf. Bevæg M5stickC og se at dine bevægelse bliver registreret

Hvis man skal bruge sensorens x y z målinger separeret, kan man gemme dem som enkeltstående variabler:
ax, ay, az = myIMU.acceleration
Når man holder M5StickC stille med skærmen opad, så vil man kunne måle cirka (0.0, 0.0, 1.0)
Det er tyngdekraften der påvirker z-aksen. Hvis M5StickC drejes som vist på illustrationerne, vil tyngdekræften påvirke henholdsvis x- og y-aksen.
Gyroskop¶
Gyroskopet registrerer rotationshastighed omkring en akse. Rotationshastigheden måles i antal grader per sekund.
Ved at bruge myIMU.gyro
kan man få vist de rå gyroskop data:
import imu
import time
myIMU = imu.IMU()
while True:
time.sleep_ms(10)
print(myIMU.gyro)
Hvis man skal bruge sensorens x y z målinger separeret, kan man gemme dem som enkeltstående variabler:
gx, gy, gz = myIMU.gyro
Hvis vi for eksempel starter med at holde M5StickC helt stille, så er
Gyroskop aflæsningen (0, 0, 0)
, da den ikke roteres. Roterer vi
den langsomt rundt om x aksen, fx med 30 grader hvert sekund, så vil
Gyroskop-aflæsningen give (30, 0, 0)
.
EKSEMPEL: Registrer bevægelse¶
Som illustration på hvordan accelerometeret kan bruges er her eksemplekode:
import imu
import time
from m5stack import lcd
myIMU = imu.IMU()
def detectAccel(accel, threshold):
if abs(accel) > threshold: detectAcceleration = True
else: detectAcceleration = False
return detectAcceleration
while True:
time.sleep_ms(10)
print((myIMU.acceleration))
if detectAccel(myIMU.acceleration[0], 50):
lcd.clear(0xFF0000)
time.sleep_ms(1200)
if detectAccel(myIMU.acceleration[1], 50):
lcd.clear(0x00FF00)
time.sleep_ms(1200)
if detectAccel(myIMU.acceleration[2], 50):
lcd.clear(0x0000FF)
time.sleep_ms(1200)
else: lcd.clear(0x000000)
EKSEMPEL: Registrer bevægelse 2¶
Bevægelse langs y-aksen kan aflæses på M5StcikC og i REPL:
#bibliotek til at bruge accelerometer/gyroskop
from lib import imu
#bibliotek til at bruge skærmen på M5stickC
from m5stack import lcd
#bibliotek til at bruge tidsenheder
import time
myIMU = imu.IMU()
ax, ay, az = myIMU.acceleration
ay_sidst = ay
hastighed = 0.025
while True:
ax, ay, az = myIMU.acceleration
if ay > ay_sidst:
#denne linje skriver til Mu-editoren
print('godt!')
#denne linje sætter en baggrundsfarve på M5StickC
lcd.clear(0x75ad0a)
#denne linje skriver text til M5StickC
lcd.text(5,5,"godt!")
else:
#denne linje skriver til Mu-editoren
print('lidt hurtigere..')
#denne linje sætter en baggrundsfarve på M5StickC
lcd.clear(0xffff99)
#denne linje skriver text til M5StickC
lcd.text(5,5,"lidt hurtigere..")
ay_sidst = ay+hastighed
time.sleep_ms(300)