【 第26回 】Pythonでもサーボモーターをフルスイング!( WiringPi 編 )

0
1412

最新の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

次のコマンドで、WiringPi2-Pythonのディレクトリに移動します。

cd WiringPi2-Python

ディレクトリ内のセットアップを実行します。

sudo python3 setup.py install

今回使った部品

  • Raspberry Pi 3 Model B × 1
  • 40Pinフラットリボンケーブル
  • 40Pin T型GPIO拡張ボード
  • ブレットボード × 1
  • サーボモーター SG90 × 1
  • 電源アダプター5V 2.5A × 1
  • microUSB用変換基板 × 1
  • ジャンプワイヤー(オス/オス) × 5
デジタル・マイクロサーボ SG90
梅本合同会社
売り上げランキング: 11,230
サンハヤト USB用変換基板 CK-37
サンハヤト
売り上げランキング: 36,117

実体配線図

回路は【第25回】と同じで、サーボモーターSG-90の電源は、Raspberry Piの電源アダプターとは別の電源アダプターを用意し、microUSB用変換基板を介して供給します。

・モーター端子(茶色) → GND

・microUSB用変換基板(GND) → GND

・モーター端子(赤色) → microUSB用変換基板(VCC)

・モーター端子(橙色) → GPIO12

Python3でサーボモーターを回す

次のコマンドで、ホームディレクトリに戻ります。

cd

Python3を起動します。

sudo python3

WiringPi2をインポートします。

import wiringpi2

次のコマンドで、GPIOを初期化します。

wiringpi2.wiringPiSetupGpio()

“0”が返ってきたら、初期化の完了です。

GPIO12の出力をハードウェアPWMに設定します。

wiringpi2.pinMode(12, wiringpi2.GPIO.PWM_OUTPUT)

PWM出力モードをサーボモーター制御に向いたmark:spaceに設定します。

wiringpi2.pwmSetMode(wiringpi2.GPIO.PWM_MODE_MS)

pwmRangeを既定の10bit:1024とします。

wiringpi2.pwmSetRange(1024)

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°回転しました。

出力を止める為、GPIO12のPWMをデューティー比:0/1024とします。

wiringpi2.pwmWrite(12, 0)

サーボモーターからジジジっという音が消えました。

次のコマンドで、Python3から抜けます。

exit()

GPIO12の設定を既定に戻しておく

念の為、次のコマンドでGPIO12の出力設定を確認します。

gpio readall

BCM列”12(GPIO12)”番の”Mode”列が、”ALT0”のままでした。

次のコマンドでGPIO12の設定を既定に戻しておきます。

gpio -g mode 12 in

もう一度、GPIO12の出力設定を確認します。

gpio readall

BCM列”12(GPIO12)”番の”Mode”列が、”ALT0”から既定の”IN(入力)”に戻っていました。