Raspberry Pi3のAndroid ThingsでSG90をPWM制御

Android ThingsでPWM制御してサーボモータを動かしてみます。

今回はSG90を使います。

 

■公式


https://developer.android.com/things/sdk/pio/pwm.html

https://github.com/androidthings/sample-simplepio/blob/master/pwm/src/main/java/com/example/androidthings/simplepio/PWMActivity.java

ほぼ公式ページのサンプル通りですぐに試せます。

■SG90の接続


秋月電子様のサイトに仕様書がありますので使わせて頂きます。

http://akizukidenshi.com/catalog/g/gM-08761/

ケーブルの色が手元にあるものと仕様書でどう見ても違う気がしたので何度も確認してしまいました。

黄色:制御信号
オレンジ:電源
茶色:GND

https://developer.android.com/things/hardware/raspberrypi-io.html

によるとPWMピンは PWM 0 (BCM 18) と PWM 1 (BCM 13) なので、

今回はPWM0につなげてみます。

仕様に合わせて定義など。

 

公式のPWM解説ページの例では 120Hz (8.33ms周期)で Duty = 25%になっている。

SG90はデータシートによると

PWM Periodは 50Hz で、
DUTY=1.45msでポジション0(真ん中)
DUTY = 2.4で90度
DUTY = 0.5でー90度

となっている。

 

■PWMピンへのアクセス


PWMポートへの接続にポート名が必要。この辺はGPIOと同様。
ポート名のリストは
PeripheralManagerService.getPwmList() で取得できる。

PWM0, PWM1
という名前が取得できるので、これを使ってopenする。

PeripheralManagerServiceのopenPwm(ポート名)でオープンできる。
onDestroy()など不要になるタイミングでclose()すること。

 

■PWM信号の設定


最初にシグナルをアクティブにする前に設定しないといけない。
シグナルをアクティブにするには setEnable(true)をコール。非アクティブにするにはsetEnable(false)。

後は、公式サンプルのようにhandlerのpostDelayed()を使うなどして周期的に角度を変える設定を行うとモーターが動きます。

 

■実行例