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

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

Arduinoで電車が動いた ②

前回、同タイトルでArduino記事をアップしましたところ、「親爺ぃさん」「oomoriさん」から、スケッチのご感想、ご提言をいただき、本当にありがとうございました。お二人から、「for文」を使うと連続した減速、加速がスムーズにできますよ、とのこと。ブログのつながりってすごいなあ!と改めて思いました。 さっそく改良に着手。



PArduino自動往復運転(第1ステップ)改良1
「発進して徐々に加速、徐々に減速して停止」が可能になりました。スケッチの通り忠実に動くものですね。ただし 動画を見てわかる通り、左側ホームから発車する場合のみ 動きがぎこちないです。これはメカや通電に問題がありそうです。今後の課題とします。

ここで「減速→停止→逆方向に発車」の過程で 今後忘れないために、
「5秒延長(delay(5000))」を「if文」の処理内の最後に追加した理由を上図で示しています。試行を繰り返しながら少しづつ進んでいると実感しています。


参考に、if文の{処理}を掲載します。
if(digitalRead(3)==HIGH){  //RSb検出
for(i=val/4;i>0;i--){      //連続減速開始(この部分をお二人にご提言いただく)
analogWrite(9,i);
delay(50);
}
digitalWrite(10,LOW);    //停止5秒間
delay(5000);
digitalWrite(11,HIGH);        //逆走発車
for(i=0;i<val/4;i++){                //連続加速開始(この部分をお二人にご提言いただく)
analogWrite(9,i);
delay(50);
}
delay(5000);       //5秒延長を追加
}


3回にわたってArduino記事を掲載しましたが、いままで車両を動かすことには無関心だった私は、ソフトを少しかじって、ああでもない こうでもないと工夫して、ない知恵を絞りだしている時間がでてきました。そんな折り、会社の現役時代に先輩から聞いた「格言」を思い出しました。退職後もボケないために、と話し始めた内容がこれです ↓

鉄道模型をやっていると、「か」「き」「く」をぐるぐるまわしている感じです。
でも、「け」は 特にNゲージは目に悪い?  「こ」は気持ちはわかるのですが‥。

Arduinoで電車が動いた!

タイトルにあるように、マイコンで電車を動かせるなんて、この年でできるのか?
このギモンが解消されたときは、とにかくうれしかったです。その経緯を説明します。


① まずは準備部品から
Aruduino UNO(アルディーノ・ウノ)‥‥電子工作に便利なマイコン。安価でびっくり
ブレッドボード‥‥ハンダ付けせずに電子回路が組めるボードで、穴が多数あいている。
         入手したとき、こんな便利グッズがあるのかと感心しました。
TA7291P‥‥車両駆動用ドライバIC(ブレッドボードの中ほどにある。全10ピン)
      5番ピン、6番ピンのHIGH / LOW組み合わせで正走、逆走、停止を設定。
ボリウム‥‥速度調整用(ブレッドボード上の青い四角い部品)


テスト用線路とホーム‥‥この線路上を往復させます。ホームの横にはリードスイッチ
            (下の写真)を取り付けています。


リードスイッチ‥‥車両を停止させる位置を検出する磁気スイッチ。本体は20mm長。


永久磁石‥‥車両の横に10✕7mmの永久磁石を接着し、車両がホームに接近すると、ホームの横に付けたリードスイッチがONしてArduinoに伝えるしくみです。


②スケッチ(Arduinoで電車を動かすプログラム)の検討
往復運転をするためには、実用書の「TA7291PでDCモータを回す」、「LEDを繰り返し点滅させる」、「外部割込み関数を使う」あたりの内容を参考にスケッチを作りました。


ほぼ想定通り電車が動いてくれた時は感激しました。ただし、リードスイッチで検出したあと、停止時間なく すぐに逆走してしまいます。スケッチの内容的にはそれで正解なのですが、停止時間を5~10秒くらいは設けたい。そこで遅延関数(delay)を使えば いくらでも停止時間を設定はできるのですが、ここで問題発生。


リードスイッチ検出を利用した外部割込み関数(attachInterrupt)には遅延関数(delay)が併用できない、と本に書いてありました。案の定、エラー発生、万事休すです!


外部割込み関数(attachInterrupt)を使わないスケッチにしなければと思い、結局イフ関数(if)で構成することにしました。この「i f 文」の中では 遅延関数(delay)はいくらでも使えます。結果、うまく動きました。


もう一つの課題は、「急にガクンと停止。急にガクンと発進」という現状を、「自動的に 徐々に速度を落とす(または上げる)」、という制御ができないものか?という点です。


どうもこの頭ではムリみたいです。とりあえず 「 階段制御」にしました。停止の前に2段階の減速期間を設け、また 発進後1段階の助走期間を設けました。


ここまでで、ようやく動きがサマになりました。第1ステップクリアです。ジオラマ製作の合い間に、参考書を買ってから非常にゆっくりしたペースでトライしてきて ここまで来ました。以下に、第1ステップの内容を説明します。


③第1ステップクリア時点の配線全景

Arduinoとの接続関係写真です。
・パソコンへの通信ケーブルがArduinoからでています。
・ブレッドボードの左端には車両モータ駆動用のDC12vが入っています。
・線路へのフィーダーは上端にあります。
・2つのホームの中ほどに、それぞれリードスイッチRSa、RSbが接着されています。


④回路図

⑤自動往復運転の様子

Arduino自動往復運転(第1ステップ)
動画作業は初めてです。カメラを固定せずに撮ったので画面のフレはご容赦ください。
本来、手持ちの「Bトレの江ノ電」で考えていたのですが、速度ムラが多く、安定走行のDE10(貨物けん引用ディーゼル)で試行しています。


⑥最後にスケッチを載せます。
<自動往復運転 第1ステップ>
(ホームに来たら1秒づつ2段階の減速後停止。5秒後、助走発進し5秒後設定速度へ)
void setup(){
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
digitalWrite(10,HIGH);  //正走
digitalWrite(11,LOW);
}
void loop(){
int val;
val=analogRead(0); //速度
analogWrite(9,val/4); //設定速度

if(digitalRead(3)==HIGH){ //RSb検出
analogWrite(9,val/6); //減速1秒間
delay(1000);
analogWrite(9,val/8); //更に減速1秒間
delay(1000);
digitalWrite(10,LOW); //停止5秒間
delay(5000);
digitalWrite(11,HIGH); //低速発車5秒間
analogWrite(9,val/6);         
delay(5000); // 低速発車後、確実にloopに戻して設定速度に移行させるための5秒
}
if(digitalRead(2)==HIGH){ //RSa検出
analogWrite(9,val/6); //減速1秒間
delay(1000);
analogWrite(9,val/8); //更に減速1秒間
delay(1000);
digitalWrite(11,LOW); //停止5秒間
delay(5000);
digitalWrite(10,HIGH); //低速発車5秒間
analogWrite(9,val/6);
delay(5000); // 低速発車後、確実にloopに戻して設定速度に移行させるための5秒
}
}


Arduino1年生にとっては、ここまで来てホッとしています。第2ステップ以降、なかなか進まないと思いますが、トライの都度 アップしようと思います。Arduinoのご経験豊富なブロガーの方々、1年生にアドバイスをよろしくお願いいたします。

JR廃線跡をハイキング

おとといの日曜日は、聴覚障害者協会の方や手話サークルの仲間11名で、JR福知山線の「武田尾廃線跡ハイク」を楽しみました。「生瀬(なまぜ)」~「武田尾」間が1986年に廃線になって、線路に沿って武庫川の渓谷美が広がる素晴らしい環境から、ハイキングコースとして人気です。私にとって3回目ですが、願ってもない天候に恵まれて思わずUPしてしまいました。


「生瀬」駅にあった案内チラシです。トンネルが6ヵ所、橋が3ヵ所あり、渓谷の絶景と合わせ、2時間の散策は春、秋には絶好です。


これはネットからの写真です。このように、単線だった線路は取り除かれていますが 枕木が残っていて、純粋の観光地ではない軌道歩きの情緒、満載です。


始めの橋梁の手すりから撮った渓谷です。この渓谷を右に見ながら散策スタートです。


浅瀬の風景です。白いさざ波がきれいでした。先の写真の「手すり」は新設されていましたが、この写真の手すりは当時のもので、いい色してま~す。


始めのトンネルに来ました。写真では このあたりの枕木ははっきり見えませんが、土の下にしっかりあります。


トンネルの中はもちろん真っ暗です。懐中電灯は必携です。写真の下の方に枕木が見えますが、つまづいて転倒しないように慎重に歩を進めます。


渓谷ではカヤック?を練習している人がいました。赤色が印象的でした。


カヤックの練習をしていたすぐ上流に、このような落差のある水しぶきが立つ場所があり、見学者の私としてはこの急流を上がる勇姿が見たかったなあ‥。
ここで余談を一つ。
娘(長女)と息子を連れて、始めてこのコースを訪れたのは約20年前ですが、ちょうどこのあたりで娘が頭をスズメバチに刺されてパニックになりました。周囲に人はなく、コースも中間点で身動きがとれず、本当に神に祈る気持ちでした。幸い 気持ち悪さや吐き気もなく、どうやら大事に至っていないと思い始めて、「なんて親だ、父親失格だ」と責めることしきりでした。みなさん、秋の行楽には必ず帽子をかぶってください。秋のスズメバチは黒いもの(頭髪など)に向かってきます。黒系を避けた帽子、長袖、長ズボンがいいです。帽子をかぶっていなかった娘の頭に針を立て、素手で追い払っても追い払ってもなかなか動きませんでした。この出来事は以後の山歩きの際の警鐘として生かしています。

さて、3つ目のトンネルを抜けた先に第2武庫川橋梁が待ってました。この日は日曜日で多くのハイカーがいます。


2回目にここを訪れたのは10年ほど前でした、会社の同僚と。当時は現在のような軌道の上の通路はなく、写真の左端の保安用通路を歩くようになっていて、スリル満点でした。ちょっと拍子抜けです。橋を渡るとすぐ4つ目のトンネルに入り、そこを抜けると今度は渓谷を左に見て進みます。

しばらく行くと 渓谷に降りられるところがあり、「親水広場」が格好のお弁当エリアになっています。妻の手づくりの弁当を食べ、仲間と談笑して(なかなか手話がスムーズにいきませんが‥)、とても気持ちのいい一日でした。鉄道マニアでない方にもおすすめのコースであることを今回再認識しました。妻と来たいけど、歩2時間がつらい‥‥。