메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

에너지 부문에서 오픈 소스 하드웨어 및 소프트웨어로 데이터 로깅

태양 전지판, Arduino, PHP, MySQL 및 Flotr

Colin Beckingham , 리랜서 연구원, 프리랜서
Colin Beckingham은 캐나다 온타리오에 거주하는 프리랜서 연구원이자 작가이며 프로그래머이다. 킹스턴의 Queen's University와 University of Windsor에서 학위를 받았고 은행 업무, 원예, 경마, 교육, 공무원 행정 업무, 소매 및 여행과 관광 업종을 포함한 다양한 분야에 종사해왔다. 데이터베이스 애플리케이션과 다양한 신문, 잡지 및 온라인 기사의 저자이며, 관심 연구 분야는 오픈 소스 프로그래밍, VoIP 및 Linux용 음성 제어 애플리케이션이다. Colin의 이메일 주소는 colbec@start.ca이다.

요약:  태양열 발전의 맥락에서 Arduino로 간단한 기후적 조건을 모니터하는 방법을 살펴봅시다. 특히, TMP36 칩으로 감지하는 기본 온도와 발광 다이오드(LED)로 감지하는 일광에 대한 소개를 읽고 향후 검색을 위해 정보를 저장합니다. 그 다음에 데이터 프로세서로 PHP, 스토리지로 MySQL® 및 차팅 라이브러리로 Flotr을 사용하여 선택한 결과를 고르게하여 차트에 표시합니다.

기사 게재일:  2011 년 10 월 17 일
난이도: 중급 원문:  보기 PDF:  A4 and Letter (178KB | 16 pages)Get Adobe® Reader®
페이지뷰:  1115 회
의견:  


개요

발전이 더 깨끗하고 스마트한 원천으로 이동하면서 소형 태양광 패널 배열은 지붕과 뒤뜰에서 나타나고 있다. 이러한 일부 설치는 모니터링과 자동 조정으로 정교화되며, 또 다른 일부는 자기 인식이 없다. 후자의 경우에 소유자가 기본 운영 데이터의 우수하고 저렴한 원본을 보유하는 데 여전히 유용하다.

독자는 전지판이 주어진 조건에서 최적으로 작동하고 있는지 알고 싶어한다. 일광과 온도 모두 풍속과 다른 요인들과 함께 전지판 출력에 영향을 줄 수 있다. 일광이 더 많으면 전력을 더 많이 발생시키지만 전력이 더 많으면 셀이 뜨겁게 되어, 셀의 효율성이 줄어든다. 기류는 열이 사라지는 데 도움을 준다. 이상적으로는 밝은 일광과 냉각 조건, 훌륭한 바람 또는 다른 인공적인 냉각을 원한다.

Arduino는 센서와 데이터 스토리지 사이에 중개자로서 역할을 한다. 이는 영구적인 레코드를 만들고 데이터를 필요한 대로 표시하기 위해 간단한 문제이다. 이 기사는 TMP36 온도 센서와 일광에 대한 간단한 발광 다이오드(LED)를 사용하여 온도의 데이터 로깅을 조사한다.


Arduino

Arduino는 아날로그 핀에서 전압의 형태로 데이터 입력을 읽을 수 있는 저렴하고 적응력이 높은 프로그래밍 가능한 오픈 소스 마이크로프로세서이다. 해당 유닛에 대한 기본적인 정보와 게임 컨텍스트에서 이러한 유닛에 대한 훌륭한 developerWorks 소개글은 참고자료를 참조한다. 특정 입력 핀에 연결된 센서를 통해 해당 유닛은 프로그래밍 방식으로 이러한 핀에서 데이터를 읽는다. 이러한 정보와 관련되어 수행하는 것은 하드웨어를 구성하는 방법에 달려있다.

Arduino에서 데이터를 얻는 가장 간단한 방법은 직렬 연결인 것처럼 데이터를 읽는 호스트 컴퓨터 범용 직렬 버스(USB)로 직접 연결된 유닛을 사용하는 것이다. 하지만 Arduino는 전력 공급 및 대체 통신 채널이 주어지면 컴퓨터에 독립적으로 작동할 수도 있다. 확장 보드("실드")를 Arduino에 추가하여 데이터를 마이크로SD 메모리 카드에 직접 저장하고, 미니 웹 서버를 통해 cat5e 네트워크 케이블에 대해 데이터를 전송하거나 호환 가능한 수신기로 데이터를 무선으로 전송할 수도 있다.

그림 1은 이더넷 실드가 마운트되고 cat5 이더넷 및 전원 공급 케이블이 연결된 Arduino 마이크로프로세서를 보여주며, 이는 독자에게 유닛의 크기에 대한 개념을 제공한다.


그림 1. 이더넷 실드가 있는 Arduino
이더넷 어셈블리가 연결된 Arduino의 사진.

일부 센서는 내부 회로를 원활하게 하는 자체 데이터가 있다. 더 간단한 것은 없다. 그러므로, Arduino가 스토리지 또는 전송 이전에 필수적인 처리를 수행해야 하는지 여부 또는 데이터가 다른 머신에서 향후 처리를 위해 관찰되는 대로 원시로 보고되어야 하는지 여부에 대한 질문을 하게 된다. 둘 중 어느 것이나 완전히 받아들일 수 있다. 이 프로젝트는 향후 처리를 위해 원시 관찰을 보고하기만 하면 된다. 이는 필요한 경우 언제나 원활히 하기 위해 알고리즘을 변경하는 옵션을 제공한다. 원활하게 하는 프로세스가 적용될 때, 이는 굳혀져서 거의 되돌릴 수 없다. 원활화 요구사항이 올바르게 이해되는 실시간 데이터 상황에서 Arduino가 원활하게 만드는 것이 더 합리적이 된다.


센서

Arduino로 작업하기 위해 광범위한 센서를 얻을 수 있다. 여기에서 TMP36 및 LED는 간단하고 저렴하며 간편하게 반복 가능한 대안을 제공한다.

TMP36은 특별하게 구성된 트랜지스터이다. 전압을 할당하면 커넥터의 다른 조합에서 주변 온도에 따라 일관되게 변화하는 또 다른 전압을 리턴한다. 출력 전압을 기록하고 환경 설정에 따라 섭씨 또는 화씨 단위로 온도를 찾는 일부 간단한 산수를 수행한다. 칩에 대한 도움말과 Arduino에 이를 연결하는 방법은 참고자료를 참조한다.

태양열 발생 맥락에서 온도 데이터를 로그하는 것이 매우 간단한 것처럼 보이지만 극복해야 하는 몇 가지 장애물이 있다. 첫 번째 문제점은 주변 온도와 관련되어 센서를 찾는 위치를 식별하는 것이다. 잘못된 읽기를 방지하기 위해 독자는 직접적인 햇빛에서부터 충분한 환기를 제공하는 비바람에 견디는 위치에 이를 놓으려고 한다. 두 번째로, 태양 전지판은 같지 않은 많은 셀들로 이루어져 있으며, 각각은 동일한 주변 조건에서 자체적인 온도로 실행한다. 이상적인 상황에서 독자는 셀을 모두 측정하고 평균을 취한다. 대안은 대표 평균 셀을 식별하고 이를 단독으로 모니터하기 위해 많은 셀들을 시도하는 것이다.

LED는 적절한 전압으로 전류가 할당될 때 빛을 밝히고 일광에 노출될 때 전압을 생성할 수 있다(참고자료에서 Mike Cook의 기사 참조). 일광이 더 훌륭하게 집약되면 될수록 Arduino가 연결된 핀에서 확인하는 전압이 더 많아진다. 온도 센서와는 달리, 이는 특정 온도 규모로 맵핑 가능하게 설계되었다. 독자가 LED로부터 나온 출력이 알려진 규모에서 일광 집약도를 어떻게 변환하는지 확인하기 위해 실험해야 한다.

실제 설정

독자의 태양열 배열 위치에 전력이 있고 연결할 이더넷 근거리 통신망(LAN) 잭은 없지만 무선 액세스 지점 범위 내에 있다고 가정한다. 그러면 로컬 전력은 액세스 지점과 Arduino 둘 다를 Arduino와 함께 반복기에 연결된 이더넷 실드로 실행할 수 있다. 그러면 센서 입력에 사용 가능한 아날로그 핀 3에서 6까지를 보유한다. 핀 1과 2는 이더넷 실드가 사용하도록 예약되었다고 가정한다(핀 사용에 대한 자세한 내용은 참고자료 참조). 네 개의 핀은 네 개의 센서를 보유할 수 있음을 의미하며, 두 개가 온도 센서라고 하면, 하나는 주변에 대한 것이고 나머지는 전지판 온도, 일광 센서 및 풍속 센서에 대한 것이다. 이는 수동적 패널 설정을 위한 풍부한 데이터 세트이다.

정규 cat3 전화 케이블로 단거리에 대해 Arduino와 센서 사이에 실제 연결을 달성할 수 있으며, 이는 24 미국 전선 규격(AWG) 선의 두 가지 쌍의 비 차폐(unshielded) 번들이다. 이는 바로 사용 가능한 전화기 어댑터와 케이블링을 사용하는 옵션도 제공한다.

Arduino와 이더넷 실드 조합으로 작업하는 것은 단독으로 USB/직렬 연결된 Arduino만큼 간단하지 않다. 여기서는 다음 사항을 자세히 고려해보자.

  • 정상적으로는 연결할 센서가 없는 핀으로 전압을 폴(poll)하지 않는다.
  • 배럴 커넥터를 통해 Arduino는 다른 전압의 범위에서 전력을 허용할 수 있다(세부사항은 참고자료 참조). 아날로그 핀 전압 읽기는 Arduino로의 전력 공급의 전압에 상당 부분 의존하는 것처럼 보인다. 현장에서 사용하려는 것과 동일한 전력 공급 단위로 센서의 교정을 수행하도록 한다. 고급 사용자는 AREF(Analog Reference) 핀을 사용하여 참조 전압을 제공한다.
  • 온도 센서를 태양열 셀의 뒤쪽에 연결한다. 덕트 테이프는 단기간 동안 따뜻한 조건에서도 셀에 대해 센서를 보유하는 데 매우 효과적으로 보이지만, 노출된 선 또는 커넥터가 우수한 전기 테이프로 보호되고 단열되도록 한다. 주변 온도가 섭씨 20도(화씨 69도)이고 안정된 바람이 분다면 밝은 일광에서 섭씨 50도(화씨 124도)의 정상 운영 셀 온도(NOCT)로 셀이 올라가는 것이 일반적이다.
  • 이더넷 실드가 있는 Arduino는 매우 전력이 부족한 상태이다. 완전히 충전된 AA 크기 배터리 세트를 사용하여 전압과 전류를 공급한다면 겨우 몇 시간 동안만 유지된다. 고급 사용자는 전력 사용을 제어하는 데 사용할 수 있는 절전 모드를 살펴본다.

그림 2는 태양열 랙과 전지판에 연결된 TMP36 센서를 보여준다. 오른쪽에 검은색 전기 테이프 아래 금속 기둥에서부터 나온 주변 온도에 대한 센서가 있다. 왼쪽에 덕트 테이프로 태양열 셀의 뒤쪽에 연결된 두 번째 센서가 있다. 덕트 테이프는 최소한 단기간 동안에는 소비자 등급 전기 테이프보다 훨씬 더 나은 접착을 유지한다.


그림 2. 전지판에서 센서
태양 전지판에 연결된 센서의 사진

그림 3은 비로부터 보호하기 위한 전도된 테스트 튜브 안에 있는 녹색 LED를 보여준다.


그림 3. 일광 센서
나무로 된 기둥에 테이프로 붙인 일광 센서의 사진

수집된 데이터로 액세스를 허용하는 Arduino 프로그램(또는 Arduino는 sketch라고 함)은 브라우저 또는 다른 스크립트로 액세스하는 간단한 웹 서버이다(목록 1 참조). 기본 코드는 예제 콜렉션의 일부로 Arduino로 제공되고 자체 요구사항에 적응하기 위해 어느 정도의 편집을 요구한다(참고자료 참조).


리스트 1. Arduino 웹 서버
			
// based on example web server sketch from http://arduino.cc/
#include <SPI.h>
#include <Ethernet.h>
//
byte mac[] = { 0x!!, 0x!!, 0x!!, 0x!!, 0x!!, 0x!! };
byte ip[] = { 192,168,0,xxx };
Server server(80);
//
void setup()
{
  // start the Ethernet connection and the server:
  delay(10000);
  Ethernet.begin(mac, ip);
  server.begin();
}
//
void loop()
{
  // listen for incoming clients
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
	  //
          // output the value of each analog input pin
          for (int analogChannel = 3; analogChannel < 7; analogChannel++) {
            //client.print("analog input ");
            client.print(analogChannel);
            client.print(" : ");
            client.print(analogRead(analogChannel));
            client.println("<br />");
          }
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
}
	    

목록 1은 필요한 헤더 라이브러리, 이더넷 실드의 MAC(Media Access Control) 주소 및 해당 Arduino를 알려고 하는 IP(Internet Protocol) 주소를 지정하여 시작한다. 이는 또한 서버 오브젝트와 나중에 버려질 수 있는 값을 저장하는 데 사용되는 변수를 설정한다. setup() 서브루틴은 시작 시 한 번만 실행하고 서버를 초기화한다. 그러면 loop() 서브루틴은 영구적으로 루프하여, HTTP(Hypertext Transfer Protocol) 요청에 대기한 다음 필요한 데이터로 응답한다. 요청에 응답하기 위해 이는 표준 HTTP 응답 헤더를 전송하고, 관련된 핀으로부터 읽기를 수집하며, 텍스트 형식으로 데이터 패키지를 전송한다. 이 경우에 제공된 데이터는 아날로그 핀 3, 4, 5 및 6에서 요청의 순간에 경험한 전압이다. 핀 1과 2는 Arduino 보드와 이더넷 실드 사이에 인터페이스로 사용되기 때문에 이들에 대한 데이터는 전송되지 않는다. 사용 중인 핀만 읽도록 채널의 범위를 변경한다.

응답은 목록 2에 나타난 출력과 같다.


리스트 2. Arduino 응답
			
3 : 292
4 : 288
5 : 286
6 : 280
	    

이는 핀의 수와 0에서 1023까지의 규모의 값을 제공하며, 여기에서 두 가지 숫자는 콜론으로 구별된다. 출력은 아날로그 핀 숫자를 지정하는 것보다 더 구체적일 수 있지만, 일반 숫자는 어느 하나의 핀을 어느 한 가지 작업으로 제한하지 않기 때문에 유연성을 허용한다.


데이터 스토리지

다음으로 고려할 사항은 데이터가 어떻게 저장되는 가이다. 이 경우에 독자는 목록 3과 같이 백엔드로 MySQL을 사용하는 중이다.


리스트 3. 백엔드 테이블
			
CREATE TABLE IF NOT EXISTS `readings` (
  `readid` int(11) NOT NULL AUTO_INCREMENT,
  `tstamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `pin` int(11) NOT NULL,
  `value` float NOT NULL,
  PRIMARY KEY (`readid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
	    

이 코드는 ID 필드, 입력의 시스템 시간으로 기본값 지정한 시간소인, 읽기와 관련된 핀 및 실제 읽기에 대한 필드로 테이블을 작성하며, 이 경우에 이는 부동으로 저장된다.


데이터 수집과 원활화

백엔드를 정의하면 Arduino를 쿼리하고, 응답을 분석하며 백엔드에서 관찰을 저장하기 위해 이제 PHP를 사용할 수 있으며, 이는 목록 4에 표시된다.


리스트 4. PHP 데이터 로깅 스크립트
			
<?php
// reader for panel monitors
$fp = fopen("http://192.168.0.xxx","r");
$mysqli = new mysqli("$server",$username,$password,$mysolar);
while ($line = fgets($fp,32)) {
  $line = str_replace("
","",trim($line)); $key = substr($line,0,1); switch ($key) { case 3: // things to do break; case 4: // things to do break; case 5: // this is light from LED recorded as is $val = (int) substr($line,4); $sql = "insert into readings values(NULL,NULL,$key,$val)"; $result = $mysqli->query($sql); //echo "val = $val\n"; break; case 6: // temperature from a TMP36 attached to back of solar cell $val = (int) substr($line,4); $tmp = degc($val); // convert to Celsius/Centigrade $tmp -= 5; // calibration $sql = "insert into readings values(NULL,NULL,$key,$tmp)"; $result = $mysqli->query($sql); break; default: //echo "Found strange key $key!\n"; break; } } function degc($v) { $t = $v * (5/1024); $t -= 0.5; $t *= 100; return round($t,1); } ?>

이 스크립트는 읽기를 위한 파일 포인터에서 Arduino로 연결을 열어 시작한다. 그러면 데이터 출력을 위해 MySQL 백엔드로 연결을 연다. 그 다음에 Arduino에서부터 응답에 대기하고 보고된 행들을 읽기 위해 루프로 들어간다. 네 개의 예상된 행은 각각 HTML(Hypertext Markup Language) 구분 태그가 들어 있으며, 이로 인해 테스트하는 동안 브라우저에서 출력을 읽는 데 더 간편해진다. 스크립트는 이러한 구분을 제거한다. 결과 행은 발견된 전압으로 이어지는 핀의 수로 시작한다. 핀 숫자에 주목하면, 이는 어느 센서가 핀에 연결되는지에 따라 다른 조치를 취하는 switch 구조로 들어간다.

교정은 이 단계에서 수행한다. 다시 말해서, 센서가 특정 값으로 일관적으로 과다 예측하는 것을 발견하면 최종값이 보고되기 전에 해당 값을 뺄 수 있다. TMP36에서 나온 측정된 밀리볼트를 섭씨 온도로 변환하기 위한 특정한 기능이 있다. 이는 0-1023의 범위를 1-5로 변경하고, 영점을 찾으며 100으로 결과를 규모 조정한다. 마지막으로 이는 데이터베이스에서 정리 및 교정된 값을 저장한다. 센서가 정정이 필요한지 어떻게 알까? 한 가지 방법은 점과 유사하게 행동하는 셀을 측정하고 방사율 온도 리더를 발사하는 것이다.

insert SQL문은 두 개의 NULL 값으로 시작하며, 백엔드가 첫 번째 SQL문에 대해 자동 증분 ID 숫자를 대체하고 두 번째 SQL문에 대해 전류 시간소인을 대체하도록 허용한다. 그러면 이는 핀의 수와 해당 핀에 대한 읽기에 연결한다. 정규 처리에 대한 crontab 목록에서부터 이 스크립트를 사용하거나 명령행에서부터 필요한 대로 실행할 수 있다.


차트 표시장치

백엔드가 데이터로 채워지면 다음 태스크는 데이터를 가독성이 편리하도록 만드는 것이다. 사용 가능한 차팅 라이브러리가 많이 있으며, 각각은 자체적인 강점과 약점이 있다. Flotr(참고자료 참조)은 브라우저 창에서 차트를 표시하기 위해 JavaScript를 사용하는 한 가지 예제이다. 목록 5의 코드는 읽기 테이블에 저장된 데이터로부터 읽고 개별 차트에서 온도와 일광 데이터를 표현한다.


리스트 5. Flotr을 사용하는 PHP 차트 생성기
			
<?php
// read solar data and display in flotr chart
$doctype = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'
    'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'>
<head>
<title>LOG reader</title>
<meta http-equiv='Content-Type' content='text/html;charset=UTF-8' />
<script language=\"javascript\" type=\"text/javascript\"
		src=\"../flotr/lib/prototype.js\"></script>
<script language=\"javascript\" type=\"text/javascript\" 
		src=\"../flotr/lib/base64.js\"></script>
<script language=\"javascript\" type=\"text/javascript\"
		src=\"../flotr/lib/canvas2image.js\"></script>
<script language=\"javascript\" type=\"text/javascript\"
		src=\"../flotr/lib/canvastext.js\"></script>
<script language=\"javascript\" type=\"text/javascript\" 
		src=\"../flotr/flotr.js\"></script>
</head><body>";
$mysqli = new mysqli($server,$username,$password,$dbname);
// get temp and light data and chart it
$sensors = array('Temp'=>6,"Light"=>5);
foreach ($sensors as $label=>$sensor) {
  $sql = "select tstamp,value from readings 
	    where pin=$sensor order by tstamp asc";
  $result = $mysqli->query($sql) or die($mysqli->error);
  $mydata1 = "[ ";
  while ($row = $result->fetch_array()) {
        $cfdoy = $row[0];
        $cfdoy = (strtotime($cfdoy)-(5*60*60))*1000;
        $cfamt = $row[1];
        $mydata1 .= "[ $cfdoy , $cfamt ] ,";
  }
  $mydata1 = substr($mydata1,0,-2)." ]";
  $leg = ($sensor == 18) ? "dC" : "mV";
  $title = ($sensor == 18) ? "Cell Temperature" : "Light";
  $conth .= "<div>$label</div>\n
      <div id=\"container$sensor\" style='width:600px; height:250px;'>
      <script type='text/javascript'>
          var f = Flotr.draw(
              $('container$sensor'), [
              { // => first series
                  data: ".$mydata1.",
                  label: '$leg',   
                  htmlText: false,
                  lines: {show: true}
              }],
              {  
                xaxis: {
                  title: 'Time',
                  mode:'time', 
                  noTicks: 10,
                  labelsAngle:45 
                },
                yaxis: {
                  title: '$leg',
                  noTicks: 8
                },
                title: '$title',
                selection: {
                  mode: 'x', 
                  color: '#B6D9FF',
                  fps: 20
                },
                mouse: {
                  track: true,
                  relative: true,
                  margin: 5,
                  trackFormatter: function(obj) { 
                      var dd = parseInt(obj.x);   
                      var d = new Date(dd);
                      return (d.getHours()+4) + ':' 
			  + d.getMinutes() + ' | ' + obj.y; 
                  },
                  position: 'sw',
                  lineColor: '#FF3F19',
                  trackDecimals: 1,
                  sensibility: 2,  
                  fillOpacity: 0.4 
                }
              }  
      );
        </script></div>";
}
echo "$doctype"."<html><body>".$conth."</body></html>";
?>
	    

목록 5의 코드는 JavaScript Flotr 라이브러리로 참조를 포함하여 XHTML(Extensible Hypertext Markup Language) 출력의 시작인 문자열을 정의하여 시작한다. 그러면 데이터가 저장되어 사용한 핀의 수가 들어 있는 배열을 설정하는 MySQL 서버로 연결을 열고, 관련된 센서에 대한 데이터를 페치하고 이를 JavaScript 스크립트로 대체하는 배열 요소로 단계별로 안내한다.

스크립트는 차트 둘 다에 대해 24시간 시계에서 시간 값으로 X축 데이터를 처리하기 위해 설정되고, 제작된 행의 위에 갖다 대어 관련된 좌표를 표시하도록 허용하는 마우스 지시사항이 더 많이 들어있다.

표시장치 단계 도중에 원활화(smoothing)에 대해 생각할 수 있다. 이는 이동 평균값 또는 극단적인 값을 알맞게 하는 다른 중량 기반 스킴의 사용이 될 수 있다.

매 5분마다 샘플로 취합되는 이러한 설정에서 생성된 실제 데이터를 사용하면 차팅 스크립트는 원활화 없이 그림 4에 표시된 출력을 작성한다. 조건은 가끔 구름이 끼는 온타리오 주의 맑은 5월이다. 다운로드 섹션에서부터 데이터의 사본을 다운로드할 수 있다.


그림 4. 예제 출력
예제 출력

예상되는 일광 레벨과 셀 온도 사이에 인접한 상관을 참고하자.

결론

오픈 소스 Arduino는 태양열 생성 맥락에서 센서 데이터에 대해 간단하고 적응력이 높은 프로세서로 유용하다. 광범위한 센서가 사용 가능하며, 센서가 적절한 출력 전압 또는 대안으로 Arduino로 깔끔하게 등록될 수 있는 디지털 출력을 제작하는 한, 이는 해당 데이터를 수집하고 보고할 수 있다. 센서로서 TMP36 및 LED는 대략 기본적으로 확보할 수 있는 것이다.—진지한 사용자들은 이러한 대안으로부터 업그레이드할 것이다.

다양한 조건에서 패널의 작동에 대한 우수한 숫자는 광전지 유닛의 관리자에게 유용할 수 있다. 왜냐하면, 데이터 레코드가 주어지면 이는 관찰의 기준선을 형성할 수 있기 때문이다. 그러면 관리자는 추론과 조언에 따라 변경할 수 있으며 그 다음에 향후 패널 조작이 긍정적인 효과가 있는지 없는지 여부를 평가할 수 있다.



다운로드 하십시오

설명이름크기다운로드 방식
Data samplereadings.sql.zip1KBHTTP

다운로드 방식에 대한 정보


참고자료

교육

  • "Building an Arduino-based laser game"(Duane O'Brien, developerWorks, 2008년 12월): Arduino에 대한 훌륭한 소개글을 읽어보고 일광 감지기로서 LED를 설정하는 방법에 대한 지시사항을 찾아보자.

  • LED Sensing: LED가 일광 센서로서 작동할 수 있는 방법과 이유의 배후에 깔려있는 물리학에 대해 자세히 알아보자.

  • Arduino Forum: 다른 사용자들로부터 Arduino에 대해 자세히 배워보자.

  • Arduino 튜토리얼: 외부 전력 공급에 대한 제안이 들어 있는 이 튜토리얼에서부터 Arduino를 설정하는 것에 대해 자세히 배워보자.

  • Arduino Shield List 핀 사용법: 107개의 제조업체에서 나온 244개의 계속 늘어나는 실드에 대한 핀 사용법 세부사항을 확인하자.

  • Arduino and TMP36: Arduino 및 TMP36을 연결하는 것에 대한 자세한 지시사항을 확인하자.

  • Arduino as a web server: Arduino 튜토리얼을 따라 이더넷 실드와 Arduino를 사용하여 간단한 웹 서버를 작성하자.

  • Flotr: Flotr JavaScript 차팅 라이브러리와 관련된 정보와 예제를 찾아보자.

  • TMP36, voltage output temperature sensor: 센서에 대한 자세한 기술 정보를 확인하자.

  • developerWorks PHP content: IBM 사이트에서 PHP 컨텐츠를 찾아보자.

  • Twitter의 developerWorks: developerWorks의 트윗(tweet)을 팔로우(follow)하자.

  • PHP 프로젝트 자원: PHP 기술을 펼쳐보자.

  • 관심 이벤트: IBM 오픈 소스 개발자에게 유익한 컨퍼런스, 기술 박람회, 웹 캐스트 및 기타 행사를 확인하고 참여하자.

  • developerWorks 오픈 소스 영역: 오픈 소스 기술로 개발하고 이러한 기술을 IBM 제품과 함께 사용하는 데 도움이 되는 광범위한 사용법 정보, 도구 및 프로젝트 업데이트를 찾아보자.

제품 및 기술

  • Arduino: 기본 사이트에 방문하자.

  • MySQL community edition: 이러한 오픈 소스 데이터베이스에 무료로 다운로드 가능한 버전에 액세스하자.

  • PHP: 이러한 범용 스크립팅 언어의 최신 릴리스를 확인하자.

  • IBM 시험판 소프트웨어: 다운로드하거나 DVD로 이용할 수 있는 IBM 시험판 소프트웨어를 사용하여 차기 오픈 소스 개발 프로젝트를 강화하자.

토론

  • developerWorks 커뮤니티: 개발자가 운영하고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다. developerWorks 커뮤니티에서 Real world open source 그룹을 빌드하는 데 도움을 주자.

필자소개

Colin Beckingham은 캐나다 온타리오에 거주하는 프리랜서 연구원이자 작가이며 프로그래머이다. 킹스턴의 Queen's University와 University of Windsor에서 학위를 받았고 은행 업무, 원예, 경마, 교육, 공무원 행정 업무, 소매 및 여행과 관광 업종을 포함한 다양한 분야에 종사해왔다. 데이터베이스 애플리케이션과 다양한 신문, 잡지 및 온라인 기사의 저자이며, 관심 연구 분야는 오픈 소스 프로그래밍, VoIP 및 Linux용 음성 제어 애플리케이션이다. Colin의 이메일 주소는 colbec@start.ca이다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=오픈 소스, Industries
ArticleID=765735
ArticleTitle=에너지 부문에서 오픈 소스 하드웨어 및 소프트웨어로 데이터 로깅
publish-date=10172011

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.