稼働中

マイクロビット(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が点灯した状態(傾ける前の初期状態)
ZIP Halo初期表示
左右前後にいろいろ傾けて周縁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を点灯してみました。