FC2ブログ

目指せヤードの一括転換 実験用ヤードに遅延回路の追加

Arduinoでラジコンサーボを制御し、Pecoポイントの一括転換を目指そう計画(^^)
JAMに出展した実験用ヤードの改良です。

12V単一電源を使い、Arduino(12V)とサーボ(5V)双方に電流を供給していました。
電源が入りArduinoが立ち上がってしまえば問題ないのですが、
電流が流れArduinoが立ち上がる迄のごく僅かな瞬間。
その0.5秒ほどの間に、サーボが設定外の角度に振り切ってしまうことが有りました。

IMG_0088.jpg

解決しようと思えば簡単なんです。
ACアダプターをArduino(12V)とサーボ(5V)、それぞれ別々に用意し、
電源ONの時は先にArduino、後でサーボの順。
電源OFF時の時は先にサーボ、後でArduinoの順で押下すれば良いんですから。

が、自他共に認める我が儘な私。。。
「そんな面倒なこと嫌」って駄々をこねるのを見かねww
lofthonsenさん親爺ぃさんが遅延回路を設計し、
必要なパーツまで用意してくださいましたm(_ _)m

IMG_0091.jpg

と言う訳で、それで無くてもキチキチの基板をさらにキチキチにハンダw
(おかげで基板の裏がグチャグチャになりました。。。

IMG_0098.jpg

必要なパーツや配線を増やしました♪

IMG_0109.jpg

って、慌ててやったらろくなことが有りません。。。

LEDが点かないと思ったら極性を間違ってました(^^;)

IMG_0111.jpg

で、改めて電源を入れArduinoが立ち上がることを確認。。。

予備のサーボを接続し、スケッチ通りに作動することも確認しました♪

IMG_0115.jpg

最後にアナログテスターを接続し、、、

サーボ用の5Vが遅れて立ち上がることも確認しました(^^)





今回製作した実験用5番線ヤードの回路図です。

5番線ヤード 回路図

遅延回路付き電源と同時に使用します。

追加回路図


遅延回路対応のスケッチはこちら。



#include
#define SW_p1 22
#define SW_p2 24
#define SW_p3 26
#define SW_p4 28
#define SW_p5 30

#define LED_1 44 //偶数番号スイッチLED
#define LED_11 45 //奇数番号番線表示LED
#define LED_2 46
#define LED_22 47
#define LED_3 48
#define LED_33 49
#define LED_4 50
#define LED_44 51
#define LED_5 52
#define LED_55 53
#define CHIEN 41

Servo servo_p1;
Servo servo_p2;
Servo servo_p3;
Servo servo_p4;

int pos;
int servo_p1R = 74;
int servo_p1L = 89;
int servo_p2R = 79;
int servo_p2L = 94;
int servo_p3R = 82;
int servo_p3L = 97;
int servo_p4R = 75;
int servo_p4L = 90;

void setup()
{
pinMode(SW_p1,INPUT);
pinMode(SW_p2,INPUT);
pinMode(SW_p3,INPUT);
pinMode(SW_p4,INPUT);
pinMode(SW_p5,INPUT);
pinMode(23,OUTPUT);
pinMode(25,OUTPUT);
pinMode(27,OUTPUT);
pinMode(29,OUTPUT);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);
pinMode(LED_5, OUTPUT);
pinMode(LED_11, OUTPUT);
pinMode(LED_22, OUTPUT);
pinMode(LED_33, OUTPUT);
pinMode(LED_44, OUTPUT);
pinMode(LED_55, OUTPUT);
pinMode(CHIEN, OUTPUT);

servo_p1.attach(23);
servo_p2.attach(25);
servo_p3.attach(27);
servo_p4.attach(29);

digitalWrite(CHIEN,HIGH);

servo_p1.write(81);
servo_p2.write(86);
servo_p3.write(89);
servo_p4.write(82);

int angle_1 = servo_p1.read();
int angle_2 = servo_p2.read();
int angle_3 = servo_p3.read();
int angle_4 = servo_p4.read();

if(angle_1==81)
for(pos = 81; pos>=servo_p1R; pos-=1)
{
servo_p1.write(pos);
delay(60);
}
if(angle_2==86)
for(pos = 86; pos>=servo_p2R; pos-=1)
{
servo_p2.write(pos);
delay(60);
}
if(angle_3==89)
for(pos = 89; pos>=servo_p3R; pos-=1)
{
servo_p3.write(pos);
delay(60);
}
if(angle_4==82)
for(pos = 82; pos>=servo_p4R; pos-=1)
{
servo_p4.write(pos);
delay(60);
}
digitalWrite(LED_1,HIGH);
digitalWrite(LED_11,HIGH);
}

void loop()
{

int angle_1 = servo_p1.read();
int angle_2 = servo_p2.read();
int angle_3 = servo_p3.read();
int angle_4 = servo_p4.read();

//5番線開通 SW(5)ON:ポイント(A)右・ポイント(B)右・ポイント(C)右・ポイント(D)右
//=サーボ(A)左・サーボ(B)左・サーボ(C)左・サーボ(D)左

if(digitalRead(SW_p5)==HIGH){

digitalWrite(LED_1,LOW);
digitalWrite(LED_11,LOW);
digitalWrite(LED_2,LOW);
digitalWrite(LED_22,LOW);
digitalWrite(LED_3,LOW);
digitalWrite(LED_33,LOW);
digitalWrite(LED_4,LOW);
digitalWrite(LED_44,LOW);
digitalWrite(LED_5,HIGH); //5番線LED点灯
digitalWrite(LED_55,HIGH);

if(angle_1==servo_p1R)
for(pos = servo_p1R; pos<=servo_p1L; pos+=1)
{
servo_p1.write(pos);
delay(60);
}

if(angle_2==servo_p2R)
for(pos = servo_p2R; pos<=servo_p2L; pos+=1)
{
servo_p2.write(pos);
delay(60);
}

if(angle_3==servo_p3R)
for(pos = servo_p3R; pos<=servo_p3L; pos+=1)
{
servo_p3.write(pos);
delay(60);
}

if(angle_4==servo_p4R)
for(pos = servo_p4R; pos<=servo_p4L; pos+=1)
{
servo_p4.write(pos);
delay(60);
}
}

//4番線開通 SW(4)ON:ポイント(A)右・ポイント(B)右・ポイント(C)右・ポイント(D)左
//=サーボ(A)左・サーボ(B)左・サーボ(C)左・サーボ(D)右

if(digitalRead(SW_p4)==HIGH){

digitalWrite(LED_1,LOW);
digitalWrite(LED_11,LOW);
digitalWrite(LED_2,LOW);
digitalWrite(LED_22,LOW);
digitalWrite(LED_3,LOW);
digitalWrite(LED_33,LOW);
digitalWrite(LED_5,LOW);
digitalWrite(LED_55,LOW);
digitalWrite(LED_4,HIGH);
digitalWrite(LED_44,HIGH); //4番線LED点灯

if(angle_1==servo_p1R)
for(pos = servo_p1R; pos<=servo_p1L; pos+=1)
{
servo_p1.write(pos);
delay(60);
}

if(angle_2==servo_p2R)
for(pos = servo_p2R; pos<=servo_p2L; pos+=1)
{
servo_p2.write(pos);
delay(60);
}

if(angle_3==servo_p3R)
for(pos = servo_p3R; pos<=servo_p3L; pos+=1)
{
servo_p3.write(pos);
delay(60);
}

if(angle_4==servo_p4L)
for(pos = servo_p4L; pos>=servo_p4R; pos-=1)
{
servo_p4.write(pos);
delay(60);
}
}

//3番線開通 SW(3)ON:ポイント(A)右・ポイント(B)右・ポイント(C)左
//=サーボ(A)左・サーボ(B)左・サーボ(C)右

if(digitalRead(SW_p3)==HIGH){

digitalWrite(LED_1,LOW);
digitalWrite(LED_11,LOW);
digitalWrite(LED_2,LOW);
digitalWrite(LED_22,LOW);
digitalWrite(LED_4,LOW);
digitalWrite(LED_44,LOW);
digitalWrite(LED_5,LOW);
digitalWrite(LED_55,LOW);
digitalWrite(LED_3,HIGH); //3番線LED点灯
digitalWrite(LED_33,HIGH);

if(angle_1==servo_p1R)
for(pos = servo_p1R; pos<=servo_p1L; pos+=1)
{
servo_p1.write(pos);
delay(60);
}

if(angle_2==servo_p2R)
for(pos = servo_p2R; pos<=servo_p2L; pos+=1)
{
servo_p2.write(pos);
delay(60);
}

if(angle_3==servo_p3L)
for(pos = servo_p3L; pos>=servo_p3R; pos-=1)
{
servo_p3.write(pos);
delay(60);
}
}

//2番線開通 SW(2)ON:ポイント(A)右・ポイント(B)左
//=サーボ(A)左・サーボ(B)右

if(digitalRead(SW_p2)==HIGH){

digitalWrite(LED_1,LOW);
digitalWrite(LED_11,LOW);
digitalWrite(LED_3,LOW);
digitalWrite(LED_33,LOW);
digitalWrite(LED_4,LOW);
digitalWrite(LED_44,LOW);
digitalWrite(LED_5,LOW);
digitalWrite(LED_55,LOW);
digitalWrite(LED_2,HIGH); //2番線LED点灯
digitalWrite(LED_22,HIGH);

if(angle_1==servo_p1R)
for(pos = servo_p1R; pos<=servo_p1L; pos+=1)
{
servo_p1.write(pos);
delay(60);
}

if(angle_2==servo_p2L)
for(pos = servo_p2L; pos>=servo_p2R; pos-=1)
{
servo_p2.write(pos);
delay(60);
}
}

//1番線開通 SW(1)ON:サーボ(A)左
//=サーボ(A)右

if(digitalRead(SW_p1)==HIGH){

digitalWrite(LED_2,LOW);
digitalWrite(LED_22,LOW);
digitalWrite(LED_3,LOW);
digitalWrite(LED_33,LOW);
digitalWrite(LED_4,LOW);
digitalWrite(LED_44,LOW);
digitalWrite(LED_5,LOW);
digitalWrite(LED_55,LOW);
digitalWrite(LED_1,HIGH); //1番線LED点灯
digitalWrite(LED_11,HIGH);

if(angle_1==servo_p1L)
for(pos = servo_p1L; pos>=servo_p1R; pos-=1)
{
servo_p1.write(pos);
delay(60);
}
}
}



回路やスケッチの質問はこちらです(^^;)


にほんブログ村 鉄道ブログ 鉄道模型 レイアウト製作へ
にほんブログ村
関連記事
スポンサーサイト
わがまま

こんにちわです。

12Vと5Vの電源があって、それぞれを順番に入れたり切ったり・・・私も嫌ですね(^-^;
人間は絶対ミスりますね(笑)
この遅延起動回路はすごいです。
これなら一発起動ですし、何よりミスが発生しない事が一番。
それに外部電源の1本化も大きくないですか?
12V1本なら、スッキリしますね。
私もこの回路、乗らせていただきます。
ただ16V4A電源余っているので、それを使えないかな~勿体ないから使いたいなぁ(天の声)

スケッチすごいですね。
前なら眺めもせずにスルーだったけど、最近入門書を読み始めたので、おぼろげながら分かるところもあるような・・・気のせいかな?!(笑)

2017.09.06 12:34 がおう☆ #- URL[EDIT]
遅延線

なるほど、41番ピンを使って、スケッチでサーボへの電源供給を遅らせているんですね。

2017.09.06 13:27 oomori #nLnvUwLc URL[EDIT]
がおう☆さん こんにちは

こんにちは

素面でも間違うのに、ほろ酔いで作業する私には絶対無理ですね。
それに最終的には製品化を目指しています(嘘)
誰にでも扱えるようにしないといけませんからね。
って、tomixなどに比べまだまだ敷居は高いですね。
工作力に電気知識にプログラミング能力。
使いこなせれば良いオモチャなんだけど(笑)

>外部電源
ACアダプターが複数付いた機器なんてみたこと無いですものね。
でも、16Vのは置いておけば何かに使えるんじゃないですか?
秋月で安いのがありますよ。
私なんか、この2ヶ月で何回注文したことか。。。(汗)

>スケッチ
最初はサーボだけだったので基板もスケッチもスッキリしてたのですが、
JAMに出すんだし賑やかにってことでLEDを付けたために、ゴチャゴチャになってきました。
って、じつはこれでもかなり短くなったんですよ。
以前はサーボ角の微調整を全てのパターンで書き込むスケッチ。
お経のように長く目がチカチカしてました(^^;)

2017.09.06 13:46 た625 #CsZkXV9o URL[EDIT]
oomoriさん こんにちは

こんにちは

なんだか良く解らないけどArduinoからのコードが増えてます(笑)

って、最初はデジタルテスターに繋いだんですが遅延は実感できず。
仕舞い込んでいたアナログテスターに変えて初めて実感できました。
針の動きを見てると不思議な感覚です(^^;)

2017.09.06 13:51 た625 #CsZkXV9o URL[EDIT]
遅延回路

おはようございます。

単一電源化で作った基板、親爺ぃさんがキチキチレイアウトした所に更に遅延回路を押し込んだんですか! そりゃー裏側グチャグチャになりますよ。 基板と言うよりリボンウィヤーの巣窟、何がどこへ繋がっているか良く解りますね。

教訓、確実動作保証がない回路を組む時は、基板スペースに余裕を持たせましょう。 そして配線の引き出しと線径を考えたレイアウトもね。 アレっ、これ親爺ぃさんへのコメントかな(笑)

2017.09.08 09:55 lofthonsen #- URL[EDIT]
lofthonsenさん こんにちは

こんにちは

親爺ぃさんからも別基板でやるように言われてました。
ご親切に基板まで送ってくださったし。
が、そう言われたら余計に元基板に押し込みたくなるもの。
素直じゃ無いですからね、わたし(笑)

>リボンウィヤーの巣窟
色の順番だけを頼りにハンダしていきました。
最大で12色あるので助かりましたよ。
これが当初の予定通り赤黒と青白の4色だったら破綻していたと思います(汗)

>教訓
結局は太いコードを使ったためグチャグチャになっちゃいましたが、
元々はスッキリした基板でこんなことが出来ると言うのを見せたくて
私がキチキチの設計をお願いしたんです。
パーツはともかくコードのハンダは大変でしたけど。
って、そのことを親爺ぃさんに愚痴ると「ざまあ見ろ!」って返事が来ましたわ(^^;)

2017.09.08 10:11 た625 #CsZkXV9o URL[EDIT]
そんなこと言ったかな。(-_-;)

た625さん、こんにちは。

世界に誇る技術力を持ってる「た625さん」のことだから、キチキチだろうと出来る思っていました。(笑)
それに、「た625さん」は、ピンヘッダーを連結で使いたかったこともあり、あんなことになってしまったのです。

>そのことを親爺ぃさんに愚痴ると「ざまあ見ろ!」って返事が来ましたわ(^^;)

そんなことは言っていませんよ。
「だ・か・ら・言ったじゃないの~♪」じゃなかったかな。(爆)


2017.09.08 10:28 親爺ぃ #mQop/nM. URL[EDIT]
親爺ぃさん こんにちは

こんにちは

>そんなことは言っていませんよ。
探したら見つかりました。

正しくは
「ざま~見やがれ」でした(^^;)

2017.09.08 11:48 た625 #CsZkXV9o URL[EDIT]

管理者にだけ表示を許可する