2016-04-27 16 views
0

私は0から180度まで掃引して0に戻るサーボを持っていますが、私は掃引をモーションセンサで中断する必要があるため、delay()関数を使用することはできません。私はいくつかのコードを書いたが、掃引がスムーズではなく、サーボが時々飛び回る。何が正しく行われていないのですか?事前に感謝しますarduinoサーボと遅延

int x = 0; 

void pivot(){ 
for (pos = 0; pos <= 180; pos += 5) { // goes from 0 degrees to 180 degrees 
// in steps of 1 degree 
myservo_2.write(pos);    // tell servo to go to position in variable 'pos' 
//delay(15); 
    for (x; x<10; x++) 
    { 
    delay(1); 
    ping(); 
    } 
    x=0; 
} 
for (pos = 180; pos >= 0; pos -= 5) { // goes from 180 degrees to 0 degrees 
myservo_2.write(pos);    // tell servo to go to position in variable 'pos' 
//delay(15); 
for (x; x<10; x++) 
    { 
    delay(1); 
    ping(); 
    } 
    x=0; 
} 
} 

答えて

0

私は問題が単にあなたがあまりにも速く掃除しようとしていると思います。

5刻みで180度は、わずか36ステップなので、その前後に72です。 1 msの遅延が10回繰り返されると、サーボを全範囲に移動して0.72秒後に戻そうとしています。これは典型的なRCサーボが動くことができるよりも少し速いです。基本的なサーボの場合は、60度で0.24秒が一般的です。したがって、フルレンジが約120であれば、およそ1秒かかります。それは、あなたが知っているすべてのために、60度の範囲の高速サーボを使用している可能性があります。

他の可能性は、あなたが滑らかでないと言ったとき、それがランダムに飛び跳ねているということではなく、ちょうどジッタが入っているということです。私は5度の飛びが10msごとに飛び降りることを期待しています.10Hzは、アイドリングしているハーレーの周波数に近く、5度は、その速度で滑らかに見える動きが大きすぎます。

10ピング中にサーボを停止する必要がありますか、または連続してスイープできますか?それが可能ならば、私はストップあたりのpingの数を減らし、ステップサイズを比例して減らすでしょう。 IEステップ1度とping 2回。

関連する問題