IMG_0640RCサーボはロボットやラジコンなどに使われる、正確に角度をコントロールできるモーターですが、私は今まで触ったことがありません。Raspberry Piでサーボモーターを制御すれば、Raspberry Piを歩かせたりできるんじゃないか!?かつて暇だった頃に作った「歩く玄箱」や「走る!マザーボード・ロボ」がRaspberry Piで作れるんじゃないか!?というしょうもない発想から、RCサーボをを動かす実験をしてみました。

RCサーボを動かす前に、まずは仕組みを知ることから。調べてみると一定の周期でパルス信号を与え、パルスの幅を変えていくと角度が変わる仕組みだそうです。このような制御方法をPWM制御と言うらしい。

バルスつまりRaspberry Piでパルスを信号を作ってあげればいいわけですね。Raspberry PiにはGPIO端子があるので、前回LEDを光らせた要領で、GPIOを制御してみたいと思います。

ということでまずは千石電商でMiniS RB90というRCサーボを入手。この辺全然知識がないので、とりあえず安いからという理由で選びました。今回は実験なので動けばOKです。モーターは大きな電流を必要とするので、モーター用の電源を別に取りました。

続いてソフトウェア。私はポインタで挫折したのでC言語は使えません。なのでPHPで作ります。(笑) 基本なんでもかんでもPHPで作る派です。細かい部分は割愛しますが、作り方としてはこんな感じです。
usleep($sw);
gpio_out(1);
usleep($swn);
gpio_out(0);
function gpio_out($data) {
secho($data,"/sys/class/gpio/gpio".PORT."/value");
}
function secho($data,$dev) {
$fp = fopen($dev,"w");
fputs($fp,$data);
fclose($fp);
}
usleep()でパルスの幅を作ってるだけです。

そして、実際に動かしてみたときの動画がこちら。
動画ではわかりにくいですが、軸が動いてないときでもジーッという音を立てて微動しています。これはPHPで作ったパルスの幅が一定ではないためのようです。

ちなみにRaspberry PiはPWMを出力できるらしいので、こんなことをしなくても正確な信号を安定して出力できるようです。私のやりたいのはRaspberry Piを歩かせることなので、そうすると4本足なら4個もしくは8個のサーボモーターが必要になると思います。さすがにGPIOの各ピンずつに接続していたのではチャンネルが足らないな…。

と思ってたら、こんな便利なものを見つけました。
スイッチサイエンス PCA9685搭載16チャネル PWM/サーボ ドライバー (I2C接続)
なんと1つのI2Cのポートから16チャンネルも制御できるではありませんか!これを使えば動かしたいサーボモーターに対してコマンドを送信するだけで、指定したように動く、はず。

もう少しちゃんとサーボモーターの使い方を勉強して、こんなロボットを作ってみたいです。


※DIY動画を集めてみました Raspberry PiのDIY動画まとめ