- Raspberry Pi 3 Model B × 1
- 40Pinフラットリボンケーブル
- 40Pin T型GPIO拡張ボード
- ブレットボード × 1
- サーボモーター SG90 × 1
- 電源アダプター5V 2.5A × 1
- microUSB用変換基板 × 1
- ジャンプワイヤー(オス/オス) × 5
実体配線図
回路は【第24回】と同じで、サーボモーターSG-90の電源は、Raspberry Piの電源アダプターとは別の電源アダプターを用意し、microUSB用変換基板を介して供給します。
・モーター端子(茶色) → GND
・microUSB用変換基板(GND) → GND
・モーター端子(赤色) → microUSB用変換基板(VCC)
・モーター端子(橙色) → GPIO12
GPIO出力に影響する音声出力を無効にしておく
GPIO12の出力モードをハードウェアPWMに設定する
下のコマンドで実行結果を確認します。
gpio readall
BCM列”12(GPIO12)”番の”Mode”列が、既定の”IN(入力)”から”ALT0”に変わっています。この”ALT0”は下のSoCのデータシート ↓ の拡張機能”ALT0″を示し、GPIO12の”ALT0”列を見ると”PWM0″と表示されていて、PWM出力の”0″チャンネルを表します。
GPIO12の出力モードをハードウェアPWMに設定する
ハードウェアPWMによるサーボモーターの制御方法については、
Adafruit’s Raspberry Pi Lesson 8. Using a Servo Motor
ここ ↑ の情報を参考にさせていただきました。但し、使用するツールの”WiringPi”は、最新のRaspbianには既にプリインストールされているので、あらためてインストールする必要はありません。
ハードウェアPWMの出力は、
・PWM Frequency in Hz = 19,200,000 Hz / pwmClock / pwmRange
の式で設定されますが、サーボモーター SG90のデータシート ↑ から
・PWM Frequency in Hz = 50 Hz
・pwmRangeを既定の10bit:1024とすると、
・pwmClock = 19,200,000 Hz / PWM Frequency in Hz / pwmRange
・・・・・・・= 192,00,000 / 50 / 1024
・・・・・・・= 375
となります。
LXTerminalに戻り、次のコマンドでPWMの出力モードを”mark:space“に設定します。
gpio pwm-ms
続けて、pwmRangeとpwmClockの値を設定します。
gpio pwmc 375
gpio pwmr 1024
指定した回転角でサーボモーターを回す
さすがはハードウェアPWMというべきか、フルスイングの中央から+90°、そこから-90°まで指定通りに180°回転します。こうじゃなきゃロボットでも飛行機でも制御はできません。