mbedを用いたサーボモータの制御について
https://youtu.be/uMxCtYfdkhs
下記に示すyoutubeでの動画のようにmbedを用いてサーボモータをジョイスティックで制御しました。
しかし、動画の後半にあるようにジョイステックを
動かしているとある時、急に動かなくなる時があります。
この原因を探っているのですが、いまいち確かな解決策が
見当たらず困っております。
(手でモーターを少しだけ回すとまた、復活します)
また、プログラムを始動した時もジョイステックで動かしても
すぐにはモータは回らず、手で少し動かすと急に反応します。
この原因や解決策をご教授して頂きたいです。
以下にこの環境の詳細とソースコードを載せます。
サーボモータ TowerPro サーボ MG996R
mbed 1768
モータ駆動電圧 単三電池四本
ソースコード
※ジョイスティックは動かしていない時が0.76です
※サーボモータの制御パルスは0.5ms ~ 2.4msで180°回転なので
1.45msを0°として処理
#include "mbed.h"
PwmOut servo1(p21);
Serial pc(USBTX, USBRX); // tx, rx
AnalogIn x(p19);
int main() {
float xx,mx;
servo1.period_ms(20);// pulse cycle = 20ms
float pwidth = 0.00145;
float motorSpeed = 0.0;
int i = 0;
servo1.pulsewidth(pwidth);
wait(0.2);
while(1){
xx = x.read(); //ジョイスティックでアナログ値を読み取る
if((xx<0.74) || (xx>0.77)){
mx = abs(xx - 0.5);
}
else mx = 0.0;
//モーター前転
if(xx>0.77){
motorSpeed = mx*0.0001;
if((pwidth+motorSpeed)<0.0024){
pwidth += motorSpeed;
servo1.pulsewidth(pwidth);
wait(0.01);
}
}
else if(xx<0.74){
//モーター後転
motorSpeed = mx*0.0001;
if((pwidth-motorSpeed)>0.0005){
pwidth -= motorSpeed;
servo1.pulsewidth(pwidth);
wait(0.01);
}
}
else{
motorSpeed = 0.0;
pwidth = pwidth;
wait(0.03);
}
pc.printf("x = %.3e %.3e\n",mx,xx);
}//while
}//main
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/01 17:22
2018/05/01 22:21
2018/05/03 03:13
2018/05/03 03:39
2018/05/06 14:39
2018/05/06 14:45
2018/05/06 15:00
2018/05/06 15:08
2018/05/06 15:12