「レイアウトモジュール4」その後・・・・(その8) [第4モジュール(レイアウトねた)]
3/27(日)に相模原鉄道模型クラブの運転会が相模原某所でありました。
準備はいろいろ大変ですが、やはり仲間同士でワイワイ走らせるのは楽しいですね。
※画像は、他の方の作られた機関庫&ターンテーブルモジュールで、ターンテーブルに自分所有のEF55 をのっけて、ぐるぐる回して遊んでる場面です。
そいうわけで、運転会に持ち込む為に作成している分割モジュールですが、前回からの続きです。
地面の部分はだいたい終わったので、こんどはいよいよ海部分の加工をば。
海の水中部分はすでに塗装済みなので、あとは水を張るだけですが・・・・
これが結構骨が折れる作業内容で・・・
水面の表現方法は色々ありますが、今回はモデリングウォーターを使用。
理由は単純に、既に第3モジュールの作成で使ったことがあったから。
使い方は、まずは水を張る場所の外型(レイアウトボードの外枠部分)にマスキングテープ等で囲いを作り、その中に中身の液を注入。
隅々まで程よく浸透するように棒などで均しながら、使用方法の説明書きどおり12分+α程度の時間、乾燥させ・・・
だんだん硬くなってきたところで、波を表現させるべくまた棒などで程よくかき回し・・・・
イイ感じになったら、あとはひたすら放置して、乾燥させます。
でもこの資材、主成分がシリコンなので中々固まらないので、表面に埃が付着しないようにカバーして、数日間放置。(※説明書き上は「1日程度で固まる」みたいな書き方になってますが、絶対無理。(汗))
そして固まったら、まわりの枠を外していきます。
まぁ表面が多少ベタついた状態のままになるので、今後も埃の付着(堆積)にはずっと気を付けないといけませんが(汗)
そんな感じで、モジュールは完成です・・・かね?
物足りない部分が生じたら、これからもちょいちょい手を加えていきますが・・・まぁ、そんな感じで。
いじょ。
準備はいろいろ大変ですが、やはり仲間同士でワイワイ走らせるのは楽しいですね。
※画像は、他の方の作られた機関庫&ターンテーブルモジュールで、ターンテーブルに自分所有のEF55 をのっけて、ぐるぐる回して遊んでる場面です。
そいうわけで、運転会に持ち込む為に作成している分割モジュールですが、前回からの続きです。
地面の部分はだいたい終わったので、こんどはいよいよ海部分の加工をば。
海の水中部分はすでに塗装済みなので、あとは水を張るだけですが・・・・
これが結構骨が折れる作業内容で・・・
水面の表現方法は色々ありますが、今回はモデリングウォーターを使用。
理由は単純に、既に第3モジュールの作成で使ったことがあったから。
模型用 NEWモデリングウォーター 2本セット 光栄堂 /相田化学工業 R-1106-02
- 出版社/メーカー: 相田化学工業株式会社
- メディア:
模型用 NEWモデリングウォーター 5本セット 光栄堂 /相田化学工業 R-1106-05
- 出版社/メーカー: 相田化学工業株式会社
- メディア:
使い方は、まずは水を張る場所の外型(レイアウトボードの外枠部分)にマスキングテープ等で囲いを作り、その中に中身の液を注入。
隅々まで程よく浸透するように棒などで均しながら、使用方法の説明書きどおり12分+α程度の時間、乾燥させ・・・
だんだん硬くなってきたところで、波を表現させるべくまた棒などで程よくかき回し・・・・
イイ感じになったら、あとはひたすら放置して、乾燥させます。
でもこの資材、主成分がシリコンなので中々固まらないので、表面に埃が付着しないようにカバーして、数日間放置。(※説明書き上は「1日程度で固まる」みたいな書き方になってますが、絶対無理。(汗))
そして固まったら、まわりの枠を外していきます。
まぁ表面が多少ベタついた状態のままになるので、今後も埃の付着(堆積)にはずっと気を付けないといけませんが(汗)
そんな感じで、モジュールは完成です・・・かね?
物足りない部分が生じたら、これからもちょいちょい手を加えていきますが・・・まぁ、そんな感じで。
いじょ。
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
国電型の車両は・・・(KATO 103系) [ 車輌改造ネタ(Nゲージ)-電車]
「別の行先ステッカーを貼った先頭車にすげ替えたら、別の路線に仕立てられる」法則、発動。(前回のフラグ回収)
・・・まぁ、上記のとおりです。
相模原鉄道模型クラブに所属してから、地元愛がやたら強くなり、セットとは別にクハを2両入手し、横浜線に仕立てました。
実際に30年くらい前の国鉄時代は、転属が発生しても次の大規模検査まで車体色はそのままというのもいろんな路線で実際やってました。なので、「ウグイス」色の編成中に「ブルー」の車輛が混じってても、決して架空の設定ではありませんし。てゆーか、むしろいろんな色の103系持ってたら、これやってナンボでしょ?というお話。(賛同者求む)
当時の山手線が10両編成に対し、横浜線は当時7両編成だったので、編成両数も変える必要はありますが。
え?「側面に誤乗車防止ステッカー貼ってないじゃん」とか、「中間車の行先方向幕が『山手線』のままじゃん!」とか、細かいツッコミどころは無視していただく方向で・・・(滝汗)
KATO Nゲージ 103系 ウグイス 4両セット 10-1743C 鉄道模型 電車 緑
- 出版社/メーカー: カトー(KATO)
- 発売日: 2022/02/27
- メディア: おもちゃ&ホビー
KATO Nゲージ 103系 ウグイス 中間車3両セット 10-1744C 鉄道模型 電車
- 出版社/メーカー: カトー(KATO)
- 発売日: 2022/02/27
- メディア: おもちゃ&ホビー
KATO Nゲージ 103系 スカイブルー 中間車3両セット 10-1744A 鉄道模型 電車
- 出版社/メーカー: カトー(KATO)
- 発売日: 2022/02/27
- メディア: おもちゃ&ホビー
・・・まぁ、上記のとおりです。
相模原鉄道模型クラブに所属してから、地元愛がやたら強くなり、セットとは別にクハを2両入手し、横浜線に仕立てました。
実際に30年くらい前の国鉄時代は、転属が発生しても次の大規模検査まで車体色はそのままというのもいろんな路線で実際やってました。なので、「ウグイス」色の編成中に「ブルー」の車輛が混じってても、決して架空の設定ではありませんし。てゆーか、むしろいろんな色の103系持ってたら、これやってナンボでしょ?というお話。(賛同者求む)
当時の山手線が10両編成に対し、横浜線は当時7両編成だったので、編成両数も変える必要はありますが。
え?「側面に誤乗車防止ステッカー貼ってないじゃん」とか、「中間車の行先方向幕が『山手線』のままじゃん!」とか、細かいツッコミどころは無視していただく方向で・・・(滝汗)
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
KATO 103系の我が鉄道流、カスタマイズポイント [ 車輌改造ネタ(Nゲージ)-電車]
昨晩は停電するかも騒ぎにのっとり、更新を遠慮し、予期せぬ停電に備えてました。
まぁ運がよかったのか、そこまで影響はありませんでしたが、暖房を弱めてたので寒かった記憶が・・・
まぁそれは置いといて、前回、「KATOの103系はあんまりいじるところがない」とは言いましたが、造りが比較的シンプル?な故に、拘わる方はとことんこだわるかと・・・・
ということで、自分なりの拘りカスタムをば・・・・
①方向幕シール
今回の販売分からオプション別売り方式に変わりました。
それでも目立つ部分故に、貼っておかないとどこか寂しいもので・・・
ちなみに1シートに5両分+予備1両分含まれてるので、今回は10両分まかなえる2シート購入しました。
関東10路線分含まれてるので、通常のセットものに同梱されているシールより面積がはるかに大きいですが、再現したい路線だけでなく他の路線分も選択可能なので、これはこれで便利ですね(※フラグ)
②貫通路の幌
今でこそついてるのが当たり前になってますが、KATOに限らず、ひと昔前の製品はついてませんでした。
なのでうちでは、連結面の隙間を埋めるべく、後付けで必ず後付けでつけるようにしています。
取り付け用の爪を削って、定番のゴム系接着剤で接着。
写真のは20系寝台車(201系に標準装備されているもの)用の灰色ですが、昨今、市場在庫が枯渇してるので入手困難かもしれません。ちなみにギリギリ10両分、運よく手元に在庫がありました(汗)
③ATS-B車上子の塗装
前回生産分からKATOのダミーカプラーに表現されたブツ。やはり目立つし、そんなに難易度が高いものじゃないので、サクッと青で塗装。
④乗務員室の壁
正面から見ると、必ず目がつく箇所なので、塗ると塗らないのでは格段の差がつく場所。
本当は某サイトでフリーで配布されている103系の乗務員室の壁画像(イラスト)を印刷&貼り付けたかったのですが、構造上、KATOの103系への貼り付けが上手くできず・・・・
⑤パンタグラフのシュー塗装
塗りすぎ?たかもしれません。
本当はパンタグラフの付け根の碍子や屋根上の配管等も塗ればもっといいと思いますが、それは追い追い。
⑥コンプレッサーの配管
⑦ドア間のゴム
・・・というわけで、こんな感じに仕上がりまして・・・
まぁ運がよかったのか、そこまで影響はありませんでしたが、暖房を弱めてたので寒かった記憶が・・・
まぁそれは置いといて、前回、「KATOの103系はあんまりいじるところがない」とは言いましたが、造りが比較的シンプル?な故に、拘わる方はとことんこだわるかと・・・・
ということで、自分なりの拘りカスタムをば・・・・
①方向幕シール
今回の販売分からオプション別売り方式に変わりました。
それでも目立つ部分故に、貼っておかないとどこか寂しいもので・・・
ちなみに1シートに5両分+予備1両分含まれてるので、今回は10両分まかなえる2シート購入しました。
関東10路線分含まれてるので、通常のセットものに同梱されているシールより面積がはるかに大きいですが、再現したい路線だけでなく他の路線分も選択可能なので、これはこれで便利ですね(※フラグ)
②貫通路の幌
今でこそついてるのが当たり前になってますが、KATOに限らず、ひと昔前の製品はついてませんでした。
なのでうちでは、連結面の隙間を埋めるべく、後付けで必ず後付けでつけるようにしています。
取り付け用の爪を削って、定番のゴム系接着剤で接着。
写真のは20系寝台車(201系に標準装備されているもの)用の灰色ですが、昨今、市場在庫が枯渇してるので入手困難かもしれません。ちなみにギリギリ10両分、運よく手元に在庫がありました(汗)
③ATS-B車上子の塗装
前回生産分からKATOのダミーカプラーに表現されたブツ。やはり目立つし、そんなに難易度が高いものじゃないので、サクッと青で塗装。
④乗務員室の壁
正面から見ると、必ず目がつく箇所なので、塗ると塗らないのでは格段の差がつく場所。
本当は某サイトでフリーで配布されている103系の乗務員室の壁画像(イラスト)を印刷&貼り付けたかったのですが、構造上、KATOの103系への貼り付けが上手くできず・・・・
⑤パンタグラフのシュー塗装
塗りすぎ?たかもしれません。
本当はパンタグラフの付け根の碍子や屋根上の配管等も塗ればもっといいと思いますが、それは追い追い。
⑥コンプレッサーの配管
⑦ドア間のゴム
・・・というわけで、こんな感じに仕上がりまして・・・
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
山手線といえば・・・・?(昭和50年代生まれの場合)(KATO 103系) [ 車輌改造ネタ(Nゲージ)-電車]
モジュールばかりやりすぎて、そろそろ皆様飽きてきたと思われるので、今回は車両をば。
というわけで、先月末に発売された103系高運転台をば・・・・
■103系
行先シールが標準で付属してない、ヘッドライト/テールライトの光源が電球のまま・・・等、色々とコストダウンが図られていますが、各社の新製品が軒並み高額になってる昨今、10両フル編成12,000円(※TamTam価格)でお釣りがくるのは今時ほんとにあらがたく・・・・
103系はエメラルドグリーン、ブルー、イエロー、オレンジは所有してましたが、なぜか入手の機会に恵まれていなくて、機を逃してたウグイスを今回は購入。
なので、いじるところといえば、車間の幌と室内灯、あとはヘッドライト/テールライトのLED換装くらい。
ちなみに以前行った過去ログで紹介した手順で、所々改良を行いながら・・・
・回路図
・表面
・裏面
ちなみに103系のライトユニットの構造上、砲弾型LEDを使用するとLED照射角の関係でテールライトが暗くなりがちなので、なんとかして拡散させる工夫が必要です。
いじょ。
というわけで、先月末に発売された103系高運転台をば・・・・
■103系
行先シールが標準で付属してない、ヘッドライト/テールライトの光源が電球のまま・・・等、色々とコストダウンが図られていますが、各社の新製品が軒並み高額になってる昨今、10両フル編成12,000円(※TamTam価格)でお釣りがくるのは今時ほんとにあらがたく・・・・
103系はエメラルドグリーン、ブルー、イエロー、オレンジは所有してましたが、なぜか入手の機会に恵まれていなくて、機を逃してたウグイスを今回は購入。
なので、いじるところといえば、車間の幌と室内灯、あとはヘッドライト/テールライトのLED換装くらい。
ちなみに以前行った過去ログで紹介した手順で、所々改良を行いながら・・・
・回路図
・表面
・裏面
ちなみに103系のライトユニットの構造上、砲弾型LEDを使用するとLED照射角の関係でテールライトが暗くなりがちなので、なんとかして拡散させる工夫が必要です。
いじょ。
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
「レイアウトモジュール4」その後・・・・(番外編) [第4モジュール(レイアウトねた)]
※おことわり。
①今回はかなりコア&マニアックな内容になりますので、ご了承の程。
②当方、インフラSEを生業としていますが、プログラミングに関してはスキルがそんなに高くない&今回紹介するソースコードは、片手間のお遊びで作っております。よって、「ここのロジックがおかしい」や「ソースの書き方が汚い」等の苦情は一切受け付けませんのであしからず(滝汗)
その7で紹介した自作の「列車接近警報表示装置」。
実は当初は「直線モジュール」を作る気満々でいたため、踏切の警報装置の為にこれを構想&設計していたわけですが、諸事象によりコーナーモジュールの制作を担当することになったため、流用(仕様変更)してこれを作成。なのでこれを流用して、踏切を作ることも可能です。(※かなり手を加えなおす必要がありますが)
当プログラムのポイントは以下の5つ
・電源投入直後に、センサーや配線等に異常がないかどうかを判断するための、ステータスチェックを実施。
・在線フラグによる、機器作動時間の管理。
・単純ループによる動作なので、設計した時間よりも各動作時間が若干長い・・・かも。
・始点/終点のセンサー間で、もし車両がトラブル発生で撤去された等、列車が不在なっても、一定時間後(5秒後)に反応動作がリセットされる。
・センサーはフォトリフレクタの使用を限定とする。
ちなみに実際のソース内容はこんな感じ(現物をコピペ)
ここから=============================================
// 列車接近警報装置
//Rev V1.2 (2021/4/19)
int led1 = 9;
int led2 = 10;
int led3 = 13;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
// Tflag[0(S1センサ入力),1(S1/センサ入力),2(TrainINS1/S2),3(TrainOn),4(ledOUT),6(TIMECOUNT)}
int Tflag[] = {0,0,0,0,0,0,0};
// 反応動作時間
int OVERTIME = 5; //sec
//赤外線センサー入力
int valS1;
int valS2;
int res;
// 初回起動フラグ
int startFlag = 1;
void loop() {
if ( startFlag == 1 )
{
//起動テスト
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
delay (3000);
//S1センサーチェック
valS1 = SENSOR_read(0); // S1センサーから読み込む
if ( valS1 > 50 ) {
//S1センサー異常
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
} else {
//S1センサー正常
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led1,HIGH);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led1,HIGH);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led1,HIGH);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (500);
}
//S2センサーチェック
valS2 = SENSOR_read(1); // S2センサーから読み込む
if ( valS2 > 50 ) {
//S2センサー異常
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
} else {
//S2センサー正常
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led2,HIGH);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led2,HIGH);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led2,HIGH);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (500);
}
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
delay (3000);
startFlag = 0;
} else {
//通常ループ再開
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
valS1 = SENSOR_read(0); // S1センサーから読み込む
valS2 = SENSOR_read(1); // S2センサーから読み込む
Serial.println(valS1);
Serial.println(valS2);
// S1センサが反応ON時
if ( valS1 > 20 ) {
Tflag[0]=1;
} else {
Tflag[0]=0;
}
// S2センサが反応ON時
if ( valS2 > 20 ) {
Tflag[1]=1;
} else {
Tflag[1]=0;
}
if( Tflag[0]==0 ) {
//S1センサの値が0
if(Tflag[1]==0 ) {
//S2センサの値も0
if( Tflag[3]!=0 ) {
//在線アリ
Tflag[4]=1; //(反応アリ)
Tflag[5]++; //(時間+)
} else {
//在線ナシ
Tflag[4]=0; //(反応ナシ)
Tflag[5]=0;
}
} else {
//S2センサの値0は1
if( Tflag[3]==1 ) {
//在線アリ
Tflag[4]=1; //(反応アリ)
Tflag[5]=1; //(時間+)
} else {
//在線ナシ⇒アリ(S2侵入)
Tflag[2]=2; //(S2侵入)
Tflag[3]=1; //(在線ナシ⇒アリ)
Tflag[4]=1; //(反応ナシ⇒アリ)
Tflag[5]=0; //(時間初期化)
}
}
} else {
//S1センサの値が0でない場合
if( Tflag[1]==0 ) {
//S2センサの値は0
if( Tflag[3]==1 ) {
//在線アリ
Tflag[4]=1; //(反応アリ)
Tflag[5]=1; //(時間+)
} else {
//在線ナシ⇒アリ(S1侵入)
Tflag[2]=1; //(S1侵入)
Tflag[3]=1; //(在線ナシ⇒アリ)
Tflag[4]=1; //(反応ナシ⇒アリ)
Tflag[5]=0; //(時間初期化)
}
} else {
//S2センサの値も1(=在線アリ)
Tflag[4]=1; //(反応アリ)
Tflag[5]=1; //(時間+)
}
}
// 反応動作時間超過の場合、反応
if( Tflag[5] > OVERTIME ){
Tflag[2]=0; //(S1/S2侵入)
Tflag[3]=0; //(在線アリ⇒ナシ)
Tflag[4]=0; //(反応アリ⇒ナシ)
Tflag[5]=0;
}
//反応アリ
if( Tflag[4]!=0 ){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (150);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay (150);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay (150);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (150);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay (150);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay (150);
} else {
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
}
}
}
// フォトリフレクターからの読み込み処理(15回読込み平均をとる)
int SENSOR_read(int PinNo) {
long ans ;
int i ;
ans = 0 ;
for (i=0 ; i < 30 ; i++) {
ans = ans + analogRead(PinNo) ; // 指定のアナログピン(0番端子)から読取り
}
return ans/30 ; // 15回の平均値を返す
}
ここまで=============================================
ちなみに現時点で判明している大きな不具合(バグ)の不可避事象としては、以下の2点が確認されており・・・(滝汗)
・フォトリフレクターに強い紫外線(直射日光や赤外線リモコンの光)が照射されることにより誤動作する(反応が続いてしまう)。
・床下機器がスカスカで少ない「サハ」や、貨車等をセンサー上に留置したまたでも、位置によって無検知状態になってしまう。
・・・というわけで、運転会や展示イベント等で誤動作を起こし、電源オフで機能停止されていても、温かい目で見守って頂けたら・・・
ちなみに所属&お世話になっている「相模原鉄道模型クラブ」のこちらの公式動画(1:18~1:25付近)で動作している状態を見ることができます。
(続く)
①今回はかなりコア&マニアックな内容になりますので、ご了承の程。
②当方、インフラSEを生業としていますが、プログラミングに関してはスキルがそんなに高くない&今回紹介するソースコードは、片手間のお遊びで作っております。よって、「ここのロジックがおかしい」や「ソースの書き方が汚い」等の苦情は一切受け付けませんのであしからず(滝汗)
その7で紹介した自作の「列車接近警報表示装置」。
実は当初は「直線モジュール」を作る気満々でいたため、踏切の警報装置の為にこれを構想&設計していたわけですが、諸事象によりコーナーモジュールの制作を担当することになったため、流用(仕様変更)してこれを作成。なのでこれを流用して、踏切を作ることも可能です。(※かなり手を加えなおす必要がありますが)
当プログラムのポイントは以下の5つ
・電源投入直後に、センサーや配線等に異常がないかどうかを判断するための、ステータスチェックを実施。
・在線フラグによる、機器作動時間の管理。
・単純ループによる動作なので、設計した時間よりも各動作時間が若干長い・・・かも。
・始点/終点のセンサー間で、もし車両がトラブル発生で撤去された等、列車が不在なっても、一定時間後(5秒後)に反応動作がリセットされる。
・センサーはフォトリフレクタの使用を限定とする。
ちなみに実際のソース内容はこんな感じ(現物をコピペ)
ここから=============================================
// 列車接近警報装置
//Rev V1.2 (2021/4/19)
int led1 = 9;
int led2 = 10;
int led3 = 13;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
// Tflag[0(S1センサ入力),1(S1/センサ入力),2(TrainINS1/S2),3(TrainOn),4(ledOUT),6(TIMECOUNT)}
int Tflag[] = {0,0,0,0,0,0,0};
// 反応動作時間
int OVERTIME = 5; //sec
//赤外線センサー入力
int valS1;
int valS2;
int res;
// 初回起動フラグ
int startFlag = 1;
void loop() {
if ( startFlag == 1 )
{
//起動テスト
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
delay (3000);
//S1センサーチェック
valS1 = SENSOR_read(0); // S1センサーから読み込む
if ( valS1 > 50 ) {
//S1センサー異常
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led1,HIGH);
delay (50);
} else {
//S1センサー正常
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led1,HIGH);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led1,HIGH);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led1,HIGH);
delay (500);
digitalWrite(led1,LOW);
digitalWrite(led3,LOW);
delay (500);
}
//S2センサーチェック
valS2 = SENSOR_read(1); // S2センサーから読み込む
if ( valS2 > 50 ) {
//S2センサー異常
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (50);
digitalWrite(led2,HIGH);
delay (50);
} else {
//S2センサー正常
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led2,HIGH);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led2,HIGH);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (500);
digitalWrite(led2,HIGH);
delay (500);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (500);
}
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
delay (3000);
startFlag = 0;
} else {
//通常ループ再開
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
valS1 = SENSOR_read(0); // S1センサーから読み込む
valS2 = SENSOR_read(1); // S2センサーから読み込む
Serial.println(valS1);
Serial.println(valS2);
// S1センサが反応ON時
if ( valS1 > 20 ) {
Tflag[0]=1;
} else {
Tflag[0]=0;
}
// S2センサが反応ON時
if ( valS2 > 20 ) {
Tflag[1]=1;
} else {
Tflag[1]=0;
}
if( Tflag[0]==0 ) {
//S1センサの値が0
if(Tflag[1]==0 ) {
//S2センサの値も0
if( Tflag[3]!=0 ) {
//在線アリ
Tflag[4]=1; //(反応アリ)
Tflag[5]++; //(時間+)
} else {
//在線ナシ
Tflag[4]=0; //(反応ナシ)
Tflag[5]=0;
}
} else {
//S2センサの値0は1
if( Tflag[3]==1 ) {
//在線アリ
Tflag[4]=1; //(反応アリ)
Tflag[5]=1; //(時間+)
} else {
//在線ナシ⇒アリ(S2侵入)
Tflag[2]=2; //(S2侵入)
Tflag[3]=1; //(在線ナシ⇒アリ)
Tflag[4]=1; //(反応ナシ⇒アリ)
Tflag[5]=0; //(時間初期化)
}
}
} else {
//S1センサの値が0でない場合
if( Tflag[1]==0 ) {
//S2センサの値は0
if( Tflag[3]==1 ) {
//在線アリ
Tflag[4]=1; //(反応アリ)
Tflag[5]=1; //(時間+)
} else {
//在線ナシ⇒アリ(S1侵入)
Tflag[2]=1; //(S1侵入)
Tflag[3]=1; //(在線ナシ⇒アリ)
Tflag[4]=1; //(反応ナシ⇒アリ)
Tflag[5]=0; //(時間初期化)
}
} else {
//S2センサの値も1(=在線アリ)
Tflag[4]=1; //(反応アリ)
Tflag[5]=1; //(時間+)
}
}
// 反応動作時間超過の場合、反応
if( Tflag[5] > OVERTIME ){
Tflag[2]=0; //(S1/S2侵入)
Tflag[3]=0; //(在線アリ⇒ナシ)
Tflag[4]=0; //(反応アリ⇒ナシ)
Tflag[5]=0;
}
//反応アリ
if( Tflag[4]!=0 ){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay (150);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay (150);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay (150);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
delay (150);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay (150);
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
delay (150);
} else {
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
}
}
}
// フォトリフレクターからの読み込み処理(15回読込み平均をとる)
int SENSOR_read(int PinNo) {
long ans ;
int i ;
ans = 0 ;
for (i=0 ; i < 30 ; i++) {
ans = ans + analogRead(PinNo) ; // 指定のアナログピン(0番端子)から読取り
}
return ans/30 ; // 15回の平均値を返す
}
ここまで=============================================
ちなみに現時点で判明している大きな不具合(バグ)の不可避事象としては、以下の2点が確認されており・・・(滝汗)
・フォトリフレクターに強い紫外線(直射日光や赤外線リモコンの光)が照射されることにより誤動作する(反応が続いてしまう)。
・床下機器がスカスカで少ない「サハ」や、貨車等をセンサー上に留置したまたでも、位置によって無検知状態になってしまう。
・・・というわけで、運転会や展示イベント等で誤動作を起こし、電源オフで機能停止されていても、温かい目で見守って頂けたら・・・
ちなみに所属&お世話になっている「相模原鉄道模型クラブ」のこちらの公式動画(1:18~1:25付近)で動作している状態を見ることができます。
(続く)
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
「レイアウトモジュール4」その後・・・・(その7) [第4モジュール(レイアウトねた)]
先ずは昨晩の予期せぬ大きな地震により、尊い犠牲に遭われた方々のご冥福をお祈り申し上げます。
また不運にも被害に遭われた方々へお見舞い申し上げますと共に、一刻も早く日常の生活が取り戻せますように、心からお祈り申し上げます。
・・・さて、その2に挙げたこの画像内で「緑色に光っている物体は何だ?」と興味を持たれた方がおられたはず。(願望)
この曲線モジュールだからこそ設置できる電子仕掛けの自作アイテム「列車接近警報表示装置」です。
要は見通しが利かない曲線で、ペカペカ点滅することで対向から列車が接近してくるのを知らせるためのアイテムであります(自作)
メインの演算装置の部分はワンボードマイコンで有名なArduino(アルドゥイーノ)互換の自作版を使用。ボード上の1路線の両端ぎりぎりのところにフォトリフレクタを2個設置し、どちらかのセンサー上で列車が在線(検知)している間と、いなくなってからの約5秒後間、点滅し続けるというロジックで動作し、それ以外の時間は常に点灯するようにしています。ちなみに複線分あるので、それが2組。
まぁ詳しいロジック(中のプログラム)は次回以降に、追い追い紹介します。
ちなみに表示装置自体は、プラバンやプラ円柱、そしてチップLEDと極細のポリウレタン銅線を駆使して、オリジナルでなんとかそれらしく作成。
ハンドメイドなので、すぐに壊れやすく、壊れたり断線したら、また一から作り直しを強要される、かなりクリティカルなアイテムであり、運転会の度に慎重な取り扱いを強いられる困った物であります。
まぁ、それもあって初めてまともに動いたときの達成感はハンパなかったですが。
ちなみにボードの裏側は、こんなカオスな感じになってしまっています(汗)
実はこのモジュールを作るにあたって、いちばんやりたかったことであり、またこれだけの歳月をかけざるを得なかった最大の原因だったりします(汗)
(つづく)
また不運にも被害に遭われた方々へお見舞い申し上げますと共に、一刻も早く日常の生活が取り戻せますように、心からお祈り申し上げます。
・・・さて、その2に挙げたこの画像内で「緑色に光っている物体は何だ?」と興味を持たれた方がおられたはず。(願望)
この曲線モジュールだからこそ設置できる電子仕掛けの自作アイテム「列車接近警報表示装置」です。
要は見通しが利かない曲線で、ペカペカ点滅することで対向から列車が接近してくるのを知らせるためのアイテムであります(自作)
メインの演算装置の部分はワンボードマイコンで有名なArduino(アルドゥイーノ)互換の自作版を使用。ボード上の1路線の両端ぎりぎりのところにフォトリフレクタを2個設置し、どちらかのセンサー上で列車が在線(検知)している間と、いなくなってからの約5秒後間、点滅し続けるというロジックで動作し、それ以外の時間は常に点灯するようにしています。ちなみに複線分あるので、それが2組。
まぁ詳しいロジック(中のプログラム)は次回以降に、追い追い紹介します。
ちなみに表示装置自体は、プラバンやプラ円柱、そしてチップLEDと極細のポリウレタン銅線を駆使して、オリジナルでなんとかそれらしく作成。
ハンドメイドなので、すぐに壊れやすく、壊れたり断線したら、また一から作り直しを強要される、かなりクリティカルなアイテムであり、運転会の度に慎重な取り扱いを強いられる困った物であります。
まぁ、それもあって初めてまともに動いたときの達成感はハンパなかったですが。
ちなみにボードの裏側は、こんなカオスな感じになってしまっています(汗)
実はこのモジュールを作るにあたって、いちばんやりたかったことであり、またこれだけの歳月をかけざるを得なかった最大の原因だったりします(汗)
(つづく)
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
「レイアウトモジュール4」その後・・・・(その6) [第4モジュール(レイアウトねた)]
BLOGを更新しようとしたら、長い&でっかい地震が・・・・
皆様、ご無事でしたでしょうか?(※タイムリー)
大きな被害が出なければいいのですが・・・・
・・・さて、海岸といえば・・・シリーズ第3弾。
今回は「テトラポット」
ジオコレでは「消波ブロック」という製品名で売られています。
ただこの製品、そのまま積み上げても不自然ありまくり。
なので、水面下に隠れる部分は、削ってしまいます。
その結果・・・、こんな感じになりました。
さらにいい感じに積み上げる&密集させてみます。
結果、こんな感じに仕上がりました。
(つづく)
皆様、ご無事でしたでしょうか?(※タイムリー)
大きな被害が出なければいいのですが・・・・
・・・さて、海岸といえば・・・シリーズ第3弾。
今回は「テトラポット」
トミーテック ジオコレ 情景小物 049-2 消波ブロック B2 ジオラマ用品
- 出版社/メーカー: トミーテック(TOMYTEC)
- 発売日: 2017/06/24
- メディア: おもちゃ&ホビー
ジオコレでは「消波ブロック」という製品名で売られています。
ただこの製品、そのまま積み上げても不自然ありまくり。
なので、水面下に隠れる部分は、削ってしまいます。
その結果・・・、こんな感じになりました。
さらにいい感じに積み上げる&密集させてみます。
結果、こんな感じに仕上がりました。
(つづく)
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
「レイアウトモジュール4」その後・・・・(その5) [第4モジュール(レイアウトねた)]
「レイアウトモジュール4」その後・・・・(その4) [第4モジュール(レイアウトねた)]
「レイアウトモジュール4」その後・・・・(その3) [第4モジュール(レイアウトねた)]
2021年夏、なぜか食指が動く製品がなし・・・・
折角なので、工具類の充実を図るべく、電動リューターを購入。
まぁ安物ですが、このごついケースが気に入りまして・・・
今回のモジュールはコーナーモジュールなので、ベースはTOMIXのコンビネーションボードBを利用。
海部分は前回作成したレイアウトモジュール1~2を作成した時の端材を使用。
ただベースの形で海岸を表現するのは不自然すぎるので、折角手に入れたリューターをで削ります。
そして理想の形になったら(穴が開くギリギリまで削ったら)、ベース塗料を塗り直し。
さらにカラーパウダーや石などで飾り付けして、自然に仕上げます。
(つづく)
折角なので、工具類の充実を図るべく、電動リューターを購入。
まぁ安物ですが、このごついケースが気に入りまして・・・
今回のモジュールはコーナーモジュールなので、ベースはTOMIXのコンビネーションボードBを利用。
海部分は前回作成したレイアウトモジュール1~2を作成した時の端材を使用。
ただベースの形で海岸を表現するのは不自然すぎるので、折角手に入れたリューターをで削ります。
そして理想の形になったら(穴が開くギリギリまで削ったら)、ベース塗料を塗り直し。
さらにカラーパウダーや石などで飾り付けして、自然に仕上げます。
(つづく)
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓