Qduinoを使ってLi-ionバッテリーの残量を調べてみた

# はじめに
IoTデバイス開発をやっていると、(特にモバイル用途で)**バッテリー**は欠かせない存在になってくるのですが、Li-ionバッテリーを使うと**残量**が気になります。
スマホだと残量が画面右上に出てたりするんですが、バッテリーが切れたら静かにお亡くなりになるデバイスは悲しいので、Li-ionバッテリーの残量を計測できるチップ「*MAX17048*」を搭載した**Qduino Mini**を動かしてみました。
<img width="189" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/52bb4ec2-fdb2-d144-1709-6f78a07e3978.png">

# 用意するもの
- Qduino Mini
- MicroUSBケーブル
- Li-ionバッテリー
- ArduinoIDE
- パソコン

# やってみた
とりあえず、SparkfunのDocumentってところに、Quickstartのリンクがあったので、これを頼りに進めていきます。
[Qduino Mini Quickstart Guide](https://www.hackster.io/team-qtechknow/qduino-mini-quickstart-guide-8b2d68?ref=platform&ref_id=6047_trending___&offset=0)

ちなみに、QduinoのMicroUSBは、給電・充電・通信が行えるようです。

## 接続
USBを繋ぐと、いきなりLEDがピカピカ光ります！
結構まぶしい。
<img width="161" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/82f484c8-3c4a-64b0-4772-fd9633b22261.png">
上に置いてあるのが今回検証したいLi-ionバッテリー。この時点で残量不明。

PC側はデバイスのインストールダイアログが出ますがとりあえず無視。。

## ArduinoIDEにボードを追加する
いきなりQuickstartに裏切られました。
```https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json```
を追加すると、ボードマネージャに```Qtechknow Boards```が出てくると書いてありますが、出てきません。。

おそらくと思って、こちら(SparkFun AVR boads)をインストールしてみます。
<img width="379" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/78b239cf-711d-16d1-d722-884677282cfb.png">

きました。
<img width="144" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/b43b18ef-5058-45ca-95f6-c2523dc3e7d0.png">

## ドライバのインストール
２度目の裏切りです。
> Step 2.5 (Windows users only) - Signed driver
>
> Navigate to \Arduino15\packages\Qduino Mini\hardware\avr\1.0.6\ and install the signed drivers like below:

謎のディレクトリを指定されていて見つかりません。。
ググった結果下記にあるようです。
https://github.com/sparkfun/Arduino_Boards/tree/master/sparkfun/avr/signed_driver

早速落として、ドライバをインストールします。
<img width="410" alt="キャプチャ (1).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/cfd6212f-03d4-af88-8b01-048e9ffb9b0d.png">

認識した様子。
<img width="234" alt="キャプチャ (2).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/d431c40c-6e85-064c-db63-92c2a061b725.png">

私のPCではCOM4に接続されているようなので、ArduinoIDEからボードとシリアルポートを選択しておきます。
<img width="267" alt="キャプチャ (3).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/29dac3ab-ec34-63f2-3c3c-329989ffcf30.png">

## サンプルスケッチ rgbLED を動かしてみる
Quickstartのキャプチャとちょっと違うけど、rgbLEDを選んでみます。
<img width="359" alt="キャプチャ (4).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/827a5017-cb3c-570c-f03e-4ba89fe049bd.png">

マイコンボードに書き込む。
<img width="222" alt="キャプチャ (5).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/a5e75109-0f62-682a-db73-bff06a0f4f1a.png">

光り方が変わった！
<img width="395" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/96fe7e1b-3504-d4ef-8357-90b7901d15d6.png">

わかりづらいですが、紫色に光ってます。
というか、レインボーに光るみたい。

## サンプルスケッチ fuelGauge を動かしてみる
お待ちかねのバッテリー残量表示を試してみます。
<img width="358" alt="キャプチャ (6).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/1bd5cbf9-9edb-3f31-62d2-eb9bac8f98cb.png">

fuelGaugeをマイコン転送します。

シリアルモニタで確認。
まだLi-ionバッテリー繋いでないけど104%とか出てる。。
<img width="373" alt="キャプチャ (7).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/fcb34613-7358-3cb5-9a61-b07448175eae.png">

気を取り直して、バッテリーを繋いでみます。
<img width="378" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/8817735f-2140-e9fd-34fd-273c62905818.png">
LEDは勝手に光ってますね。

シリアルモニタを見てみると。。
<img width="372" alt="キャプチャ (8).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/f1f9d8fe-0c08-9c29-2025-bd78857ebb4e.png">
お。77%が取れてます！

少し待つと。。
<img width="374" alt="キャプチャ (9).PNG" src="https://qiita-image-store.s3.amazonaws.com/0/165224/29d20f04-924a-3fea-7e67-73bc7edd0d4d.png">

徐々に値が増えてきました。充電はされているようですね。
ただ、78%と79%が混在しています。

小数以下四捨五入されているのか、単純に整数化したときのセンサーの誤差か。。
「○○%以上なら～」の条件で場合分けする時は要注意と思われます。

# まとめ
QduinoはArduino互換でAtmelのATmega32を搭載しています。
Li-ionバッテリーをそのまま繋ぐことができるPHコネクタソケットを搭載していて、充電＆残量計測までできます。
持ち運びできるIoTデバイスの開発が捗りますね！

# 次回
「RaspberryPiからQduinoのMAX17048に直結させて、Node.jsで残量を取得する」（ほんとはこれがしたかった）
乞うご期待！