連載
ラズパイの拡張ボード「Sense HAT」に搭載された加速度計、磁力計、ジャイロスコープでサイコロを作る:名刺サイズの超小型PC「ラズパイ」で遊ぶ(第31回)(1/2 ページ)
ラズパイ向け拡張ボード「HAT」には加速度計と磁力計、ジャイロスコープの機能も搭載されています。今回はサイコロを作ってみましょう。
ラズパイの拡張ボード「Sense HAT」は、これまで紹介した湿度センサー、気圧センサーの他、加速度計と磁力計、ジャイロスコープの機能を備える「IMU」(Inertial Measurement Unit)を搭載しています。測定できる値は以下の通りです。
- 加速度計:加速力を測定してSense HATがどちらに動いているのかを測定
- 磁力計:コンパスのように地球の磁場を測定
- ジャイロスコープ:Sense HATの運動量と回転を測定
Sense HATは、IMUのセンサーでピッチ、ロール、ヨーのxyz軸3方向の動きを検出できます。
以下のプログラムを記述して「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」という文字がくるくると変わったでしょうか。
続いてご紹介するのは、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を使ったサイコロを作ってみよう
Copyright © ITmedia, Inc. All Rights Reserved.