SIMを載せて通信していますのでEthernet等は不要です。音声を通すので、SIMは帯域の大きいものの方がいいかも。ハードウェア制作ジュウオウチェンジャーはおおまかに3つのパーツからなる立方体の形をしていて、電子回路が入っているのは一番下のプッシュボタンがついているところだけです。上部のパーツが回るようになっていたり、開閉も動作に影響しますが、突起物の動きによって機械的に一番下のパーツに情報伝達しています。BeanのGPIOで読み取れるようにします。ボタン読み取り基盤は横3×縦4のグリッド状の回路になっています。これ以外にも、チェンジャーの開閉や上部の回転を読み取ることもできます。BeanのGPIOはデジタル6本、アナログ2本しかありませんので、今回は全ボタン+開閉のみ読み取ることにします。プッシュボタン信号は、キーマトリックスといって縦方向と横方向の組み合わせで読み取るようになっているので、12個ボタンがあっても横3+縦4の合計7ビットで読み取りできます。Beanで読み取って、チェンジャー側の読み取りタイミングで同時にデータを取り込むことにします。基盤を裏返してみると、ところどころ銀色の丸いパターンがありました。ここがスルーホールを介してキーマトリックスに直結しているようだったので、接続を確認しながらケーブルを半田付けしていきます。こんな感じで、とっても半田付けしやすいです。しても一カ所だけ、丸いパターンがない端子がありました。この黒い部分の下に隠されてしまっているんでしょうか。いう黒い部分は、中に大事なICが入っていたりするのでおいそれと剥がすことはできません。途方にくれていたところ、会社でノートPCを作っていたこともあるスーパーエンジニアの方が「パターンをカッターでこすれば被膜がはがれてはんだ付けできるようになるよ」と教えてくれたのです!一緒に中の配線も削ってしまいそうだし、そもそもそんなことやろうと思ったこともなかったのですが、簡単だよと言われてやってみました。ここに狙いをつけました。カッターでカリカリカリ...とこすります。まわりも削ってしまうと、はんだ付けの時にショートしてしまうかもしれないので割と細かい作業になります。被膜がはがれた!そこに半田を盛って...ケーブルもはんだ付けできました!やった!スーパーエンジニアの方、どうもありがとうございました!あと、チェンジャーの開閉を入力するスイッチもつないでいます。下図の、電解コンデンサーのちょっと右にある二本の青いケーブルが開閉スイッチにつながっています。この右側とGPIOをつなげばOK。僕はA0とつなぎました。Beanを入れる隙間はなさそうだったので、ケーブルはケースの外に引き出すことにしました。超音波カッターで穴をあけてケーブルを逃がします。外から見たところケーブルを出してきます。それでもケーブルの厚みがあるので、ふたを閉めるとパンパンです。プッシュボタンのある面が心なしか膨らんでまがっているのがお分かりでしょうか。Beanで電池を押さえることにしました。Beanの電源3Vもこの電池からとってくるようにしています。Beanの動作は若干怪しくなってしまいました。お次はスピーカーとマイクです。BeanがBLEで無線通信なので、音声も無線にしたいと思い、Bluetoothヘッドセットを使って作ろうと思っていたのですが、どうやらラズパイでBTのマイクを使うのは現時点では難しいらしくて、非常に不本意ながら今回はUSBの有線ヘッドセットを使うことにしました。中にはチップ固有ファームを使って成功した人もいるようですが、私はそこまでやるパワーはないので...今回有線になってしまったのはこれが原因です。こっちも無線にできたらかっこよかったのになあ。今回最も悔しい点です。BSHSUH11SVというのを使ったらすんなり使えました。ノイズキャンセリング機能も入っているらしく、音もきれいだと思います。チェンジャーに組み込むために解剖していきます。このスピーカー部分、白い台に接着されています。台があるとチェンジャーに入れられないので、スピーカーだけ切り離します。ここはデリケートな部品なので注意してください。私はひとつ壊しました(泣)マイクはアームの先についています。アームは針金が仕込まれたゴムチューブにすぎませんので、中の線に傷をつけないように注意深くハサミかなんかで斬っていきます。引っ張ってしまって線がぼそぼそになってしまったところがあります(再度苦笑)この状態で断線してないか確認したら、チェンジャーの中に入れ込んでいきます。スペースがパンパンで入れられるところが少ないのですが、キーマトリックスの右下にちょっとだけ使えそうな場所を見つけました。この下は電池が入っていますが、少し削ればマイクが入る場所くらいはありそう。いうことで、超音波カッターで切ってスペースを作ります。向こうの電池が見えています。気分は手術ですね!ここにマイクをはめ込みます。マイクを固定させるためにグルーガンを使いました。あと、さっきぼそぼそさせてしまったケーブルがどっかにショートするのが怖かったので、チューブでシールドしました。これ以上入らないよ...また、上蓋の一部がマイクにあたってしまったので、上蓋も少し削りました。収まりはこんな感じになります。マイク部分には音が通るように穴をあけておきます。これで無理やり上蓋をねじ留めすれば、マイク部分は完成です!次はスピーカーです。電子回路が何も入っていない、中段の部分に入れます。ここは開けるとこんな感じになっています。薄いモノなら入れられそう。やってみたら先程のスピーカーがちょうど入るサイズでした。ここには透明の蓋がつけられていました。ここの接合部をちょっとだけ削って、ケーブルを後ろに逃がせるようにしましょう。こんな感じにしました。最終的な収まりはこんな感じになりました。収まりっていうか、収まってないしグルーガンできったなくなっていますが、僕の実力ではこんなもの。よーしこれでハードは完成!!ボタンもネットも無線になってるんだから、やっぱ音声も無線にしたかったな...悔しいです!それはともかく、上の写真をみて何か気づきませんか?そう!フィギュアが4人しかいない!白のジュウオウタイガーアム、どっかに行ってしまったのです!(ザ・ワールドは発売時まだ登場していませんでした)出典:http://www.tv-asahi.co.jp/zyuoh/character/いやーうっかりなくしちゃいましたー。僕のお気に入りの、八重歯のセラが無事だったからまだいいんです。アムのファンの方ごめんなさい。どっかで本能覚醒しているに違いありません。それも大事なのですが、文字盤を見てもう一つ何か気づきませんか?そうなんです!電話なのに「0」がないんです!これじゃあいきなり僕に電話できないじゃないですか!ということで、元々ある上の方のボタンの右側を0として、真ん中を「かける」ボタンにすることにしました。これでハードは出来上がり。ラズパイ上のソフトの設定に移ります。何はともあれ最初にやることはアップデートですね。upgradenode.jsも0.10.29とか古いので、ここを参考に最新版にアップデートしてしまいましょう。nodejsこれでバージョンが6にあがります。ついでに定番のnpmも入れときます。libudev-devUSBスピーカー・マイクは挿すだけで動きますが、ラズパイ本体のオーディオがデフォルトになっているので、のちのちのSIPクライアントからのアクセスで悩まないように、このリンクを参考に本体オーディオを止めてしまうのがお勧めです。やり方は次の通りです。reboot実行プログラムのクローンそして最後に、今回の電話プログラムをダウンロードしてきます。https://github.com/sowd/ZyuohPhoneプロジェクトフォルダに入り、必要なnode.jsライブラリをインストールします。install設定ファイルを編集します。env.js.origをenv.jsという名前に変更してエディットしてください。中身は次のようになっています。Asteriskで普通の外線電話を作る」で立てたAsteriskサーバーのIPアドレスとログイン情報を入れてください。下はこのままでよいです。実行Bluetoothへのアクセスに特権が必要なので、sudoします。main.jsどうですかどうですか!?動きましたか?これで子供に自慢しましょう!苦労話ここまでお読みいただいて、本当にありがとうございます!これをお読み頂いたら、あたかも一本道で簡単に作れたように見えたかもしれません。実際には、この制作には3か月近く費やしています。最初は2週間くらいでできかな...と思ってたんですがとんでもないことで、壁という壁にぶつかってしまって、一度はもう諦めようかと本気で思いました。人に聞かずにやることを心がけましたが、最終的には周りの人にも助けて頂きました。ありがとうございました。やる人がやればできることも多々含まれると思いますが、私のハックと検索能力はひどいもので、本当に自分の限界を感じてしまいました。どんなところで苦労したのか、一応記録しておきたいと思います。この電話、最初は中古のガラケーを改造して作るつもりでした。本体を開けているうちに断線してしまい、萎えてしまいました。それなりに高かったのでもう一つ買う気が起きず、次はキッズケータイに楽天SIMを入れて使うことにしました。家に届いたキッズケータイを見て6歳の息子が使いたいと言いだし、召し上げられてしまいました。そこからはじめてSIPを使うという選択肢を考え始めました。その時点でSIPがなんだか全く分かっていませんでした。ラズパイで動くSIPクライアントにもいろいろと選択肢があります。node.jsで作りたかったのと、オーディオ機能との兼ね合いもあって動いたり動かなかったりで、本当に苦しみました。sipsterはPJSIPのラッパーなのでなんでも使えるに違いないと思ってかなり長い間頑張ったんですが、nodeならではの記法について十分なドキュメンテーションがなく、またデフォルト値もよくわからなくて苦労しました。結局一番簡単に使えてドキュメンテーションもしっかりしているのはPJSUAのCUIだったので、これを自分のプログラムの子プロセスとして起動して、標準入出力で動かすというきわわめてかっこ悪い方法にしました。いい方法があるんでしょうけど、もう途中であきらめた。Beanを使ったわけですが、これを使う時にはいつもメーカーが提供していたSDKを使っていました。これはBLEをシリアル接続として使えるというもので、一切BLEを知らなくても便利に使えます。今回はラズパイで動かしたかったので、素のBLEを使う必要がありました。アドバタイズモードって何?という状態から勉強する必要がありました。キーマトリックスの読み取りは高速に変化する電圧をタイミングよく読み取る必要があります。Beanを普通にArduinoとして使うと、フレームレートが足りず、安定にキーを読み取ることができませんでした。結局ソフト的な後処理で乗り切りましたが、本来ならもっと高フレームレートで読むか、読み取り部分には専用ICを使うなどすべきでした。この読み取りを安定させるのに長い時間を費やしました。bluetooth4.1というコンパクトなBTモジュールまで買ってあったんです。スマホベースで作っていればよかったかなあ。スピーカー部分を引っぺがしたときに壊しました。