ありぎりす の徒然日記

アクセスカウンタ

zoom RSS RaspberryPiで鉄道模型を動かしてみる その6

<<   作成日時 : 2017/01/05 17:09   >>

ナイス ブログ気持玉 6 / トラックバック 0 / コメント 0

ずいぶん間が空きましたが、
 『RaspberryPiで鉄道模型を動かしてみる その5』
の続きです。

ポイントを動かす:

鉄道模型の「ポイント」とゆうのは、
線路の分岐のことです。
画像


このリード線に12Vの電圧をかけて、
ポイントを動かして線路を切り替えます。
反対方向に切り替える場合には、+、ーを
反転します。

しかし、Raspberry Pi の出力(GPIO)は3.3V
そのままではポイントを動かすことは出来ません。

こうゆう場合には、「リレー」とゆう部品を使います。

こんなこともあろうかと、買い置きしといた
3V小型リレー Y14H-1C-3DS (秋月電子から購入 一個80円)
の出番です。 v(^-^)
画像


で、素人なりにリレー回路を考えてみました。
画像


リレー1、リレー2を使って電流の極性を切り替え、
リレー3のon/offで電流を流したり切断しようと考えました。
ポイント動作後も電流を流しっぱなしにするのは電力の無駄ですし、
ソレノイド(電磁石)の巻線が焼き切れたりしたら困りますからね。

で、Raspberry Pi から信号を出力してみたのですが・・・
動かない。 (;_;)

Y14H-1C-3DSのデータシートを確認すると、
200mW、つまり3.3Vだと60mAほど電流を
流さないといけない。

Raspberry Pi にはデータシートが付属してないので、
よく分からないですが、GPIO出力では、それだけの
電流を流す能力がないのでしょう。
つまり、電流増幅が必要とゆうことですね。

で、ググッてみたらこちらを発見。
 【きむ茶工房ガレージハウス】
 『トランジスタをマイコン出力のスイッチとして使う方法(1/2)』

さっそく参考にさせてもらって、以下のような回路を追加。
画像


で、以下のようなプログラム(point02.c)を作って


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>


#define GPIO20 20
#define GPIO21 21
#define GPIO24 24
#define GPIO25 25


int main(void) {
int i=1 ;

if(wiringPiSetupGpio() == -1)
{
printf(" SetUp error \n");
return 1;
}

pinMode(GPIO20, OUTPUT);
pinMode(GPIO21, OUTPUT);

digitalWrite(GPIO20, 0);
digitalWrite(GPIO21, 0);

while (1)
{
getchar();

if (i)
{
i = 0;

printf("GPIO21 OFF\n");
digitalWrite(GPIO21, 0);
usleep(10000); /* 10msec delay */

printf("GPIO20 ON\n");
digitalWrite(GPIO20, 1);

usleep(50000); /* 50msec delay */

printf("GPIO20 OFF\n");
digitalWrite(GPIO20, 0);

}
else
{
i = 1;

printf("GPIO21 ON\n");
digitalWrite(GPIO21, 1);
usleep(10000); /* 10msec delay */

printf("GPIO20 ON\n");
digitalWrite(GPIO20, 1);

usleep(50000); /* 50msec delay */

printf("GPIO20 OFF\n");
digitalWrite(GPIO20, 0);

}
}

digitalWrite(GPIO20, 0);
digitalWrite(GPIO21, 0);

return 0;
}


コンパイル&リンク
 $gcc -o point02 point02.c -I/usr/local/include -L/usr/local/lib -lwiringPi

そして、実行
 $sudo ./point02

リターンキーを押す毎にポイントが切り替わるようになりましたぁ。 ヽ(´▽`)ノ

で、前回の基板にこの回路を実装
画像


そして、鉄道模型の車両を走らせるプログラムを実行しつつ、
もう一つターミナルウィンドウを開いて、今回の「point02」を実行、
リターンキーを押してポイントを切り替えると・・・・・
画像

アッレェェェ?!
車両運転プログラムにエラーが起きて、
車両がコントロールを失ってしまったぁ。 <(ll゚◇゚ll)>!!
 $ i2cdetect -y 1
とやってもデバイス(DAC)を検出できない?!


でも、まぁ、これは想定内。 (^-^;
おそらくリレーやポイントのソレノイドを動かした際に、
サージ(逆起電力)が発生して、その影響でI2C(シリアル通信)が
途絶してしまうのでしょう。

問題の原因に見当がついたら、それをキーワードにググってみればよい。
(インターネットって便利ですねぇ。 v(^-^)
 だけど、「キーワード」がわからないとどうにもなりません。
 この「見当をつける」ためには、やはり、勉強と経験が必要なのです。
 なかなかサボるわけにいかないのが人生ってやつなんでしょうかね。)

で、
 リレー サージ 対策
でネット検索してみると・・・
 【オムロン】さんの
 『コイルサージ吸収機能について』

がヒット。

で、その記述を参考にして、前述の回路に以下を追加。
画像


再度車両運転中のポイント切り替えにチャレンジ・・・・

うまくいったぁ!!(I2C途絶しなくなった) ヽ(´▽`)ノ


次回 は列車を特定の位置、駅に停車させます。


関連ブログ一覧:

 『RaspberryPiで鉄道模型を動かしてみる その1
   まずは下準備 』


 『RaspberryPiで鉄道模型を動かしてみる その2
   車両を動かす(ON/OFF制御) 』


 『RaspberryPiで鉄道模型を動かしてみる その3
   PWMで速度制御 』


 『RaspberryPiで鉄道模型を動かしてみる その4
   DACで速度制御その1 』


 『RaspberryPiで鉄道模型を動かしてみる その5 追記あり
   DACで速度制御その2 』


 『RaspberryPiで鉄道模型を動かしてみる その6
   ポイントを動かす 』


 『RaspberryPiで鉄道模型を動かしてみる その7
   駅で停める 』


 『RaspberryPiで鉄道模型を動かしてみる その8
   効果音を鳴らす 』

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 6
ナイス ナイス ナイス ナイス
面白い 面白い

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
RaspberryPiで鉄道模型を動かしてみる その6 ありぎりす の徒然日記/BIGLOBEウェブリブログ
文字サイズ:       閉じる