AIカメラを作ってみましたが、メインボードとカメラの消費電力が気になったので、早速測定をしてみました。今回もリポバッテリを直接つないで測定しています。





スケッチは次の4パターンで測定してみました。スケッチはこの記事の末尾に掲載していますので、参考にしてください。


  • カメラのストリーミング(320 x 240)だけを行うスケッチ

  • カメラで定期的に静止画(1280x960)を撮るだけのスイッチ(SDカードには記録しない)

  • カメラのストリーミング(320 x 240)をしながら定期的に静止画(1280x960)を撮るスケッチ

  • カメラをDeepSleepしながら定期的に静止画(1280x960)を撮るスケッチ



  • 気になる測定結果は次のようになりました。写真のように測定装置は市販のテスターを使っていますので精度はよくありません。だいたいの傾向を掴む程度にご利用ください。


    条件消費電流

    @156MHz / Streaming (320x240)70mA

    @32MHz / Streaming (320x240)65mA

    @156MHz /takePicture (1280x960)6mA (Sleep時)

    @156MHz /takePicture (1280x960)90mA (撮影時ピーク電流)

    @32MHz /takePicture (1280x960)3.6mA (Sleep時)

    @32MHz /takePicture (1280x960)85mA (撮影時ピーク電流)

    @156MHz / Streaming (320x240)+ takePicture (1280x960) 70mA (Streaming時)

    @156MHz / Streaming (320x240)+ takePicture (1280x960) 90mA (撮影時ピーク電流)

    @32MHz / Streaming (320x240)+ takePicture (1280x960) 65mA (Streaming時)

    @32MHz / Streaming (320x240)+ takePicture (1280x960) 85mA (撮影時ピーク電流)

    @156MHz /takePicture (1280x960)380uA (DeepSleep時)

    @156MHz /takePicture (1280x960)90mA (撮影時ピーク電流)

    @32MHz /takePicture (1280x960)380uA (DeepSleep時)

    @32MHz /takePicture (1280x960)85mA (撮影時ピーク電流)




    撮影時電流はピーク時の値です。撮影時間は1.5秒弱でした。撮影時に消費される電流の総和は単純増加減少していると考えると1回の撮影に消費される電流は Ah 換算で、(( 1.5 sec x 90mA ) ÷ 2 ) / (60 sec * 60 min) = 18 uAh といったところです。ピーク電流さえ供給できれば長時間もちそうですね。

    いろいろ部品をとれば、もっと電力を減らすことはできそうですが、これでもかなりの省電力カメラと言えるでしょう。(ラズパイと比べたら特に)

    次はタイムラプスカメラを作ってみて、どれだけもつか試してみようかな。
    ( ・∇・)



    #include < Camera.h >

    #define DEEP_SLEEP
    //#define LOWPOWER_32MHz
    //#define STREAMING
    #define TAKE_PICTURE

    #define SLEEP_TIME 5

    #if defined(DEEP_SLEEP) || defined(LOWPOWER_32MHz)
    #include < LowPower.h >
    #endif // DEEP_SLEEP || LOWPOWER_32MHz


    #ifdef STREAMING
    void CamCB(CamImage img) {
    if (img.isAvailable()) {
    Serial.println(".");
    }
    }
    #endif

    unsigned long ptime = 0;

    void setup() {
    Serial.begin(115200);
    Serial.println("bootup");

    #if defined(DEEP_SLEEP) || defined(LOWPOWER_32MHz)
    LowPower.begin();
    Serial.println("Low Power begin");
    #ifdef LOWPOWER_32MHz
    LowPower.clockMode(CLOCK_MODE_32MHz);
    Serial.println("Clock mode : 32MHz");
    #endif
    #endif // DEEP_SLEEP || LOWPOWER_32MHz

    #if defined(DEEP_SLEEP) || defined(STREAMING)
    ptime = millis();
    theCamera.begin();
    Serial.println("Camera begin @setup");
    #ifdef STREAMING
    theCamera.startStreaming(true, CamCB);
    Serial.println("Start Streaming");
    #endif // STREAMING
    #endif // DEEP_SLEEP || STREAMING
    }


    void loop() {

    #ifdef TAKE_PICTURE
    #if !defined(DEEP_SLEEP) && !defined(STREAMING)
    ptime = millis();
    theCamera.begin();
    Serial.println("Camera begin @loop");
    #endif // !DEEP_SLEEP || !STREAMING
    theCamera.setStillPictureImageFormat(1280 ,960 ,CAM_IMAGE_PIX_FMT_JPG);
    CamImage img = theCamera.takePicture();
    if (img.isAvailable()) {
    Serial.println("take picture");
    }
    #ifndef STREAMING
    theCamera.end();
    ptime = millis() - ptime;
    Serial.println("Camera end (processing time: " + String(ptime) + " msec");
    #endif // !STREAMING
    #ifdef DEEP_SLEEP
    Serial.println("Go to deep sleep in " + String(SLEEP_TIME) + " sec");
    LowPower.deepSleep(SLEEP_TIME);
    #else
    Serial.println("Go to sleep in " + String(SLEEP_TIME) + " sec");
    sleep(SLEEP_TIME);
    #endif // DEEP_SLEEP
    #endif // TAKE_PICTURE
    }





    SONY SPRESENSE メインボード CXD5602PWBMAIN1

    • 出版社/メーカー: スプレッセンス(Spresense)
    • メディア: Tools & Hardware



    SONY SPRESENSE カメラモジュール CXD5602PWBCAM1

    • 出版社/メーカー: スプレッセンス(Spresense)
    • メディア: Tools & Hardware