Arduinoでロボゼロのサーボを動かしてみよう!(7)
「Arduinoでロボゼロのサーボを動かしてみよう!」の第7回は、前回の続きで、「実際にリクエストを送信して、リータンを受け取ってみたい」と思います
NewSoftSerialライブラリーのインストール
これまでデジタルピンの1番を使ってサーボにデータを送信していましたが、パソコンとArduinoの通信(1)、および、Arduinoとサーボの通信(2)の両方を使えるようにする為に、
Arduinoデジタルピンの0,1番以外を使ってソフトウエア的にシリアル通信を行える様にする為のライブラリ=SoftwareSerialというのがありますが、このライブラリを使った場合の通信速度が9600bps程度です。
そこでNewSoftSerialというライブラリーを使います。ここ(Arduiniana)からダウンロードできます。このライブラリーを使うと57600bps程度まで通信速度を使えます。
インストール
- 起動してたら、Arduinoのアプリケーションを終了
- PreferencesのSketchbook locationに設定されたディレクトリーの中に「libraries」というフォルダを作る
- NewSoftSerial???.zipを解凍
- 解凍してできたNewSoftSerialのフォルダをlibrariesのフォルダに入れる
- Arduinoのアプリケーションを起動
- Sketch>Import Libraryの中にNewSoftSerialがあればインストール完了!
サーボの通信速度を38400bps(57600bps)以下に設定する
NewSoftModemが対応している通信速度にサーボの通信速度を変更します。
これに関しては「Arduinoでロボゼロのサーボを動かしてみよう!(4)」ですでに説明してありますので、そちらを参考に行って下さい
ArduinoとRS306MDの配線
配線は前回の「Arduinoでロボゼロのサーボを動かしてみよう!(6)」に書いた配線にまります
スケッチ
今回は、モデル番号、電圧、メモリーの30から41番の値を取得するサンプルを作ってみました
- サーボとの通信はデジタルピン4(受信)、5(送信)としました
NewSoftSerial ServoSerial(4, 5); - サーボとArduinoの通信速度は38400bpsで、Arduinoとパソコンの通信速度は115200bpsです。
ServoSerial.begin(38400); //Arduino<-->Servoを38,400bpsに設定
Serial.begin(115200); //PC<-->Arduinoを115,200bpsに設定 - モデル番号、電圧、メモリーの30から41番のリクエストパケット
- リクエストについては前回説明しましたので、そちらを参考にして下さい。
- なお、RS30xPacketUtilを使って頂くと簡単にパケットが作れます。
- パソコンからデータを受け取り、サーボへ送信
スケッチでは、パソコンからA or B or Cのデータを受け取っると、サーボに対応したリクエストパケットを送信するようになっています。
//リクエスト(送信)
tx=Serial.available();//データ数
if(tx>0) {
switch(Serial.read()) {
case 65://大文字A
.....................
- サーボからデータを受け取り、パソコンへ送信
スケッチでは、サーボからデータを受け取ると、そのデータの数ぶん、ひとつづつパソコンへデータを送信するようになっています。
//リターン(受信)
rx=ServoSerial.available();//データ数
if(rx>0) {
digitalWrite(13,LOW);//LED消す
for(int i=0;i<rx;i++) {
Serial.print(ServoSerial.read(),HEX);
.....................
以下がスケッチです
//------------------------------
#include <NewSoftSerial.h>
NewSoftSerial ServoSerial(4, 5);// サーボとの通信に、4,5ピンを使用
byte modelnum[]={0xFA, 0xAF, 0x01, 0x0F, 0x00, 0x02, 0x00, 0x0C};
byte currVOLT[]={0xFA, 0xAF, 0x01, 0x0F, 0x34, 0x02, 0x00, 0x38};
byte mem30to41[]={0xFA, 0xAF, 0x01, 0x0B, 0x00, 0x00, 0x01, 0x0B};
void setup() {
pinMode(13,OUTPUT);//LED
ServoSerial.begin(38400); //Arduino<-->Servoを38,400bpsに設定
Serial.begin(115200); //PC<-->Arduinoを115,200bpsに設定
delay(1000);
}
void loop() {
int rx,tx;
//リターン(受信)
rx=ServoSerial.available();//データ数
if(rx>0) {
digitalWrite(13,LOW);//LED消す
for(int i=0;i<rx;i++) {
Serial.print(ServoSerial.read(),HEX);
Serial.print(",");
}
Serial.print("\n");//改行
ServoSerial.flush();//受信データクリア
}
//リクエスト(送信)
tx=Serial.available();//データ数
if(tx>0) {
switch(Serial.read()) {
case 65://大文字A
digitalWrite(13,HIGH);//LED点灯
send_msg(modelnum,8);//モデル番号
break;
case 66://大文字B
digitalWrite(13,HIGH);//LED点灯
send_msg(currVOLT,8);//現在の電圧
break;
case 67://大文字C
digitalWrite(13,HIGH);//LED点灯
send_msg(mem30to41,8);//メモリーの30から41
break;
default:
for(int i=0;i<4;i++) {
digitalWrite(13,HIGH);
delay(200);
digitalWrite(13,LOW);
delay(200);
}
break;
}
Serial.flush();//受信データクリア
}
}
// リクエストの送信
void send_msg(byte msg[], int n) {
for(int i=0; i<n; i++){
ServoSerial.print(msg[i], BYTE);
}
}
//------------------------------
以上です。
実践
- スケッチをArduinoへ転送
- 「Serial Monitor」ボタンをクリック
- 通信速度が115200baudであることを確認
- 「A」と入力し、「Send」ボタンをクリック。「B」も「C」も試してみて下さい。
- 結果
結果の説明
- モデル番号(1行目):40,30がデータです。リトルエンディアンなので、並び順を変えて、3040=RS304MDを意味します。RS306MDはRS304MDと同じ物なわけで、モデル番号は3040となっています。
- 電圧(2行目):56,02がデータです。0256(16進数)=598(10進数)で、単位をボルトで表すなら100で割って、5.98Vとなります。
- 30から41(3行目):0,0,0,0,0,64,0,0,0,0,0,0がデータです。ほとんどの値がゼロですが、指示位置(2バイト)、指示時間(2)、予備(1)、最大トルク(1)、トルクON/OFF(1)、予備(5)を意味してます。最大トルクが64(16進数)=100(10進数)で、最大トルク100%に設定されています。また、その次の値が0ということは、トルクがOFFということです。
プレゼント
前回の第6回で、書きましたが、今回のこのことを行う為に必要なICをプレゼント企画を行っています。こちらのブログ記事の下の方に応募方法などが書いてありますので、ご応募お待ちしておりますので、よろしくお願い致します
----------------
- 「週刊 ロボゼロ」 第3号(3)Arduinoでサーボのテスト(PWM)
- Arduinoでロボゼロのサーボを動かしてみよう!(2)
- Arduinoでロボゼロのサーボを動かしてみよう!(3)
- Arduinoでロボゼロのサーボを動かしてみよう!(4)
- Arduinoでロボゼロのサーボを動かしてみよう!(5)
- Arduinoでロボゼロのサーボを動かしてみよう!(6)
- Arduinoでロボゼロのサーボを動かしてみよう!(7)
- Arduinoでロボゼロのサーボを動かしてみよう!(8)
- Arduinoでロボゼロのサーボを動かしてみよう!(9)
- Arduinoでロボゼロのサーボを動かしてみよう!(10)
- Arduinoでロボゼロのサーボを動かしてみよう!(11)
- RS30xPacketUtil 1.0.1公開
----------------
にほんブログ村
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント