こんにちは!
何故か家の中で水筒を失くしたmorimoriです!
Nexus robot 3WDも6回目となりました。スーパー戦隊なら、そろそろ新しい装備やモードが追加されてパワーアップする頃ですね!
というわけで、Nexus robot 3WDにも新たなパーツを取り付けてあげることにします。

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

実は、Nexus robot 3WDの制御ボードはArduino互換なのです(前にも書いた気がする)。ということは、Arduino用の様々なデバイスがNexus robot 3WDでも(たぶん)動くということなんですね!

折角なので何か面白いものを取り付けたいなー、ということで今回は、ロボカップジュニアでも話題のカメラ「Pixy CMUcam5」を選択しました。
このカメラは、1枚のボード上に「カメラ」と「画像解析」の機能を乗せてしまったとっても便利なカメラなのです。
Pixyは7種の色を記憶することができ、撮影した画像中からその色が存在する位置とその大きさを教えてくれます。

今回はmorimoriの手の色を記憶してもらい、手を動かすとその動きに合わせてNexusが移動するようにプログラミングしてみました。

こちらの動画をご覧ください!

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

Nexusに取り付けることができるセンサやアクチュエータはまだまだ沢山あります。外部デバイスを取り付けることで、Nexusロボットにできることがたくさん拡がりますね!

皆さんもぜひ、Nexus robot 3WDに色々なパーツを取り付け、あなただけのオリジナルNexusを開発してみてください!

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

Pixy pixy;

#define MOTOR1 9
#define MOTOR2 10
#define MOTOR3 7

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

#define FOWORD2 7
#define REVERSE2 171
#define STOP2 91

#define FOWORD3 6
#define REVERSE3 170
#define STOP3 89

Servo wheels[3];

void setup(){
pixy.init();

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

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

}

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

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

void forward(){
//wheels[0].detach();
//wheels[1].attach(MOTOR2);
//wheels[2].attach(MOTOR3);
wheels[0].write(STOP1);
wheels[1].write(REVERSE2);
wheels[2].write(FOWORD3);
}

void backward(){
//wheels[0].detach();
//wheels[1].attach(MOTOR2);
//wheels[2].attach(MOTOR3);
wheels[0].write(STOP1);
wheels[1].write(FOWORD2);
wheels[2].write(REVERSE3);
}

void leftforward(){
//wheels[0].attach(MOTOR1);
//wheels[1].attach(MOTOR2);
//wheels[2].detach();
wheels[0].write(FOWORD1);
wheels[1].write(REVERSE2);
wheels[2].write(STOP3);
}

void leftbackward(){
//wheels[0].attach(MOTOR1);
//wheels[1].detach();
//wheels[2].attach(MOTOR3);
wheels[0].write(FOWORD1);
wheels[1].write(STOP2);
wheels[2].write(REVERSE3);
}

void rightforward(){
//wheels[0].attach(MOTOR1);
//wheels[1].detach();
//wheels[2].attach(MOTOR3);
wheels[0].write(REVERSE1);
wheels[1].write(STOP2);
wheels[2].write(FOWORD3);
}

void rightbackward(){
//wheels[0].attach(MOTOR1);
//wheels[1].attach(MOTOR2);
//wheels[2].detach();
wheels[0].write(REVERSE1);
wheels[1].write(FOWORD2);
wheels[2].write(STOP3);
}

void loop(){
static int i = 0;
static int j = 0;
static int fbFlag = 0;
uint16_t blocks;
blocks = pixy.getBlocks();

if(blocks){
i++;
j = 0;

if(i>=5){
i = 0;

if(pixy.blocks[0].width > 200 && pixy.blocks[0].height > 120){
backward();
}else if(pixy.blocks[0].x < 100){
if(pixy.blocks[0].height > 160){
fbFlag = 1;
}else if(pixy.blocks[0].height < 100){
fbFlag = 0;
}

if(fbFlag){
leftforward();
}else{
leftbackward();
}
}else if(pixy.blocks[0].x > 220){
if(pixy.blocks[0].height > 160){
fbFlag = 1;
}else if(pixy.blocks[0].height < 100){
fbFlag = 0;
}

if(fbFlag){
rightforward();
}else{
rightbackward();
}
}else if(pixy.blocks[0].width > 180){
nomove();
}else{
forward();
}
}
}else{
j++;

if(j >= 1000){
j = 0;
nomove();
}
}

}

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