ICS変換基板の使用方法(2) サーボ制御編

Posted on 2017.08.04 in

 

03126_1

前回の記事に続きまして、今回はICS Library for Arduinoに付属するサンプルプログラムを利用して簡単なサーボの制御を行います。

 

 【ここまでの関連記事】

  『ICS変換基板の使用方法(1) 準備編』 

■プログラム解説 

ここからArduino用のプログラム環境であるスケッチを使用します。

『ICS Library for Arduino』に付属するサンプルプログラムの「KrsServo1」を改造して二つのサーボを制御するプログラムを行います。

まずは、サンプルのままのID0を動かすプログラムをご紹介します。

 

サンプルプログラムは、「ファイル」→「スケッチ例」→「IcsClass_V100」から開くことができます。

ICS_Board20170725_15

 

最初に記述されている下記の内容は、ICS機器と通信するための初期設定です。Arduino UNOでは変更する箇所はありませんのでそのまま使用します。  

 

 

下記は、サーボと通信を開始するためのプログラムです。この関数が記述されている場所からArduinoがサーボと通信を開始します。プログラムの最初にsetup()が実行されますのでここに記述してください。

 

 

このloop()の中でサーボなどICS機器に命令を送ります。

 

krs.setPos(0,7500);はサーボに角度を指定する関数です。

()内の0は、サーボのIDです。ここを1、2、3などに変更することで角度を指定するサーボを選択することができます。

7500は、サーボの角度です。ICS機器のサーボは中心(ニュートラル位置)が7500になっています。サーボの軸を正面から見た場合、左端は3500、右端は11500で3500~7500~11500の範囲内で可動範囲270°内の角度指定を行います。

SE_20170209_6

可動範囲は3500~11500となりますので、指定する範囲は、11500-3500=8000となります。サーボは、270°の範囲で動作しますのでパラメータ1で0.03375°となります。

※サーボに搭載している角度センサーの性能やギヤのバックラッシュなどで0.03375°単位での細かい指定はできません。また、到達地点に多少のズレが生じる場合があります。

 

loop()内の3行目で指定している9500は、9500-7500=2000ですので、右に67.5°移動するように指示しています。対しまして7行目の5500は、左側に67.5°移動するように指示しています。

 

delay();は、何もせずに待つための関数です。サーボが動き出してからすぐに次の命令を送ると到達前に次の角度へ移動する可能性がありますので、多少の待ちを用意する必要があります。

delayの()内は1で1msを指定できます。1msは、1000分の1秒です。500を指定すると500msの待ちを用意することができます。

 

■プログラムの書き込みと実行

サンプルプログラムの「KrsServo1」を書き込んで実行してみます。

1)ICS変換基板上のスイッチを「書込」に切り替えます。

ICS_Board20170725_17

 

2)ArduinoにUSBケーブルを接続します。

 

3)スケッチの書き込みボタンを押します。

ICS_Board20170725_16

 

4)書き込みが正常に完了したらArduinoのUSBケーブルを抜き、ICS変換基板上のスイッチを「実行」に切り替えます。

(プログラムの書き込みが完了すると、Ardionoは自動でプログラムを実行します。スイッチを「実行」に切り替えてからサーボにコマンドが流れますが、その際にプログラムの途中からサーボに命令が行くとサーボが思わぬ方向に動いてしまう場合があります。安全のため、一度USBケーブルを抜きサーボの電源をいれてからプログラムを実行させましょう)

ICS_Board20170725_18

 

5)ICS変換基板に接続した電源をONにするとサーボが動きます。

 

【サーボの動作】

7500(中心:0°)=> 9500(右に67.5°) => 7500(中心:0°) => 5500(左に67.5°)...(以下ループ)

電源投入直後に0°のニュートラル位置に移動し、500ms後に右へ67.5°の位置に移動します。次に再びニュートラル位置に移動し、さらに左へ67.5°の位置に移動します。

loop()内のプログラムは、繰り返し再生されますので、サーボは電源がOFFにならない限り上記の動作を繰り返します。

 

■プログラムを改造する

それでは、このプログラムにID1を追加してみます。やり方は非常に簡単で、krs.setPos(1,xxxx);を追加するだけです。下記の通り記述してプログラムを実行してください。ID0とID1のサーボがまったく同じ動きをすれば成功です。

 

 

数字を変えたりdelay()の場所を変えることでサーボの動きを変えることができますのでぜひチャレンジしてください。

 

サーボを複数台増やしても同じように関数を増やせば個別に角度を指定することができます。他にも無線コントローラーKRC-5FHを使用した例もありますので、Arduinoで制御しているロボットを簡単に無線化することができます。

このようにArduinoでICS機器を使用することができますので、ロボットの作成にぜひご利用ください。

以上です。

 

 『ICS変換基板の使用方法(3) 無線コントロール編』

 

ICS変換基板の詳細をみる ICS変換基板シールドの詳細をみる