2022/10/05
2024/12/29
マイクロビット(e_34)ZIP Halo 加速度センサー(3)
ZIP Halo 加速度センサー
micro:bitに搭載されている加速度センサー(I2CデバイスMMA8653)の測定データを用いてZIP HaloのLED点灯パターンを変化させてみます。
具体的にはaccelerometer.get_values()で得た(x,y,z)値からy/xで角度を求め、該当するZIP Haloの周縁LEDを赤色に変更、micro:bitをひっくり返すと停止するようにしてみました。
micro:bit左右の傾斜でX値(-/+)、前後の傾斜でY値(-/+)、表裏でZ値(-/+)が変化します。
スクリプト
スクリプト例は以下のようにしました。※thonny-microbitのMicroPythonを使っています。
halo_03b_acc_01.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
import neopixel
import math
# Right(X+)Left(X-) Front(Y-)Rear(Y+) Backface(Z+) Surface(Z-)
# 色データ
RED=(255, 0, 0)
YELLOW=(255, 150, 0)
CYAN=(0, 255, 255)
# 色リストデータ
Colors=[YELLOW,CYAN,CYAN,CYAN,CYAN,CYAN]*4
div=8 # 明るさ(PWM値)調整 電流値も抑制
np = neopixel.NeoPixel(pin0,24) # pin0(MOSIにする)で24pcs RGB-LED 24pcsを操作
np.clear()
sleep(100)
# Colorsx4 LED ON
for i in range(8*3):
pwm=[[0]*3]*8*3
for s in range(3):
pwm[i][s]=int(Colors[i][s]/div) #PWM値を1/div
np[i]=pwm[i]
np.show()
sleep(100)
sleep(2000)
# acc pos LED ON 加速度センサのy/x値の角度にある周縁LEDを点灯
while True:
#for _ in range(5):
r_acc=accelerometer.get_values() # (x,y,z)
(x,y,z)=r_acc
sleep(100)
if x==0:
print('Zero')
continue
rth=math.atan(y/x)
rdg=math.degrees(rth)
if x>0 and y>=0:
rdg=0+rdg
if x>0 and y<0:
rdg=180+rdg
if x<0 and y>=0:
rdg=180-rdg
if x<0 and y<0:
rdg=360-rdg
#hdeg=0
l_num=int((rdg+7.5)/15) % 24 #24LEDを角度で選択
print('ACC',r_acc,'deg%3d'%rdg,'LED_num',l_num)
div2=16
np[l_num]= (int(RED[0]/div2),0,0)
np.show()
sleep(1000)
#np.clear()
# Aボタンでブレーク停止
if button_a.was_pressed():
np.clear()
display.clear()
print('A BTN break')
break
# micro:bitを裏面 ブレーク停止
if z>0: # backface de break
np.clear()
display.clear()
print('z-face break')
break
実行結果
Colorsx4が点灯した状態(傾ける前の初期状態)
左右前後にいろいろ傾けて周縁LEDを点灯させた際のデータ変化です。
>>> %Run halo_03b_acc_01.py
ACC (352, -128, -960) deg160 LED_num 11 # 加速度センサのデータ 計算した角度 LED番号
ACC (-208, 432, -880) deg244 LED_num 16
ACC (-192, -32, -992) deg350 LED_num 23
ACC (320, -112, -960) deg160 LED_num 11
ACC (272, -464, -848) deg120 LED_num 8
ACC (-112, -80, -992) deg324 LED_num 22
ACC (-144, -128, -1024) deg318 LED_num 21
ACC (-176, -32, -992) deg349 LED_num 23
ACC (-128, -64, -1008) deg333 LED_num 22
z-face break # 背面停止
>>>
下図のようにmicro:bitの傾きに応じた周縁LEDが赤色になっています。
まとめ
micro:bitの加速度センサーから得た値を使って、傾斜に応じてZIP Haloを点灯してみました。