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 件のコメント:
コメントを投稿