HOME >> 鉄道模型自動運転システム > 往復運転モデルを作る その1
■ はじめに
システムを制御する電気回路の全体像を設定したので、ハード回路を制作する前に各要素の機能をそれぞれ検証していく事にする。 ポイント駆動回路での実験につづいて、レールエンドの信号処理と、給電回路の実験を実施する。 この場合は、往復運転モデルを作れば、それぞれの機能が確認できるはずである。
■ 往復運転モデルのレイアウト
電車を動かす給電回路とレール端で折り返し運転させるためのレールエンドの信号処理回路を同時に設定し、その機能を確認するために、「エンドレールでの表示と信号処理」で実施したレイアウトで使用する。 机の上の状態を下に示す。 処理回路はブレッドボード上に構成し、ラズパイを使って制御出来るようにしました。
回路構成は、「電気回路の検討」で説明した回路を使用しています。
■ 制御プログラムの検討
ファイル名:Goback-mode12.py 作成日 :2017年5月15日 ************************************************ import RPi.GPIO as GPIO GPIOを使用する from time import sleep sleepコマンドを使用する GPIO.setmode(GPIO.BCM) GPIOのコマンド指定 GPIO.setup(23,GPIO.OUT) ポートを変更している GPIO.setup(24,GPIO.OUT) ポートを変更している GPIO.setup(6,GPIO.IN) ポートの指定 GPIO.setup(26,GPIO.IN) v1 = GPIO.PWM(23, 500) PWMの指定1 v2 = GPIO.PWM(24, 500) PWMの指定2 ss1 = GPIO.input(6) 到着信号の変数を指定 ss4 = GPIO.input(26) v1.start(0) PWMの開始 v2.start(0) global duty def direction1(): 運転モード1の関数 while True: duty = 25 v2.ChangeDutyCycle(0) v1.ChangeDutyCycle(duty) sleep(0.2) if GPIO.input(6) == GPIO.LOW: 到着信号のチェック if GPIO.input(6) == GPIO.LOW: 2重チェック return 運転モード1の完了 sleep(0.2) def direction2(): 運転モード2の関数 while True: duty = 25 v1.ChangeDutyCycle(0) v2.ChangeDutyCycle(duty) sleep(0.2) if GPIO.input(26) == GPIO.LOW: if GPIO.input(26) == GPIO.LOW: return sleep(0.2) try: メイン部分。走行ダイヤを記述していく。 while True: direction1() 運転モード1を実行せよ sleep(1) direction2() 運転モード2を実行せよ sleep(1) except KeyboardInterrupt: プログラム終了 Ctrl+c pass v1.stop() PWMの終了 v2.stop() GPIO.cleanup() ポートのリセット
検討すべき機能は電車を運転させてみる必要がありますので、制御プルグラムの作成を始めました。 ところが、Arduino とは違った部分が多くありますので、何とか動けるようになるまでに四苦八苦でした。 やっとこさで動けるようになった時には、バージョンが12ににもなっていました。
その足跡を記録として残して行こう。 検討中は頭が半分パニック状態でしたので、充分にはメモしていませんでしたが、記憶を頼りに順不同で記述しておきます。 なぜ旨く行かないのかは追及しておりませんので他の要素との兼ね合いで良かったのかも知れませんが、とにかく何とか動くようになりましたと言う状態を報告します。
まず、プログラム構成の骨格を決めておこう。
次にトラブった内容を順不同で記録しておく。
今回の最大の問題点は、PWM 制御と到着信号のアン・マッチングであった。 当初から心配していた問題がズバリ的中してしまった。 PWM 制御のパルスによって到着信号が誤動作してしまうのである。 右のプラグラムでは、if 文による2重チェックを実施しているが、これでも不十分であった。
この信号処理について検討結果を次に報告する。
■ 到着信号処理回路の検証
問題の処理回路について、回路構成を下に再掲載する。 レールからの信号によってフォトカプラを通して信号を取り入れる様にしているが、レールからの信号はパルス信号なので、通常でも OFF の状態が発生する。 TOMIX のTCSワンタッチ装着センサーを参考にして気楽に考えていたが、やはりパルス信号を拾ってしまったのである。
.
当初は信号の入力さえ疑った状態であったので、オシロを持ち出して出力波形を見てガックリしてしまった。
.
電車が無い場合には3.3ボルトの出力があったのであるが、電車を走らせると、電圧は低下しているし、ノイズもいっぱい乗っていて HIGH だか LOW だか判読不明の状態であった。
このため、トランジスタを持ち出して波形整形を実施することにした。 ブレッドボードに回路を構成した状態を上右に示す。 トランジスタを採用する以前にはコンデンサ容量もいろいろ変えて検討したと思ったが、メモしていなかったので忘れてしまった。 うまく行かなかったと記憶している。 さらにトランジスタの入力部には 10μF のコンデンサも取り付けている。
この 10μF のコンデンサの有無による信号状態のオシロデータが残っていたので下記に示す。 下左がコンデンサが無い場合で、下右がコンデンサ有りの場合であり、CH1(黄色のライン)は反対側のセンサである。 センサからの信号が無いので負論理となり、HIGH 状態を示している。
青ラインは、878Hz、68%のDuty 比を示しているが、これはまさにPWM信号そのものである。
● もう一つの問題
さらに、せっかく設定しているLEDの点灯具合がクシャクシャなのである。 鉄コレの電車を走らせると、モータの逆起電力によって反対側のLEDも点灯してしまうのであるが、これは車両の前照灯における問題と同じであるようだ。 しまった! その対策は頭に無かったのである。 ネットでも紹介されていたと思われるが、真剣に読んでいなかったのである。
■ 動画の紹介
検討途中での様子を動画にしておきましたのでご笑納ください!
鉄コレ電車では、逆起電力の影響で、いやいや運転になってしまっているし、LWDも逆点灯しています。
コアレスモータを搭載したKATOのC12 の場合は、全く正常です。 コアレスモータはいいですね!
■ 今後の進め方
システムがなかなか正常に動いてくれないので、何度もラズパイを諦めて、Arduino に変更しようと思いましたが、ここまで来たので諦めずに前に進める事にします。 まだまだ先は長いのですが、頑張ることにします。
まず、PWM制御と到着信号処理の問題は、スルリと避けることにします。 と言いますのは、レールエンドの手前には CdS を使った通過信号を使用しますので、この信号をによって電車が到着するのを検知することにします。 そして、駅には減速させてホームに入線させ、確かに停止している事の確認用に到着信号を使うことにします。 ノイズで誤動作しても問題は少ないはずです。 電車は電気的に遮断されていますので安心して対応できます。 システムのあわて者の誤りを少しでも減らす工夫をしておきましょう。
2017/5/18 作成 M.T.