稼働中

マイクロビット(e_33)ZIP Halo Compass(2)

ZIP Halo 地磁気センサー

kitronikのZIP Haloを使ってみました。
micro:bitに搭載されている地磁気センサー(I2CデバイスMAG3110)の測定データからZIP HaloとImageで表示してCompassにしました。
具体的には、compass.heading()で得た値から北の方向を求めてImageの矢印とZIP Haloの周縁LED点滅で示すようにしました。

スクリプト

スクリプト例は以下のようにしました。※thonny-microbitのMicroPythonを使っています。


halo_01_compass_image.py
from microbit import *
import neopixel
# ZIP Helo 方位 北をImageの矢印とLED(24)で示す
# 方位の略記文字データ
d=['N','NE','E','SE','S','SW','W','NW']

# 色データ
RED=(255, 0, 0)
YELLOW=(255, 150, 0)
PURPLE=(180, 0, 255)
Colors=[PURPLE,YELLOW,YELLOW,YELLOW,YELLOW,YELLOW]*4 # Pixel 24pcs に合わす(6x4)

display.clear()
np = neopixel.NeoPixel(pin0,24)      # pin0(MOSIにする)で24pcs RGB-LED 24pcsを操作
np.clear()
sleep(1000)

while True:
    hdeg=compass.heading()              # micro:bit搭載の磁気センサで方位測定
    #print(hdeg)

    drc=int((hdeg+22.5)/45) % 8         # ZIP Helo 円周LED(24)を選択
    ds='Image.ARROW_'+d[-drc]           # N方向を矢印で示す(方位のマイナス)
    display.show(eval(ds))

    l_num=(24-int((hdeg+7.5)/15)) % 24  # N方向にあるLED番号
    
    print(hdeg,d[drc],l_num)            # 方位角、向き、LED番号 Thonnyのshellに表示

    div=16                              # 明るさ(PWM値)調整 電流値も抑制
    div2=8
    for i in range(6*4):                # LED数(Colorsx4)
        pwm=[[0]*3]6*4                  # pwm(r,g,b) *LED数
        for s in range(3):
            pwm[i][s]=int(Colors[i][s]/div)     # PWM値を1/div
        np[i]=pwm[i]

    np[l_num]= (int(RED[0]/div2),0,0)   # 方位にあるLEDを赤で点滅
    np.show()
    sleep(1000)
    np[l_num]= (0,0,0)
    np.show()
    sleep(500)

    # Button(A)でbreak                  # Aボタンでブレーク停止
    if button_a.was_pressed():
        np.clear()
        display.clear()
        print('break')
        break

実行結果


>>> %Run halo_01b_compass_image.py
320 NW 3            # 320°はNW(Northwest) 北はLED(3)
319 NW 3
17 N 23
356 N 0
break        # Aボタンで停止
>>> 

ZIP Haloコンパス表示

まとめ

micro:bitの地磁気センサデータをZIP Haloでコンパス表示にできました。