【ロボットプログラミングへの道】Arudino UnoでサーボモータFS90Rを動かす方法


※ 当ページには【広告/PR】を含む場合があります。
2022/05/18
合同会社タコスキングダム|TacosKingdom,LLC.

今回はロボットを動かすのにどうしても欠かせない動力源として、「サーボモータ」を動かしてみます。

例として取り上げるのは、連続で360°回転可能な「
マイクロサーボモータ・FS90R
」という超小型タイプのサーボモータです。

今回は、連続回転可能なサーボモータの使い方の基礎を実機を使って解説していきます。


Arduino Uno Rev3

マイクロサーボモータ・FS90R

合同会社タコスキングダム|タコキンのPスクール【Pschool厳選】お子様に通わせたいロボットプログラミング教室&教材・学習サービスまとめ

サーボモータについての前知識

サーボモータは、一般的に内部にエンコーダと呼ばれる回転位置を記録する仕組みをもち、決まった位置(回転角度)を指定できるようなモーター製品の一つです。

決まった角度で可動させることができるため、ロボットアーム操作、車のハンドル操作などがサーボモータの応用の定番になっています。

Arduino(アルディーノ)などで直接動かせるホビーユースのサーボモータはだいたい以下のような感じになっています。

合同会社タコスキングダム|タコキンのPスクール

通常では+5VDC程度の電源を与えて、回転の制御にPWM(パルス幅変調)波を使って角度位置を指定します。

今回使用する
マイクロサーボモータ・FS90R
は、通常の回転位置を指定して使うサーボモータとは違って、360°回転型の一定速度で連続回転するタイプのサーボモータです。

よって通常の角度位置を指定するようなサーボモータみたいな使い方は出来ないものの、車輪で移動するロボットの動力源のような利用方法が可能となります。

FS90Rの回転方向と速度の調整

マイクロサーボモータ・FS90R
は連続回転に特化したサーボモータであり、制御信号となるPWM波の使い方とその特性を知っておかなれけば上手く使えません。

まず回転方向としては、PWM波形がHIGHになる幅時間で、700〜1500マイクロ秒までが時計回り、1500〜2300マイクロ秒までが反時計周りにそれぞれ回転します。

1500マイクロ秒付近で、サーボモータの回転は停止されます。

また回転速度は5Vで110rpmですので、100%の速度で回っても1秒間に2回に届かない程度の速さです。

FS90Rの使い方で特に気を付けないといけないのは、回転速度の調整のパルス幅特性です。

以下の特性図に示すように、狙いの回転速度に設定できる代物ではなく、大雑把に速度を変化させることがせいぜいです。

合同会社タコスキングダム|タコキンのPスクール

例えば回転速度を50%にしようとしても、だいたい1500〜1600マイクロ秒間に設定すると良いかも知れませんが、厳密に回転速度50%に調整できるわけはありません。

サーボモータの個体ごとにおそらく特性図にバラツキもあったり、動作温度によって特性曲線がパルス幅の大きい側へシフトすることも考えられます。

基本的にサーボモータと言えば、かなり高価なモーターになります。

このFS90Rは高々1個が500円〜1000円程度で買える格安品ですので、減速までやれると考えるとそれだけでも十分良い製品かと思います。


Arduino Uno Rev3

マイクロサーボモータ・FS90R

合同会社タコスキングダム|タコキンのPスクール【Pschool厳選】お子様に通わせたいロボットプログラミング教室&教材・学習サービスまとめ

Arduino Uno実機でFS90Rを回してみる

ここからは実際にアルディーノから
マイクロサーボモータ・FS90R
を回すことを試すために簡単なプログラミングで確かめてみます。

今回テストする構成としては、以下のような模式図のようにしています。

合同会社タコスキングダム|タコキンのPスクール

ではこの模式図通り、早速アルディーノとサーボモータを直接接続します。

合同会社タコスキングダム|タコキンのPスクール

次にアルディーノとArduino IDEのインストールされたパソコンを接続後、以下のようなアルディーノのプログラムスケッチを書き込んでみましょう。

            
            #include <Arduino.h>

//unsigned int pwmWidth = 700; //👈時計回り,回転速度100%
//unsigned int pwmWidth = 1500; //👈回転停止
unsigned int pwmWidth = 2300; //👈反時計回り,回転速度100%

void setup() {
    pinMode(5, OUTPUT);
}

void loop() {
    PORTD |= _BV(5);
    delayMicroseconds(pwmWidth);
    PORTD &= ~_BV(5);
    delayMicroseconds(pwmWidth);
}
        

アルディーノでソフトウェアPWM波形をデジタルピンから出力する方法は別のブログで説明していたので、プログラミングの中身を詳しく知りたい方はそちらの記事を読んでみてください。

参考|【Arduino工作〜基礎編】Arduinoから柔軟なPWM波形を生成する方法

とりあえずこれをアルディーノに書き込んだら以下のように直ぐに回転が始まるはずです。

一つの回転パターンだけだとつまらないので、何パターンかの回転をいっぺんに確認できるように少しプログラムを変更してみましょう。

            
            #include <Arduino.h>

#define WLEN 7

unsigned int w[WLEN] = {700, 1400, 1460, 1500, 1560, 1600, 2300};
unsigned int totalTerm = 3000;

void setup() {
    pinMode(5, OUTPUT);
}

void loop() {
    for (int i=0; i < WLEN; i++) {
        for (int j = 0; j < 1000;j++) {
            PORTD |= _BV(5);
            delayMicroseconds(w[i]);
            PORTD &= ~_BV(5);
            delayMicroseconds(totalTerm - w[i]);
        }
     }
}
        

これで3秒ごとに回転数が切り替わるようにすることができます。

以上、ざっと
マイクロサーボモータ・FS90R
をアルディーノでテストする作業は完了です。

今後、気が向けばまた別の記事で、何か簡単なものでも動かしてみようと思います。


Arduino Uno Rev3

マイクロサーボモータ・FS90R

合同会社タコスキングダム|タコキンのPスクール【Pschool厳選】お子様に通わせたいロボットプログラミング教室&教材・学習サービスまとめ

参考サイト

360度サーボFS90R問題について

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

これからの"地方格差"なきプログラミング教育とは何かを考えながら、 地方密着型プログラミング学習関連テーマの記事を不定期で独自にブログ発信しています。

合同会社タコスキングダム|タコキンのPスクール【Pschool厳選】お子様に通わせたいロボットプログラミング教室&教材・学習サービスまとめ