最新のRaspbianにはGPIO制御ライブラリWiringPiがプリインストールされていて【第25回】でもLXTerminalで実行できたので、Pythonでもこのままで使えるのかと思っていました。ところが、元々、C言語で書かれたWiringPiをPythonで使うには、WiringPi2-Pythonという別のパッケージをインストールする必要があることが分かりました。
WiringPi2-Pythonのインストール
LXTerminalを起動し、次のコマンドでWiringPi2-Pythonのパッケージをダウンロードします。
git clone https://github.com/neuralassembly/WiringPi2-Python.git
今回使った部品
- Raspberry Pi 3 Model B × 1
- 40Pinフラットリボンケーブル
- 40Pin T型GPIO拡張ボード
- ブレットボード × 1
- サーボモーター SG90 × 1
- 電源アダプター5V 2.5A × 1
- microUSB用変換基板 × 1
- ジャンプワイヤー(オス/オス) × 5
実体配線図
回路は【第25回】と同じで、サーボモーターSG-90の電源は、Raspberry Piの電源アダプターとは別の電源アダプターを用意し、microUSB用変換基板を介して供給します。
・モーター端子(茶色) → GND
・microUSB用変換基板(GND) → GND
・モーター端子(赤色) → microUSB用変換基板(VCC)
・モーター端子(橙色) → GPIO12
Python3でサーボモーターを回す
“0”が返ってきたら、初期化の完了です。
GPIO12の出力をハードウェアPWMに設定します。
wiringpi2.pinMode(12, wiringpi2.GPIO.PWM_OUTPUT)
PWM出力モードをサーボモーター制御に向いたmark:spaceに設定します。
wiringpi2.pwmSetMode(wiringpi2.GPIO.PWM_MODE_MS)
pwmClockは【第25回】での計算通り、375とします。
wiringpi2.pwmSetClock(375)
【第25回】での計算から、サーボモーターのフルスイングの中央を狙って、GPIO12のPWMをデューティー比:74/1024とします。
wiringpi2.pwmWrite(12, 74)
ジジジっという音と共にサーボモーターのアームがフルスイングの中央まで回転しました。
【第25回】での計算から、サーボモーターのフルスイングを目指して、GPIO12のPWMをデューティー比:25/1024とします。
wiringpi2.pwmWrite(12, 25)
サーボモーターのアームが時計方向に90°回転しました。
【第25回】での計算から、今度は逆方向にフルスイングを目指して、GPIO12のPWMをデューティー比:123/1024とします。
wiringpi2.pwmWrite(12, 123)
今度は、サーボモーターのアームが反時計方向に180°回転しました。
サーボモーターからジジジっという音が消えました。