「レイアウトモジュール4」in JAM2022(※宣伝) [第4モジュール(レイアウトねた)]
諸事情により、BLOG更新が激しく滞っていることを深くお詫び申し上げるとともに、生存報告を兼ねまして(おぃ)
・・・というわけで、BLOGのTOP画面で既にサラッと触れましたが・・・・
第21回国際鉄道模型コンベンションにこれ持って出展いたします。
所属している「相模原鉄道模型クラブ」で。
因みに「DM10」です。
いじょお、何卒よろしくおねがいします。
因みに肝心の列車接近警報装置は、水銀灯照明の為に終始誤作動して点滅しっぱなしですので、ご容赦の程
・・・というわけで、BLOGのTOP画面で既にサラッと触れましたが・・・・
第21回国際鉄道模型コンベンションにこれ持って出展いたします。
所属している「相模原鉄道模型クラブ」で。
因みに「DM10」です。
いじょお、何卒よろしくおねがいします。
因みに肝心の列車接近警報装置は、水銀灯照明の為に終始誤作動して点滅しっぱなしですので、ご容赦の程
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
タグ:JAM2022
「レイアウトモジュール4」その後・・・・(その8) [第4モジュール(レイアウトねた)]
3/27(日)に相模原鉄道模型クラブの運転会が相模原某所でありました。
準備はいろいろ大変ですが、やはり仲間同士でワイワイ走らせるのは楽しいですね。
※画像は、他の方の作られた機関庫&ターンテーブルモジュールで、ターンテーブルに自分所有のEF55 をのっけて、ぐるぐる回して遊んでる場面です。
そいうわけで、運転会に持ち込む為に作成している分割モジュールですが、前回からの続きです。
地面の部分はだいたい終わったので、こんどはいよいよ海部分の加工をば。
海の水中部分はすでに塗装済みなので、あとは水を張るだけですが・・・・
これが結構骨が折れる作業内容で・・・
水面の表現方法は色々ありますが、今回はモデリングウォーターを使用。
理由は単純に、既に第3モジュールの作成で使ったことがあったから。
使い方は、まずは水を張る場所の外型(レイアウトボードの外枠部分)にマスキングテープ等で囲いを作り、その中に中身の液を注入。
隅々まで程よく浸透するように棒などで均しながら、使用方法の説明書きどおり12分+α程度の時間、乾燥させ・・・
だんだん硬くなってきたところで、波を表現させるべくまた棒などで程よくかき回し・・・・
イイ感じになったら、あとはひたすら放置して、乾燥させます。
でもこの資材、主成分がシリコンなので中々固まらないので、表面に埃が付着しないようにカバーして、数日間放置。(※説明書き上は「1日程度で固まる」みたいな書き方になってますが、絶対無理。(汗))
そして固まったら、まわりの枠を外していきます。
まぁ表面が多少ベタついた状態のままになるので、今後も埃の付着(堆積)にはずっと気を付けないといけませんが(汗)
そんな感じで、モジュールは完成です・・・かね?
物足りない部分が生じたら、これからもちょいちょい手を加えていきますが・・・まぁ、そんな感じで。
いじょ。
準備はいろいろ大変ですが、やはり仲間同士でワイワイ走らせるのは楽しいですね。
※画像は、他の方の作られた機関庫&ターンテーブルモジュールで、ターンテーブルに自分所有のEF55 をのっけて、ぐるぐる回して遊んでる場面です。
そいうわけで、運転会に持ち込む為に作成している分割モジュールですが、前回からの続きです。
地面の部分はだいたい終わったので、こんどはいよいよ海部分の加工をば。
海の水中部分はすでに塗装済みなので、あとは水を張るだけですが・・・・
これが結構骨が折れる作業内容で・・・
水面の表現方法は色々ありますが、今回はモデリングウォーターを使用。
理由は単純に、既に第3モジュールの作成で使ったことがあったから。
模型用 NEWモデリングウォーター 2本セット 光栄堂 /相田化学工業 R-1106-02
- 出版社/メーカー: 相田化学工業株式会社
- メディア:
模型用 NEWモデリングウォーター 5本セット 光栄堂 /相田化学工業 R-1106-05
- 出版社/メーカー: 相田化学工業株式会社
- メディア:
使い方は、まずは水を張る場所の外型(レイアウトボードの外枠部分)にマスキングテープ等で囲いを作り、その中に中身の液を注入。
隅々まで程よく浸透するように棒などで均しながら、使用方法の説明書きどおり12分+α程度の時間、乾燥させ・・・
だんだん硬くなってきたところで、波を表現させるべくまた棒などで程よくかき回し・・・・
イイ感じになったら、あとはひたすら放置して、乾燥させます。
でもこの資材、主成分がシリコンなので中々固まらないので、表面に埃が付着しないようにカバーして、数日間放置。(※説明書き上は「1日程度で固まる」みたいな書き方になってますが、絶対無理。(汗))
そして固まったら、まわりの枠を外していきます。
まぁ表面が多少ベタついた状態のままになるので、今後も埃の付着(堆積)にはずっと気を付けないといけませんが(汗)
そんな感じで、モジュールは完成です・・・かね?
物足りない部分が生じたら、これからもちょいちょい手を加えていきますが・・・まぁ、そんな感じで。
いじょ。
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
「レイアウトモジュール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を作成した時の端材を使用。
ただベースの形で海岸を表現するのは不自然すぎるので、折角手に入れたリューターをで削ります。
そして理想の形になったら(穴が開くギリギリまで削ったら)、ベース塗料を塗り直し。
さらにカラーパウダーや石などで飾り付けして、自然に仕上げます。
(つづく)
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
「レイアウトモジュール4」その後・・・・(その2) [第4モジュール(レイアウトねた)]
こんにちは。
ようやく更新を再開できる余裕ができたので、この勢いをできる限り継続させるべく、今日も懲りずに更新です。
・・・というわけで、前回(その1)の続きです。
山が無事できたのですが、このままではただ草や木の生えるのっぺらぼう(?)で単調な山になりそうなので、それを避ける為に変化をつけていきます。
そうです。急斜面な山に必ずと言っていいほど存在する、みんな大好き(?)「崖(岩肌)」です。
崖(岩肌)を表現するのにも多種多様な手法やそれを作るための製品が存在しますが、今回はあえて古典的な、TOMIXの「シーナリーブラスター」(※中身は石こう)を使用します。
水で適度な硬さに溶いて、塗ったくります。
ちなみに100均で入手したオーソドックスな形状の「バターナイフ」が、やりやすかったです。
(※普段からキッチンドランカーしてるくらい、料理にのめり込んでる一般人なので・・・)
そしてイイ感じの形状になったら、あとはじっくり乾くのを待ち、その後で岩肌の表面を塗ります。
今回はベースに「KATO ジオラマリキッドカラー ストーングレー」をチョイス。
その後に、さらにこれまたタミヤカラー塗料を複数混ぜた、イイ感じの色で塗ります。
そして岩肌(崖)完成後、他の山の表面のハゲている部分をKATOの「プランツ」(※旧「フォーリッジクラスター」の後続製品)を数種類混ぜ込んで、ランダムで貼り付けていきます。
今回は「人工物に頼らず、自然を表現する」というコンセプトに拘って進めているので、あえて多少コストがかかっても人工的&単調な表現になるのを避ける方法を選択しました。
(続く)
ようやく更新を再開できる余裕ができたので、この勢いをできる限り継続させるべく、今日も懲りずに更新です。
・・・というわけで、前回(その1)の続きです。
山が無事できたのですが、このままではただ草や木の生えるのっぺらぼう(?)で単調な山になりそうなので、それを避ける為に変化をつけていきます。
そうです。急斜面な山に必ずと言っていいほど存在する、みんな大好き(?)「崖(岩肌)」です。
崖(岩肌)を表現するのにも多種多様な手法やそれを作るための製品が存在しますが、今回はあえて古典的な、TOMIXの「シーナリーブラスター」(※中身は石こう)を使用します。
水で適度な硬さに溶いて、塗ったくります。
ちなみに100均で入手したオーソドックスな形状の「バターナイフ」が、やりやすかったです。
(※普段からキッチンドランカーしてるくらい、料理にのめり込んでる一般人なので・・・)
そしてイイ感じの形状になったら、あとはじっくり乾くのを待ち、その後で岩肌の表面を塗ります。
今回はベースに「KATO ジオラマリキッドカラー ストーングレー」をチョイス。
その後に、さらにこれまたタミヤカラー塗料を複数混ぜた、イイ感じの色で塗ります。
そして岩肌(崖)完成後、他の山の表面のハゲている部分をKATOの「プランツ」(※旧「フォーリッジクラスター」の後続製品)を数種類混ぜ込んで、ランダムで貼り付けていきます。
今回は「人工物に頼らず、自然を表現する」というコンセプトに拘って進めているので、あえて多少コストがかかっても人工的&単調な表現になるのを避ける方法を選択しました。
(続く)
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓
「レイアウトモジュール4」その後・・・・(その1) [第4モジュール(レイアウトねた)]
え~・・・・諸事情により、前回の更新から丸1年、更新をサボってしまいました(汗)
今日からまた復活です。
・・・といっても、正直ネタの在庫数に数の限りがある状態なので、更新するペースはそれなりですが(滝汗)
・・・というわけで今回は手っ取り早く、レイアウトモジュール4の前回(新たなフィールドの構築(レイアウトモジュール4)(その3) )" target="_blank">からの進化(現状)をば・・・・
ちなみに前回は線路敷設(曲線カント付き)+バラスト配布+架線柱設置対応で終わってました。
んで、1年overのブランク(所属する倶楽部の走行会にほぼ月一で参加)を経て、こうなりました。
コーナーの内側に、線路両端の見通しが利かないように山を設置。
原材料は安定のスタイロフォームを使用。
山の設置&整形自体は、他の方がよくやられている方法(設置&斜面削り出し)で実施したので省略。
ちなみに当モジュールのモデルになっている、函館本線の銭函海岸付近を参考にしたので、かなりの
高さ&急斜面に仕上げております。
納得いく形になるまで地味にこだわって削ったので、ここだけで約1か月かかりました。
そしてただのっぺらぼうの、単調な山にはしたくないので、斜面に落石防止のコンクリート壁を設置。
ここはGMと津川洋行の既製品を使用。
色は複数のタミヤカラーアクリル塗料を混ぜたりして、それっぽい色で筆塗り。
今日はリハビリを兼ねてるので、ここまで。
続きはまた次回に。
今日からまた復活です。
・・・といっても、正直ネタの在庫数に数の限りがある状態なので、更新するペースはそれなりですが(滝汗)
・・・というわけで今回は手っ取り早く、レイアウトモジュール4の前回(新たなフィールドの構築(レイアウトモジュール4)(その3) )" target="_blank">からの進化(現状)をば・・・・
ちなみに前回は線路敷設(曲線カント付き)+バラスト配布+架線柱設置対応で終わってました。
んで、1年overのブランク(所属する倶楽部の走行会にほぼ月一で参加)を経て、こうなりました。
コーナーの内側に、線路両端の見通しが利かないように山を設置。
原材料は安定のスタイロフォームを使用。
山の設置&整形自体は、他の方がよくやられている方法(設置&斜面削り出し)で実施したので省略。
ちなみに当モジュールのモデルになっている、函館本線の銭函海岸付近を参考にしたので、かなりの
高さ&急斜面に仕上げております。
納得いく形になるまで地味にこだわって削ったので、ここだけで約1か月かかりました。
そしてただのっぺらぼうの、単調な山にはしたくないので、斜面に落石防止のコンクリート壁を設置。
ここはGMと津川洋行の既製品を使用。
色は複数のタミヤカラーアクリル塗料を混ぜたりして、それっぽい色で筆塗り。
今日はリハビリを兼ねてるので、ここまで。
続きはまた次回に。
↓もしよろしかったら、クリックをば・・・↓
↓ついでに、こちらとこちらも・・・↓