SPRESENSE の Low Power ライブラリをバッテリー給電で試してみた! [SPRESENSE]
前回はUSB給電で試してみたので、今回はバッテリー給電を試してみました。USBの場合は、電圧変換が必要なので、そこで若干ロスが発生するためバッテリー給電なら、さらに消費電力が下がるのではないかと考えた次第です。
バッテリーには、だいぶ前にドローン検討用に購入した1セルのLiPoバッテリーを使ってみます。
バッテリーを装着するにはバッテリー端子にピンをつけなければなりません。最初は給電できなくて焦りましたが、GNDのハンダがきちんとのっていなかったのが原因でした。
GNDはかなりしっかりしていて、熱が伝わりにくく、ハンダのノリが悪くて四苦八苦したのですが、なんとかつけることができました。
電流測定には、前回同様デジボルを電源ラインの間に入れて測定しました。安全のため配線の途中にスイッチをつけておきました。
前回と同じスケッチで測定をしてみました。
測定結果です。156MHz は USB給電よりも消費電流が高い結果となりました。しかし、32MHz以下では、想定通りUSB給電のときよりも若干消費電力が低い結果が出てきました。
次に、一秒のsleep を入れて消費電力がどう変化するか見てみました。シリアル出力は意味がないので省いています。
こちらも 156MHz では若干高い値となっていますが、32MHz以下ではUSB給電よりもよい値が出ています。
LED点滅も試してみました。
やはりLEDは2mA弱消費してしまいますねぇ。SPRESENSE本体が 十数 mA ~ 数 mA ということを考えると無視できないレベルです。
最後に本命のGPS機能を試してみました。前回とは少しコードを変えて測定しやすいように、衛星探索中はLED点灯、捕捉をするとLED消灯するようにしました。
前回と同じく、バッテリー給電でも 32MHz と 8MHz の大きな差は見られなかったので、GPSは 32MHz で使うのがよさそうですね。長い間の積算をとるとそこそこ差は出てくるのかもしれませんが。
今回はがんばってバッテリー用のピンをSPRESENSEにつけてみました!( ー`дー´)キリッ
測定した結果、バッテリー駆動のほうが消費電力という面ではかなり有利という結果が出ました。空ループ時の値を電力値に換算してみました。
32MHz 以下だと消費電力は半減近いです。GPSトラッカーを作るならバッテリ給電が正解ですね!(^^)/~
バッテリーには、だいぶ前にドローン検討用に購入した1セルのLiPoバッテリーを使ってみます。
バッテリーを装着するにはバッテリー端子にピンをつけなければなりません。最初は給電できなくて焦りましたが、GNDのハンダがきちんとのっていなかったのが原因でした。
GNDはかなりしっかりしていて、熱が伝わりにくく、ハンダのノリが悪くて四苦八苦したのですが、なんとかつけることができました。
電流測定には、前回同様デジボルを電源ラインの間に入れて測定しました。安全のため配線の途中にスイッチをつけておきました。
前回と同じスケッチで測定をしてみました。
#include <LowPower.h> //#define LOWPOWER_32MHz //#define LOWPOWER_8MHz void setup() { LowPower.begin(); #ifdef LOWPOWER_32MHz LowPower.clockMode(CLOCK_MODE_32MHz); #elif defined(LOWPOWER_8MHz) LowPower.clockMode(CLOCK_MODE_8MHz); #endif } void loop() { /* do nothing */ }
測定結果です。156MHz は USB給電よりも消費電流が高い結果となりました。しかし、32MHz以下では、想定通りUSB給電のときよりも若干消費電力が低い結果が出てきました。
周波数 | 消費電流 |
156MHz | 9.0 mA |
32MHz | 3.7 mA |
8MHz | 3.1 mA |
次に、一秒のsleep を入れて消費電力がどう変化するか見てみました。シリアル出力は意味がないので省いています。
#include <LowPower.h> //#define LOWPOWER_32MHz //#define LOWPOWER_8MHz void setup() { LowPower.begin(); #ifdef LOWPOWER_32MHz LowPower.clockMode(CLOCK_MODE_32MHz); #elif defined(LOWPOWER_8MHz) LowPower.clockMode(CLOCK_MODE_8MHz); #endif } void loop() { sleep(1); }
こちらも 156MHz では若干高い値となっていますが、32MHz以下ではUSB給電よりもよい値が出ています。
周波数 | 消費電流 |
156MHz | 7.6 mA |
32MHz | 3.6 mA |
8MHz | 3.0 mA |
LED点滅も試してみました。
#include <LowPower.h> //#define LOWPOWER_32MHz //#define LOWPOWER_8MHz void setup() { LowPower.begin(); #ifdef LOWPOWER_32MHz LowPower.clockMode(CLOCK_MODE_32MHz); #elif defined(LOWPOWER_8MHz) LowPower.clockMode(CLOCK_MODE_8MHz); #endif } void loop() { static int led_switch = HIGH; sleep(1); led_switch = (led_switch == HIGH) ? LOW : HIGH; digitalWrite(LED0, led_switch); }
やはりLEDは2mA弱消費してしまいますねぇ。SPRESENSE本体が 十数 mA ~ 数 mA ということを考えると無視できないレベルです。
周波数 | 消費電流(LED無灯) | 消費電流(LED点灯) |
156MHz | 7.6 mA | 9.5 mA |
32MHz | 3.6 mA | 5.6 mA |
8MHz | 3.1 mA | 5.0 mA |
最後に本命のGPS機能を試してみました。前回とは少しコードを変えて測定しやすいように、衛星探索中はLED点灯、捕捉をするとLED消灯するようにしました。
#include <GNSS.h> #include <LowPower.h> //#define LOWPOWER_32MHz //#define LOWPOWER_8MHz static SpGnss Gnss; void setup() { LowPower.begin(); #ifdef LOWPOWER_32MHz LowPower.clockMode(CLOCK_MODE_32MHz); #elif defined(LOWPOWER_8MHz) LowPower.clockMode(CLOCK_MODE_8MHz); #endif sleep(3); Gnss.begin(); Gnss.select(GPS); Gnss.select(GLONASS); Gnss.select(QZ_L1CA); Gnss.select(QZ_L1S); Gnss.start(COLD_START); } void loop() { if (!Gnss.waitUpdate(-1)) return; SpNavData NavData; Gnss.getNavData(&NavData); if (NavData.posFixMode == FixInvalid || NavData.posDataExist == 0) { digitalWrite(LED0, HIGH); } else { digitalWrite(LED0, LOW); } sleep(1); }
前回と同じく、バッテリー給電でも 32MHz と 8MHz の大きな差は見られなかったので、GPSは 32MHz で使うのがよさそうですね。長い間の積算をとるとそこそこ差は出てくるのかもしれませんが。
周波数 | 消費電流 |
156MHz | 13.0 - 14.5 mA |
32MHz | 5.7 - 6.8 mA |
8MHz | 5.6 - 6.3 mA |
今回はがんばってバッテリー用のピンをSPRESENSEにつけてみました!( ー`дー´)キリッ
測定した結果、バッテリー駆動のほうが消費電力という面ではかなり有利という結果が出ました。空ループ時の値を電力値に換算してみました。
周波数 | USB給電(5.0V) | バッテリ給電(3.7V) |
156MHz | 44 mW | 33 mW |
32MHz | 23 mW | 13 mW |
8MHz | 20 mW | 11 mW |
32MHz 以下だと消費電力は半減近いです。GPSトラッカーを作るならバッテリ給電が正解ですね!(^^)/~