プログラムと電子工作の置き場、たまにコラム

日々のスニペットやMaker's系のプログラムを置いてきます。

サーボモーターを動かす

サーボモータと言えばラジコン等でよく目にすることが多いですが、
どのようなものかというと下記の動画をご覧いただくのがよいと思います。

How to do Flag waving directly on Raspberry Pi with no add-on board - YouTube

wikipediaによるサーボモーターの項目によるとホビーユースのサーボモーターでは
標準規格化されていないと書いています。

確かにサーボモーターのデータシートを見ると
各社で数値採用している数値は、統一されていない印象があります。

このサーボモーターを制御するためには、LEDの項目で出てきた、PWMのパルス信号を送ります。
ある一定の周期でパルスを送るのですが、このパルス幅に応じてモーターの目標角度が決まります。
f:id:yuriai0001:20141227101955p:plain
サーボモーターは連続して回転できるわけではないため、角度は0度~概ね180度までしか動作しないことに注意してください。

今回利用するサーボモーターにはメーカー標準のデーターシートが見つからなかったため、
TowerPro SG90 Servo Specifications and Reviews
上記で確認しました。

パルスの周期は?になっており、 パルス幅は5-24msのようです。
先ほど標準規格がないと書きましたが、他の個体のパルス周期は15~20msが標準で採用されている
ようなので、今回は20msを採用してみましょう。

今回はおなじみの、WiringPiとC言語を使ってパルスを制御していきます。
マイコンによるPWM制御に関して、興味を持った方は、他の専門書を参照いただくことにして、
ここではまず、サーボを動かすことを最終目的に取り組んでいきます。

Raspberry Piの内部電源だけでなく、電池を利用して電力を供給します。
市販のアルカリ電池、もしくはエネループのような充電式でもOKです。


サーボモーターからは3本の線がでており、コネクターにつながっていますが、
オレンジはGPIO18 につながるように、 赤:電池のプラス 茶色:GNDに接続します。
また、1kオームの抵抗をサーボが故障した場合を考えて、配置しておきます。
サーボモーターのワイヤーの色は違いますが、回路図を参照してください。

f:id:yuriai0001:20141227125906j:plain

設定数値等参考にさせていただきました。
RaspberryPiとWiringPiでサーボを動かす - Qiita

#include <stdio.h>
#include <wiringPi.h>
int main()
{
pinMode(18,PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);
pwmSetClock(400);
pwmSetRange(1024);

while(1){
    int num;
    scanf("%i",&num);
    printf("%d\n",num);

    if(num == -1){
      break;
  }
    pwmWrite(18,num);
  }
    return 0;
 }

これを前回の、圧電スピーカー時と同様に、コンパイルしてあげます。
圧電スピーカーで音階を奏でる - Raspberry Pi 電子工作

プログラムを起動したのちに、パルス幅をコンソールに入力することによって、サーボモーターの角度が変化します。上記サイトの例にならい、24、115と入力するとサーボが動くのを確認できると思います。


いままで、Raspberry Piを使った様々な電子工作プログラムを試してきましたが、例えば、サーボであったり、温湿度センサーであったり、比較的安価な値段で購入することが可能です。

特に秋月電子さんは豊富な品ぞろえと通販にも対応しており、非常におすすめできるお店です。
秋月電子通商 トップページ - 電子部品・半導体 【通販・販売】
今後、自分で工作を考えるときにはこのようなお店でパーツを自主的に入手しましょう。
https://mrprc.stores.jp/items/57da4b629821ccec24000459