mbed HRM1017で忘れ物防止デバイスを作った話

この記事はmbed Advent Calendar 2016の17日目の記事です。

mbed Advent Calendar 2016 - Adventar


mbed祭り2016 @秋の虎ノ門

2ヶ月ほど前になりますが、mbed祭りで5分間のLT枠をいただき、mbedで作った忘れ物防止デバイスについて話してきました。似たような時間制限のあるプレゼンは何回かやったことはありますが、大勢(しかもほとんど知らない人)の前で話す機会はあまりないので、できてよかったと思います。 また、気がついたらTwitterに写真を上げられていたので初めてTwitter上で顔を晒すことになりましたw

https://twitter.com/mbed_fest/status/784661025035386880

LT用のスライドはdeveloper.mbed.orgに置いてあります。下記ページからpdfでダウンロードできます。

mbed祭り2016 @秋の虎ノ門 「mbed HRM1017で忘れ物防止デバイスを作った話」LT

忘れ物防止デバイス

ここからは作品の紹介です。スライドよりも少し詳しく書いていきます。

一言で言うと、「忘れ物を音や光、スマホの通知で教えてくれる」デバイスです。 忘れそうなものに取り付ける「タグ」とAndroidスマートフォンにインストールするアプリの二つで構成されています。

[caption id="attachment_282" align="alignnone" width="788"]忘れ物防止デバイス - タグ 忘れ物防止デバイス - タグ[/caption]

[caption id="attachment_284" align="alignnone" width="260"]忘れ物防止デバイス - Androidアプリ 忘れ物防止デバイス - Androidアプリ[/caption]

基板上にジャンパが飛ばしてあるのは気にしないでください。電源線を1本わすれていただけです…

ハードウェアの話

この記事ではハードウェア側を詳しく書いていきます。mbedアドベントカレンダーだから、と言うこともありますが、実際はチーム開発なのでAndroid側をほとんど触っていないからと言う理由が大きいです。

[caption id="attachment_286" align="alignnone" width="788"]チーム開発なのでハードのことしかわかりません - LT資料10ページ目より チーム開発なのでハードのことしかわかりません - LT資料10ページ目より[/caption]

電池持ちを良くする

このデバイスは電池で動くものなのでやはり電池持ちは良くないと困ります。電池持ちを良くするためには、マイコンやRF回路など電力を食うものをできるだけ寝かしておくことも必要ですが、電池から効率よく必要な電源を生成することも必要です。

マイコンやRF回路をいかにスリープにして電力を抑えるか、という話はFirmware側なので置いておいて(友人に任せていたので本当にわからん)、電源回路の話をします。

[caption id="attachment_288" align="alignnone" width="788"]HRM1017はLDOモードです - LT資料11ページ目より HRM1017はLDOモードです - LT資料11ページ目より[/caption]

まず前提として、HRM1017の内部のSoCであるnRF51822のコアは1.8Vで動作します。外部から供給する電源は3.3Vがほとんどですので、その場合は内蔵のLDOレギュレータやDC/DCコンバータで1.8Vを作っています。

これを見分けるにはmbed-srcから該当するコードを探せばいいのですが、めんどくさいので簡単な実験を行いました。電流を測定しながら3.3Vから徐々に電圧を落としていくというものです。LDOモードなら電流は変化せず、DC/DCモードなら電流は大きくなっていくことが考えられますが、実験では電流が変化しないことが確認できた(具体的なデータは取っていないです)のでLDOモードであると判定しました。

LDOモードであるとわかったので、電源は外部で1.8Vを生成して供給することにしました。リポ電池から1.8Vを生成するDC/DCコンバータ回路です。上のタグの写真のUSBコネクタとHRM1017の間にあるインダクタやICがその回路になります。

ピンヘッダなしでの書き込み

完成品はできるだけ小さくしたいと考えていたので、プログラム書き込み用のピンヘッダは邪魔だと思いました。書き込み用ピンヘッダを取り除くためには、あらかじめマイコンにプログラムを書き込んでおいて実装するという方法もありますが、HRM1017はBGAなのでそれも難しいです。さらに、その方法だと一度実装してしまうと書き換えが難しくなってしまいます。

そこで、今回は基板側にパッドを設けて、そこにポゴピンを押し付ける方法を採用しました。今回使用したポゴピンはAitendoで売っているテストプローブ [AKI-P50D2]です。

[caption id="attachment_289" align="alignnone" width="788"]ポゴピンを利用したライタ ポゴピンを利用したライタ[/caption]

3Dプリンタで出力した枠によって、ポゴピンがパッドに正確に押し付けられるようになっています。USBコネクタ等を考慮するのを忘れていたので半田ごてで融かして削っています…

[caption id="attachment_290" align="alignnone" width="788"]タグへの書き込みの様子 タグへの書き込みの様子[/caption]

作って書き込みした後に気づいたのですが、BLE経由でOTA-DFUできるので書き込み用治具の出番はあまりなかったのかもしれません。でも、UARTも引き出してあったのでデバッグには役に立っていたみたいです(自分はFirmware書いてないのでデバッグしてない)。

そのほか細かい話

  • この作品でYahoo!JAPANと我が東京高専が主催のHACK U 東京高専で技術賞を頂きました。副賞がTポイント5,000円分!
  • 電池持ちについて上で熱く語っていましたが、実際にどれくらい電池が持つのかどうかは測定していません。HACK Uまで時間がなかったのでそんなことやってられなかった()
  • 記事の最初で引用している、mbed祭り実行委員会さんのツイートですが、「ぐり」の顔が写っているということで、他のツイートより伸びてます。つらい。
  • 顔をフリー素材化・オープンソース化されそうになりましたが、GPLライセンスであると宣言しました。クソコラを作ったら、商用非商用問わず(非商用でお願いします)GPLライセンスを継承し、公開してください。今のところクソコラはありません。作らないでください。

最後に

半分有益、半分無駄、といった感じの内容でしたが、どなたかの電子工作等の役に立てたらいいなと思います。この「忘れ物防止デバイス」は1年前ぐらいに作ったものです。今はHRM1017単体は出回ってないみたいですね。

最後までお読み頂きありがとうございます。明日はen129さんです。期待しています。