稼働中

マイクロビット(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の点灯方向と速度を変更してみました。わりと面白い動きになったと思います。