東京メトロ7000系の車掌スイッチを動かす

東京メトロ7000系の車掌スイッチと思われる車掌スイッチ（S5138R）を入手できたので動かしてみましょう。
# 車掌スイッチとは？
電車のドアを開閉するスイッチになります。
東京メトロ7000系の車掌スイッチは開ボタンにマイクロスイッチがついており、これを廻すことでドアチャイムが鳴るようになっています。
また、開ボタン、閉ボタンを押す事で、開閉のLEDが点灯するようになっています。
今回は、これを実装していきましょう。
![車掌スイッチ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/d7f70a91-2f1c-eb79-3cc1-b180d948ecc1.jpeg)
![内部](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/d11d4387-d813-a8da-75df-7fa76bfb0514.jpeg)
# 構成
今回は以下の図のような構成にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/db694d19-bf38-f3c5-336a-adabd89c170f.png)
マイコンボードはRaspberryPiPicoをMP3プレイヤーは入手しやすいDFR0534　ＭＰ３ボイスモジュールを使用しました。

https://akizukidenshi.com/catalog/g/gM-13708/
# 動作内容
今回は、以下のような動作をするようにします。
- 開ボタン：開ランプ点灯
- 閉ボタン；閉ランプ点灯
- マイクロスイッチ：ドアチャイム鳴動
# 使用ドアチャイム
ドアチャイムはフリー素材として公開されている
__横浜急行こうきち__ さん __【フリー素材】鉄道ドアチャイム集__
https://www.youtube.com/watch?v=2ydbACsZaGo
こちらから7000系のドアチャイムを切り出して使いました。
# 配線
今回入手した車掌スイッチは2つのコネクタが使用されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/674669f1-e796-cb49-a769-1e65016455d8.png)
コネクタは以下のように配線されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/9225a0d6-045a-a4a8-eb58-4acfc3b71bc4.png)
今回は、以下の組み合わせにしました。
- 開スイッチ：L124-L125
- 閉スイッチ：D3109-D374
- マイクロスイッチ：271－D02
- 開LED：DL260
- 閉LED：D07
- 東武LED：D362a
- GND:260G
![コネクタ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/9674ee66-2784-5ce4-8db5-5b76b2470877.jpeg)
# マイクロスイッチのテスト
最初にRaspberryPiPicoの入力とマイクロスイッチを接続、DFR0534とは適当なピンを接続します。
RaspberryPiPicoとDFR0534はUARTで接続します。
# プログラム
スイッチでUARTの送信をするプログラムを作ります。

https://wiki.dfrobot.com/Voice_Module_SKU__DFR0534

```
#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モジュールはソフトウェアシリアルで動作させています。
![制御基板](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/4d515de6-53e2-341b-2f6e-cf47f24679c7.jpeg)
### ソフトウェアシリアルの詳細はこちら

https://burariweb.info/electronic-work/arduino-learning/arduino-software-serial.html
### Raspberry Pi PicoのPIOを使った例

https://moyoi-memo.hatenablog.com/entry/2022/02/15/112100
# プログラム
```
#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);
}
```
# 動作の様子
閉ボタンを押すとドアチャイムと閉ランプが
開ボタンを押すと開ランプが
マイクロスイッチを廻すとドアチャイムが鳴るようになりました。
![DSC_0617 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/c31d1d76-bb83-965e-ffa5-dc26714a25f9.jpeg)
# 東武[開]表示灯
東武[開]表示灯を100Vで点灯させた様子です。
![DSC_0651 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/cc7e6292-5ceb-97c3-a26c-584cc63a46bb.jpeg)
# 車掌操作板を作る
今回は引き続き、ユニット化します。
まずは、3Dプリンタでベースを作りモジュール化しました。
![モジュール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/53a852b2-0dd8-66a5-c0cf-0d4e67fcefe8.jpeg)
次に、DIYショップで買った木板を用意しました。
素地では綺麗では無いので軽く塗装し、必要な箇所に穴やニゲを作りました。
![木板](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/d430f3bb-33d3-e1e2-c707-ac9d93acb3cd.jpeg)
最後に組み立てて完成です。
![DSC_0643 (3).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/ae84e3a5-275d-228a-3e81-25fa5cea9ae7.jpeg)
# 製作動画
https://youtu.be/Jcz4eOa5jcc