Search

ラズパイの拡張ボード「Sense HAT」に搭載された加速度計、磁力計、ジャイロスコープでサイコロを作る - ITmedia

tsukuru.prelol.com

 ラズパイの拡張ボード「Sense HAT」は、これまで紹介した湿度センサー、気圧センサーの他、加速度計と磁力計、ジャイロスコープの機能を備える「IMU」(Inertial Measurement Unit)を搭載しています。測定できる値は以下の通りです。

  • 加速度計:加速力を測定してSense HATがどちらに動いているのかを測定
  • 磁力計:コンパスのように地球の磁場を測定
  • ジャイロスコープ:Sense HATの運動量と回転を測定

 Sense HATは、IMUのセンサーでピッチ、ロール、ヨーのxyz軸3方向の動きを検出できます。

Sense HAT ピッチ、ロール、ヨーの3方向(ラズベリーパイ財団のWebページから抜粋)

 以下のプログラムを記述して「3jiku.py」のように名前を付けて保存し、実行させてみましょう。ラズパイを傾けて±1G以上の加速度を検知したときに、x、y、zの値が変化します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
try:
    while True:
            acceleration = sense.get_accelerometer_raw()
            x = acceleration['x']
            y = acceleration['y']
            z = acceleration['z']
            x=round(x, 0)
            y=round(y, 0)
            z=round(z, 0)
            print("x={0}, y={1}, z={2}".format(x, y, z))
except KeyboardInterrupt:
        sense.clear()

 続いてはSense HATに流れている文字の向きが、Sense HATを傾ける方向によって変わるというプログラムを紹介します。ここではx軸が-1Gを検知すると180度向きを変え、y軸が1Gを検知すると90度、y軸が-1GWork270度というように変わっていきます。以下のプログラムを記述して「letter.py」などと保存し、実行してみましょう。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
# "J"の文字を表示
sense.show_letter("J")
try:
        while True:
                acceleration = sense.get_accelerometer_raw()
                x = acceleration['x']
                y = acceleration['y']
                z = acceleration['z']
                x=round(x, 0)
                y=round(y, 0)
                z=round(z, 0)
        
                print("x={0}, y={1}, z={2}".format(x, y, z))
# 傾けた方向に応じて流れる向きを変える
                if x  == -1:
                        sense.set_rotation(180)
                elif y == 1:
                        sense.set_rotation(90)
                elif y == -1:
                        sense.set_rotation(270)
                else:
                        sense.set_rotation(0)
except KeyboardInterrupt:
        sense.clear()

 Sense HATの傾きに応じて、白い「J」という文字がくるくると変わったでしょうか。

Sense HAT 「J」の文字がくるくると変わる

 続いてご紹介するのは、x、y、z軸のいずれかの方向に強い加速度が加わると「!」が表示されるというプログラムです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
sense = SenseHat()
red = (255, 0, 0)
try:
        while True:
                acceleration = sense.get_accelerometer_raw()
                x = acceleration['x']
                y = acceleration['y']
                z = acceleration['z']
                x = abs(x)
                y = abs(y)
                z = abs(z)
                if x > 1 or y > 1 or z > 1:
                        sense.show_letter("!", red)
                else:
                        sense.clear()
except KeyboardInterrupt:
        sense.clear()

 Sense HATを上下左右に振ってみると「!」という赤い文字が表示されたでしょうか。

Sense HATを使ったサイコロを作ってみよう

Sense HATを使ったサイコロを作ってみよう

 ここまでの内容を踏まえて、Sense HATを使ったサイコロを作ってみましょう。サンプルのプログラムが公開されていますので、それをなぞりながら解説します。

Sense HAT ラズパイを振ると「!」が表示される(動かしているため被写体ブレしています)

 Sense HATには、以下のような内容をプログラムの中に記述すると、8×8のLEDそれぞれをコントロールできます。まず変数に代入する色を以下のようにします。

b = [0, 0, 0]
g = [0, 255, 0]
r = [255, 0, 0]

 bは黒(非点灯)、gで緑、rで赤に点灯するように指定したあと、8×8のマトリックスを以下のように指定すると、指定した場所のLEDがそれぞれの色で表示されます。

x= [
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,g,g,b,b,b,
b,b,b,g,g,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
]]

 この場合は真ん中にある4つのLEDが緑に点灯するという指定です。これを応用すれば、サイコロの1から6までの目を作ることができそうですね。プログラムは以下のようになります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
import time
import random
sense = SenseHat()
sense.clear()
sense.show_message("Shake to roll!")
b = [0, 0, 0]
g = [0, 255, 0]
r = [255, 0, 0]
one = [
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,r,r,b,b,b,
b,b,b,r,r,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
]
two = [
b,b,b,b,b,b,b,b,
b,g,g,b,b,b,b,b,
b,g,g,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,g,g,b,
b,b,b,b,b,g,g,b,
b,b,b,b,b,b,b,b,
]
three = [
g,g,b,b,b,b,b,b,
g,g,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,g,g,b,b,b,
b,b,b,g,g,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,g,g,
b,b,b,b,b,b,g,g,
]
four = [
b,b,b,b,b,b,b,b,
b,g,g,b,b,g,g,b,
b,g,g,b,b,g,g,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,g,g,b,b,g,g,b,
b,g,g,b,b,g,g,b,
b,b,b,b,b,b,b,b,
]
five = [
g,g,b,b,b,b,g,g,
g,g,b,b,b,b,g,g,
b,b,b,b,b,b,b,b,
b,b,b,g,g,b,b,b,
b,b,b,g,g,b,b,b,
b,b,b,b,b,b,b,b,
g,g,b,b,b,b,g,g,
g,g,b,b,b,b,g,g,
]
six = [
g,g,b,b,b,b,g,g,
g,g,b,b,b,b,g,g,
b,b,b,b,b,b,b,b,
g,g,b,b,b,b,g,g,
g,g,b,b,b,b,g,g,
b,b,b,b,b,b,b,b,
g,g,b,b,b,b,g,g,
g,g,b,b,b,b,g,g,
]
def roll_dice():
    r = random.randint(1,6)
    if r == 1:
        sense.set_pixels(one)
    elif r == 2:
        sense.set_pixels(two)
    elif r == 3:
        sense.set_pixels(three)
    elif r == 4:
        sense.set_pixels(four)
    elif r == 5:
        sense.set_pixels(five)
    elif r == 6:
        sense.set_pixels(six)
try:
    while True:
        x, y, z = sense.get_accelerometer_raw().values()
        x = abs(x)
        y = abs(y)
        z = abs(z)
        if x > 1.4 or y > 1.4 or z > 1.4:
            roll_dice()
            time.sleep(1)
except KeyboardInterrupt:
        sense.clear()

 このプログラムでは、先ほどのようにLEDの色を変えることで1〜6の目を表現するとともに、「r = random.randint(1,6)」でランダムに選んで表示されるようにしています。ラズパイを振ると、それぞれの色の目が表示されます。

Sense HAT 3の目を表示
Sense HAT 1の目を表示

 プログラムの以下の部分で色を指定します。0〜255までの値を入れて変更できます。

b = [0, 0, 0]
g = [0, 255, 0]
r = [255, 0, 0]

 サイコロなら背景は白だろうと、試しに「b = [255, 255, 255]」にしてみましたが、あまりにまぶしくてやめました。青で表示したい場合は「[0, 0, 255]」としてください。

 これまで3回にわたってSense HATを紹介してきました。これにはあとジョイスティックが取り付けられているので、ラズベリーパイ財団のWebサイトを参考にしながら、こちらの活用法についても考えてみてはいかがでしょうか。

Let's block ads! (Why?)


November 23, 2020 at 05:00AM
https://ift.tt/333IYZh

ラズパイの拡張ボード「Sense HAT」に搭載された加速度計、磁力計、ジャイロスコープでサイコロを作る - ITmedia
https://ift.tt/35vzQLu
Mesir News Info
Israel News info
Taiwan News Info
Vietnam News and Info
Japan News and Info Update

Bagikan Berita Ini

0 Response to "ラズパイの拡張ボード「Sense HAT」に搭載された加速度計、磁力計、ジャイロスコープでサイコロを作る - ITmedia"

Post a Comment

Powered by Blogger.