2022/10/08
2024/12/30
マイクロビット(e_35)ZIP Halo 加速度センサー(4)
ZIP Halo 加速度センサー
micro:bitに搭載されている加速度センサー(I2CデバイスMMA8653)の測定データを用いてZIP HaloのLED点灯パターンを変化させてみます。
具体的にはaccelerometer.get_x()で得たx値(左右の傾斜)を用いて、ZIP Haloの周縁LEDの点灯方向、速度(点灯時間)を変更してみます。
スクリプト
スクリプト例は以下のようにしました。※thonny-microbitのMicroPythonを使っています。
halo_05b_acc_cycle.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
import neopixel
# 左右傾斜で回向き即変更、傾斜角で速度変化 単色だけ、加速度センサ、
# 色データ
RED=(255, 0, 0)
div=8 # 明るさ(PWM値)調整 電流値も抑制
np = neopixel.NeoPixel(pin0,24) # pin0(MOSIにする)で24pcs RGB-LED 24pcsを操作
np.clear()
sleep(100)
# acc pos LED ON
c=0 # LED番号
while True:
x_acc=accelerometer.get_x() # get_x RL +/- 1024
ss=2 # speed(点灯時間 調整)
s_frq=(1025-abs(x_acc))/ss # 点灯時間
if x_acc>=0:
k=1 # LED番号の加算 時計回り
else:
k=-1 # LED番号の減算 反時計回り
c=c+k # LED番号の加減
if abs(c)==24:
c=0 # 24番で0番にリセット
# 向き LED(N) x_acc(傾き) speed
print('%2d' %k, '%3d' %c, '%4d' %x_acc, '%4d' %s_frq)
pwm=[[0]*3]*8*3 # [0, 0, 0]*24 >> [[0, 0, 0],,,, [0, 0, 0]]
# single-color
for s in range(3):
pwm[c][s]=int(RED[s]/div)
np[c]=pwm[c]
np.show()
sleep(s_frq) # 点灯時間 ms
np.clear()
if button_a.was_pressed(): # Aボタンでブレーク停止
np.clear()
display.clear()
print('A btn break')
break
実行結果
動作確認
ThonnyのShellの表示
>>> %Run halo_05b_acc_cycle.py
-1 -1 -240 785 # 向き LED(N) x_acc(傾き) speed
-1 -2 -240 785
-1 -3 -240 785
1 -2 560 465
1 -1 816 209
1 0 912 113
1 1 928 97
1 2 928 97
1 3 928 97
1 4 912 113
1 5 784 241
1 6 496 529
-1 5 -112 913
-1 4 -592 433
(省略)
A btn break
>>>
まとめ
micro:bitの加速度センサーから得た値を使って、傾斜に応じてZIP Haloの点灯方向と速度を変更してみました。わりと面白い動きになったと思います。