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);
}

2014년 10월 20일 월요일

서식지 방사능 5W1H

누가:
언제: 1분 이상
어디서: 따로 정리
무엇을: 실내 대기중 방사능 값을
어떻게: 맥북프로+아두이노로, 포터블 맥북배터리 파워를 사용
왜: 내 주변의 방사능 밸류 지도 작성. 및 인터넷 공유

MacBookPro + Mavericks + Arduino Uno + GM Sensor Board + LCD Panel + J308br Geiger Tube






안전하게 들고다닐 방법

집사람이 쿠킹핵 빨간박스를 버려버려서 
투덜댓었는데

캐링케이스를 사용하기로 ...
생각보다 괜챤네~

역시 세상 모든 안좋은 일엔 
더 좋은 일이 기다리고 있기도 하다~ 

아두이노 방사능 측정 소스코드

/* * ------Geiger Tube board (Arduino Code) Example-------- * * Explanation: This example shows how to get the signal from the Geiger Tube * in Arduino, we use one of the Arduino interrupt pins (PIN2). * We count the time (ms) between two pulses of the Geiger tube. * * Copyright (C) 2011 Libelium Comunicaciones Distribuidas S.L. * http://www.libelium.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Version: 0.3 * Design: Marcos Yarza, David Gascon * Implementation: Marcos Yarza */ // include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(3,4,5,6,7,8); // Threshold values for the led bar #define TH1 45 #define TH2 95 #define TH3 200 #define TH4 400 #define TH5 600 // Conversion factor - CPM to uSV/h #define CONV_FACTOR 0.00812 // Variables int ledArray [] = {10,11,12,13,9}; int geiger_input = 2; long count = 0; long countPerMinute = 0; long timePrevious = 0; long timePreviousMeassure = 0; long time = 0; long countPrevious = 0; float radiationValue = 0.0; void setup(){ pinMode(geiger_input, INPUT); digitalWrite(geiger_input,HIGH); for (int i=0;i<5;i++){ pinMode(ledArray[i],OUTPUT); } Serial.begin(19200); //set up the LCD\'s number of columns and rows: lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Radiation Sensor"); lcd.setCursor(0,1); lcd.print("Board - Arduino"); delay(1000); lcd.clear(); lcd.setCursor(0, 0); lcd.print(" Cooking Hacks"); delay(1000); lcd.clear(); lcd.setCursor(0,1); lcd.print("www.cooking-hacks.com"); delay(500); for (int i=0;i<5;i++){ delay(200); lcd.scrollDisplayLeft(); } delay(500); lcd.clear(); lcd.setCursor(0, 0); lcd.print(" - Libelium -"); lcd.setCursor(0,1); lcd.print("www.libelium.com"); delay(1000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("CPM="); lcd.setCursor(4,0); lcd.print(6*count); lcd.setCursor(0,1); lcd.print(radiationValue); attachInterrupt(0,countPulse,FALLING); } void loop(){ if (millis()-timePreviousMeassure > 10000){ countPerMinute = 6*count; radiationValue = countPerMinute * CONV_FACTOR; timePreviousMeassure = millis(); Serial.print("cpm = "); Serial.print(countPerMinute,DEC); Serial.print(" - "); Serial.print("uSv/h = "); Serial.println(radiationValue,4); lcd.clear(); lcd.setCursor(0, 0); lcd.print("CPM="); lcd.setCursor(4,0); lcd.print(countPerMinute); lcd.setCursor(0,1); lcd.print(radiationValue,4); lcd.setCursor(6,1); lcd.print(" uSv/h"); //led var setting if(countPerMinute <= TH1) ledVar(0); if((countPerMinute <= TH2)&&(countPerMinute>TH1)) ledVar(1); if((countPerMinute <= TH3)&&(countPerMinute>TH2)) ledVar(2); if((countPerMinute <= TH4)&&(countPerMinute>TH3)) ledVar(3); if((countPerMinute <= TH5)&&(countPerMinute>TH4)) ledVar(4); if(countPerMinute>TH5) ledVar(5); count = 0; } } void countPulse(){ detachInterrupt(0); count++; while(digitalRead(2)==0){ } attachInterrupt(0,countPulse,FALLING); } void ledVar(int value){ if (value > 0){ for(int i=0;i<=value;i++){ digitalWrite(ledArray[i],HIGH); } for(int i=5;i>value;i--){ digitalWrite(ledArray[i],LOW); } } else { for(int i=5;i>=0;i--){ digitalWrite(ledArray[i],LOW); } } }

방사능 측정 목표장소들

1. 집 거실, 안방, 수연방, 내방, 욕실, 주방
2. 죽도
3. 구도
4. 전곡 석미 모닝.
5. 양평 우하정.