ICS変換基板の使用方法(3) 無線コントロール編
【関連記事】
ICS変換基板の使用方法(5) Arduino Nano EveryでKRSサーボを制御
前回までの記事では、ICS変換基板を使用してサーボの制御を行ってきましたが、今回は無線コントロールのご紹介です。
Arduino向けライブラリには無線コントローラKRC-5FHの受信機であるKRR-5FH用の関数が用意されていますので、接続することでArduinoを簡単にボタン操作による無線コントロールを行うことができます。
今回は、KRC-5FH&KRR-5FHの搭載方法とプログラムを解説します。
■KCR-5FH&KRR-5FHとは
KRC-5FHは、ロボット用無線コントローラです。KXRシリーズやKHRシリーズに受信機KRR-5FHを搭載することによって、ロボットを無線コントロールできるようになります。
市販のゲームパッドに比べてボタンの数が多いため、より多くのモーションをボタンに割り当て、ワンプッシュで再生することが可能です。
また、コントローラ側にアナログ出力(5V)のセンサーを接続できますので、センサーの情報を元にロボットを動かすこともできます。
■用意するもの
無線コントローラ(送信機)、受信機のセットです。ケーブルも付属しますので他に追加で用意するものはありません。
■準備:受信機の接続
●ICS変換基板に直接つなげる場合
一番シンプルな接続方法です。送信機付属のZH接続ケーブルBのZHコネクタ側を受信機のSIO端子に接続し、サーボコネクタ側をICS変換基板の空いている端子に接続してください。
●デイジーチェーン接続の途中に入れる場合
【ZHコネクタのサーボに配線する(KRS-2500/3200/3300)】
受信機は、前回配線したサーボのラインにつなげることができます。配線のイメージは下記のようになります。
1)ICS変換基板に接続されているサーボの配線を一度外します。
2)KRR-5FHとICS変換基板をセット付属のZH接続ケーブルBで接続します。
3)KRR-5FHの空いている端子に、サーボのZH接続ケーブルAを接続し完了です。
【サーボコネクタのサーボに配線する(KRS-9000/6100/6000/5000/4000)】
KRS-4000シリーズ、6000シリーズなどサーボの端子がサーボコネクタタイプの場合は下記のように配線します。
1)ICS変換基板に二又ケーブルを接続します。
2)KRR-5FHにZH接続ケーブルBのZHコネクタ側を接続します。
3)サーボの接続ケーブルと、KRR-5FHの接続ケーブルをそれぞれ二又ケーブルに接続すれば完了です。
■KRR-5FHからのボタンデータについて
送信機KRC-5FHには、各ボタンに数字が割り当てられています。このボタンの数字をKRR-5FHが受信し、Arduinoで読み込むことが可能です。各ボタンの数字は下記のようになっています。
(画像と下記説明の数字は10進数です)
各ボタンは組み合わせることができます。例えば、↑と←を同時に押すと1と8ですので9になります。また、シフト1と↑を組み合わせると、512と1で513になります。
SP1、SP2はスペシャルボタンです。SP1は15、SP2は368が割り当てられています。
詳細はKRC-5FH&KRR-5FHのマニュアルをご覧ください。
■プログラム解説
サンプルプログラムの「KrrButton」を例にプログラムを解説します。
最初に記述されている内容は、サーボと同じです。シリアル通信の設定とsetup()のkrs.begin()で通信がスタートします。この箇所のみHardwareSerial、SoftwareSerialで記述方法が異なります。
●ライブラリ ver.2(HardwareSerialの場合)
1 2 3 4 5 6 7 8 9 10 11 |
#include <IcsHardSerialClass.h> const byte EN_PIN = 2; const long BAUDRATE = 115200; const int TIMEOUT = 100; IcsHardSerialClass krs(&Serial,EN_PIN,BAUDRATE,TIMEOUT); //インスタンス+ENピン(2番ピン)およびUARTの指定 void setup() { krs.begin(); //サーボモータの通信初期設定 } |
●ライブラリ ver.2(SoftwareSerialの場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#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() { krs.begin(); //サーボモータの通信初期設定 } |
●ライブラリ ver.1(HardwareSerialの場合)
1 2 3 4 5 6 7 8 9 |
#include <IcsClass.h> const int enpin = 2; const long baudrate = 115200; const int timeout = 5; IcsClass krs(&Serial,enpin,baudrate ,timeout); //インスタンス+ENピン(2番ピン)およびUARTの指定 void setup() { krs.begin(); //サーボモータの通信初期設定 } |
下記のloop()内で無線コントローラからのボタンデータを取得してswitch文で分岐しています。
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 |
void loop() { unsigned short buttonData; buttonData = krs.getKrrButton(); if(buttonData != KRR_BUTTON_FALSE) //ボタンデータが受信できていたら { switch(buttonData) { case KRR_BUTTON_UP : //↑ボタンだった時 { krs.setPos(0,7500); break; } case KRR_BUTTON_DOWN : //↓ボタンだった時 { krs.setFree(0); //フリーにする break; } case KRR_BUTTON_RIGHT : //→ボタンだった時 { krs.setPos(0,krs.degPos100(9000)); break; } case KRR_BUTTON_LEFT : //←ボタンだった時 { krs.setPos(0,krs.degPos100(-9000)); break; } case (KRR_BUTTON_UP | KRR_BUTTON_RIGHT) : //↑→ボタンだった時 { krs.setPos(0,krs.degPos100(4500)); break; } default: { //なにもしない break; } } } else { delay(1000); } delay(10); //KRR5は10ms以下の応答にはついていけないので待つ } |
buttonData = krs.getKrrButton();は、KRR-5FHが取得したボタンデータを関数で読み出し、変数に代入しています。
if(buttonData != KRR_BUTTON_FALSE)の箇所でボタンデータが取得できているか確認しています。もし取得できていない場合は、KRR_BUTTON_FALSE(0xFFFF)が返ってきますので、これとは違う数字であればTrueになります。
switch(buttonData)からボタンデータの値による分岐です。
条件の「KRR_BUTTON_UP」は↑に該当します。ここでは、↑が押された場合の処理が記述されています。ここに数字を直接書いても問題ありません。↑は1ですので、1と書いても同じように処理されます。
ボタンの組み合わせは、KRR_BUTTON_UP | KRR_BUTTON_RIGHTのように表記します。
ボタンの予約後については、ライブラリ付属のマニュアルp.35をご参照ください。
以上で無線コントロールの作業は完了です。他にも送信機に接続したセンサーの情報を取得する関数もありますので、ライブラリ付属のマニュアルを参考にぜひお試しください。
ICS変換基板の詳細をみる KSBシールド2の詳細をみる ICS変換基板シールドの詳細をみる KXR用オプションボード搭載セットAの詳細をみる KRC-5FH 送受信機セットの詳細をみる KRR-5FH 受信機のみの詳細をみる KXR アドバンスセットA Ver.2の詳細をみる KXR-A5 アーム型 Ver.2の詳細をみる KXR-L4T-R カメ型・ローバー型 Ver.2(アカデミックパック)の詳細をみる KXR用オプションボード搭載セットBの詳細をみる