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

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

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

ラズパイ(Raspberry Pi)を使って、黒電話をスマホの子機にしようという工作をしてます。

過去記事は、こちらから。
tokieng.hatenablog.com

前回までで、なんとか回路とアプリを作ったよ。
必要なソフトなどは、前回までにインストール済みだよね。

まずは回路の動作確認

回路がちゃんと動くのかのテストをしよう。(今のところ、ダイヤルとフックのチェック用にしかならないけど)
以下のコマンドを実行する。

$ cd
$ KurodenwaPi/test_circuit

しばらく待って、

Ready.

と表示されたら準備完了。

黒電話のダイヤルを回したり、受話器を取ったり置いたりすると、ラズパイが反応するはず。

黒電話の操作をラズパイで受け取っている様子

ラズパイはちゃんと反応するかな?
特にダイヤルの1~9と0は、すべてが正しく動くかどうかを確認だ!正しく番号を認識しないと、間違い電話をしてしまうからね。

あ、ベルの動作確認ツールは、今のところ無いです。

アプリの実行

スマホとラズパイが接続している状態にして、以下のコマンドを実行する。

$ cd
$ KurodenwaPi/client

しばらく待って、

Ready.

と表示されたら準備完了。

うまくいったけど・・・

数日経ってまた使ってみたら、なんだかベルの鳴り方が弱くなった気がする。
どうやら乾電池が減ってるみたい。

そうだよねー。前回の回路図(バージョン1)だと、モータードライバー側の回路が常にONだもんねー。

ということで、次回は回路の改良をやってみよう。



本シリーズの全記事は、こちらから。
tokieng.hatenablog.com

里芋の収穫体験もどきをしてきた@手賀沼周辺

このブログは、技術系ネタを中心に書いてるんだけど、ひょんなことから観光ネタを書くことに・・・。

ことのはじまり

はじまりは、このチラシ。
f:id:tokieng:20171123225552j:plain
「とうかつの味覚を満喫!まんぷく体験ツアー」の開催について/千葉県

「食べ放題」「無料」
こんなにうまい話があるだろうか!?
えい、応募しちゃえー!

これに応募したところ、なんとめでたく参加できたのだ!そこですごくおもしろい体験をしてきたので、簡単に紹介みよう。

体験ツアーの紹介をしてもよいけど、あんまりおもしろく書けそうにないので、それよりも、手賀沼周辺でどんな体験ができるかをまとめてみた。

手賀沼!?

唐突に出てきた単語「手賀沼」。今回の舞台は千葉県北部にある「手賀沼」という沼の周辺なのだ。

手賀沼って初めて聞いた!

で、初対面した手賀沼は、こんな感じ。
f:id:tokieng:20171123130826j:plain
f:id:tokieng:20171123130852j:plain

え?沼!?
大きな橋も架かってるし、これは川じゃないの?

地図で見ると、川じゃなかった。
https://www.google.co.jp/maps/place/%E6%89%8B%E8%B3%80%E6%B2%BC/@35.8576934,139.9919207,13z/data=!3m1!4b1!4m5!3m4!1s0x60189d3e42ba17db:0xa897ff648e6ef57!8m2!3d35.8504551!4d140.0572767

大きいなぁ。
たぶんあとで書くけど、遊覧船の船長さんが「手賀沼の水深は、深くても80cmくらい」とおっしゃってた。

なるほど、川でもなく、池でもなく、沼でした。

で、今回ご紹介する施設

あの体験ツアーで、以下の施設でいろんな体験したり食べたりした。

近隣の畑(里芋の収穫体験)、道の駅しょうなん(ランチ+買い物)、手賀沼(遊覧船で周遊)、鳥の博物館(見学)、水の館(買い物+プラネタリウム鑑賞)。

ということで、これらを簡単に紹介~。

畑で収穫体験

株式会社農彩土という、地元の農家の方々が立ち上げた会社が、農作物の収穫体験を企画しているという。
TOP - 都心からすぐ、旬野菜の収穫体験・体験農園・野菜狩り | 千葉県柏市手賀の丘“農菜土”

春頃から秋ごろまで、さまざまな農作物の収穫を体験させてくれるんだって!
今年(平成29年・2017年)の収納体験の募集は既に終わったけど、また来年も開催されるみたい!

で、今回のツアーでは里芋堀り。
本当は外の畑で行う予定だったけど、「開催当日の午前は雨」という予報だったので、前日に土から掘り起こしていただいた里芋を、参加者が小分けするという感じに。収穫体験もどき、かな。

f:id:tokieng:20171123104050j:plain
里芋は既にかごの中に
f:id:tokieng:20171123104220j:plain
「土から掘り起こしたばっかり!」という状態の里芋たち

で、ひとかたまりを持ち上げると、
f:id:tokieng:20171123104613j:plain
こんな感じ。

芋なので、親となる種芋がある。里芋は、その周りに子の芋がたくさんできて、一つの塊になってるらしい。

この塊を地面にたたきつけると、子の芋が取り出せる。
f:id:tokieng:20171123104651j:plain

たたきつける→外れた芋を拾う→楽しい→またたたきつける→拾う→楽しい→面倒なので芋を手でちぎって取り出す→やっぱり楽しい

で、一人一袋の分け前が、あっというまに収穫。
f:id:tokieng:20171123105539j:plain


今回の里芋は、不格好だけど、粘りがすごいのが特徴らしい。

アルミホイルで包み焼にしていただいた。皮ごと包んで蒸し焼きに。皮は手でつるっとむける。
f:id:tokieng:20171123105817j:plain

ほくほくだ。!焼くだけでいいし、塩や塩コショウをつけてもうまい!

で、あまりにも粘りが特徴的なので、とろろにしていただいた。
皮をむいて、
f:id:tokieng:20171123110331j:plain

すりこぎで、ごりごりと・・・
f:id:tokieng:20171123110527j:plain

生卵と、めんつゆと、白だしを、てきとーに足して、
f:id:tokieng:20171123110620j:plain

できあがり。
f:id:tokieng:20171123110742j:plain

これまたうまい!

いいなぁ。

この時に伺ったのが、

  • 芋は、収穫してすぐはおいしくない。1週間くらい置いてから。

(スーパーや道の駅で売ってるのは、1週間くらい置いた状態のもの)

  • 芋は冷やしたらダメ。6度以下はNG。だから冷蔵庫には入れない。
  • 保存は、新聞紙でくるむか、段ボールに入れる。ビニール袋は、空気が通らないからNG。

だとか。
ということは、今日「収穫」したこの里芋は、来週までおあずけかー。ぐぐ。

ほかにも、白ネギのおいしいところの試食とか、落花生の落花生たるゆえんとか、すごくおいしくためになる話も伺えた。

来年は収穫体験に行きたいぞー!

今年はこういう収穫体験を開催されてたんだって。
収穫体験トップ - 都心からすぐ、旬野菜の収穫体験・体験農園・野菜狩り | 千葉県柏市手賀の丘“農菜土”

もうこんなに書いちゃった

ほかの体験のことも書こうと思ったけど、長くなったのでまた次回。
キーワードは「とうかつのいいところ」。


ちなみに

この記事を書いたのは、今回の「ツアー体験モニター」募集要件の6番目に

<6>SNSもしくはブログを活用し、施設をPRできる方。

ってあるからなのだw
頂いた分は、きちんとお返ししないと!

・・・頂いた分のお返しができるかどうか分からないけど。

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

ラズパイ(Raspberry Pi)を使って、黒電話をスマホの子機にする工作をしています。

ちょっとお知らせ

実はこの作品を、
日経BP社の雑誌3誌が主催した「ラズパイコンテスト2017」に応募してました。

そしたら、なんとなんと!まさかの「優秀賞」をいただきました!
みんなのラズパイコンテスト |ラズパイマガジン、日経Linux、日経ソフトウエア 主催
ありがとうございます!うれしいです。

本当は応募までにこの工作シリーズの記事を書き終えたかったのですけどね。意外に書くネタ多すぎw

ちなみに本シリーズの過去記事は、こちらから。
tokieng.hatenablog.com

前回までのおさらい

前回までで、ラズパイで黒電話のダイヤルとフックの状態を観測できて、さらにベルも鳴らすことができた。
ラズパイをスマホに接続して、ラズパイからスマホの電話機能の操作もできるようになった。

いよいよ、これをまとめて、黒電話アプリを作るぞ!
と思ったけど、ソフト作りの前にまずはハード作りだ!

回路(バージョン1)

バージョン1とわざわざ書いているということは、これは後で変更するんだなというネタバレを意味するけど、まぁ気にしない。
まずはこの回路を作ってみた。
f:id:tokieng:20171111163148p:plain
(回路図作成には、 水魚堂の回路図エディタ (BSch3V) を使用させていただきました )
回路の+3.3VとGNDは、もちろんラズパイのお好きなピンから引っ張ってきてください。

※おことわり:ちなみに私は回路作成初心者なので、この回路だと火災やケガや他人に迷惑かけることがあるかも。あくまでも、ご参考までに!

使用するGPIO端子は以下の通り。

GPIO端子 接続先 用途
GPIO17 (11番ピン) 黒電話のD1線 ダイヤルパルスの検出に
GPIO22 (15番ピン) 黒電話のD3線 ダイヤル回転中の検出に
GPIO24 (18番ピン) 黒電話のH1線 フック状態の検出に
GPIO13 (33番ピン) モータドライバTA7291PのIN1端子 ベルの制御に
GPIO5 (29番ピン) モータドライバTA7291PのIN1端子 ベルの制御に

回路図の上半分がダイヤルとフックの検出回路で、下半分がベルを鳴らす回路。
単に配線しただけ。
CN1~CN3は、黒電話と回路とを接続するための、コネクタ。繋げればなんでもよい。

まずはブレッドボード上に配線して、これでよいか動作を見てみよう。
そのためにもアプリを作らなきゃ。

あれ?受話器は?

そうそう、受話器もつながないと、電話機として足りないよねー。
黒電話の受話器からは、黒い線2本と、白い線2本が出ている。
f:id:tokieng:20170623195408j:plain
この白いのがマイクの線で、黒いのがスピーカーの線。

この線を、3.5mmのミニプラグの形に変換してみる。
線が2本しかないから(モノラルだから)、端子が2個(2極)のタイプでいいんだけど、なかなか見当たらないので3極のミニプラグを使ってみた。
f:id:tokieng:20171111173323j:plain
半田付けがひどいのは、ご愛敬ということで(^^;

ミニプラグをくっつけたら、本物の受話器を使ったマイクとスピーカーの完成!
f:id:tokieng:20171111173558j:plain

これをラズパイのUSBオーディオケーブルに繋いで、ラズパイで音を鳴らしてみる。

$ paplay /usr/share/sounds/alsa/Front_Center.wav

もし↑で音が鳴らなかったら、↓も試してみて。

$ pulseaudio --start -D  # ←pulseaudioが起動していないとき、起動させる
$ paplay /usr/share/sounds/alsa/Front_Center.wav

お!受話器のスピーカーから音が鳴った!
単純に繋ぐだけでいいみたい。複雑なことしなくて、よかったよかった。

アプリ作ったよ

黒電話アプリ、名付けて KurodenwaPi なのだ!プログラムをGitHubで公開します。
github.com
GitHubなのでうさんくさい英語で説明を書いてしまったけど、そもそも日本の黒電話との使用を前提としたアプリだから、英語で書いても誰も読まないや(笑)

準備

まずはインストールする。

$ cd
$ git clone https://github.com/tokieng/KurodenwaPi.git

完了。

ほかに必要なのは、これまでに登場した PulseAudio(バージョン10)、ofono、pigpio。インストール方法は過去記事を参照して。

ラズパイとスマホBluetoothペアリングも、過去記事が参考になるかも。
あ、スマホと接続するときにofonoがラズパイ上で動いていないと、スマホはラズパイをハンズフリー機器として見てくれないので、ご注意を。

さらに言うと、ラズパイにペアリングしている(登録している)Bluetooth機器は、1つだけにしてください。複数登録しているときは、bluetoothctlコマンドを使って1つだけにしてください。
これは、手抜きアプリの仕様です(汗)。
複数機器に対応しようかとも思ったけど、需要無い割りに面倒なので省略!


そして必要なソフトが、AquesTalkPi。
AquesTalk Pi - Raspberry Pi用の音声合成アプリ
日本語の文章をAquesTalkPiに渡すと、音声データを作ってくれる。
せっかくなので、黒電話にしゃべらせたいよねー。
ダウンロードしたら、以下のようにして展開すれば、準備完了。

$ cd
$ tar xfz aquestalkpi-20130827.tgz

あとは、受話器を上げた時の「ツー」という音と、電話が切れたときや話し中の「ツー、ツー・・・」という音と、呼び出し中の「プルルルル・・・」という音。
これもアプリで生成したかったけど、結構ややこしかったのでやめて、wavファイルを再生することにした。

必要なwavファイルは、以下の3つ。

  • tone.wav : 受話器を上げた時の「ツー」という音。トーン信号。400Hzのサイン波。
  • busy.wav : 相手が話し中の時の「ツー、ツー、ツー・・・」という音。ビジートーン。
  • ringback.wav : 相手を呼び出しているときに聞こえる、「プルルルル、プルルルル・・・」という音。リングバックトーン。

どこかからダウンロードしてきたはずなんだけどなぁ。どこからか分からなくなってしまった・・・。
どうにかしてwavファイルを工面したら、 /home/pi/KurodenwaPi/sound/ の中に置いてくださいませ。

アプリの実行

スマホとラズパイが接続している状態にして、以下のコマンドを実行する。

$ cd
$ KurodenwaPi/client

しばらく待って、

Ready.

と表示されたら準備完了。

電話かけたりしてみたいだろうけど、プログラムや回路にミスがあったら間違い電話をしてしまうかもしれないので、それは次回じっくりと説明する・・・つもり。

次回予告

このアプリを使って、電話の発着信をやってみる。あと、回路図バージョン2も?



ちなみに本シリーズの全記事は、こちらから。
tokieng.hatenablog.com

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

前回までで、黒電話のダイヤルとフック操作をラズパイ(Raspberry Pi)が検出できるところまで出来た。
前回の最後に「アプリを作ろう」と書いてたけど、ベルの存在を忘れてた。

ということで今回は、ベルを鳴らそう!

過去記事は、こちらから。
tokieng.hatenablog.com

ベルの構造

一口に黒電話のベルと言っても、型番によって異なるっぽい。ここでは、今回の工作材料である600型に絞ってまとめることにする。

f:id:tokieng:20150609204522j:plain
黒電話(600-A2)のベル
黒電話のベル部分を見ていただくと、
左にある2つの丸いもの(本記事では鐘と呼ぶ)、2つの鐘の間にある棒(ハンマー)、右側にある茶色くて「E」という文字が見える部品が見える。
この右側の部品はコイル。小学校の理科の実験で、使ったことあるよね。
ということで黒電話のベルは、2つの鐘と、ハンマーと、コイルという3種類の部品で構成している。

各部品を簡単に説明すると、

2つの鐘:叩くと音が出る。微妙に大きさが違うので、それぞれから別の高さの音が出る。
コイル:電流を流すと電磁石になる。
ハンマー:左側の先端に球がついていて、逆の右側には磁石がついている。

コイルに電流を流して電磁石にすると、ハンマーについている磁石が引き寄せられて、ハンマーが動く。
ハンマーが動くと、ハンマー先端の球が鐘を叩く。

コイルに流す電流が一方向なら、コイルが作る磁界は一定方向なので、ハンマーは2つある鐘のどちらかを1回動くだけ。
これを、コイルに交流を流して電流の向きを変えてあげることによって、ハンマーは2つの鐘を交互に叩くようになる。
こうして鐘が鳴って、あのベル音を鳴らすことができる。

あぁ、だから電話線には交流16Hzが必要なのか・・・。

ベルを手で鳴らしてみる

ハンマーを手で動かしてみた。

ハンマーをゆっくり動かすと、ハンマー先端の球が鐘にあたらない。
その時の動画が、これ。
www.youtube.com

で、ハンマーを勢いよく動かすと、球が鐘に当たって、音が鳴る。
www.youtube.com

ハンマーの棒がしなることで、こうなるみたい。
こうすることで球は、鐘を一瞬たたくだけですぐ離れる。だからきれいな音が鳴る。
仮に球が鐘にくっついたままだと、たたいた鐘を指で押さえるようなものなので、ちゃんと鳴らないからね。

よく考えられてるなぁ~!

ハンマーを早く動かすと、(人によっては)懐かしい、黒電話のベル音を奏でる。
www.youtube.com

ベルをどうやって鳴らす?

ということで、コイルには交流16Hzの電気を流す必要がある。
しかも48V。3.3Vとかの低い電圧では、ハンマーを動かすような磁力が作れないっぽい。
げげ。
ラズパイでどうやって・・・。

そこで、別の方法でハンマーをたたけないか、検討してみた。

作戦① コイルを変える?

コイルを、もっと低い電圧でもよいものに置き換えれないかな、と。
足りない頭で考えてみたけど、電磁石の知識をどこかに置き忘れたみたいで、断念・・・。

作戦② モーターの回転運動を往復運動に変換して?

電気で動力を得る部品といえば、モーター。モーターは、回転運動。
でも今回欲しいのは、ハンマーを動かす往復運動。
工作用部品とかで、回転運動→往復運動に変える部品はないかな?
たとえばタミヤとか・・・。

そうそう、こんなの!
楽しい工作シリーズ 手こぎボート工作セット | タミヤ

変換はどういう原理なのかな?と思ったら、別の方が分かりやすい動画を公開されてた。
DCモーターを使ったクランク&プーリー構造 - YouTube

黒電話への内蔵は、むーりー。

作戦③ 別のモーター

サーボモーターというものがあるらしい。モーターの回転角を制御できるというものらしい。
普通のモーターは一方向に回転し続ける(前進あるのみ)だが、サーボモーターは、回転できる角度の範囲内で、自由に角度を変えられる、というモーター。
詳しくはこちらの方の記事をご参照。
http://www.katch.ne.jp/~n-yotaka/sub%202.htm

つまり、例えばハンマーを真ん中に置いたときを90°として、70°~110°に動かせば、往復運動のようなものが簡単に作れそう!
これか!

・・・と思ったが、黒電話にどうくっつけようかと悩んで、この案はいったん保留。

作戦④ やっぱり元のコイルを使う

そうこうしていたら、どうやら9V乾電池でも鳴らせそうだという文献を見つけた。
セマクアサク: [実験]黒電話のベルを鳴らす

9V乾電池!その存在をすっかり忘れてた!
これなら比較的高い電圧をコンパクトに得られそう!

実験

元のコイルをそのまま使って、ハンマーを動かせるか実験してみた。

9V乾電池を2本直列につないで18Vを作り、これをコイルに流してハンマーが動くのか?

コイルは、本連載4回目でご紹介したサイト(黒電話三代)の回路図では B かな?ということは、コイルに繋がっている線はB1線とB2線っぽい。

B1線とB2線の間に、9V乾電池×2個を繋いでみた。

チン

やった!ハンマーが動いて、鐘を叩いたよ。
写真も動画も残してないけどw

残る課題は、交流っぽい電流

とりあえず9V乾電池2個でハンマーは動かせた。
でも、コイルに流す電流の向きを反転させないと、2つの鐘を鳴らし続けることはできない・・・。
ラズパイからどうやって・・・。

色々調べてみると、モータードライバというICが使えそうだということが分かった。

電子工作の世界で有名らしい、何かと話題の東芝製TA7291PというICを使ってみる。
このICは、ビデオデッキ用に開発されたものらしい。
(今となってはピンとこない人が多そうだが、ビデオ、分かりますよね!?)

カセットに収められているテープは、ビデオデッキ内のモーターで巻かれたり巻き戻されたりするが、
 巻き戻す = モーターを逆回転させる = モーターに流す電流を逆方向にする
ということなので、モーターに流す電流を制御する必要があるからなんだろうな、と推測。

TA7291Pの公式資料は、こちらから。
http://toshiba.semicon-storage.com/jp/product/linear/motordriver/detail.TA7291P.html
あらま「生産終了予定」ですって!
東芝って、電器屋で売ってる家電以外にも実は非常に広い分野の製品を作っていて、陰でいろんな分野の支えになってるから、日本国内になんとか落ち着いていただきたいなぁ。)

TA7291P、モータードライバについては、マルツさんのサイトが分かりやすい。
https://www.marutsu.co.jp/contents/shop/marutsu/mame/81.html

TA7291Pを簡単に説明すると、

  • モーター側にはOUT1とOUT2の端子があって、OUT1→OUT2の向き、もしくはOUT2→OUT1の向きに電流が流れる。
  • どっち向きに電流を流すかは、IN1とIN2の端子で制御できる。
  • 電圧に関する端子が3つあるが、それぞれざっくりと以下の意味。
    • Vsは、モーターに流す電源を供給するもの。
    • Vccは、ICの回路の電源を供給するもの。
    • Vrefは、Vsが出力する電圧に影響するもの。

つまり、IN1端子とIN2端子をラズパイから制御することで、電流の向きを変えられるということ!

IN1とIN2に与える信号を、1/32秒ごとに切り替えれば、16Hzのような電流が作れそうだ。
しかも、上の調査の結果、コイルに与える電流は厳密に交流でなくても、ハンマーは鐘を叩いたらすぐに鐘から離れてくれるし。

元のコイルのままで、なんとかなりそうな気がしてきた。

次回予告

そろそろアプリのプログラムが完成(公開)!?


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

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

黒電話をスマホの子機にしよう!という話の、第5回。

過去記事は、以下にあります。
黒電話をスマホの子機(Bluetoothヘッドセット)に!① - エンジニアらしき人のひとりごと
黒電話をスマホの子機(Bluetoothヘッドセット)に!② - エンジニアらしき人のひとりごと
黒電話をスマホの子機(Bluetoothヘッドセット)に!③ - エンジニアらしき人のひとりごと
黒電話をスマホの子機(Bluetoothヘッドセット)に!④ - エンジニアらしき人のひとりごと

前回までのあらすじ

ラズパイ(Raspberry Pi)を使って、黒電話をスマホの子機(Bluetoothヘッドセット)にしようと画策中。
スマホ⇔ラズパイ間をBluetoothで接続し、ラズパイからスマホの発着信操作ができた(②と③)。
黒電話のダイヤルは、ON/OFFを繰り返すスイッチのようなもので、なんとかラズパイに繋いでON/OFFが分かるようになった。

で、今回は

そろそろプログラムを書いて、何番がダイヤルされたかを検出できるようにしよう。

使う道具を決める

プログラムからGPIOを操作する方法がいくつかあるので、まずはどれを使うか選定する。

  • /sys/class/gpio/ へのファイル操作(④で使用した方法)
  • WiringPiライブラリ
  • RPi.GPIOライブラリ
  • pigpioライブラリ

http://abyz.co.uk/rpi/pigpio/

いろいろあるが、今回ではpigpioを使うことにした。pigpio本体はLinuxのデーモンとして動いていて、高速&高精度のGPIO操作が可能。そして、Pythonのアプリから操作するためのインタフェースとしてのライブラリが提供されている。
これを選んだ最大の理由は、特徴に以下の項目があったから。
>callbacks on GPIO 0-31 level change (time accurate to a few μs)

これの何が良いかというと、
何番がダイヤルされたかをカウントするために必要な、パルスの立ち上がり(0→1になる)タイミングを教えてくれる、ということ。

もしこの機能がなかったら、立ち上がりの検出処理を自分で実装する必要が出てくるので、ちょっと面倒だし、なんだかスマートな方法じゃない。
どういう処理かというと、定期的にGPIOポートの値をチェックして「0, 0, 0, 0, 0, 0, 0, 0, 1, あ!いま1になった!」というのを見つける、いわゆるポーリングの処理。

これをライブラリ側でやってくれるというのは、すごくスマート。プログラムが簡単になる。
しかも、数マイクロ秒の誤差で、ライブラリからアプリに通知してくれる。
おぉすごい!

ということで、Python + pigpio でプログラムを書いてみた。

簡単なコード

#!/usr/bin/python3

import pigpio
import time
from enum import Enum

HIGH = 1
LOW = 0

# D3ケーブルの接続ポート
PORT_DIALING = 22

# D1ケーブルの接続ポート
PORT_DIAL_PULSE = 17

# H1ケーブルの接続ポート
PORT_HOOK = 24

class KurodenGpio:
	Status = Enum("Status", "IDLE WAIT_PULSE PULSE_HIGH PULSE_LOW")

	gpio = None

	status = Status.IDLE

	# パルスの立ち上がりをカウントする
	dial_count = 0

	def __init__(self):

		# pigpioを生成
		gpio = pigpio.pi()
		self.gpio = gpio

		# 各ポートをINPUTに
		gpio.set_mode(PORT_DIAL_PULSE, pigpio.INPUT)
		gpio.set_mode(PORT_DIALING, pigpio.INPUT)
		gpio.set_mode(PORT_HOOK, pigpio.INPUT)

		# ノイズ対策
		gpio.set_glitch_filter(PORT_DIAL_PULSE, 1000)
		gpio.set_glitch_filter(PORT_DIALING, 1000)
		gpio.set_glitch_filter(PORT_HOOK, 1000)

		# パルスの立ち上がり/立ち下りを契機に、関数を呼び出してもらう
		gpio.callback(PORT_DIAL_PULSE, pigpio.EITHER_EDGE, self.callback_gpio_d1)
		gpio.callback(PORT_DIALING,    pigpio.EITHER_EDGE, self.callback_gpio_d3)
		gpio.callback(PORT_HOOK,       pigpio.EITHER_EDGE, self.callback_gpio_hook)

	def __del__(self):
		self.gpio.stop()

	def callback_gpio_hook(self, gpio, level, tick):

		if level == 0:
			print("受話器取った")
		else:
			print("受話器置いた")

	def callback_gpio_d3(self, gpio, level, tick):
		if level == 0:
			print("ダイヤル開始")
			if self.status == self.Status.IDLE:
				self.status = self.Status.WAIT_PULSE
				self.dial_count = 0
		else:
			print("ダイヤル終了")
			if self.status == self.Status.PULSE_LOW or self.status == self.Status.WAIT_PULSE:
				self.status = self.Status.IDLE
				if self.dial_count != 0:
					if self.dial_count == 10:
						self.dial_count = 0
					print("** Dial:", self.dial_count)

	def callback_gpio_d1(self, gpio, level, tick):
		if level == 1 and (self.status == self.Status.WAIT_PULSE or self.status == self.Status.PULSE_LOW):
			self.status = self.Status.PULSE_HIGH
		elif level == 0 and self.status == self.Status.PULSE_HIGH:
			self.status = self.Status.PULSE_LOW
			self.dial_count += 1

#####

if __name__ == '__main__':
	print("** START **")
	gpio = KurodenGpio()
	while True:
		time.sleep(1)

状態管理はいらんかな?とも思ったが、つけてみた。

このコードをgpiotest.pyとして保存し、以下のように実行している。

$ python3 gpiotest.py

何番がダイヤルされたかと、受話器の上げ下げが分かるようになった!

次回予告

そろそろ本格的にアプリを作ってみることにする。


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

黒電話をスマホの子機(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

NECの超軽量2-in-1 Windowsノート LAVIE Hybrid ZERO HZ300

買っちゃった。
まさかこんないい機種が、むちゃくちゃ手ごろな値段で買えるとは思わなかった。
http://nec-lavie.jp/pictures/pc/lavie/nt/201702/hz330gas/192x192.jpg

(この記事、基本的には「私のPC購入日記」ですが、HZ300に興味のある方向けの情報も入れてます)

3年ほど使ってる ASUS Transbook T100TA が、バッテリー不調(経年劣化?)により突然電源断することが増えてきた(保存してないデータも消えるし)ので、新しいノートPCを買うことにした。

そこで、3年間T100TAを使ってみて感じた、次のノートPCでかなえたい条件を考えた。
私の場合は、でっかいデスクトップPC(自作)があるのノートPCにはパワフルというより機動力が欲しい。具体的には、

  • CPUは、そこそこでいい
  • メモリは4GB以上
  • ストレージは64GB以上
  • バッテリは8時間以上
  • 軽量(できれば1.2Kg以内)
  • ディスプレイは11~13インチ台
  • できればフルHD
  • タッチパネル
  • 2-in-1だと嬉しいけど、予算との兼ね合いかな
  • お値段は、5万円台だとありがたいけど、7万円台以内で・・・
  • Officeは無くていいけど、あると嬉しい

・・・と、結構無茶な要求。

と思ってネットで探してたら、こんなサイト見つけた。

NEC Direct(NECダイレクト)

で、この機種が目に留まった。
LAVIE Hybrid ZERO [Windows 10 Home、Core m3、Office Home & Business Premium、ムーンシルバー、1年間保証] (NSLAA773HDGH1S)
f:id:tokieng:20170924144516j:plain
画像出典: NECアウトレット商品ノートPC

※2017/10/14追記 売り切れましたね・・・

ええ!これって、あのものすごく軽い LAVIE Hybrid ZERO なの!昔、電器屋の店頭で触ったことがあって、あまりの軽さにびっくりした記憶のある機種が!
それがまさか、税抜きとはいえ79,800円だなんて!消費税入れると8.7万円くらいと予算ややオーバーだけど、これは掘り出し物だ! 「アウトレット品」ですけどね!
出始めは、たしか15万円くらいしたような・・・。

なんてったって、2-in-1のWindows機なのにキーボード付けた重量が800g未満で、タッチパネルのフルHD液晶で、なのに10時間(公称)も持つバッテリー。
私の願望をすべて、予算よりちょっと出るだけで叶えてくれるなんて!

でも機種名書いてないな・・・。Hybrid ZEROは、古いモデルも含めていくつか機種あるみたいだし。むやみに飛びついても・・・。
[商品詳細]に書いてある条件といえば、

  • LAVIE Hybrid ZERO
  • 11.6インチ液晶 フルHD IPS液晶(タッチパネル)
  • CPU m3-6Y30
  • メモリ 4GB
  • ストレージ 128GB eMMC
  • LTE/3G通信機能なし
  • Office Home & Business Premium プラス Office 365 1年間
  • モバイルパワーキーボード
  • 本体のみ 398g、キーボード付けると786g
  • バッテリー 10.3時間

合致するのは、

  • PC-HZ300DA(2016年春モデル)
  • PC-HZ300FA(2016年秋モデル)
  • PC-HZ300GA(2017年春モデル)

あたりか。
ちなみに11.6型のHybrid ZEROには、HZ300以外にも、LTE内蔵のHZ330、キーボードがなくてスペックも若干抑え目なHZ100の3系統あるけど、表記している条件からすると明らかにHZ300系。

さて、DAかFAかGAか。
価格.com で価格の相場を調べてみると、

  • PC-HZ300DA:最安値で9万円ほど(税込み)
  • PC-HZ300FA:最安値で8.3万円ほど(税込み)
  • PC-HZ300GA:最安値で14.6万円ほど(税込み)

どうみても、GAではなさそう・・・。

(ちなみに、楽天で調べるともっと安い店舗も出てくるけど、本来はOffice付きのこの機種なのに [Officeなし] と書かれたものが出品されてて、怪しさ満点。箱開けてOffice抜いて売ってるんかい!)

スペックの相違を調べてみた。
http://nec-lavie.jp/navigate/products/pc/161q/01/lavie/hz/spec/index02.html
http://nec-lavie.jp/navigate/products/pc/163q/09/lavie/hz/spec/index02.html
http://nec-lavie.jp/navigate/products/pc/171q/02/lavie/hz/spec/index02.html

項目 DA FA GA
液晶 LED FullHD 同左 LED FullHD IPS
背面カメラ RealSenseカメラ。FullHD。200万画素 WQHD。500万画素 同左
本体重量 410g 398g 同左
総重量 798 786g 同左

スペックから判断すると、GAっぽいんだけどなー。
FAだったら他店舗のほうが安いかなー。NEC Directのアウトレットでポチッと買うかな~、どうしよっかなー。

と考えていたら、「もしかしたら秋葉原の店頭で何か別の機種の掘り出し物があるかもしれない!」と急に思い立って、秋葉原の市場調査に行くことにした。
展示品限りとか本日広告の品とか、いろいろ見て回ってきた。

そこで得た結論。
私の予算で買える範囲中で、HZ300を超えるものは全く見当たらない、と。メーカーの安心感もダントツだし。
他と比べて無茶苦茶安いアウトレットと銘打った商品だけど、メーカー直販だから安心だし(どっかの楽天の店舗とは違って)。

えぇい、ぽちっとな!

f:id:tokieng:20170924161732j:plain

買っちゃった。
てか、 PC-HZ300GAかいな!!2017年春モデル!今年の!
これはびっくり!
ハード的な差異は少ない(液晶が変わったかどうか?)ものの、うれしい。

あと、今回購入したHZ300GAではなくHZ300DA発売時の記事だけど、これすごい。
japanese.engadget.com
DAのカメラはRealSenseだけど、GAは違うっぽいので、そこのところ割り引いて読んでください。

というわけで

私の当初の希望をはるかに上回る機種が買えちゃった!

  • CPUは、そこそこでいい → Core m3!
  • メモリは4GB以上 → 4GB♪
  • ストレージは64GB以上 → 64GB♪
  • バッテリは8時間以上 → 公称10.3時間!!
  • 軽量(できれば1.2Kg以内) → 0.8kg未満!!
  • ディスプレイは11~13インチ台 → 11.6インチ♪
  • できればフルHD → フルHD
  • タッチパネル → やった♪
  • 2-in-1だと嬉しいけど・・・ → やった♪
  • お値段は、5万円台だとありがたいけど、7万円台以内で・・・ → 税込みだとちょっと足出たけど
  • Officeは無くていいけど、あると嬉しい → 付いてた♪

安心保証サービス月額版

で、2017年春モデルということは、NECが提供している「安心保証サービス月額版」の対象になっているということ。FAとGAは対象だけど、DAは対象外。
121ware.com > サービス&サポート > 安心保証サービス月額版 最大1年間無料
これは月額400円を払うことで、メーカー保証だけでなく落下や水に対する事故に対しても追加出費なく修理してくれるサービス。
同様の保証サービスを3~5年間前払いにて契約するというプランもあるが、何年使うか分からないのでちょっと躊躇してしまう。
しかしこれは月額制なので、止めたいときに止められる。しかも、はじめの1年間は無料!
やった!

結論

LAVIE Hybrid ZERO PC-HZ300GAが、アウトレット品ながら 税抜き79,800円で売ってる!

買ったのに、あのページの「限定数」が減ってないなー。残数ではないんかな?

あと 安心保証サービス月額版の対象機種なので、特に外に持ち歩く人には(この機種は持ち歩くのに最適)おすすめ。

で、まだポチッと買っただけで届いてないので、商品の使用感は分かんない(笑)

とりあえず、買えると思ってなかった機種が、思ってもない金額で売ってたので、ほかに悩んでる人の参考になればと思い、記事書いてみました。

あ、そうそう。アウトレット品でなくても、メーカーカスタマイズでメモリ増やしたりして買えますよ!
LAVIE Direct HZ(D) が、HZ300とかの11.6型液晶タイプです。
LAVIE Direct HZ は、液晶が13.3型のタイプです。
てか上記バナー広告からサイトにアクセスすると、直接サイトに行ったときよりも割引率の高いクーポンがもらえるのね。知らんかった・・・。
あー、13.3型ひかれるなー(完全に私の予算オーバーだったけど)。いいなー。ほしいなー。

ひとつ気がかりなのは、そろそろ次の機種が発表される頃かな?ということくらい。
(まぁでも出始めはきっとお高くて、私には買えないでしょうけどー)