CategoryARM

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

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

mbed Advent Calendar 2016 – Adventar


mbed祭り2016 @秋の虎ノ門

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

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

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

忘れ物防止デバイス

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

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

忘れ物防止デバイス - タグ

忘れ物防止デバイス – タグ

忘れ物防止デバイス - Androidアプリ

忘れ物防止デバイス – Androidアプリ

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

ハードウェアの話

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

チーム開発なのでハードのことしかわかりません - LT資料10ページ目より

チーム開発なのでハードのことしかわかりません – LT資料10ページ目より

電池持ちを良くする

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

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

HRM1017はLDOモードです - LT資料11ページ目より

HRM1017はLDOモードです – LT資料11ページ目より

まず前提として、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]です。

ポゴピンを利用したライタ

ポゴピンを利用したライタ

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

タグへの書き込みの様子

タグへの書き込みの様子

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

そのほか細かい話

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

最後に

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

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

aitendoで特価1000円だったTFTモジュールを試食1

こんにちは、ぐりです。前回、iPhone5sを脱獄しましたけど、入獄しました。修理してもらいました。入獄してればわからないんですかね。というわけで、入獄生活を送ってますが、意外と不自由じゃなかったり。

さて、8/1(金)に雑学追究室のやつらが浜松からわざわざ東京に遊びに来たので、テスト期間中で結構やばいぐりも午後から合流しました。アルバイトの給料も入ったので、せっかくだからARMマイコンに手を出してみようと思ったので、秋月電子通商でLPC1769評価ボードを買ってきました。

LPC1769

こいつ、なかなかすごくて、秋月で3000円なのに、いろんなインターフェースがついてて面白いんです。例えば、Ethernet。秋月のパルストランス内蔵のRJ-45ジャックを配線するだけで、Ethernetに接続できちゃいます。外付け部品は一切不要。さっそく、サンプルプログラムを動かしてみましたが、DHCPクライアントとかも動かせるようで、IoTなものづくりで重宝しそうです。これからは、AVRと並行して、ARMのほうもいじっていきます。

そして、雑追の馬(通称、雑学追究室K)がAitendoに行ってみたいとか言い出したので、勘を頼りにAitendoに向かいました。俺以外Aitendoに行ったことがなかったみたいで、しかも、勘で進むから心配だったみたいです。Aitendoの直営店は、現在、新店舗を作っている最中であり、旧店舗になる直営店では、在庫処分のセールが行われてました。非常に魅力的なものが50%オフでかなりお得だったので、ついついいろいろ買ってしまいましたw

その中の1つが、今回取り上げるTFT液晶モジュールです。こいつは定価1980円ぐらいのところ、セールで1000円で買えました。Kとかも買ってたと思うよ。240x320pixelのQVGAで、画面サイズは2.4inch、タッチパネルとSDカードスロットもついていたので、これは買うしかない!と思って買ってしまいました。型番は、M024C9320TPで、液晶のコントローラはILI9320がのってる、と書いてありました。

ARMマイコンにもなれ、手元にあった7segLEDでGPIOの操作の方法をつかんだら、さっそくつないでみることにしました。が、やっぱり、データシートは英語なんですね。英語のデータシートは読めなくはないですが、ちょっと読んでると飽きてきちゃったりするんで、精神的にはあまりよくなかったりします。いろいろなサイトからサンプルプログラムをかき集め、最初にDeviceCodeを読み取ってみることにしました。

ILI9320のDeviceCodeは0x9320です。もちろん、その値が読み取れることを期待して、プログラムを書きましたが、何と、取得できた値は、0x1505でした。あれ、って思ったので、ビット列を並び替えてみたりしましたが、絶対に合わないんです。そして、0x1505で検索してみたら、ありました。ルネサス社のR61505Uというコントローラです。なんだよ、Aitendoのホームページに嘘書いてあるじゃん、とか思いましたが、調べてみると、ILI9320と一部互換性がある、ということでした。一部といわれても、どの部分かわからないので、しっかり、R61505Uって書いておいてほしかったですね。

というわけで、その型番でサンプルプログラムを探し、それを写すように初期化ルーチンを書いてみましたけど、うまくいってるのか、わからないです。ロジアナがあれば、どういうデータが流れてるか一目でわかるんだけどな。まあ、初期化しただけじゃ目立った表示の変化はないので、もしかしたら、初期化がうまくいってるのかもしれないですけど、黒く塗りつぶす処理がうまくいってないので、どっちにしろ駄目なんです。誰か、LPC1769のサンプル持ってたらください。一度も触ったことないPICのソースを勘で読んでみたりしても、よくわからんレジスタに書き込んでたりするんで、お手上げです。データシート見ろよってことなんでしょうけど。

相変わらず、進捗のほうはダメダメです。液晶のほう、進捗があったら、2として更新したいですけど、更新できるのかな。クロックが早すぎて追いついてないんじゃない?っていうことも思ったので、Arduinoでも試してみるかもしれません。では、よい進捗を願って。

最後まで読んでいただきありがとうございました。何か情報があったらコメントください。