12/6/2016
ロボ実験について考える。
ロボットを手動で目的地まで連れてく。
ボタンを押すとロボットアームが動き、対象物を挟んでいく。
力覚センサで物体を検知し、アーム挟む動作停止。
停止すると同時に、両アーム運転開始。
一定の高さになったら両アーム停止。
↑
ここで、高さを目標値に設定して、フィードバックで実現したい。
⭐︎ 落とさないようにセンサで検知し値が小さくなってきたら、モーター出力させるようにするべきか?
↑
実際ここでフィードバックの方が現実味あったりして!
プログラム(予想)
int hlefta = 2;
int hrighta = 3;
int hleftb = 4;
int hrightb = 5;
int hleftc = 6;
int hrightc = 7;
int lefta = 8;
int righta = 9;
int leftb = 10;
int rightb = 11;
int leftc = 12;
int rightc =13;
void setup() {
Serial.begin(9600);
pinMode(hlefta, OUTPUT);
pinMode(hrighta, OUTPUT);
pinMode(hleftb, OUTPUT);
pinMode(hrightb, OUTPUT);
pinMode(hleftc, OUTPUT);
pinMode(hrightc,OUTPUT);
pinMode(lefta, OUTPUT);
pinMode(righta, OUTPUT);
pinMode(leftb, OUTPUT);
pinMode(rightb, OUTPUT);
pinMode(leftc, OUTPUT);
pinMode(rightc,OUTPUT);
}
void loop() {
if(Serial.available()){
char cmd = Serial.read();
switch (cmd){
case 'w':
analogWrite(righta, 200);
analogWrite(lefta, 0);
analogWrite(rightb, 200);
analogWrite(leftb, 0);
analogWrite(rightc, 200);
analogWrite(leftc, 0);
Serial.print(F("a\n"));
break;
case 's':
analogWrite(righta, 200);
analogWrite(lefta, 0);
analogWrite(rightb,200);
analogWrite(leftb, 0);
analogWrite(rightc, 200);
analogWrite(leftc, 0);
break;
case 'd':
analogWrite(righta, 200);
analogWrite(lefta, 0);
analogWrite(rightb,200);
analogWrite(leftb, 0);
analogWrite(rightc, 200);
analogWrite(leftc, 0);
break;
case 'a':
analogWrite(righta, 200);
analogWrite(lefta, 0);
analogWrite(rightb,200);
analogWrite(leftb, 0);
analogWrite(rightc, 200);
analogWrite(leftc, 0);
break;
case 'z':
analogWrite(righta, 200);
analogWrite(lefta, 0);
analogWrite(rightb,200);
analogWrite(leftb, 0);
analogWrite(rightc, 200);
analogWrite(leftc, 0);
break;
case 'u': //掴んで持ち上げ
analogWrite(hrighta, 200);
analogWrite(hlefta, 0);
if (vol_value <400){
analogWrite(hrighta, 0);
analogWrite(hlefta, 0);
analogWrite(hrightb, 200);
analogWrite(hleftb,0);
analogWrite(hrightc, 200);
analogWrite(hleftc, 0);
delay(2000);
analogWrite(hrightb, 0);
analogWrite(hleftb,0);
analogWrite(hrightc, 0);
analogWrite(hleftc, 0);
}
delay(2000);
break;//これだと持ち上げた後に、analogWrite(hrighta, 200);
analogWrite(hlefta, 0);がまた処理されて動く。
case 'p'://降ろす離す
analogWrite(hrightb,0 );
analogWrite(hleftb,200);
analogWrite(hrightc, 0);
analogWrite(hleftc, 200);
delay(2000);
analogWrite(hrightb,0 );
analogWrite(hleftb,0);
analogWrite(hrightc, 0);
analogWrite(hleftc, 0);
analogWrite(hrighta, 0);
analogWrite(hlefta, 200);
if (vol_value <400){
analogWrite(hrighta, 0);
analogWrite(hlefta, 0);
}
delay(2000);
break;
default://case'o':
analogWrite(righta, 0);
analogWrite(lefta, 0);
analogWrite(rightb, 0);
analogWrite(leftb, 0);
analogWrite(rightc,0);
analogWrite(leftc, 0);
break;
}
}
Serial.print("righta = ");
Serial.print(digitalRead(righta));
Serial.print(" lefta = ");
Serial.println(digitalRead(lefta));
}