どうもこんにちは!
我が家の猫のツンデレっぷりが最近激しくなっている気がしているbabaです。

本日のテーマは「シリアル通信でNexus Robotをパソコンから操縦してみた」です。

↓NEXUS ROBOTの製品情報はこちら
http://www.vstone.co.jp/products/nexusrobot/index.html

前回junjunさんがシリアルモニタからモータの制御に利用する数値を検証していました。
技術的小話【その9】ロボット制御の舞台裏!? シリアルモニタで各車輪の動きを調整してみた

シリアルモニタというのは、Arduinoの統合開発環境であるArduino IDEに搭載されている機能で、センサ値の確認や、プログラムがどのような動きをしているかを確認するのに便利な機能です。そしてこの機能、名前の通りシリアル通信を利用してPCとArduinoの通信を実現しています。
このシリアル通信を利用すれば、PCからロボットを操縦するということも簡単にできるはず!
…ということで、実際にキーボードで操作できるようにしてみました!
シリアルモニタを利用してもよかったんですが、キーボートを押せばすぐ反応するようにしたかったので、PC側のプログラムもPythonでサクッと作っちゃいました。
Python便利!

(動画が動かない場合、フルスクリーンモードをお試しください)

ちなみにPythonのコードはこんな感じ。
シリアル通信が一行で書ける!

今回は有線で通信していますが、無線モジュールを利用すればシリアル通信を使って簡単に無線操縦もできるようになります。
ロボットショップでは無線モジュールも販売してますので、興味がある方はぜひ挑戦してください!!

使用したスケッチはコチラ
——————————————-
#include 

#define MOTOR1 9
#define MOTOR2 10
#define MOTOR3 11

#define FOWORD1 0
#define REVERSE1 164
#define STOP1 83

#define FOWORD2 7
#define REVERSE2 171
#define STOP2 89

#define FOWORD3 6
#define REVERSE3 170
#define STOP3 88

Servo wheels[3];

void setup(){
wheels[0].attach(MOTOR1);
wheels[1].attach(MOTOR2);
wheels[2].attach(MOTOR3);

wheels[0].write(STOP1);
wheels[1].write(STOP2);
wheels[2].write(STOP3);

Serial.begin(9600);
}

void loop(){
int inputchar; //入力状態の読み取りに使う

inputchar = Serial.read(); //シリアル通信で送信された値を読み取る

if(inputchar!=-1){
switch(inputchar){
case ‘g’:
wheels[0].detach();
wheels[1].attach(MOTOR2);
wheels[2].attach(MOTOR3);
wheels[1].write(FOWORD2);
wheels[2].write(REVERSE3);
break;

case ‘b’:
wheels[0].detach();
wheels[1].attach(MOTOR2);
wheels[2].attach(MOTOR3);
wheels[1].write(REVERSE2);
wheels[2].write(FOWORD3);
break;

case ‘r’:
wheels[0].attach(MOTOR1);
wheels[1].attach(MOTOR2);
wheels[2].detach();
wheels[0].write(REVERSE1);
wheels[1].write(FOWORD2);
break;

case ‘l’:
wheels[0].attach(MOTOR1);
wheels[1].attach(MOTOR2);
wheels[2].detach();
wheels[0].write(FOWORD1);
wheels[1].write(REVERSE2);
break;
default:
wheels[0].detach();
wheels[1].detach();
wheels[2].detach();
break;
}
}
}

——————————————
ご質問等は受け付けておりませんのであしからず!