イノッチの鉄道模型ブログ

日常生活の中のトピックスを気ままに書きます。鉄道模型製作や畑作業が中心です。
これまで製作した鉄道模型作品は、ホームページ「イノッチの鉄道模型」inoyoshio.jimdo.comに載せていますので、こちらもよかったらみてください。

サーボの動きの検討

2019年の積み残しとなった「Arduinoによる踏切開閉制御」ですが、初めて使ったサーボ関数でサーボモータを動かしてみると、一応の制御はできるものの、”カクカク動作” や 電源ON時に”暴れる”など、先が思いやられる現象が出て、来年への持越しと決めていました。


ちょっと時間ができたので、作品展に出したジオラマから制御ユニットの部分を取り出して机に運び、一から検討再開です。
①遮断桿の回転角度:回転する角度を約80°とします。
②遮断桿の回転時間:閉→開までの時間は3~4秒。逆も同じ。
③サーボ関数 #include  を使って実験再開。



servo関数による動作
電源ON時にフィンが戻る位置をスタート地点とし、80°くらいで止まるようにスケッチをつくり動作させたのが上の動画です。移動中は小刻みに微振動しています。そこで、
④oomoriさんからアドバイスをいただいた #include 関数で実験:



varspeedservo関数による動作
Arduino UNO のライブラリーにないのでネットからなんとか取り込み成功。実験したのが上の動画です。 ③の #include 関数に比べると滑らかに移動しています。oomoriさんありがとうございました。



電源ON時の誤動作
もう一つ問題なのが、電源ON時に瞬間的に「カチャッ」と動く動作です。(撮影時カメラを逆さまにしています)
信号線にポリコンを入れたり、電源ONから数秒後にサーボ関数を読ませるようにしたりしましたが、この誤動作は解決しませんでした。信号線をシールドしたり、電源線と離すなどの検討が必要ですが、大きなブレも解消したし、作品展では1日1回の電源投入なので、ひとまずこの件は終了します。


参考に、実験に使用したスケッチを載せます。
③のスケッチ:
#include
Servo myservo;
int pos;
void setup(){
pinMode(7,OUTPUT);
digitalWrite(7,LOW);
myservo.attach(9);
}
void loop(){
if(digitalRead(7)==HIGH){
for(pos=92;pos>=10;pos-=1){
myservo.write(pos);
delay(50);
}
delay(2000);
for(pos=10;pos<=92;pos+=1){
myservo.write(pos);
delay(50);
}
delay(5000);
}
}


④のスケッチ:
#include
VarSpeedServo myservo;
void setup() {
pinMode(7,OUTPUT);
digitalWrite(7,LOW);
myservo.attach(9);
}
void loop() {
if(digitalRead(7)==HIGH){ 
myservo.write(10,10,true);
delay(2000);
myservo.write(92,10,true);
delay(5000);
myservo.detach();
}
}

×

非ログインユーザーとして返信する