ひょんなことからメンバーの一人がダイソーの「プチ電車」シリーズのオーナーであることを発見
プチ電車シリーズをArduinoやmicro:bitで魔改造するネタを勝手に立ち上げました。
正直、この車体にmicro:bitを入れ込むことは無理ですが、見栄えを気にしなければ乗せられそうだし、ArduinoNanoやM5Stampであれば十分搭載可能
そういえば8年ほど前にジオラマ作って電車制御しようかと思ったこともあったが、当時はM5なんて未発売で無線制御できる小型マイコンがなくて諦めた。
Jimdo講座もあと一回で終了して少し暇になるし、どこまで進むかわからないけど、まあ、書いてみよう。
2024/2/1
ちょっと考えて思いつく鉄道模型のマイコン化定番コース
かな。
改造に必要な基礎知識を書いていきます。
(写真は8年前に組み立てた「キハ48」
机の中で眠ったまま・・・)
まずは、電車の走行について検討
ぷち電車は基本3両編成で真ん中の車両が駆動輪を持つ。
車体上部に出っ張ったバーを倒すことで回路が繋がって、基本的に前進・単速度でモーターが回る。
駆動輪は左右合計2個で黄色いギザギザゴムを履かせてある物
電源は1.5V電池一本
これをどう制御するか・・・
電車の制御には数種類が考えられる。
いずれの場合にも最低限、モーター制御が必要となる。
ということで、まずは走らせる基本装置「モーター」について
■列車のDCモーター(※)制御
micro:bitやArduinoなどのマイコンに備わっている外部出力端子(Pin)は、20mA(~200mA)程度しか電流を流せません。
しかし小型DCモータを動かすには一般的に1.5Vで0.5A以上の電流が必要となることが多いです。
なので、通常は端子に繋いだ「モータードライバ基盤」を使ってモーターを動かします。
左は汎用基盤で2モータまで駆動可能。200円程度~
右はArduino専用の「シールド」と呼ばれる規格の基盤で、4個までのDCモータを駆動可能。400円程度~
何れもDCモータあるいはステッピングモータを駆動することができます。
※DCモータはマブチモーターなどに代表されるもので、高速回転が可能ですが正確な制御には向きません。
ステッピングモータは、ゆっくりですが細かな角度を指定して回転・停止させることができる少し特殊なモーターです。
趣味のマイコンで制御するモータの種別と制御基板・IC
の一例
左写真はArduinoのpinに基盤を接続し、乾電池4本の動力を別系統で与えて回転させている様子です。
プログラムからモーターのパワーや正転逆転などの制御が可能です。
原則は、
・1つのモータ制御に2つの信号Pinを使う。
・2つの信号Pinに与える電圧の組み合わせで正転逆転・停止を指令する。
・与える電圧はアナログ出力(PWM)を用い
Arduinoの場合は0..1023で0..5V相当の電力を出力させる。
micro:bitは0..1023で0..3.3V相当の電力を出力させる。
【Arduinoでのプログラム例】
const int A1A = 8; //モータAの指令ピン(1)を8番にする
const int A1B = 9; //モータAの指令ピン(2)を9番にする
int r_speed = 700; //車速値 700/1024
void setup() { // 制御Pinの指定
pinMode(A1A, OUTPUT); // 8番pinを出力モードにする
pinMode(A1B, OUTPUT);
}
void r_forward(){ // 前進
analogWrite(A1A,0); // 制御ピンの1つ目をアナログ出力で0ボルト出力指定
analogWrite(A1B,r_speed); // もう一つに指定した電圧(0..5V)をかける
}
void r_backward(){ // 後退
analogWrite(A1A,r_speed);
analogWrite(A1B,0);
}
Tiny:bitの場合は、車体メーカーが基板上に搭載されたモータドライバICを制御する専用ライブラリを供給しています。
なので、非常に簡単
前進・後退をするだけではフツー過ぎます。
何らかの情報から電車の走行を制御しなくちゃいけませんよね。
では、どんな時に発進し、どんな時に停止するのかを考えると、
1 駅・車庫に着いた時
何らかのマークに従って停止、その後発車
2 衝突回避
前方に予期せぬ障害物があった場合停車
ですね。
1の場合は、駅ホームに「何らかの信号を発する物」を置き、その「信号を発見」したら停止する、そういう仕組が必要です。
ここでは「何らかの信号を発する物」をマーカー、「信号を発見」する装置をセンサーと呼びましょう。
さて、そのマーカーにはどんなものが考えられるか・・・
A 光
フォトセンサーをプラットホームから列車の方向にセットし通過を検知する
フォトセンサーを車体から側方に取り付け、駅プラットホーム側に反射板を取り付ける
二次元コードなどを認識(ラズパイなら可能)
B 磁力
プラットホームに取り付けた磁石と、車体にある電磁リードスイッチでホームを検知
C 機械的スイッチ
列車の特定位置に付けたスイッチが駅の端にあるバーで押されるとか
-----
D 音
特定の周波数(超音波など)を検知
E NFC無線
ICチップを線路に埋設し、読み取り装置で指令を受け取る
F レールセンサー
高度マニア御用達、レールの電流検知で列車位置を測る S88-N TRAIN DETECTER なる装置が売られている。
プラレール用ではありません。
などかな。
2の場合は、超音波測距装置で前方を常時検査し、距離が一定以下になったら停止、障害物が無くなったら発進、が考えられます。(1のセンサーを前方に向けて使用すればOK)
簡単そうなのは、A~Cですね。
「列車自身が駅を認識して止まる」のが確実に実装が楽なので、センサーは列車側に設置することにします。
駅が列車を認識し、何かを経由して勝手に走ってる列車のモーターを止める命令を送る、のは複雑だから。
ということで、手持ちのセンサーから何が適しているか検討してみます。
左は「赤外センサー」でアマゾンで1個90円程度で売っています。
赤外線を発射し、光が帰ってくればピンがLOW、でなければHIGHになるユニットです。
手作業で配線を変えると距離(アナログ値)を測ることができます。
3.3V以上で動作するのでmicro:bitに直付けして、ホームの有無を検査できます。
列車通過も検知できるので、踏切のスイッチにも使えます。
非接触で検知ができるのがメリットですね。感度調整や反射板を使うと数十センチまで検知が可能です。
駅以外の橋桁などで反射したデータを得て駅と間違えると困ります。
駅では反射板(アルミホイル)を設置、それ以外は設置しないことで、確実に駅を検出するようにしてみよう。
採用!
磁気を検知する素子
AliExpressでA3144E素子10個99円で購入
磁石を近づけるとHI/LO電圧を出力します。
ガラケーの開閉検知センサーに使われていたように思う。
ホームへネオジム磁石を貼り付け、電車にこの素子を。
センサーをmicro:bitへ付ければ、磁気の変化が数値で取得できます。
が、距離が遠いと動作が少々不安定な感じでした。
車体へ取り付けた際の張り出し具合とホームの距離が問題になりそう。
なので却下
100均に行くとドアの開閉を検知してブザーを鳴らす装置が売られています。
あれは左のようなガラス管でできたセンサーで、中に磁石に反応してON/OFFする端子が入っています。
かなり近くまで磁石を近づけないとON/OFFしないので、ホームと車体の隙間の調整が難しいと思います。
なので却下
「リミッタースイッチ」とか呼ばれるもの。1個80円程度から
古いプリンタなんかを分解すると何個か出てきます。
単純にON/OFFが検知できるので、マイコンのピンへ直付けして動作させられます。
(ただしPullUp必須)
取り付け高さを変えることで数種類の物件(ホーム)を識別することができますが、車体に取り付ける工作の難易度も高そうだし、出来上がりもスマートではないですね。
踏切を通過したかどうかの判定程度が良いかも。
なので却下
--------
ということで無い知恵を絞った結果は、1.3.A の赤外線を使った光センサーが無難と思われます。
列車を駅のホームにちゃんと停車させる仕組みを考えてみる。
問題:列車が右回りをしている時と左回りをしている場合は、センサーの設置位置が違う。
解決:ホームの両端に反射板を取り付ける。
A 1つ目のミラーを検知したら減速し
B 2つ目のミラーを検出したら、ブレーキを掛けて停車する
C ミラーをわずかに通り過ぎて停車する
D 10秒程度停車したら、元の進行方向へ動き始める
これでどうだろうか。
こうなれば買ってきて試すしか無いな・・・
総額880円で早速買ってきた。列車は700系のぞみ
写真に取るとかっこいいなぁ
子供の目線は迫力がある。
当時の目線を思い出したが、まさにこういう玩具の世界の中に自身が入っていける感覚
回路図みたいなん書いて、あれこれ検討
結局、
・モーターとの接点部分を外して線を引き出し、
・電池BOXの途中の金属をカットして線を引き出した。
とりあえずmicro:bit、電源、モータードライバを先頭車両の上へ無理やり乗せて配線
ボタンを押すと走ったり止まります。
本来このモータードライバは2台までDCモータを駆動できる。
配線は左図のとおり。
プラスマイナスは「モータ・基盤の電源」以外気にすることはない。
動かした結果でプログラムを変えればいいので。
(スレ主の適当な性格です)
実はここで大きくトラブった。
この基盤は電源が2.5V以上を要求するものだった。
「モジュール電源電圧:2.5V-12V 」と書いてあった。
なので、プチ電車の単3一本の1.5V電源では基盤のパイロットランプも点灯せず、全くモーターは回らなかった。
やむを得ず3V電源搭載仕様に変更せざるを得なかった。
orz
実体配線図は左のとおり。
上側のモーター回路は使っていないので、盤の上側のソケットは使用していない。
プログラムはPin1/Pin2に与えるパワーの組み合わせで、前進後進停止の動作を行う。
パワーは0~1023で与える。
ということで、一応動きはしましたが・・・
電池BOXがデカすぎる(単4)ので何か対策を考えねば。
3両編成にして電線を引っ張り回すか、単5あるいは単6電池を搭載するかな?
単5電池は消耗が激しいしニッケル水素充電池も売ってないから運転費用がかさむ。
鉄道会社の運営も難しいものだ。
M5 Stamp S3 でのプログラム例
ArduinoIDEで書くソースはM5もArduinoもあんまり関係ないソースコードになるので割愛
ブロックエディタ環境「UiFlow Ver2」 を久しぶりに使ってみたが、
なんとPinのI/Oでさえも include しないとブロックパーツが出てこない、という極悪非道の切り捨てぶり。>ジミーさん
けっこう悩みましたよ。
高性能化するのでやむを得ないというのも理解できますけどね・・・
ここまでアレコレやってみたが、マイコンを小型化しないと筐体内に隠すことはできない。
どのMPUを採用するのか検討してみた。
結局、
1 安価・極小は基盤形態の開発ボード構造の製品が一番いいのではと思う。
あるいは赤外線制御でDip版「ATtiny85」を使うのも小型化には良い。
2 少し高価になるがM5 ATOM-LITEを2個を使ったBTLE(ESP-Now)版が全般的にスマート
次のPDFで長くなった検討経過を書いている。
次は電源問題を解決しなければ・・・(次から次と)
Arduino-Nanoを採用した場合、5Vの電源が必要になる。
ところがプチ電はオリジナルでは1.5Vしか使えない。
なので、現在は本来の電池BOXを外し、単4電池を2本直列に繋いで動かしている。(よくあんなんで動いてるよな)
なので、単4電池1.5Vあたりを
1 2本搭載して3 -> 5Vに昇圧する基盤を入れる(左写真 80円)
2 3本搭載して4.5V->3.3Vへ降圧する部品を入れる
が必要になる。