2011/08/06

自宅エクスプローラ(仮) 試作品作成

自宅エクスプローラの続き。

Arduinoでモーターを制御できるようになったので、
まずはArduinoとタンクだけで遊んでみました。
ついでなのでWebカメラもテープで固定してつけてみることに。
もちろんまだ有線です。


タンク用のプレートだけだとギアボックスで半分埋まっているため、
タンクの上にユニバーサルプレート(大)を取り付けて設置面積を増やしました。
Arduino、電池ボックス、カメラ、ブレッドボードを置くといっぱいいっぱいになりました。


ユニバーサルプレート(大)が込み合っています
BeagleBoardはどこに置こうかな・・


メインカメラ。こんな感じの仕事ばっかりさせられてます


まだ有線式なので動ける範囲に限りはありますが、
モニタでメインカメラの画像を見ながら操作するのは楽しいです。


無線LANをつんだBeagleBoard-xmとバッテリーをつければ、家の中をいろいろと探検できそうな感じです。


Youtubeに車載カメラと固定カメラの動画を載せました。
下の動画を再生しはじめた直後に上の動画を再生し始めると、ほぼ同じタイミングの
映像になります。
(箱が転がっていますが、撮影用に転がしたものです)





メインカメラだけでも操作はできますが、後方や側方も確認したくなりました。
360度カメラが安く売っていれば、つけてみたいと思います。


Arduinoのコードは以下のようになります。
結構簡単なコードで、上記のようなラジコンができます。

/*
 自宅エクスプローラ用
 タンクコントローラ
 
 TA7291Pを2個使って、タンクを操作します
 TA7291PのVRefにanalogWriteで電圧を与えると、
 モーターにかける電圧を変えることができます。

 */

//後でキーアサインを変更できるようにしておく

#define GO '8'  //前進
#define STOP '5' //停止
#define LEFT '4' //左旋回
#define RIGHT '6' //右旋回
#define BACK '2' //後ろ

#define LEFTIN1 2
#define LEFTIN2 3
#define RIGHTIN1 4
#define RIGHTIN2 5

#define VREF  9  //出力電圧のリファレンス PWMが使えるポートにしてください


void setup() 
{
  Serial.begin(9600);
  pinMode(LEFTIN1, OUTPUT);//左側のモータードライバのIN1
  pinMode(LEFTIN2, OUTPUT);//左側のモータードライバのIN2
  pinMode(RIGHTIN1, OUTPUT);//右側の(以下同文)
  pinMode(RIGHTIN2, OUTPUT);

  Serial.println("MOTOR");
  //出力電圧のリファレンス用
  pinMode(VREF,OUTPUT);

  //モーターは1.5V~3Vが動作電圧
  analogWrite(VREF,128);//とりあえず2.5V

  //最初は停止している状態
  setLeftMotor(LOW,LOW);
  setRightMotor(LOW,LOW);

}


//左側のモータを制御します。
void setLeftMotor(int in1,int in2)
{
  digitalWrite(LEFTIN1,in1);
  digitalWrite(LEFTIN2,in2);
  //デバッグ用
  Serial.println('LightMOTOR'+ in1 +' '+ in2);
}
void setRightMotor(int in1,int in2)
{
  digitalWrite(RIGHTIN1,in1);
  digitalWrite(RIGHTIN2,in2);
  //デバッグ用
  Serial.println('RightMOTOR'+ in1 +' '+ in2);

}

void loop() 
{

  delay(100);
  char r=Serial.read();

  if(r== GO)
  {  //全速前進
    setLeftMotor(HIGH,LOW);
    setRightMotor(HIGH,LOW);
    Serial.println("GO");
  }

  if(r==STOP)
  {
    setLeftMotor(LOW,LOW);
    setRightMotor(LOW,LOW);
    Serial.println("STOP");
  }

  if(LEFT==r)
  {
   //左方向へ旋回
    setLeftMotor(LOW,HIGH);
    setRightMotor(HIGH,LOW);
    Serial.println("LEFT");
  }

  if(RIGHT==r)
  {
    //右方向へ旋回
    setLeftMotor(HIGH,LOW);
    setRightMotor(LOW,HIGH);
    Serial.println("RIGHT");
  }
  if(BACK==r)
  {
    //退却。後方確認はできません
    setLeftMotor(LOW,HIGH);
    setRightMotor(LOW,HIGH);
    Serial.println("BACK");
  }

}



ではまた。

0 件のコメント:

コメントを投稿