LoginSignup
2
0

More than 1 year has passed since last update.

Raspberry Pi Build HATでSpike primeのアクチュエータを動かしてみた

Last updated at Posted at 2022-12-09

はじめに

  • Spike Primeのセットに含まれるセンサ&アクチュエータむっちゃ高級だった。
  • Raspberry Piみたいな高級な頭脳でなにかしたい。
  • Raspberry Pi Build Hatを使ってメカを動かしてみる。

注意書き

本記事は下記の条件を満たす読者を想定しています。
何があっても自己責任にてお願いします。

  • Raspberry Piのネットワークの設定やPython3のインストールは既に完了している。
  • Pythonのコードが何となく目追いできる。
  • 万が一貴重なラズパイが破損しても「しょうがない」の一言で割り切れる。

Raspberry Pi Build Hatについて

RaspberryPi Fundation公式のHAT。
2022/11/4(金)確認にて、Switchscienceさん等で入手可能。

注意ポイントとして、アクチュエータ類を動かすためには8V±10%の電源が必要。 一応SwitchScienceさんで購入できるけど、今回は1.2Vのニッケル水素電池を6本直列にして7.2Vで動かしてみる。

 電源を確保する方法について 今回は単3 1.2Vののニッケル水素電池を6本使って7.2Vを作る。

1.5Vを出力する乾電池を使うと公称値に対して電圧オーバーして故障・破損する可能性があります。

また、電池とBuild HatをつなぐにはDCプラグ付きバッテリースナップを使う。Build Hatのジャックは下記の規格(2.1mm バレルジャック)なため、同じDCプラグを用意する。

  • 内径:2.1mm
  • 外径:5.5mm
  • 極性:センタープラス

電池ボックス

https://akizukidenshi.com/catalog/g/gP-10611/

DCプラグ付きバッテリースナップ

https://akizukidenshi.com/catalog/g/gP-07357/

あるいはこういう手段もあり
2.1mm標準DCプラグ⇔スクリュー端子台

また、1.5Vの単三電池を使う場合はこれをつかってもいいかも。
スイッチサイエンス 単三電池5本を2.1mmDCプラグで出力できる電池ボックス

使ったもの

入手先は一例です。多分もっと安いところはあると思う。

物品名 スペック 入手先
Raspberry Pi 4B メモリ8GBモデル スイッチサイエンス
SDカード microSDHC class10 64GB ヨドバシとか。
Raspberry Pi Build Hat - スイッチサイエンス
電池ボックス 単3×6本 Bスナップ・背中合わせ 秋月電子通商
2.1mmDCプラグ付バッテリースナップ 横型 秋月電子通商
ニッケル水素充電池(LADDA) 6本 単3 1.2V 2400 mAh IKEA
LEGO Spike Prime(45678) Amazon

Spike Primeに関して、本記事の内容を試してみたいだけであればこちらで最低限分を揃えるのもありかも?
LEGO エデュケーション スパイク プライム 拡張セット (45681)

組み立てた結果

ラズパイ側に電源は不要。Raspberry Pi Build HATから給電できるはず。
基本は差し込めばいいだけなので説明は特になし。
(今回はモーターをPortD、カラーセンサをPortAに差し込みました。)

314332089_5754617934645400_8061674615646940945_n.jpg

動作環境

対象 スペック
Raspberry Pi OS 64bit, Debian version: 11 (bullseye) 
python 3.9.2
python build hat
(Raspberry pi Build HAT python Library)
0.5.11

その他モジュールは下記の通りです。

pip freeze
buildhat==0.5.11
colorzero==2.0
gpiozero==1.6.2
pyserial==3.5

Raspberry pi Build HAT Python Libraryについて

ライブラリのインストール方法や使用方法はこちらにまとまっている。

Build Hatを使うためにはシリアルポートを有効にする必要があるが、この時シリアル経由でシェルへログインできるようにする旨の選択で必ず**No(いいえ)**を選択する。逆にハードウェアシリアルポートについては有効にするため*Yes(はい)*を選択する必要がある。

(シリアル経由でシェルへログインできる設定をするとBuild Hatライブラリが動作しない。)

スクリーンショット 2022-11-05 15.13.09.png

スクリーンショット 2022-11-05 15.13.15.png

スクリーンショット 2022-11-05 15.13.20.png

また、非rootユーザーが使えるように/dev/serial0の権限を変更する必要もあるため注意。

権限変更(もともとは644のはず)
sudo chmod 666 /dev/serial0

センサー値をとってみる。

カラーセンサを使ってみる。ほぼほぼサンプルコード使いまわし。
動作に成功するとライトが点灯してセンサー値が出力されるはず。

ColorSensor.py
from buildhat import ColorSensor

color = ColorSensor('A')

print("HSV=", color.get_color_hsv())
print("RGBI=", color.get_color_rgbi())
print("Ambient=", color.get_ambient_light())
print("Reflected=", color.get_reflected_light())

print("Wait color red")
color.wait_until_color("red")
print("Detect color red!")

while True:
    c = color.wait_for_new_color()
    print("Detect new color:",c)

アクチュエータを動かしてみる

モーターを動かしてみる。

motor.py
from buildhat import Motor

motor = Motor('D')

def handle_motor(speed, pos, apos):
    print("Motor", speed, pos, apos)

motor.when_rotated = handle_motor
# 最高速は100
motor.set_default_speed(50)
motor.run_for_degrees(360)

アクチュエータを動かしてみる

LEGOブロックの色に応じてモータの角度を変える。
正味11行でこれを実現できるってすごい。

colorselect.py
from buildhat import Motor,ColorSensor

motor = Motor('D')
color = ColorSensor('A')

while True:
    c = color.wait_for_new_color()
    print("Detect new color:",c)
    if(c=="red"):
        motor.run_to_position(0)
    elif(c=="blue"):
        motor.run_to_position(-90)
    elif(c=="yellow"):
        motor.run_to_position(90)

まとめ

  • 物品を揃えるのと環境構築が少しダルいかもしれない。
  • ワンセット揃えると楽。シリアル通信などに関するダルい初期化処理がないから非ハード屋でもさっさとコードがかける。
  • 公式のブロックプログラミング環境で抽象化されて見えなかった値が見えたりするのでおもしろい。
  • LEGO関係は財布に痛い。(おい)
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0