HACK DAY 2018にて製作した作品「OH!MAMA 見ないで」の技術解説です。
「OH!MAMA 見ないで」概要
作品概要
「OH!MAMA 見ないで」はHACK DAY 2018にて制作した作品です。
この作品は「自室で誰にも見られずに1人の時間を楽しんでいる時に限って、ママが部屋に入って来てしまって困る。突然部屋に入ってくるママにパソコンの画面を見られたくない。」、そんな問題を解決するガジェットです。
機能
総合的なママの脅威に対応するべく、3つの機能を持たせました。
【1】ドアの開閉を検知し、パソコンの画面を瞬時に健全な画面に切り替える
開閉センサを用いることによってママが部屋のドアを開けたことを検知し、無線通信でパソコンの画面を瞬時に健全な画面に切り替えます。
【2】背後にママが来たことを検知し、パソコンの画面を瞬時に健全な画面に切り替える
人感センサを用いることによってママが自分の背後に迫っていることを検知し、無線通信でパソコンの画面を瞬時に健全な画面に切り替えます。
【3】パソコンに触れられていることを検知し、スマートフォンにアラートを表示する
ジャイロセンサを用いることによって、自分がいない隙きにママがパソコンの中身を物色しようとしていることを検知し、無線通信でスマートフォンにアラートを表示します。
3つの機能はボタンを押すことで切り替えることができます。
特徴
この作品の特徴は、ママの脅威に対応する上記3つの機能を1つのモジュールにまとめた「オールインワン & コンパクト」な点です。
ハードウェア技術
それではハードウェアの技術についてご紹介します。ハードウェア設計及び製作は自分の担当でした。
中枢部:ESP32
ESP32-WROOM-32D Wi-Fi + BLEモジュール
売り上げランキング: 176,343
HiLetgo® ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード
売り上げランキング: 750
「ESP32」というのはマイコンモジュールの名称でして、最近見聞きすることが多くなりました。こちらのモジュールはWi-FiとBluetooth機能を搭載しておりながら、とても安価に入手できます。今回はBluetoothの通信機能を採用し、パソコンを遠隔操作することにしました。
また、「OH!MAMA 見ないで」に搭載するセンサ類の情報を取得する役割もESP32が行います。
今回は評価基板ではなくESP32モジュールを単体で用いたため、プログラムの書き込み回路に苦慮しました。Arduinoの単体書き込みと同様だと勘違いしていたために手惑いました。
また、Arduino的にAnalogReadを使いたいためにADCのポートにセンサを繋いだにも関わらず、正常に動作しないポートがありました。内部でポート設定がバッティングしているのかもしれませんが、ハッカソン会場でその原因追求の余裕がなかったため、その場では他のポートを使用しました。この問題の解明は今後したいと思います。
使用部品:ESP-WROOM-32D
センサ:ホール素子
ホール素子はドアの開閉センサとして使ったものです。ホール素子は磁力に反応する性質があるため、ドアに磁石を付けておけばドアの開閉によってホール素子に対する磁力が変わることによってドアの開閉を検知できます。
※実はホール素子を使うことが初めてで、ハッカソン会場で「どうやって使うのこれ。あれ?動きがおかしいな。」みたいなことをしておりました。この点リードスイッチの方が単純ですね。
使用部品:SK8552G-G03-K
センサ:焦電型赤外線センサ
焦電型赤外線センサは後方のママを検知するセンサとして使ったものです。人間が出す赤外線に反応するセンサによって、人間の存在を検知することができます。
使用部品:EKMB1301111K
センサ:ジャイロセンサ
ジャイロセンサはパソコンに触れられていることを検知するセンサとして使ったものです。ジャイロセンサは角速度を取得できるため、この情報を利用してパソコンに触れられている(パソコンが動いている)ことを検知することができます。
使用部品:秋月電子小型圧電振動ジャイロモジュール(ENC-03RC/D)
バッテリーモジュール
「OH!MAMA 見ないで」は有線での給電無しに、バッテリー駆動する方針にしました。バッテリー駆動する方法として、今回は市販のモバイルバッテリーを分解して使いました。市販のモバイルバッテリーですので、USBによる充電及び給電ができます。
※バッテリーはドン・キホーテで在庫処分セールしていたものを購入。
電源回路
USBは5V出力に対しESP32は3.3V駆動のため、レギュレータを入れる事によって電源をつくりました。
ESP32が電波を発する際に瞬間的に500mAを使用するという情報がありましたので、通信時に電源が揺れることを危惧してESP32の周囲にコンデンサを増量しました。(しかしコンデンサ足りなかったかも…。)
使用部品:ADP3338AKCZ-3.3 (少しばかりリッチなレギュレータ)
基板への実装
今回は作品をなるべく小型にしたいためにESP32のモジュールをそのまま用いました。ピンが1.27inchピッチの端面スルーホールとなっておりましたので1.27inchピッチのユニバーサル基板を用い、ショートに気をつけながらハンダ付け作業を行いました。小型化したいがために、全て面実装としてハンダ付けを行いました。リード部品も表面実装出来るように加工しました。
また、電波干渉やセンサの動作状況を考えて配置・配線を行いました。特に電波干渉が怖いため気をつけました。
ソフトウェア技術(ESP32ファームウェア)
ファームウェア担当は@hito_horobe
ファームウェアをプログラムする際には、Arduinoライクに使える開発環境を採用しました。Arduino IDEにESP32の環境を組み込んで、コンパイル及び書き込みをすることができます。
基本的にはセンサ情報を読み取り、その情報に応じてBluetoothでシリアル通信するという作りです。
Bluetoothの接続に関しては、ESP32の公式ライブラリを使いました。Arduinoの一般的なUARTと同様の感覚で使うことができます。
センサに関しては今回はマイコンの割り込みまで手が回らず、全てポーリングにて行っています。また、低消費電力とするためにESP32を定常時はスリープモードで動かす処理も検討しておりましたが、ここにも手が回りませんでした。
その他、スイッチのチャタリング対策等の基本的なプログラムに関しては対応しました。
Arduinoをはじめよう 第3版 (Make:PROJECTS)
オライリージャパン
売り上げランキング: 1,715
ソフトウェア技術(Mac及びAndroidフォン)
ソフトウェア(アプリ)担当は@TKYMX83
今回のプレゼンのデモではMacの画面切り替えのみの実演でしたが、パソコンを触られていることを検知してスマートフォンにアラートを通知する機能も実装しました。
MacもAndroidもBluetooth機器としてESP32を認識できますので、そこからシリアル通信の内容を読み取り画面を制御しました。
Macの画面遷移プログラムについては、Xcode上でSwiftを使って開発しました。こういったMac上のアプリケーションをCocoa Applicationというそうです。処理の流れとしましては、シリアルで受信した情報をテキストとして出力し、その情報をもとにママが来たことを知らせる信号を受信した際に画面を遷移するということをしています。
AndroidアプリはAndroid Studioにて開発しました。処理はMacのプログラムと同様です。
Swift Macアプリ開発入門―次世代iOS、macOSプログラマーのための
カットシステム
売り上げランキング: 418,784
基礎&応用力をしっかり育成! Androidアプリ開発の教科書 なんちゃって開発者にならないための実践ハンズオン (CodeZine BOOKS)
翔泳社
売り上げランキング: 48,959
ケースに入れて完成
最後にプラ板でケースを作って収めました。今回は拘りでケースをプラ板で一から作りましたが、プロトタイプとしてはタカチのケースを使っても良かったかもしれません。
トラブル事例
ハードウェア故障のトラブル
なんと本番2,3時間前にハードウェアが故障しました。それも電源故障。これでは回路が動きません。(OH…MAMA…)
バッテリーの5V昇圧を行っているであろう制御ICから煙が上がりました。
しかしプレゼン本番が迫るため、今回は応急処置として別のバッテリーを外付けすることで動かすことにしました。
故障の原因はESP32が急激に電流を引っ張ることだろうかと仮説を立てていますが、今のところ究明できていません。コンデンサをさらに増量していればよかったかもしれません。
電波干渉のトラブル
プレゼン本番では、多くのチームがステージ上でのデモに失敗しておりました。特に音声を取得するシステムは、ステージ上のノイズが多々あるシチュエーションでは大変厳しい状況だったと思います。
自分のチームも危うくデモを見せられないトラブルに陥りました。(せっかくデモの練習したのに)
その原因は電波干渉です。
自分たちのプレゼン準備のためにステージ裏に入って、「OH!MAMA 見ないで」とMacをBluetoothで接続しようとしたところ、MacのBluetooth機器一覧に全然表示されないのです。というのも、あの会場は人も多く、Wi-Fi/Bluetoothと電波が飛び交っていてMacがなかなか「OH!MAMA 見ないで」を見つけられません。
MacのBluetooth機器一覧では、「通知止まんねぇwww」さながらにBluetooth機器が出ては消え出ては消えを繰り返していました。
このトラブルを解決するために、プレゼンの休憩時間を利用して一度会場外に出てBluetoothを接続しました。これでなんとかプレゼン本番でデモを成功させることができました。
以上、「OH!MAMA 見ないで」の技術解説でした。
「本番」というのは往々にしてトラブルはつきものなもので、今回のHACK DAYを通して色々と勉強になりました。限られた時間の中で作業をしなければないない状況で、反省点は多々見つかりました。前述の電源故障の件なども、今後原因を究明して次につなげたいと思っています。
次回のHACK DAYに向けて精進します。
コメント