ICS変換基板の使用方法(4-2) M5Stackで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の歩行制御
前回の記事でKRSサーボのIDを読み書きする方法をご紹介しましたが、今回はM5Stackを使ってIDの読み書きをしたいと思います。これにより、簡易的なサーボマネージャの作成も可能です。ぜひお試しください。
※M5Stack、及びプログラムに関連するお問い合わせは、弊社は対応致しかねます。下記の記事は、使用事例として参考にご一読ください。
■必要な製品
・M5Stack(Grayで動作確認しました)
サーボの種類に制限はありませんが、ICS3.5以上を推奨します。現行品は全てICS3.5以上になっています。
・バッテリー、またはACアダプタ(サーボの電圧に合わせてご用意ください)
・HVまたはLV電源スイッチハーネス
以下は市販品をご利用ください。
・ユニバーサル基板(10×20程度)
・L字アングルヘッダピン(2.54ピッチ)×15ピン
・ピンソケット(2.54ピッチ) 4ピン×2セット
・はんだ、はんだごて
■基板を作成する
M5StackとICS変換基板をユニバーサル基板上でつなぎます。各端子をはんだ付けすればよいので非常に簡単です。
端子の接続先は下記の通りです。
M5Stack本体の右側の端子だけで全てつなぎ終えることができます。
表の「表記」は、本体裏側のシールに書いてある内容で、「端子名」は本体のボトムケースを外したときに露出する基板上のシールに書かれている名称です。
M5Stackは、バッテリを搭載していますのでVOUT端子は未接続にしました。
KRSサーボの信号線は5Vですが、ICS変換基板上に変圧回路がありますのでM5Stackのように3.3Vのマイコンでも問題なく通信することができます。これは、ICS変換基板をご利用いただくメリットの一つです。
つなぎ終えると以下のような状態になります。
M5Stackの右側に接続します。
次に各製品を接続していきます。
1)ICS変換基板を作成した基盤に差し込みます。はんだ付けした配線と向きが合うようにご注意ください。
2)ICS変換基板にサーボを接続します。写真を参考に爪がある方を電源端子に向けてください。
3)スイッチハーネスのスイッチがOFFになっていることを確認してICS変換基板の電源端子にバッテリを接続します。スイッチの丸い印のある方がONです。
4)ICS変換基板のスイッチを「実行」に切り替えます。
※USBと併用していませんので「実行」のまま切り替える必要はありません。
■ライブラリを準備する
前回の記事と同じようにICS Library for Arduino ver.2.1をダウンロードし、付属のマニュアルに従ってArduino IDEにインクルードしてください。
M5Stack側の準備は、『みんなのM5Stack入門』を参考にするとわかりやすいです。Arduino IDEからESP32ボードマネージャとM5Stackライブラリをインストールしてください。
今回の記事の時点にてM5Stackのライブラリバージョンは0.2.9です。
■getIDでサーボのID番号を取得する
ICSライブラリはHardSerialを使用します。使用方法は、前回の記事と基本的に同じでsetIDとgetID関数を使⽤します。今までは、Arduino Unoを紹介してきましたが、M5Stackを使用するため宣言部分をM5Stack用に変更し、Serialの設定します。
1 2 3 4 5 6 7 8 |
#include <M5Stack.h> #include <IcsHardSerialClass.h> const byte EN_PIN = 2; long BAUDRATE = 115200; const int TIMEOUT = 1000; //通信できてないか確認用にわざと遅めに設定 IcsHardSerialClass krs(&Serial2,EN_PIN,BAUDRATE,TIMEOUT); //インスタンス+ENピン(2番ピン)およびUARTの指定 |
ここまで解説にてシリアル端子の配線はTXD2、RXD2につなぎましたので、宣言の&Serialを&Serial2に変更します。M5Stackは、本体とPCが通信するUSBと独立してUARTがありサーボとの通信専用に使用できますので非常に便利です。
また、M5Stackのライブラリを使用するために#include <M5Stack.h>を宣言しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void setup() { //M5Stack初期化 M5.begin(); M5.Power.begin(); krs.begin(); //サーボモータの通信初期設定 //LCD設定、表示 M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextSize(3); M5.Lcd.setCursor(0, 0); M5.Lcd.print("NOW-ID"); delay(1000); } |
M5Stackを起動するための関数と、KRSサーボと通信するためのkrs.begin()をsetup()の中に記述します。これで準備完了です。
M5.Lcd.fillScreen(BLACK);は、背景色を指定できます。今回は黒にしました。
M5.Lcd.setTextSize();は、フォントサイズです。3を指定しました。
M5.Lcd.setCursor(0, 0);は、画面のどこから文字を表示するかを指定できます。指定する値は(横,縦)になり、数が大きいほど右、下にカーソルが移動します。0,0で画面上の左上を指定しています。
M5.Lcd.print();で()内の文字を表示できます。
以上で、黒い画面の左上に「NOW-ID」と表示されます。
1 2 3 4 5 6 7 8 9 |
void loop() { int id; id = krs.getID(); M5.Lcd.setCursor(160, 0); M5.Lcd.print(id); while(true); //処理停止 } |
krs.getID()で読み込んだサーボのIDをM5.Lcd.print(id);で画面に表示しています。
loop関数内で処理しているため、このままですと繰り返し読込されてしまいますのでwhile(true);で処理を停止しています。
プログラム書き込み
IDEのツールメニューにある「ボード」から「M5Stack-Core-ESP32」を指定します。また、「シリアルポート」からM5StackにつながっているCOM番号を指定してください。
※その他の設定値は変更しません。
電源スイッチをONにします。
※電源を投入する前に各端子が正しく配線できているかを今一度ご確認ください。
上記の準備ができたらIDEの書き込みボタンを押してください。
実行結果
「NOW-ID」に現在のID番号が表示されます。もし-1が表示されていたら読み込みがエラーになっています。配線やICS変換基板のスイッチ、電源などを確認して再起動してみてください。
■setIDでID番号を変更する
setID関数を使用することでサーボのID番号を書き換えることができます。setupとloop内のプログラムを下記に書き換えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
void setup() { M5.begin(); //M5Stack初期化 M5.Power.begin(); krs.begin(); //サーボモータの通信初期設定 //LCD設定 M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextSize(3); M5.Lcd.setCursor(0, 0); M5.Lcd.print("NOW-ID:"); M5.Lcd.setCursor(0, 25); M5.Lcd.print("Set-ID:"); delay(1000); //ID番号を取得し表示する int id = krs.getID(); M5.Lcd.setCursor(140, 0); M5.Lcd.print(id); //"Set-ID"の番号に0を表示 M5.Lcd.setCursor(140, 25); M5.Lcd.print("0"); } int BT_cnt = 0; void loop() { M5.update(); //ボタンの状態を確認 //Aボタンが押されたとき(UP) if(M5.BtnA.wasPressed()) { BT_cnt++; //ボタンが押されるたびに1つ増える if(BT_cnt >= 32) //もし32以上になったら0にする { BT_cnt = 0; } M5.Lcd.setCursor(140, 25); //カーソルを合わせる M5.Lcd.print(" "); //一度表示を消す M5.Lcd.setCursor(140, 25); //カーソルを合わせる M5.Lcd.print(BT_cnt); //表示 } //Bボタンが押されたとき(DOWN) if(M5.BtnB.wasPressed()) { BT_cnt--; //ボタンが押されるたびに1つ減らす if(BT_cnt <= -1)//もし-1になったら31にする { BT_cnt = 31; } M5.Lcd.setCursor(140, 25); //カーソルを合わせる M5.Lcd.print(" "); //一度表示を消す M5.Lcd.setCursor(140, 25); //カーソルを合わせる M5.Lcd.print(BT_cnt); //表示 } //Cボタンが押されたとき(ENT) if(M5.BtnC.wasPressed()) { int ID_check = 0; krs.setID(BT_cnt); //ID番号書込み //ID番号が正しく書き込まれているか確認 ID_check = krs.getID(); //ID番号読込 M5.Lcd.setCursor(140, 0); //カーソルをNOW-IDの行に合わせる M5.Lcd.print(" "); //一度表示を消す M5.Lcd.setCursor(140, 0); //カーソルをNOW-IDの行に合わせる M5.Lcd.print(ID_check); //ID番号表示 } } |
M5.update();はボタンの状態を確認するための関数です。各ボタンが押されるとM5.BtnA.wasPressed()など、ボタンに対応する関数がTRUEになります。これを利用した条件分岐により、ボタンが押されたときの処理を記述していきます。
サーボのIDは0~31の間で指定できますが、32以上や-1以下の数字は書き込めませんので、範囲外の数字になると範囲内に戻すようにプログラムします。
ICSライブラリに関連する内容はsetIDとgetIDですが、使い方は前回の記事でご紹介した内容から変わりありません。
実行結果
M5Stackの本体にあるボタンは、左からAボタン、Bボタン、Cボタンとなっています。Aボタン、Bボタンを押して「Set-ID」の数字を変更し、Cボタンで書き込みができます。書き込みが成功すると「NOW-ID」の数字が指定したID番号に変わります。
サンプルプログラム:M5Stack_KRS_changeID.zip
■setPosなど他の関数も使用できます!
IDを変更する関数以外にもサーボに角度を指定するsetPosなどその他の関数を使用できます。これらを利用することにより、M5Stackから数軸のアームロボットなどを制御することも可能です。画面付きで手軽にプログラミングできるM5Stackをぜひロボットに組み込んでみてください。
setPos関数については、『ICS変換基板の使用方法(2) サーボ制御編』をご覧ください。
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-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の詳細をみる