2014년 10월 22일 수요일

배터리로 장시간 아두이노 구동시키기

왜 표준 아두이노는 일에 배터리를 먹을 것인가?

Arduino를 사물의 하드웨어 측면에서 베어 ATMEGA로부터 자신을 분리가 (표준 보호막을 사용할 수있게) 폼 팩터, 표준 USB 인터페이스, 전원 조절 및 일부의 LED 야한다. 이제 아두 이노 하드웨어가 좋은 수 있도록 이런 일들 중 일부는 배터리 소모를 죽이고있다 :

당신이 (예를 들어 우노) 표준 아두 이노를 실행하면 이미 15mA 이상을 소비, 단지 거기에 앉아 아무것도하지 않고.일반적인 알카라인 9V 블록은 약 450mAh의 용량을 감안할 때, 이는 약 30 시간 이하 이일 (450mAh / 15mA)에서 배터리 소모를 의미한다.


그렇다면 우리는이에서 가야합니까? 음, 우선 우리는 우리가 배터리 수명을 향상시키고 자하는 경우 알에게 그 현재의 흡입 된 주변 장치의 전원을 제거하기 위해 필요합니다.

이 작업을 수행하는 중, LED가 항상에 부족하고 바람직 아두 이노 미니, 아두 이노 릴리 패드 아두 같은 낮은 대기 전류 변환 칩 MCP1702처럼 (LDO)를 가지고 보드의 USB 인터페이스가없는 정말 베어 아두 이노 (복제) 구입 , Jeenode 또는 RBBB.

나는 이전 글에서 설명처럼 아니면, 빵 보드의 조각에 베어 아두 이노를 직접 구축 (것 많은 사람들이 그것을 좋아 좋아! 17K 전망과 HN에 110 upvotes, 감사들).

소프트웨어 측면에서

소프트웨어 측면에서 우리는 뭔가를해야 : 베어 아두 이노는 이제하지만 여전히 너무 많은 대신> 15mA의 6mA을하고있다.

이것에 대한 해결 방식이있다 : 우리가 조치를 취하거나 또는 센서 값을 읽고 자 할 때 가능한 한 시간 정도 잠을 단지를 해제하기 위해 아두 이노를 넣습니다.

이시 10uA에 가까운 곳, 거의 1000 배 향상 현재 줄일 수 있습니다.

Example Calculation

So for instance you have an analog temperature sensor (mcp9700, 6uA) that you want to read and based on the value either buzz a buzzer or not. What you can now do is put the Arduino to sleep for 10s, the wake up, read the value and shortly 0.5s buzz or not, and put the Arduino to sleep again. Based on this, you might improve the battery time from less than two days to almost three weeks (example 1):
Average current = (10mA*0.5s+16uA*10s)/10.5s = 0.49mA
Battery time = 450mAh/0.49mA = 918 hrs = at least 38 days (worst case: Buzz with every measurement)

Example Code

Putting the Arduino to sleep is really easy with the loseSomeTime function found in the JeeLib libary. See the modified classic blink (example 2) below:
#include <JeeLib.h>  // Include library containing low power functions
int led = 13;
ISR(WDT_vect) { Sleepy::watchdogEvent(); } // Setup for low power waiting

void setup() {                
  pinMode(led, OUTPUT);     
}

void loop() {
  digitalWrite(led, HIGH);
  Sleepy::loseSomeTime(1000);      // Instead of delay(1000); 
  digitalWrite(led, LOW);
  Sleepy::loseSomeTime(1000);      // Instead of delay(1000);
}

댓글 1개:

  1. http://hwstartup.wordpress.com/2013/03/11/how-to-run-an-arduino-on-a-9v-battery-for-weeks-or-months/ 출처

    답글삭제