ICS変換基板の使用方法(2) サーボ制御編
【関連記事】
ICS変換基板の使用方法(5) Arduino Nano EveryでKRSサーボを制御
前回の記事に続きまして、今回はICS Library for Arduinoに付属するサンプルプログラムを利用して簡単なサーボの制御を行います。
■プログラム解説
ここからArduino用のプログラム環境であるスケッチを使用します。
『ICS Library for Arduino ver.2』に付属するサンプルプログラムの「KrsServo1」を改造して二つのサーボを制御するプログラムを行います。
まずは、サンプルのままのID0を動かすプログラムをご紹介します。
サンプルプログラムは、「ファイル」→「スケッチ例」→「IcsClass_V200」から開くことができます。
最初に記述されている下記の内容は、ICS機器と通信するための初期設定です。HardwareSerial、SoftwareSerialで初期設定の方法が異なります。ただし、この箇所以降は、各関数を同じように使用できますので、異なるポイントだけご注意ください。
●ライブラリ ver.2(HardwareSerialの場合)
1 2 3 4 5 6 7 |
#include <IcsHardSerialClass.h> const byte EN_PIN = 2; const long BAUDRATE = 115200; const int TIMEOUT = 1000; //通信できてないか確認用にわざと遅めに設定 IcsHardSerialClass krs(&Serial,EN_PIN,BAUDRATE,TIMEOUT); //インスタンス+ENピン(2番ピン)およびUARTの指定 |
●ライブラリ ver.2(SoftwareSerialの場合)
1 2 3 4 5 6 7 8 9 |
#include <IcsSoftSerialClass.h> const byte S_RX_PIN = 8; const byte S_TX_PIN = 9; const byte EN_PIN = 2; const long BAUDRATE = 115200; const int TIMEOUT = 200; //softSerialは通信失敗する可能性があるため短めに IcsSoftSerialClass krs(S_RX_PIN,S_TX_PIN,EN_PIN,BAUDRATE,TIMEOUT); //インスタンス+ENピン(2番ピン)およびUARTの設定、softSerial版 |
●ライブラリ ver.1(HardwareSerialの場合)
1 2 3 4 5 6 7 |
#include <IcsClass.h> const int enpin = 2; const long baudrate = 115200; const int timeout = 5; IcsClass krs(&Serial,enpin,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の待ちを用意することができます。
■プログラムの書き込みと実行
サンプルプログラムの「KrsServo1」を書き込んで実行してみます。
1)ICS変換基板上のスイッチを「書込」に切り替えます。
※SoftwareSerialで使用する場合は、「実行」のまま切り替える必要はありません。
2)ArduinoにUSBケーブルを接続します。
3)スケッチの書き込みボタンを押します。
4)書き込みが正常に完了したらArduinoのUSBケーブルを抜き、ICS変換基板上のスイッチを「実行」に切り替えます。
(プログラムの書き込みが完了すると、Ardionoは自動でプログラムを実行します。スイッチを「実行」に切り替えてからサーボにコマンドが流れますが、その際にプログラムの途中からサーボに命令が行くとサーボが思わぬ方向に動いてしまう場合があります。安全のため、一度USBケーブルを抜きサーボの電源をいれてからプログラムを実行させましょう)
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のサーボがまったく同じ動きをすれば成功です。
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機器を使用することができますので、ロボットの作成にぜひご利用ください。
以上です。
KRS-2552R3HV ICSの詳細をみる KRS-3204R2 ICSの詳細をみる KRS-2572R2HV ICSの詳細をみる KRS-2552R2HV ICSの詳細をみる KRS-2542R2HV ICS の詳細をみる KRS-9004HV ICSの詳細をみる KRS-5054HV ICS H.Cの詳細をみる KRS-5053HV ICS H.Cの詳細をみる KRS-5034HV ICSの詳細をみる KRS-5033HV ICSの詳細をみる KRS-5032HV ICSの詳細をみる KRS-6104FHV ICSの詳細をみる KRS-3304R2 ICSの詳細をみる KRS-3302 ICSの詳細をみる ICS変換基板の詳細をみる KSBシールド2の詳細をみる ICS変換基板シールドの詳細をみる KXR用オプションボード搭載セットAの詳細をみる KRS-6003R2HV ICSの詳細をみる KRS-6003RHV ICSの詳細をみる KRS-2572HV ICSの詳細をみる KRS-2552RHV ICSの詳細をみる KRS-2542HV ICSの詳細をみる KRS-4037HV ICSの詳細をみる KRS-4034HV ICSの詳細をみる KRS-4033HV ICSの詳細をみる KRS-4032HV ICSの詳細をみる KRS-4031HV ICSの詳細をみる KRS-3304 ICSの詳細をみる KRS-3301 ICSの詳細をみる KRS-3204 ICSの詳細をみる KXR アドバンスセットA Ver.2の詳細をみる KXR-A5 アーム型 Ver.2の詳細をみる KXR-L4T-R カメ型・ローバー型 Ver.2(アカデミックパック)の詳細をみる KXR用オプションボード搭載セットBの詳細をみる