エンジニアらしき人のひとりごと

100人中100人は興味を示さなくても、100万人居たら1人くらいは面白いと思ってくれそうな、重箱の隅をほじくってみるブログ。

黒電話をスマホの子機(Bluetoothヘッドセット)に!④

黒電話を、Raspberry Pi(ラズパイ)を使って、スマホの子機にしようという工作の記事。
過去記事は以下を参照。
黒電話をスマホの子機(Bluetoothヘッドセット)に!① - エンジニアらしき人のひとりごと
黒電話をスマホの子機(Bluetoothヘッドセット)に!② - エンジニアらしき人のひとりごと
黒電話をスマホの子機(Bluetoothヘッドセット)に!③ - エンジニアらしき人のひとりごと

一体、いくつの記事になるんだろう・・・。

そんな心配は忘れて、そろそろ黒電話をいじろう。今回は、いよいよ黒電話とラズパイを接続するぞ!


さてどうやって接続しよう。
まず思いつくのが、黒電話から延びている電話線。
これをラズパイに接続すれば、黒電話本体に手を入れずに済むかも!?

電話線って

電話線と言っても、その中に2本の線が入っている。

たった2本!?

たった2本でどうやって電話機はベルを鳴らしたり音声のやりとりをしているんだろう・・・?

そこで、ぐぐって先人の知恵を拝借することにした。
ありがたや、ありがたや(-人-)
http://www.nahitech.com/nahitafu/mame/mame5/telephone.html

どうやら電話線には、こんな電気が流れるらしい。
・直流48V
・受話器とると、電圧は5V程度に下がる
・着信すると、ベルを鳴らすために16Hzの交流信号が流れる
・相手が応答すると、2本の線の極性が反転する
・もちろん音声もこの電話線に乗る
 
もう、電気回路の素人じゃワケわからん・・・。

黒電話を分解する

やっぱり、分解することにする。分解して各パーツをラズパイに繋いだら、なんとかなるかもしれん。
分解すると、こんな感じだった。
f:id:tokieng:20150609204521j:plain
f:id:tokieng:20150609212558j:plain

あの銀色のかたまりは何だろう?その周りに、カバーから延びているいくつかの線がつながっている。

回路図も見つけた。ありがたや。この回路図には、配線の説明も書かれている。
参考にした回路図→ http://musen.server-shared.com/KURODENWA.html

が、回路の素人にはやっぱりさっぱり分からんので、さらに先人の知恵を拝借(-人-)
http://hiroe.hatenablog.com/entry/2013/12/23/223826

ふむふむ。黄色の線と、灰色の線が重要らしい。
黄色の線がダイヤルとつながっていて、灰色の線がフックとつながっている、と。

ダイヤルから延びる線

まずは一番気になる、ダイヤル。その構造を簡単にまとめると、以下のような感じになるらしい。

  • ダイヤルは、回路の接続/切断を繰り返すスイッチのようなもので、これを使って「パルス」信号を送信する。
  • パルスは、ダイヤルを回したときではなく、指を離してダイヤルが戻るときに送信される。
  • 「1」をダイヤルするとパルスが1個、「9」をダイヤルするとパルスが9個、「0」をダイヤルするとパルスは10個。
  • 600-A2電話機は、20個/秒という一定のペースでパルスを送信する。つまりパルス1個は50ms。

先ほど紹介したブログと回路図によると、DiとDsがダイヤルによるスイッチを表している。ここではDiスイッチとDsスイッチと呼ぶことにする。
Diスイッチの両端は、D1ケーブル(黒線のある黄色い線)とD2ケーブル(単なる黄色い線)に繋がっていて、
Dsスイッチの両端は、D2ケーブルとD3ケーブル(黒い点線のある黄色い線)に繋がっている。

なるほど。

さあラズパイの出番だ!

以下の回路図のように、ラズパイと黒電話を繋いでみる。
f:id:tokieng:20171001174059j:plain

そしてラズパイで以下のコマンドを実行してみる。

$ echo 17 > /sys/class/gpio/export
$ echo in > /sys/class/gpio/gpio17/direction
$ while true; do cat /sys/class/gpio/gpio17/value; done
# 数字が表示され始めたら、ダイヤルを回してみる。
# 飽きたら、Ctrlキーを押しながらCキーを押す(以下、Ctrl-Cと表記)
0
0
0
0
0
0

0が、ズラーっとと出てきた。ここでダイヤルを回してみると、時々1が出てくる。

同様に、D3ケーブルをGPIO22(15番ピン)につないで試してみる。

で、分かったことを図にすると、以下の感じになる。
f:id:tokieng:20171007145136j:plain

ということで、0→1に変化した回数を数えれば、その回数がダイヤルされた数字になりそうだ!
そろそろ、ちゃんとプログラムを書こう・・・。

ちなみにフックは

フックの状態も、同様の方法で分かる。
フックは、回路図ではHS1とHS2として表記されていて、灰色の線(H1とH2、またはH3とH4)に繋がっている。
受話器を置いている状態(オンフック)と、受話器を持ち上げた状態(オフフック)は、H1↔H2間、もしくはH3↔H4間のスイッチON/OFFで区別できそう。

次回は

ダイヤルとフックの状態が分かる、簡単なプログラムを書いてみたい。


ちなみに、本シリーズの記事一覧はこちらからどうぞ!
tokieng.hatenablog.com