東京メトロ7000系の車掌スイッチと思われる車掌スイッチ(S5138R)を入手できたので動かしてみましょう。
車掌スイッチとは?
電車のドアを開閉するスイッチになります。
東京メトロ7000系の車掌スイッチは開ボタンにマイクロスイッチがついており、これを廻すことでドアチャイムが鳴るようになっています。
また、開ボタン、閉ボタンを押す事で、開閉のLEDが点灯するようになっています。
今回は、これを実装していきましょう。
構成
今回は以下の図のような構成にしました。
マイコンボードはRaspberryPiPicoをMP3プレイヤーは入手しやすいDFR0534 MP3ボイスモジュールを使用しました。
動作内容
今回は、以下のような動作をするようにします。
- 開ボタン:開ランプ点灯
- 閉ボタン;閉ランプ点灯
- マイクロスイッチ:ドアチャイム鳴動
使用ドアチャイム
ドアチャイムはフリー素材として公開されている
横浜急行こうきち さん 【フリー素材】鉄道ドアチャイム集
https://www.youtube.com/watch?v=2ydbACsZaGo
こちらから7000系のドアチャイムを切り出して使いました。
配線
今回入手した車掌スイッチは2つのコネクタが使用されていました。
コネクタは以下のように配線されていました。
今回は、以下の組み合わせにしました。
マイクロスイッチのテスト
最初にRaspberryPiPicoの入力とマイクロスイッチを接続、DFR0534とは適当なピンを接続します。
RaspberryPiPicoとDFR0534はUARTで接続します。
プログラム
スイッチでUARTの送信をするプログラムを作ります。
#define microsw 15
void setup() {
Serial2.setTX(8);
Serial2.setRX(9);
Serial2.begin(9600);
Serial.begin(115200);
pinMode(microsw, INPUT_PULLUP);
volume(0x1E);//Volume settings 0x00-0x1E
}
void loop() {
if (digitalRead(microsw) == LOW) {
Serial.println("microsw");
play(0x01);//Play the specified audio:0x01-file0001
}
delay(250);
}
void play(unsigned char Track){
unsigned char play[6] = {0xAA, 0x07, 0x02, 0x00, Track, Track + 0xB3};
Serial2.write(play, 6);
}
void volume( unsigned char vol){
unsigned char volume[5] = {0xAA, 0x13, 0x01, vol, vol + 0xBE};
Serial2.write(volume, 5);
}
開閉スイッチを実装する・・・その前に
次に、開閉スイッチに応じてランプが点灯するようにします。
しかし、残念な事に、開ボタンを押す際に
マイクロスイッチが
ON⇒OFF⇒開ボタン⇒マイクロスイッチON⇒OFF
となる為、開ボタンを押すたびにドアチャイムが流れてしまいます。
この為、プログラムを修正しましょう。
MP3モジュールの状態を確認するプログラムを実装しましたが、うまく動かないので
Delayでストップさせ、開閉スイッチの入力を割込みで動かす事にしました。
#define microsw 15
#define leftsw 13
#define rightsw 19
#define lightled 25
volatile int state = LOW;
void setup() {
Serial2.setTX(8);
Serial2.setRX(9);
Serial2.begin(9600);
Serial.begin(115200);
pinMode(microsw, INPUT_PULLUP);
pinMode(leftsw, INPUT_PULLUP);
pinMode(rightsw, INPUT_PULLUP);
pinMode(lightled, OUTPUT);
attachInterrupt(digitalPinToInterrupt(leftsw), leftled, FALLING);
attachInterrupt(digitalPinToInterrupt(rightsw), rightled, FALLING);
volume(0x1E);//Volume settings 0x00-0x1E
}
void loop() {
if (digitalRead(microsw) == LOW) {
Serial.println("microsw");
play(0x01);//Play the specified audio:0x01-file0001
}
delay(2000);
}
void play(unsigned char Track){
unsigned char play[6] = {0xAA, 0x07, 0x02, 0x00, Track, Track + 0xB3};
Serial2.write(play, 6);
}
void volume( unsigned char vol){
unsigned char volume[5] = {0xAA, 0x13, 0x01, vol, vol + 0xBE};
Serial2.write(volume, 5);
}
void leftled() {
Serial.println("leftled");
digitalWrite(lightled,HIGH);
}
void rightled() {
Serial.println("rightled");
digitalWrite(lightled,LOW);
}
開閉スイッチを実装する
それでは開閉ランプを点灯できるようにします。
残念ながら東武のランプは100V仕様の為、点灯できません。
開閉ランプは24Vで点灯します。
今回もトランジスタアレイのTBD62783で24Vの+を出力します。
これで開閉ボタンを押すとランプが点灯するようになります。
なお、今回MP3モジュールはソフトウェアシリアルで動作させています。
ソフトウェアシリアルの詳細はこちら
Raspberry Pi PicoのPIOを使った例
プログラム
#include <SoftwareSerial.h>
#define microsw 10
#define opensw 11
#define closesw 18
#define openled 9
#define tobuled 8
#define closeled 7
SoftwareSerial SoftSerial(12, 13);
volatile int state = LOW;
void setup() {
pinMode(microsw, INPUT_PULLUP);
pinMode(opensw, INPUT_PULLUP);
pinMode(closesw, INPUT_PULLUP);
pinMode(openled, OUTPUT);
pinMode(tobuled, OUTPUT);
pinMode(closeled, OUTPUT);
attachInterrupt(digitalPinToInterrupt(opensw), openop, FALLING);
attachInterrupt(digitalPinToInterrupt(closesw), closeop, FALLING);
Serial.begin(115200);
SoftSerial.begin(9600);
volume(0x1E);//Volume settings 0x00-0x1E
}
void loop() {
if (digitalRead(microsw) == LOW) {
Serial.println("microsw");
play(0x01);//Play the specified audio:0x01-file0001
delay(2500);
}
delay(100);
}
void play(unsigned char Track){
unsigned char play[6] = {0xAA, 0x07, 0x02, 0x00, Track, Track + 0xB3};
SoftSerial.write(play, 6);
Serial.println("Sound");
}
void volume( unsigned char vol){
unsigned char volume[5] = {0xAA, 0x13, 0x01, vol, vol + 0xBE};
SoftSerial.write(volume, 5);
}
void openop() {
Serial.println("Open Door");
digitalWrite(openled, HIGH);
digitalWrite(tobuled, HIGH);
digitalWrite(closeled, LOW);
}
void closeop() {
Serial.println("Close Door");
play(0x01);//Play the specified audio:0x01-file0001
digitalWrite(openled, LOW);
digitalWrite(tobuled, LOW);
digitalWrite(closeled, HIGH);
}
動作の様子
閉ボタンを押すとドアチャイムと閉ランプが
開ボタンを押すと開ランプが
マイクロスイッチを廻すとドアチャイムが鳴るようになりました。
東武[開]表示灯
車掌操作板を作る
今回は引き続き、ユニット化します。
まずは、3Dプリンタでベースを作りモジュール化しました。
次に、DIYショップで買った木板を用意しました。
素地では綺麗では無いので軽く塗装し、必要な箇所に穴やニゲを作りました。
最後に組み立てて完成です。
製作動画