黒電話をBluetooth化してハンズフリー機器として使う②
【今回の概要】
黒電話のベルを鳴らす回路を検討します。
【初期検討】
黒電話を鳴らすためには振幅48V、周波数16Hzの信号を電話線に印可するようです。ネットで調べたところ20~30Vでも鳴ったという情報を見つけたので24Vとします。以下、今回のネックです。
- +24Vから-24Vまで電圧が変動するため、両電源のないマイコンでは単体で信号を作れない。
- ベルを駆動するコイルには、24V ÷ (600Ω + コイル抵抗) ⇒40mA+αの電流が必要となるため、増幅する必要がある。
- 1秒鳴動 ⇒ 2秒停止 ⇒ 1秒鳴動 ⇒ 2秒停止 ⇒ … と鳴らすため、タイマー回路かマイコンのタイマー機能が必要。
本来は正弦波で入力するものだそうですが、マイコンで正弦波を作るのは面倒 大変なので矩形波で妥協します。ネットで見つけた駆動実験の動画を見る限り、矩形波でも音は変わらないように感じました。
矩形波であればモータードライバが使えるので、これをマイコンで制御します。マイコンはArduino nanoを使用しました。
【回路図】
↑この回路図で動作確認をしました。モータードライバはAmazonで購入した中華製L298Nモジュールを使っています。
↑使用したモータードライバです。何故かVccが+12Vと書いてありますが、実際は35Vまで使えます。ただし5Vレギュレータが12Vまでしか対応していないようで、24Vを印加するなら写真赤丸部のジャンパピンを外して外部から5Vを供給する必要があります。
今回はArduino nanoにUSBで電源供給するので、Arduino nanoから出ている5Vを使用します。
【プログラム】
#include <TimerOne.h> /* ピン設定 */ #define BELL_A_PIN 7 #define BELL_B_PIN 8 /* タイマー用変数 */ byte bellRingingFlag = 1; byte bellWaveState = 0; int timerCnt = 0; void setup() { Serial.begin(115200); pinMode(BELL_A_PIN, OUTPUT); pinMode(BELL_B_PIN, OUTPUT); Timer1.initialize(31250); /* 32Hzでタイマー割込み */ Timer1.attachInterrupt(timerFire); } void loop() { } void timerFire() { if (bellRingingFlag == 1) { RingingBell(); } else { timerCnt = 0; digitalWrite(BELL_A_PIN, HIGH); digitalWrite(BELL_B_PIN, LOW); } } void RingingBell() { if (timerCnt < 32) { if (bellWaveState == 0) { digitalWrite(BELL_A_PIN, HIGH); digitalWrite(BELL_B_PIN, LOW); } else { digitalWrite(BELL_A_PIN, LOW); digitalWrite(BELL_B_PIN, HIGH); } bellWaveState = 1 - bellWaveState; } else if (timerCnt < 96) { digitalWrite(BELL_A_PIN, LOW); digitalWrite(BELL_B_PIN, LOW); }else{ timerCnt = 0; } timerCnt++; }
以上のプログラムをArduino IDEでマイコンに書き込みます。
【動作確認】
ArduinoにUSBを接続した状態で24V電源を印加すると、無事ベルが鳴りました。本来の電話線よりも電圧が低いので音が小さくなることを懸念していましたが、思っていたよりもしっかりとした音がなっているので問題ないと判断しました。
電話線の直流抵抗で電圧降下が起きることで、時には30Vくらいになっていることもあるそうなので、それでも鳴るように設計されているのか…?
【次回の予定】
次はベルが鳴っているときに受話器を上げたことを検知する回路を検討します。
ディスカッション
コメント一覧
まだ、コメントがありません