Sony Spresense ボードでバッテリー電圧を取得する方法が分かったので共有します!
LowPower ライブラリ
Spresense Arduino の LowPower
ライブラリの中に getVoltage()
関数を見つけました。
/**
* @class LowPowerClass
* @brief This provides the features fo the power saving
*
*/
class LowPowerClass
{
public:
/**
* @brief Get the sensed battery voltage on CXD5247
* @return sensed voltage [mV]
*/
int getVoltage(void);
};
使い方はこれだけです。単位ミリボルトの値が返ってきます。
#include <LowPower.h>
int mvolt = LowPower.getVoltage();
回路図
ハードウェア設計資料 から Spresense メインボードの回路図をみると、
VBAT_VS
すなわち ACP_PWR
の電圧が取れるようです。
もう少し回路図を追っていくと、
① USB から電源供給するパスと、② Battery から供給するパスの 2 系統がありました。
- ① USB から電源供給する場合、
ACP_PWR
は LDO を介して常時 4V になります - ② Battery 供給の場合は、そのままバッテリーの電圧値が読み取れそうです
Battery 供給とは メインボードに対する外部電源の供給方法 に書いてある方法です
実験
220mAh程度の小型バッテリーをつないで、取得した電圧を定期的に Ambient に送信します。
LTE 拡張ボードを使って Ambient に送信してみた結果です。
Wi-Fi add-onボードを使って Ambient に送信してみた結果です。
iS110BのWi-Fi add-onボードの結果はこちらです。
良い感じにバッテリーの電圧カーブが取れました。バッテリー接続でもちゃんと動作してそうです。
今回はLTEもWiFiも常時ONで通信しているケースなのでバッテリーの持ち時間は 5~7h程度でしたが、次回はそれぞれ省電力モードに入れてどれくらいバッテリーが持つのか確認してみようと思います。
参考
Ambient へ送信するライブラリはここにあるものを使わせて頂きました。
https://github.com/TE-YoshinoriOota/Ambient_SpresenseLTEM
https://github.com/tomorrow56/SPRESENSE_ESP8266