ICS変換基板の使用方法(4) ID読み書き編
【関連記事】
ICS変換基板の使用方法(4-2) M5StackでID読み書き
ICS変換基板の使用方法(5) Arduino Nano EveryでKRSサーボを制御
ICS変換基板の使用方法(6-1) Arduino MEGAから18個のサーボを制御する
ICS変換基板の使用方法(6-2) 直線補間でサーボを滑らかに動かす
ICS変換基板の使用方法(6-3) Arduino MEGAからKXR-L6の歩行制御
ICS Library for Arduino ver.2.1では、サーボのIDを読み書きする関数を追加しました。この記事では、実際にIDを変更するための手順と注意点をご紹介します。
ライブラリはこちらからダウンロードしてください。
『ICS Library for Arduino ver.2』
※弊社では他社マインボード、及びプログラムに関するお問い合わせついて対応致しかねます。以下の内容は、仕様事例として参考にご一読ください。
■接続方法
Arduinoとサーボは、必ず1対1で接続してください。デイジーチェーン接続で多数のサーボとつながったまま書き換えをすると、全てのサーボのIDが書き換わってしまったり、正常に書き換えられず誤動作する場合があります。
ICS変換基板とArduinoの配線方法、必要な製品は準備編を参照してください。
■プログラム解説
スケッチ例「KrsServoCheckID」は、HardSerial、SoftSerialともに用意されています。Arduino UNOではHardSerialの場合、USBとUARTが共用になっているため読み出したサーボのIDをPCに表示することはできませんが、SoftSerialの場合はこれが可能です。ID番号を確認したい場合は、SoftSerialで実行することをお勧めします。
Arduino MEGAやArduino Nano Everyなど複数のUARTがある場合は、HardSerialでも問題ありません。
最初に記述されている内容は、サーボを動作させる場合と同じです。シリアル通信の設定とsetup()のkrs.begin()で通信がスタートします。この箇所のみHardwareSerial、SoftwareSerialで記述方法が異なります。
●ライブラリ ver.2(HardwareSerialの場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <IcsHardSerialClass.h> const byte EN_PIN = 2; const long BAUDRATE = 115200; const int TIMEOUT = 100; const byte ACK_CHECK_PIN = 3; IcsHardSerialClass krs(&Serial,EN_PIN,BAUDRATE,TIMEOUT); //インスタンス+ENピン(2番ピン)およびUARTの指定 void setup() { // put your setup code here, to run once: krs.begin(); //サーボモータの通信初期設定 pinMode(ACK_CHECK_PIN ,OUTPUT); //ACK確認を出力するピン設定 digitalWrite(ACK_CHECK_PIN,HIGH); } |
●ライブラリ ver.2(SoftwareSerialの場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#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 = 100; IcsSoftSerialClass krs(S_RX_PIN,S_TX_PIN,EN_PIN,BAUDRATE,TIMEOUT); //インスタンス+ENピン(2番ピン)およびUARTの設定、softSerial版 void setup() { // put your setup code here, to run once: krs.begin(); //サーボモータの通信初期設定 Serial.begin(9600); } |
●ID書き換え箇所(HardSerialから抜粋)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void loop() { const byte SET_ID = 1; int reId; //IDの設定 krs.setID(SET_ID); //IDの取得 reId = krs.getID(); if(reId != SET_ID) { //失敗した時の処理 delay(1000); digitalWrite(ACK_CHECK_PIN,LOW); } for(;;);//ここで終わり } |
krs.setID()でサーボのIDを変更します。引数として変更したいID番号を渡せばそのIDに書き換えることが可能です。
また、サーボからIDを読み出したい場合は、krs.getID()を使用します。戻り値としてID番号を取得することができます。
上記の例では、HardSerialの場合として書き込んだIDが正しいかを端子のH/Lで確認できるようにしています。PCにデータを送信できる場合は、Serial.println()などでシリアルモニタに表示するとより分かりやすくなります。
このように、getID()、setID()関数を利用することで簡単にID番号を読み書きすることができます。これまでは、サーボの設定を変更するためにDual USBアダプターHSが必要でしたが、IDの書き換えだけでしたらこれらの関数のみで実行できるため、初期コストを抑えることができます。ただし、動作確認やその他パラメータの設定変更をしたい場合は、マネージャソフトが大変便利ですので、Dual USBアダプターHSを一つお手元にご用意しておくことをお勧めします。
【ご注意ください】
※Arduinoとサーボは1対1で接続してください。
※IDの書き込み関数を使用する場合は、loop()により繰り返し書き換えないようにご注意ください。長期間書き込みを繰り返しますと、サーボ内のROM書き換え制限を超えてしまう場合があり、サーボが正常に動作しなくなる可能性があります。スケッチ例では「for(;;);」により処理を停止しています。
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の詳細をみる