Day 7|身体:サーボモーターで動く
1. 今日やること
Section titled “1. 今日やること”- サーボモーター(SG90) を配線する
- Picoから角度(0度〜180度) を指定する
- ワイパーのように行ったり来たりさせる
スポンサーリンク(開発中はプレースホルダー)
2. 使う部品
Section titled “2. 使う部品”- Raspberry Pi Pico H / ブレッドボード
- マイクロサーボ SG90 ×1
- ※青い小さな箱に、プロペラのようなアームが付いた部品
- ジャンパーワイヤ(オス-オス) ×3本
3. 完成形(今日のゴール)
Section titled “3. 完成形(今日のゴール)”モーターのアームが「ウィーン」と動いて、指定した角度でピタッと止まります。 ロボットの腕や首を作るための基礎技術です。
Step 1: サーボモーターを知る
Section titled “Step 1: サーボモーターを知る”普通のモーター(ミニ四駆など)は「回るだけ」ですが、サーボモーターは 「指定した角度になれ!」 という命令を聞きます。 線は3本あります。
- 茶色(または黒):GND(マイナス)
- 赤色:電源(プラス)
- オレンジ(または黄色):信号(命令)
Step 2: 配線する
Section titled “Step 2: 配線する”- 茶色 → GND
- 赤色 → VBUS(またはVSYS)
- 重要!: 今までは3.3Vでしたが、モーターはパワーが必要です。VBUS(USBからの5V電源) に繋ぎます。Picoの40番ピンです。
- オレンジ → GP15(PWM信号)
注意! 配線を間違えると、Picoが一瞬で壊れる(ショートする)ことがあります。電源を入れる前に、赤の線が本当にVBUSか、茶色がGNDか、指差し確認してください。
5. コード
Section titled “5. コード”import machineimport time
# サーボはPWMで制御します(周波数は50Hzがお約束)servo = machine.PWM(machine.Pin(15))servo.freq(50)
# 角度(0-180)を、PWMのDuty値(整数)に変換する計算式# ※SG90の仕様に合わせて調整していますdef set_angle(angle): # 0度=約2000, 180度=約8000 (個体差あり) duty = int((angle / 180 * 6000) + 2000) servo.duty_u16(duty)
while True: # 0度へ set_angle(0) time.sleep(1)
# 90度へ set_angle(90) time.sleep(1)
# 180度へ set_angle(180) time.sleep(1)6. つまずきログ
Section titled “6. つまずきログ”⚠️ Picoの電源が落ちる / 再起動する
- 原因: 電力不足
- → モーターが動き出す瞬間、大量の電気を食います。PCのUSBポートの電力供給が追いつかず、Picoごと一緒に落ちている可能性があります。
- → 基本的には外部電源を使いますが、SG90 1個ならUSB接続位置を変える(ハブを使わず直挿しする)などで改善することがあります。
⚠️ ジジジ...と震えて止まらない
- 原因: 無理な角度
- → 安いサーボは、本当に0度や180度まで行けないことがあります。「5度〜175度」くらいに範囲を狭めてみてください。
7. 文系への翻訳
Section titled “7. 文系への翻訳”- VBUS (5V): Picoを素通りしてきた、USBケーブル直結の強力な電気。「太い水流」。
- 3V3: Picoの中で優しく整えられた電気。「おちょこの水」。計算には使えるけど、力仕事(モーター)には足りない。
- Duty比(サーボ編): ここでは「右腕をどこまで上げるか」という角度の指示書になります。
8. 今日の達成
Section titled “8. 今日の達成”「物理的に動く『筋肉』を手に入れた!」
ここまでで「入力」「判断」「出力(光/音/動作)」が揃いました。 次回はこれらを統合して、「周りの明るさに反応して動く」自律ロボットの原型を作ります。