Raspberry piでホーム・セキュリティ・システムを作ってみた(ナイトライダー風) / A Security system made by Raspberry pi likes “KNIGHT RIDER” |
|
---|
|
作って放置、壊れかけ
Raspberry piの工作は2年位前から始めたのですが、フィジカルコンピューティングを本格的に初めてやったのはそこからです。なので、Lチカから始めてスイッチ入力やI2Cなど少しずつ実験回路を試作しながら、1年くらい前に家のセキュリティシステムを作っていました。トライ&エラーだったので、何も記録を残していなかったのですが、放置していたら、適当な作りだったので、いよいよ動かなくなってきました。作り直しに伴い、1号機としての動作を残しておこうと思いました。
ナイトライダー風
私の今の電子工作の目標は「愛車にRaspberry piで作ったKITTを組み込む」なのですが、その基礎実験としてRaspberry piを中心とした電子工作を始めました。このセキュリティ・システムではナイト2000のボイスインジケーターを意識したインジケーターを組み込んでみました。少し後述していますがレベルメーターIC;LM3916で作成しました。そのうち、ちゃんと作り直して愛車に載せて記事にしたい...。(オッサンホイホイ)
基本構成
Raspberry pi model B+を使って、Rubyで作ったプログラムと音声認識のためのJuliusの2つのプログラムで稼働しています。フィジカルなモジュールの構成は下記な感じです。
- R Pi;Raspberry pi model B+です。何回も実装しているうちにLEDが剥がれたり、コンダクタが剥がれたり...。pi2やpi3が出て処理が遅いなーとも思いますが、直して使っているので満身創痍です。
- HAT;自作のHAT基板です。試作基板を組み合わせて実装しているので、電源系統が5Vと6Vと12V必要で、それを3つのACアダプタからそのまま頂いているというアホな構成です。容量大き目の12V一発で三端子レギュレーターを使おうとか当時は思わなかったのか。あとはいくつかのLEDドライブと、サイレンをコントロールするリレーをドライブする回路も入っています。地味に自作のスルーホールプリント基板(基板設計&エッチングを自前でやってます)です。この辺のノウハウもブラッシュアップしてまとめたいです。
- サイレン&リレー;警告時に光る&音が鳴ります。当時は大電流(大というほどでもないが)をドライブするのが怖かったので、ドライバモジュールに電源を繋いでリレーコントロールにしました。
定電流方式ハイパワーLEDドライバモジュール(3W1個点灯): 半導体 秋月電子通商 電子部品 ネット通販 - IO EXPANDER;I2C接続のIOエクスパンダMCP23017を使って、LEDを接続しています。LEDのドライブはTLC5940NTなどを使えば良かった。当時は汎用性があるものを、と思って、MCP23017を選びました。
- USB WiFi;Planex GW-USNano2を刺しています
- USB Audio;内蔵のオーディオは使わずPlanex PL-US35APを差して使っています
- MIC;Elecom HS-MC01BKを使っています。指方向性が良く、使いやすいマイクですが、現在は入手しにくくなってますね。
- AMP;秋月のアンプを使っています
HT82V739使用ミニモノアンプ基板: 組立キット 秋月電子通商 電子部品 ネット通販 - SP;秋月のスピーカーを使っています
8Ω10W広帯域用スピーカー: パーツ一般 秋月電子通商 電子部品 ネット通販 - LEVEL METER;LM3916とLM358で自作しました。LM3916は秋月で扱わなくなっていますね。2チャンネルに同じ信号を入れて、内側と外側でレベルを調整してKITTのボイスインジケーター風に見えるようにしています。ノイズが飛びまくって、横にあるLEDまで光ってますね...。ブレッドボードで作った基板を同じ配置のユニバーサル基板で作り直してます。これもちゃんと作りたいなぁ。
pブレボ(M) – aitendo - SENSORS;ドア開閉センサーのリードスイッチと、人感センサー(焦電型赤外線センサー)がついてます
ケース入りリードスイッチ(磁石付セット)MC-14AG: センサ一般 秋月電子通商 電子部品 ネット通販
焦電型赤外線センサーモジュール(焦電人感センサ) SB612A: センサ一般 秋月電子通商 電子部品 ネット通販 - LCD;コンソールはSPI接続のもの(もう売ってないのね...)です。
2.2インチ液晶モジュール(240×320/SPI) – aitendo - LED、Buttton;色々ついてます。ボタンはRubyだと私の知識では割り込みができなくてループ処理が重いので研究中でした。(解決せず)
配線はジャンパー線のまま(接触悪い、ノイズ飛びまくり)だし、複数の試作回路を組み合わせただけなので、ACアダプタがいくつもあったりと、セキュリティシステムとしてはアホな作りです。ハット基板で電源をまとめてあるので、せめてACは1系統にしておくべきだった...。
起動
- OSは普通のRasbpianをインストールしてあり、ブートすると、
- Juliusをモジュールモードで起動
- メインプログラムを起動(Ruby 1.9で記述)
が自動起動するようになっています。
- のWebカメラと接続されており、動体検知されるとメールを受け取るので、起動時にメールボックスをクリアします。(しばらく立ち上げてないとメールチェックだけでえらいことに...)
- 時にはLED、サイレン、ブザーの点灯や発音を確認するアクションをします。音声発声にはOpenJTalkを使っています。(音声は”mei”です)
- メインプログラムがJuliusモジュールに接続します
動作(セキュリティ・オフ/オン時)
Rubyのマルチスレッド処理で実装していますが、Raspberry pi model B+は現行機種に比べればスペックがイマイチなのと、何よりプログラムがまずくて、とっても処理が遅いです...。
- ネットワーク接続確認
ボイスインジケーターの周りに16個のインジケーターLEDがあり、以下のチェックと表示を行っています。
黄色LED;ネット接続、無線LAN接続、メールサーバ接続、Juliusモジュール接続で点灯
赤色LED;Webカメラ(4台まで)接続で点灯
青色LDE;一定間隔で上記8ヵ所の接続チェックを行い、チェック時に点滅
- ボタン、音声、メールによる状況確認、セキュリティ切り替え、確認
ボタンでセキュリティの切り替え、確認ができます。音声でも切り替えが可能です。登録したメールアドレスに”CHECK”という題名でメールを送るとセキュリティ設定状況を、”ON”、”OFF”という題名でメールを送るとセキュリティ設定をON/OFFできます。セキュリティモードを切り替えると登録したメールに切り替えた旨をメールします。 - センサーロギング機能
温度、湿度、気圧をI2C接続のセンサーから、雨量をWebから取得して、M2Xにロギングします。同時にローカルのsqlite3にもロギングしますが、よくファイルが壊れます...
AT&T M2X Build solutions for the Internet of Things - 会話機能
「おはよう」とかいうと、それなりに応えます。sqlite3に簡単な会話パターンを登録しておき、Juliusで認識、OpenJTalkで応答することができます。(人口無能な応答)日付、天気予報、温度、湿度、気圧、雨量なども会話でやりとりできます。”サイレントモード”という会話をしないモードにもできます。 - ハートビート、ロギング機能
一定間隔で動作をローカルファイルとsqlite3にロギングします。稼働のハートビートだけでなく、処理や動作は全てDBに書き込みます。 - メールボックスクリア
家にいるときもWebカメラ達からはバンバン動体検知メールが飛んでくるので、セキュリティ・オフの時はメールを読み捨てます。
動作(セキュリティ・オン時)
セキュリティシステムはWebカメラからの動体検知メールを常にチェックしています。
セキュリティ・オンにすると、Webカメラの動体検知メールを転送してくれるようになるのが一番のポイントです。また、ドアにセンサー(リードスイッチ)を付けているので、セキュリティ・オンの間にドアが開閉されると、音声による警告をして一定時間が経過すると、
- 登録されたメールアドレスにメールを送る
- サイレンを点灯
- 大音量ブザーを鳴らす
というアクションをします。また、人感センサーもついており、このセンサーが反応しても同様のアクションをします。
- Webカメラからの動体検知メール転送
家の要所に配置されたWebカメラから、動体検知メールを受信して、転送します。カメラはPlanexのCS-W05Nを使っています。ヤフオクなどで\1,000~\5,000くらいで買いました。古いし安いカメラなので、暗いところで映らないし、動体検知も微妙ですが、長期間の連続利用(数年単位)や屋外の配置(ケースに入れて防水)にも耐えてる結構タフなやつです。
ネットワークカメラ|CS-W05N|PLANEXファームウェアは製造元のものにすると動作が安定します。
EDIMAX – Legacy Products – Network Cameras – Fast Ethernet Dual Mode IP Camera - ドア開閉センサーによるアクション
リードスイッチが接続されており、セキュリティ・オンの間に開閉されると、音声による警告をして、その後にサイレンとブザーで警告して、登録されたメールアドレスに連絡します。 - 人感センサーによるアクション
焦電型赤外線センサーがついていて、セキュリティ・オンの間に検知があると、音声による警告をして、その後にサイレンとブザーで警告して、登録されたメールアドレスに連絡します。 - ボタン、音声、メールによる状況確認、セキュリティ切り替え、確認
ボタンでセキュリティの切り替え、確認ができます。音声でも切り替えが可能です。登録したメールアドレスに”CHECK”という題名でメールを送るとセキュリティ設定状況を、”ON”、”OFF”という題名でメールを送るとセキュリティ設定をON/OFFできます。セキュリティモードを切り替えると登録したメールに切り替えた旨をメールします。 - 帰宅時のセキュリティ切り替え
ドアが開閉されると、音声で「おかえりなさい」と言われ、セキュリティ・オフを促されます。一定時間以内にセキュリティをオフにしないと、警告音声、サイレン、ブザーでアラートを出します。
まとめ
初めてのLチカからここまでよくやったな、という反面、今の私からみても実装の初心者感がものすごいですね。(今でも初心者ですが)プログラムもRubyを覚えたてだったので、酷いものです。それでも実用性のあるものなので、この1号機はバラして部品どりにして2号機を作りたいと思います。「KITTを作る」という目標もリブートしなければ。
自然会話ロボットを作ろう! RaspberryPiとArduinoで作る人工知能
– 07th Jan, 2017 / the 1st edition
うほほ~
最高です。私は、マイカーに喋らせようと勉強を始めました。
是非、弟子にしてください。
しかし、勉強とは程遠く、ARDUINOで始め、サンプルスケッチばかりの状況です。プログラムのイロハもわかりおません。ぜひぜひお教え願います。