산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 에너지 모니터 & 데이터 로거 만들기 – Dr. Wattson 보드 활용

부품 및 소모품

아두이노 우노 (Arduino UNO) 1개
Dr. Wattson 에너지 모니터링 보드 (MCP39F521 기반) 1개
Dr. Wattson 전용 아크릴 인클로저 (IEC 소켓, 스페이드 커넥터 포함) 1개
마이크로 SD 카드 브레이크아웃 보드 (아다프루트 호환) 1개
택타일 버튼 1개
LED (로깅 상태 표시용) 1개
220Ω 저항 (LED용) 1개

프로젝트 개요

가전제품의 전류, 전력, 역률 등 에너지 데이터를 정밀 측정해 SD 카드에 CSV 형태로 기록하는 데이터 로거를 만듭니다. Dr. Wattson 보드는 Microchip MCP39F521 전력 모니터링 IC를 기반으로 하며, 전류/전압 트랜스로 메인 전원과 완전 절연되어 안전합니다. 버튼으로 로깅 시작/중지, LED로 상태 표시, 로그 파일 자동 번호링(DATA00.CSV ~ DATA99.CSV) 기능을 갖췄습니다. 엑셀에서 바로 그래프로 그릴 수 있습니다.

아두이노 에너지 모니터 & 데이터 로거 만들기 – Dr. Wattson 보드 활용

Dr. Wattson 보드 특징

아두이노 에너지 모니터 & 데이터 로거 만들기 – Dr. Wattson 보드 활용

회로 구성

아두이노 에너지 모니터 & 데이터 로거 만들기 – Dr. Wattson 보드 활용

주요 연결

스케치 핵심 코드 분석

라이브러리

#include <Wire.h>
#include "UpbeatLabs_MCP39F521.h"  // Dr. Wattson 라이브러리
#include <SD.h>
#include <Button.h>  // Jack Christensen 라이브러리 (디바운스 내장)

전역 변수 및 버튼 설정

#define BUTTON_PIN 4
#define PULLUP true
#define INVERT true   // 풀업이라 HIGH=미눌림, LOW=눌림
#define DEBOUNCE_MS 20
Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS);

#define LED 9
#define CHIP_SELECT 10
UpbeatLabs_MCP39F521 wattson;
bool readData = false;
char filename[] = "DATA00.CSV";

setup(): SD 카드 초기화 & 파일명 자동 생성

void setup() {
    Serial.begin(9600);
    pinMode(LED, OUTPUT);
    pinMode(CHIP_SELECT, OUTPUT);

    if (!SD.begin(CHIP_SELECT)) {
        Serial.println(F("SD 카드 실패"));
        return;
    }
    wattson.begin();  // 기본 주소 0x74

    // 기존 파일명 확인 후 빈 파일명 찾기
    for (uint8_t i = 0; i < 100; i++) {
        filename[4] = i/10 + '0';
        filename[5] = i%10 + '0';
        if (!SD.exists(filename)) {
            Serial.print(F("데이터 파일: "));
            Serial.println(filename);
            break;
        }
    }
    Serial.println(F("초기화 완료"));
}

loop(): 버튼 토글 → 데이터 수집 → SD 저장

void loop() {
    myBtn.read();
    if (myBtn.wasReleased()) {  // 버튼 떼어짐 감지
        readData = !readData;   // 토글
        digitalWrite(LED, readData);
    }

    if (readData) {
        UpbeatLabs_MCP39F521_Data data;
        UpbeatLabs_MCP39F521_FormattedData fData;
        int ret = wattson.read(&data, NULL);
        unsigned long currentMillis = millis();

        if (ret == UpbeatLabs_MCP39F521::SUCCESS) {
            wattson.convertRawData(&data, &fData);
            
            // 시리얼 터미널용 화면 클리어 후 출력 (screen 명령어 권장)
            Serial.write("\x1B""c");  // ANSI 클리어 시퀀스
            printMCP39F521Data(&fData);

            // SD 카드에 CSV 기록
            File dataFile = SD.open(filename, FILE_WRITE);
            if (dataFile) {
                dataFile.print(currentMillis); dataFile.print(",");
                dataFile.print(fData.currentRMS); dataFile.print(",");
                dataFile.print(fData.activePower); dataFile.print(",");
                dataFile.print(fData.reactivePower); dataFile.print(",");
                dataFile.println(fData.apparentPower);
                dataFile.close();
            } else {
                Serial.print(F("파일 열기 오류: ")); Serial.println(filename);
            }
        } else {
            Serial.print(F("읽기 오류: ")); Serial.println(ret);
        }
    }
}

측정 데이터 출력 함수

void printMCP39F521Data(UpbeatLabs_MCP39F521_FormattedData *d) {
    Serial.print(F("전압 = ")); Serial.println(d->voltageRMS, 4);
    Serial.print(F("전류 = ")); Serial.println(d->currentRMS, 4);
    Serial.print(F("주파수 = ")); Serial.println(d->lineFrequency, 4);
    Serial.print(F("역률 = ")); Serial.println(d->powerFactor, 4);
    Serial.print(F("유효전력 = ")); Serial.println(d->activePower, 4);
    Serial.print(F("무효전력 = ")); Serial.println(d->reactivePower, 4);
    Serial.print(F("피상전력 = ")); Serial.println(d->apparentPower, 4);
}

실전 테스트: CFL 전구 냉시동/온시동 측정

아두이노 에너지 모니터 & 데이터 로거 만들기 – Dr. Wattson 보드 활용

측정 절차:

  1. 부하(예: 14W CFL 전구) 연결, 전원 끄기
  2. 버튼 눌러 로깅 시작 (LED 점등)
  3. 전구 켜기 → 전류/전력 변화 관측
  4. 안정화되면 버튼 눌러 로깅 중지 (LED 소등)
  5. SD 카드 꺼내 CSV 파일 엑셀로 열기

결과: 냉시동 시 전류 0.21A, 유효전력 17W 피크 후 0.18A/14.2W로 안정화. 온시동(재점등) 시에는 피크 없이 바로 정상값 수렴.

엑셀에서 그래프 그리기

  1. CSV 파일 열기
  2. 맨 위에 헤더 행 추가: timestamp, currentRMS, activePower, reactivePower, apparentPower
  3. 원하는 열 선택 → 삽입 → 차트 (산점도/꺾은선형 추천)

결론 및 향후 확장

Dr. Wattson으로 양질의 에너지 데이터를 쉽게 얻어 가전제품 특성 분석, 대기전력 측정, 에너지 절약 프로젝트 등에 활용할 수 있습니다. 라이브러리와 예제는 GitHub에서 제공됩니다.

참고 링크

제조공정

  1. 클라우드 혁명: 클라우드 컴퓨팅이 IT, 보안, 커리어를 변화시키는 방식
  2. 예방보전 마스터하기: 고정 및 플로팅 스케줄 구축과 최적화
  3. TensorFlow로 변이형 오토인코더(VAE) 구축하기: 실전 가이드
  4. 아두이노 DHT11 이더넷 실드 온습도 데이터 로거
  5. 아두이노 듀(Due) + 3.2″ TFT로 만드는 실시간 시계 & 온도 모니터
  6. DHT11 온습도 센서와 블링크(Blynk)로 원격 모니터링하기 - 아두이노 단계별 튜토리얼
  7. 아두이노 메가 기반 고급 홈 모니터링 시스템: IoT 센서 연동
  8. 아두이노 우노로 신뢰할 수 있는 스마트 에너지 모니터 만들기 – 단계별 가이드
  9. 고급 GPS 데이터 로거: 실시간 비행 추적, 최고 고도 및 속도 모니터링
  10. 아두이노와 프로세싱으로 실시간 디지털 나침반 만들기