皆さんこんにちは!こんばんは!!ロト君です。
今回は、ラズパイ4Bを使ってロボットを作成したいと思ったので、記事にしてみました。
必要なモノ
必要なモノとして下記があります。
- Raspberry Pi 4B本体
- 安定化電源
- サーボモータ
- ジャンパ線
- ブレッドボード
- PS5 コントローラ
です。






Python3で使うライブラリのvenv環境構築
プログラム自体はPythonで記載します。
初期のライブラリに入っていない可能性があるため、環境を構築します。
SSH接続状態でターミナルより、
python3 -m venv venv
を、打ち込み仮想環境を設定します。
Python3は仮想環境でないとインストール出来ない仕様?になってるようなので、
source venv/bin/activate
で、仮想環境をアクティブします。
音声環境には、
sudo apt install portaudio19-dev
pip install sounddevice soundfile numpy
を、使います。(おそらく最新はver20があるかも・・・。)
公式サイト:https://files.portaudio.com
RP4BのGPIO用には、
pip install rpi.gpio
を、使います。
PS5コントローラ用には、
sudo apt update
sudo apt install -y python3-pip
pip3 install pygame
pygameを使います。
フォルダ構成
データの構成は、「Desktop/test_servo/」中に私の環境ではしています。
「***.wav」や「***.py」はその中です。
実際のコード
私が書いたコードは下記のものです。
import pygame
import time
WAV_PATH = "/home/lotokunn/Desktop/test_servo/maou_se_8bit22.wav"
pygame.init()
# 音(mixer)
pygame.mixer.init(frequency=48000) # Piは48000が安定しやすい
se = pygame.mixer.Sound(WAV_PATH)
# コントローラ
pygame.joystick.init()
if pygame.joystick.get_count() == 0:
raise RuntimeError("コントローラーが見つかりません(USB/BT接続を確認)")
js = pygame.joystick.Joystick(0)
js.init()
prev_b0 = 0
try:
while True:
pygame.event.pump()
lx = js.get_axis(0)
ly = js.get_axis(1)
rx = js.get_axis(2)
ry = js.get_axis(5)
b0 = js.get_button(0)
# 押した瞬間だけ鳴らす
if b0 == 1 and prev_b0 == 0:
se.stop() # 連打時に重ねたくないなら
se.play()
prev_b0 = b0
print(f"lx={lx:+.2f} ly={ly:+.2f} rx={rx:+.2f} ry={ry:+.2f} b0={b0}", end="\r")
time.sleep(0.02)
except KeyboardInterrupt:
pass
上記のコードは簡易版です。サーボのDT比率やPWMはまだ書いていません。
コードの特徴として、
# 押した瞬間だけ鳴らす
if b0 == 1 and prev_b0 == 0:
se.stop() # 連打時に重ねたくないなら
se.play()
prev_b0 = b0
の様に、連打防止、初回トリガー設定をしています。
WAV_PATH = "/home/lotokunn/Desktop/test_servo/maou_se_8bit22.wav"
WAV_PATHはご自身の環境に合わせて書いて下さい。
まとめ
久しぶりにロボットを作る環境を構築しましたが、昔よりは簡単になっていましたので驚きました。PIC12F675シリーズで作っていた時が懐かしく思います。
当時は、C言語で作ってました。笑)
4月10日までに何か面白いロボットを作りたいと思いますので!
こう!ご期待???!では、( ;∀;)ノシ3













コメントを残す