ICS変換基板の使用方法(2) サーボ制御編(R4改訂版)
【関連記事】
ICS変換基板の使用方法(5) Arduino Nano EveryでKRSサーボを制御
前回の記事に続きまして、今回はICS Library for Arduinoに付属するサンプルプログラムを利用して簡単なサーボの制御を行います。
■プログラム解説
ここからArduino用のプログラム環境であるスケッチを使用します。
『ICS Library for Arduino ver.3』に付属するサンプルプログラムの「KrsServo2」を改造して二つのサーボを制御するプログラムを行います。
まずは、サンプルのままのID0を動かすプログラムをご紹介します。
サンプルプログラムは、「ファイル」→「スケッチ例」→「IcsClass_V300」から開くことができます。
最初に記述されている下記の内容は、ICS機器と通信するための初期設定です。
1 2 3 4 5 6 7 8 9 10 |
#include <IcsHardSerialClass.h> const byte EN_PIN = 2; //Arduinoに接続したenableピンのピン番号 const long BAUDRATE = 115200; //サーボの通信速度 const int TIMEOUT = 1000; //サーボとのシリアル通信に設定する応答待ち時間 //インスタンス+ENピン(2番ピン)およびUARTの指定 //ボードに接続しているシリアルポートに合わせて&Serialを変更してください。 //(&Serial / &Serial1 / &Serial2...) IcsHardSerialClass krs(&Serial1,EN_PIN,BAUDRATE,TIMEOUT); |
下記は、サーボと通信を開始するためのプログラムです。この関数が記述されている場所からArduinoがサーボと通信を開始します。プログラムの最初にsetup()が実行されますのでここに記述してください。
1 2 3 |
void setup() { krs.begin(); //サーボモータの通信初期設定 } |
このloop()の中でサーボなどICS機器に命令を送ります。
1 2 3 4 5 6 7 8 9 10 |
void loop() { krs.setPos(0,7500); //位置指令 ID:0サーボを7500へ 中央 delay(500); //0.5秒待つ krs.setPos(0,9500); //位置指令 ID:0サーボを9500へ 右 delay(500); //0.5秒待つ krs.setPos(0,7500); //位置指令 ID:0サーボを7500へ 中央 delay(500); //0.5秒待つ krs.setPos(0,5500); //位置指令 ID:0サーボを5500へ 左 delay(500); } |
krs.setPos(0,7500);はサーボに角度を指定する関数です。
()内の0は、サーボのIDです。ここを1、2、3などに変更することで角度を指定するサーボを選択することができます。
7500は、サーボの角度です。ICS機器のサーボは中心(ニュートラル位置)が7500になっています。サーボの軸を正面から見た場合、左端は3500、右端は11500で3500~7500~11500の範囲内で可動範囲270°内の角度指定を行います。
可動範囲は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の待ちを用意することができます。
■プログラムの書き込みと実行
サンプルプログラムの「KrsServo2」を書き込んで実行してみます。ICS変換基板のスイッチが「実行」になっているか確認してください。
※Arduino UNO R4などUARTとUSBのSerialが別の場合、ICS変換基板のスイッチは「実行」のまま切り替える必要はありません。
2)ArduinoにUSBケーブルを接続します。
3)スケッチの書き込みボタンを押します。
4)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のサーボがまったく同じ動きをすれば成功です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void loop() { krs.setPos(0,7500); //位置指令 ID:0サーボを7500へ 中央 krs.setPos(1,7500); //位置指令 ID:1サーボを7500へ 中央 delay(500); //0.5秒待つ krs.setPos(0,9500); //位置指令 ID:0サーボを9500へ 右 krs.setPos(1,9500); //位置指令 ID:1サーボを9500へ 右 delay(500); //0.5秒待つ krs.setPos(0,7500); //位置指令 ID:0サーボを7500へ 中央 krs.setPos(1,7500); //位置指令 ID:1サーボを7500へ 中央 delay(500); //0.5秒待つ krs.setPos(0,5500); //位置指令 ID:0サーボを5500へ 左 krs.setPos(1,5500); //位置指令 ID:1サーボを5500へ 左 delay(500); } |
数字を変えたりdelay()の場所を変えることでサーボの動きを変えることができますのでぜひチャレンジしてください。
サーボを複数台増やしても同じように関数を増やせば個別に角度を指定することができます。他にも無線コントローラーKRC-5FHを使用した例もありますので、Arduinoで制御しているロボットを簡単に無線化することができます。
このようにArduinoでICS機器を使用することができますので、ロボットの作成にぜひご利用ください。
次の記事『ICS変換基板の使用方法(3) 無線コントロール編』
前の記事『ICS変換基板の使用方法(1) 準備編(R4改訂版)』