Raspberry Pi Foundationは2015年にSense HATアドオンをリリースしましたが、このボードは今でも最高のRaspberry Pi HATの一つです。科学的なプラットフォームと8x8のRGB LEDマトリックスを搭載しており、 Raspberry Piプロジェクトにちょっとした楽しみを加えてくれます。Sense HATには、温度、湿度、加速度、方位、気圧のセンサーが多数搭載されています。さらに、プロジェクトで使用できる優れたRGB LEDマトリックスとジョイスティックも付属しています。
Sense HATの制御にはPythonを使用しましたが、ScratchとNode-REDも使用できます。Sense HATは、AstroPiというプロジェクトと並行して開発されました。このプロジェクトでは、2台のRaspberry Pi B+ボードが国際宇宙ステーションに送られました。この2台のRaspberry Piには、専用のSense HATボード、公式のRaspberry Piカメラ、そして宇宙空間でRaspberry Piを保護・冷却するためのカスタム設計のアルミケースが搭載されていました。世界中の子供たちが作成したプロジェクトは、この2台のRaspberry Pi上で実行されました。このプロジェクトは現在も継続しており、ウェブサイト(https://astro-pi.org/ )から参加できます。
このプロジェクトに必要なものは
- 40個のGPIOピンを備えたRaspberry Pi
- センスハット
- microSDカード上のRaspberry Pi OS
これまでに Raspberry Pi をセットアップしたことがない場合は、初めてRaspberry Pi をセットアップする方法、またはキーボード、マウス、画面を必要としない ヘッドレス Raspberry Pi のインストール方法に関する記事を参照してください。
Sense HATをRaspberry Piに接続する
Sense HATをRaspberry Piに接続するのは簡単です。Raspberry Piの電源を切った状態で、Sense HATをすべてのGPIOピンに接続し、Sense HATがRaspberry Piにぴったり重なるように配置します。
付属のスタンドオフを使ってSenseHATをしっかりと固定します。キーボード、マウス、HDMI、micro SDカードを接続し、最後に電源を入れてRaspberry Piをデスクトップに起動します。Raspberry Pi OSは最新バージョンを使用しているため、ソフトウェアやPythonパッケージをインストールする必要はありません。
Sense HAT で Hello World プログラムを書く
新しい技術やソフトウェアを使った最初のプロジェクトは「Hello World」です。これは、キットが動作し、次のステップに進む準備が整っていることを証明します。最初のプロジェクトは、お好みのPythonエディタ(Thonny、IDLE、Mu、またはテキストエディタ)でプログラムするシンプルなスクロールメッセージです。新しいファイルを作成し、text_scroll.pyという名前を付けます。こまめに保存することを忘れないでください。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
1. sense_hat モジュールからSenseHat クラスをインポートし、モジュールを簡単に使用できるようにオブジェクト「sense」を作成します。
from sense_hat import SenseHat
sense = SenseHat()
2.赤と白のRGBカラー値を格納する2つのオブジェクトを作成します。これらのオブジェクトはタプルと呼ばれるデータ格納構造で、作成と破棄は可能ですが、更新はできません。これらのタプルは、Sense() が想定する形式で、特定の色のRGBカラー値を格納します。
red = (255, 0, 0)
white = (255, 255, 255)
3.画面全体にスクロールする メッセージを保存する変数を作成します。
message = "Hello World"
4.例外ハンドラーとループを作成します。ハンドラーはインデントされたコードの実行を試み、ループはプロジェクトコードを継続的に実行します。
try: while True:
5. ループ内で、show_message関数を使ってメッセージを画面に表示します。この場合、「Hello World」とスクロールし、テキストの色はタプルで設定された赤になります。背景色は同じくタプルで設定された白です。スクロール速度は0.1に設定されており、読みやすい速度です。colorのスペルはイギリス英語であることに注意してください。
sense.show_message(message, text_colour=red, back_colour=white, scroll_speed=0.1)
6. ループの外側で例外(この場合はKeyboardInterrupt)を作成します。ユーザーがCtrl + Cを押すと、コードが停止し、Sense HATのLEDマトリックスがクリアされます。
except KeyboardInterrupt: sense.clear()
このプロジェクトのコードは次のようになります。
from sense_hat import SenseHat
sense = SenseHat() red = (255, 0, 0)
white = (255, 255, 255)
message = "Hello World"
try: while True: sense.show_message(message, text_colour=red, back_colour=white, scroll_speed=0.1)
except KeyboardInterrupt: sense.clear()
7.コードを保存し、 Pythonエディタで実行してください。ThonnyとMuには実行/再生ボタンがあります。IDLEはF5キーまたは実行メニューから実行できます。「Hello World」がLEDマトリックスをスクロールするはずです。完了したら、Ctrl + Cを押してマトリックスをクリアしてください。
Raspberry Pi のマジック 8 ボール
マジック8ボールは古典的なゲームです。質問を声に出して、8ボールを振ると、数秒後にメッセージが表示ポータルに浮かび上がり、読む準備が整います。Sense HATを使えば、加速度センサーからの生データを使ってボールが振られたかどうかを判定する現代版を作ることができます。
お気に入りのエディターで新しい Python プロジェクトを作成し、プロジェクト名を 8ball.py にして、頻繁に保存することを忘れないでください。
1. sense_hatモジュールからSenseHatクラスをインポートし、randomモジュールからchoice関数をインポートします。次に、モジュールを簡単に使用できるように「sense」というオブジェクトを作成します。
from sense_hat import SenseHat
from random import choice
sense = SenseHat()
2.赤と白のRGBカラー値を格納する2つのオブジェクトを作成します。これらのオブジェクトはタプルと呼ばれるデータ格納構造で、作成と破棄は可能ですが、更新はできません。これらのタプルは、Sense() が想定する形式で、特定の色のRGBカラー値を格納します。
red = (255, 0, 0)
white = (255, 255, 255)
3.熱心なプレイヤーの質問に対する回答となる5つのテキスト文字列を格納するリスト「answers」を作成します。リストは、他のプログラミング言語では配列として知られています。リストは、0から始まるインデックスを使用してデータを格納します。リストの最初の項目は0の位置にあり、後続の項目はそれぞれ独自の番号を持ちます。リストは作成、破棄、更新できます。
answers = ["Not likely","Chances are slim","Maybe","Quite possibly","Certainly"]
4.例外ハンドラーとループを作成します。ハンドラーはインデントされたコードの実行を試み、ループはプロジェクトコードを継続的に実行します。
try: while True:
5. Sense HAT のオンボード加速度計から生の加速度計データを取得するために使用する オブジェクト「acceleration」を作成します。
acceleration = sense.get_accelerometer_raw()
6.各軸の生の加速度計データを格納するための 3 つの変数 x、y、z を作成します。
x = acceleration['x'] y = acceleration['y'] z = acceleration['z']
7. abs() を使うと、変数 x,y,z を更新して、正負を問わない絶対値を格納できます。変数 x,y,z に格納される値は、Sense HAT の向きに応じて正または負の値になります。このコードでは負の数を理解する必要はなく、数値が閾値を超えると回答が表示されるということを理解するだけで十分です。
x = abs(x) y = abs(y) z = abs(z)
8. 3 つの変数 x、y、z に格納されている値をチェックし、いずれかの値が 1 より大きい場合はインデントされたコード行を実行する 簡単な条件テストを作成します。
if x > 1 or y > 1 or z > 1:
9. show_message 関数を使用し、choice 関数を使ってリスト「answers」から文字列をランダムに選択します。この文字列は、赤いテキストと白い背景でLEDマトリックス上をスクロール表示されます。背景色は、先ほど作成した赤と白のタプルで設定されています。
sense.show_message(choice(answers), text_colour=red, back_colour=white, scroll_speed=0.05)
10. Sense HAT が振られていない場合は、 else 条件を使用してLED マトリックスをクリアします。
else: sense.clear()
11.例外(この場合はKeyboardInterrupt)を作成します。ユーザーがCtrl + Cを押すと、コードが停止し、Sense HATのLEDマトリックスがクリアされます。
except KeyboardInterrupt: sense.clear()
このプロジェクトのコードは次のようになります。
from sense_hat import SenseHat
from random import choice sense = SenseHat() red = (255, 0, 0)
white = (255,255,255)
answers = ["Not likely","Chances are slim","Maybe","Quite possibly","Certainly"] 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_message(choice(answers), text_colour=red, back_colour=white, scroll_speed=0.05) else: sense.clear()
except KeyboardInterrupt: sense.clear()
12.コードを保存して実行します。Sense HATを手に取って軽く振ってみてください。疑問の答えは、ほんの少し振るだけで見つかります。
この記事はもともとLinux Formatマガジンに掲載されたものです。
レス・パウンダーは、トムズ・ハードウェアのアソシエイトエディターです。クリエイティブテクノロジストとして、7年間にわたり、老若男女を問わず、教育と啓発のためのプロジェクトを手がけてきました。Raspberry Pi Foundationと協力し、教師向けトレーニングプログラム「Picademy」の執筆・提供にも携わっています。