Raspberry Pi Build HATで遊んでみた

スポンサーリンク

ずいぶんLEGOやラズパイの情報をチェックしてなかったけど、「Raspberry Pi Build HAT」という製品が発売されていたのを今更発見。 早速スイッチサイエンスさんで購入して遊んでみた。

とりあえずゲームパッドでレゴのLEDを変化させてみた

前回、ラズパイからゲームパッドの情報を取得できたので、それを使ってレゴ距離センサーに付いている4つのLEDを制御してみた。
(というか距離センサーにLED付いているのを初めて知った。さらに、ネジを外すと拡張コネクタがあるなんて知らなかった。)

確認した環境

ハード: Raspberry Pi 3 model B、Raspberry Pi Build HAT、F710ワイヤレス ゲームパッド OS: Raspberry Pi OS (32bit)

初期セットアップ

おおまかな初期セットアップは下記を行うだけ。簡単簡単。
詳しくは公式ドキュメント参照。

・ラズパイにBuild HATを載せる。
・ラズパイのシリアル通信を有効、シリアルコンソールを無効にする。
Pythonライブラリをインストール

$ pip3 install buildhat

コントローラーでセンサーのLEDを操作するプログラム

下記プログラムをファイルに保存して、実行すれば出来上がり。

sensor_test.py

import os
import pygame
from buildhat import DistanceSensor, Hat
from pygame.locals import *

os.environ["SDL_VIDEODRIVER"] = "dummy"
pygame.init()

pygame.joystick.init()
joy = pygame.joystick.Joystick(0)
joy.init()

hat = Hat()
sensor = DistanceSensor('A')

print('Hat voltage = %f' % hat.get_vin())

while True:
    pygame.time.wait(30)
    for e in pygame.event.get():
        if e.type == pygame.locals.JOYBUTTONDOWN or e.type == pygame.locals.JOYBUTTONUP:
            right_upper = joy.get_button(2) * 100
            left_upper = joy.get_button(3) * 100
            right_lower = joy.get_button(0) * 100
            left_lower = joy.get_button(1) * 100
            sensor.eyes(right_upper, left_upper, right_lower, left_lower)

        if e.type == pygame.locals.JOYBUTTONDOWN:
            print('BUTTON %d DOWN' % e.button)
            if e.button == 4:
                print('distance = %f' % float(sensor.get_distance() / 10))
        elif e.type == pygame.locals.JOYBUTTONUP:
            print('BUTTON %d UP ' % e.button)

結果

ラズパイからLEGOのモーターやセンサーなどがお手軽に制御できるので大満足。

メモ

ラズパイをレゴに固定する方法

公式ドキュメントにはBBEという名前のメイカープレートが出てくる。
このメーカープレートは新しく発売されたSPIKE Prime拡張セットのパーツで、単独では売ってない。
他の固定方法は、こちらのページの「Raspberry Pi と Build HAT を LEGO® に取り付ける」をクリックすると表示される。
それ以外の方法としては、3Dプリンタで作ったメイカープレートのデータを公開してくれている人がいたので、こちらを使いました。

Build HatのLED

プログラムでも書き換え可能だけど、初期の内容は次のとおり。
赤:ファームウェアがロードされてない
緑:ファームウェアがロード済み

buildhat.exc.BuildHATError: HAT not foundエラーの対処法

プログラム実行時に時々HAT not foundと表示されてしまうことがあった。
自分の場合、原因はだいたいが自分の使い方のミスで、次のような原因だった。
・既に別のターミナルやバックグラウンドでBuild hatを使うプログラムを実行中
・シリアル通信が行えない状態(というケースもあるらしい。未確認)
・電力不足

その他

・電源ジャックは、2.1mm標準DCジャック(内径2.1mm、外径5.5mm)。
・電源ON後、初回のプログラム実行は数秒待たされる。Build Hatのファームウェアを電源投入後に1度だけロードするっぽい。

リンク

公式ページ
公式ドキュメント
Build HATのライブラリのリファレンス
Build HATのライブラリのソース

公式の作品例(日本語)
ラズパイ-ビルドHat間で行われているシリアル通信の内容

LEGO SPIKE Primeの仕様