우리 모두 는 전기 소비량을 측정하기 위해 모든 사람의 집이나 사무실에 설치된 전기 에너지 미터 에 대해 알고 있습니다. 매달 마지막에 많은 사람들이 높은 전기 요금에 대해 걱정하고 가끔씩 에너지 미터를보아야합니다. 하지만 전 세계 어디에서나 전기 사용량을 모니터링하고 에너지 소비량이 임계 값에 도달했을 때 SMS / 이메일을받을 수 있다면 어떨까요? 여기서 우리는 IoT 기반 에너지 미터 프로젝트를 구축하고 있습니다.
이전에는 GSM 모듈을 사용하여 청구서에 대한 SMS를 보내는 에너지 미터 회로를 구축했습니다. 이 프로젝트에서 우리는 아두 이노와 ESP8266 Wi-Fi 모듈 을 사용하여 스마트 전기 에너지 미터를 만들어 전기 요금 의 SMS / Email을 보낼 수있을뿐만 아니라 언제 어디서나 에너지 사용량 을 모니터링 할 수 있습니다. 여기에서는 전류 센서 ACS712 를 사용하여 에너지 소비를 측정했습니다. 이에 대해 곧 논의하겠습니다.
IFTTT 플랫폼의 도움을 받아 Wi-Fi를 SMS / 이메일 알림에 연결합니다. 또한 MQTT 대시 보드 Android 앱을 사용하여 에너지 사용을 모니터링합니다. 그럼 시작하겠습니다….
필요한 재료:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp 전류 센서
- 모든 AC 기기
- 남성-여성 전선
ACS712 전류 센서 작동:
프로젝트 구축을 시작하기 전에 ACS712 전류 센서가 프로젝트의 핵심 구성 요소이므로 작동을 이해하는 것이 매우 중요합니다. 전류, 특히 AC 전류를 측정하는 것은 부적절한 절연 문제 등과 결합 된 노이즈로 인해 항상 어려운 작업입니다. 그러나 Allegro가 설계 한이 ACS712 모듈 덕분에 훨씬 쉬워졌습니다.
이 모듈은 Edwin Hall 박사가 발견 한 Hall-effect 원리로 작동합니다. 그의 원리에 따르면 전류 전달 도체를 자기장에 배치하면 전류와 자기장의 방향에 수직 인 가장자리에 전압이 생성됩니다. 개념에 너무 깊이 들어 가지 말고 홀 센서를 사용하여 전류 전달 도체 주변의 자기장을 측정하면됩니다. 이 측정은 우리가 홀 전압이라고 부르는 밀리 볼트 단위입니다. 측정 된 홀 전압은 도체를 통해 흐르는 전류에 비례합니다.
ACS712 전류 센서 사용의 가장 큰 장점은 AC 및 DC 전류를 모두 측정 할 수 있고 부하 (AC / DC 부하)와 측정 장치 (마이크로 컨트롤러 부분) 간의 절연을 제공한다는 것입니다. 그림에서 볼 수 있듯이 모듈에는 각각 Vcc, Vout 및 Ground 인 세 개의 핀이 있습니다.
2 핀 터미널 블록은 전류 전달 와이어가 통과되어야하는 곳입니다. 모듈은 + 5V에서 작동하므로 Vcc는 5V로 전원이 공급되고 접지는 시스템의 접지에 연결되어야합니다. Vout 핀의 오프셋 전압은 2500mV입니다. 즉, 전선을 통해 흐르는 전류가 없을 때 출력 전압은 2500mV가되고 전류가 양수이면 전압이 2500mV보다 크고 전류가 음수이면 전압이 전압은 2500mV 미만입니다.
Arduino의 Analog 핀을 사용하여 모듈의 출력 전압 (Vout)을 읽을 것입니다. 전선에 전류가 흐르지 않을 때 512 (2500mV)가됩니다. 이 값은 전류가 음의 방향으로 흐르면 감소하고 전류가 양의 방향으로 흐르면 증가합니다. 아래 표는 와이어를 통해 흐르는 전류에 따라 출력 전압 및 ADC 값이 어떻게 변하는 지 이해하는 데 도움이됩니다.
이 값은 ACS712의 데이터 시트에 제공된 정보를 기반으로 계산되었습니다. 아래 공식을 사용하여 계산할 수도 있습니다.
Vout 전압 (mV) = (ADC 값 / 1023) * 5000 와이어를 통과하는 전류 (A) = (Vout (mv) -2500) / 185
이제 ACS712 센서의 작동 방식과 그로부터 기대할 수있는 사항을 알았습니다. 회로도를 살펴 보겠습니다.
PIC 마이크로 컨트롤러와 ACS712를 사용하여 디지털 전류계 회로를 만드는 데이 센서를 사용했습니다.
회로도
1 단계: 자격 증명으로 IFTTT에 로그인합니다.
2 단계: 내 애플릿에서 새 애플릿을 클릭합니다.
3 단계: + this를 클릭 합니다.
4 단계: AdaFruit를 검색 하고 클릭합니다.
5 단계: AdaFruit IO 에서 피드 모니터링을 클릭합니다.
6 단계: 선택 피드 법안으로, 관계 '는 다음과 같이 같음' 과 임계 값이 있는 당신은 전자 메일을 원한다. 작업 만들기를 클릭 합니다 . 임계 값 트리거 값으로 4를 사용했습니다.
7 단계: + that을 클릭 합니다 . G-mail을 검색하고 클릭하고 g-mail 자격 증명으로 로그인합니다.
8 단계: 자신에게 이메일 보내기를 클릭합니다.
9 단계: 그림과 같이 제목과 본문을 작성하고 클릭하여 만듭니다.
10 단계: ' 레시피 '가 준비되었습니다. 그것을 검토하고 마침을 클릭하십시오.
이제 웹 통합이 완료되었습니다. 코딩 부분으로 넘어 갑시다..
코드 및 설명:
우리는 ESP12와 Arduino 간의 직렬 통신을 사용하고 있습니다. 그래서 우리는 송수신을 위해 Arduino와 NodeMCU 모두에 대한 코드를 작성해야합니다.
송신기 부품, 즉 Arduino Uno 용 코드:
이 튜토리얼의 끝에 완전한 Arduino 코드 가 제공됩니다. 이 링크에서 다운로드 할 수있는 전류 센서 용 라이브러리를 사용합니다.
이 라이브러리에는 전류를 계산하는 기능이 내장되어 있습니다. 전류를 계산하는 코드를 작성할 수 있지만이 라이브러리에는 정확한 전류 측정 알고리즘이 있습니다.
먼저 현재 센서 용 라이브러리를 다음과 같이 포함합니다.
#include "ACS712.h"
NodeMCU로 보내기위한 전력을 저장할 어레이를 만듭니다.
char 와트;
PIN A0에서 ACS712-30Amp를 사용하는 인스턴스를 만듭니다. 20Amp 또는 5Amp 변형을 사용하는 경우 첫 번째 인수를 변경합니다.
ACS712 센서 (ACS712_30A, A0);
에서는 설정 기능 NodeMCU와 통신 할 115,200의 전송 속도를 정의한다. 정확한 판독 값을 얻기 위해 현재 센서를 보정하기 위해 sensor.calibrate () 함수를 호출 합니다.
void setup () { Serial.begin (115200); sensor.calibrate (); }
에서 루프 기능, 우리는 호출 sensor.getCurrentAC를 (); 현재 값을 구하고 float 변수 I에 저장하는 함수입니다. 전류를 얻은 후 P = V * I 공식을 사용하여 전력을 계산합니다. 우리는 230V를 사용합니다. 유럽 국가의 공통 표준이므로 필요한 경우 현지로 변경하십시오.
void loop () { float V = 230; float I = sensor.getCurrentAC (); 플로트 P = V * I;
이 라인은 전력을 Wh로 변환합니다.
last_time = 현재 _ 시간; current_time = millis (); Wh = Wh + P * ((현재 _ 시간-마지막 _ 시간) /3600000.0);
이제이 dtostrf ();에 대해이 Wh 를 문자 형식으로 변환 하여 NodeMCU로 보내야합니다 . float를 char 배열로 변환하여 쉽게 인쇄 할 수 있습니다.
dtostrf (Wh, 4, 2, 와트);
형식은 다음과 같습니다.
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Serial.write ()를 사용 하여이 문자 배열을 직렬 버퍼에 씁니다 . 함수. 그러면 Wh 값이 NodeMCU로 전송됩니다.
Serial.write (와트); 지연 (10000); }
수신기 부품 NodeMCU ESP12 용 코드:
이를 위해서는이 링크에서 다운로드 할 수있는 AdaFruit MQTT 라이브러리가 필요합니다.
이제 Arduino IDE를 엽니 다. 예제로 이동-> AdaFruit MQTT 라이브러리-> mqtt_esp8266
AIO 키와 Wi-Fi 자격 증명 및 Arduino에서 들어오는 직렬 데이터에 따라이 코드를 편집합니다.
먼저 ESP12 Wi-Fi 모듈 및 AdaFruit MQTT에 대한 모든 라이브러리를 포함했습니다.
#포함
ESp-12e를 연결하려는 Wi-Fi의 SSID 및 비밀번호를 정의합니다.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
이 섹션에서는 각각“io.adafruit.com”및“1883”으로 고정 된 AdaFruit 서버 및 서버 포트를 정의합니다.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
이 필드를 피드를 만드는 동안 AdaFruit 사이트에서 복사 한 사용자 이름 및 AIO 키로 바꿉니다.
#define AIO_USERNAME "********"# define AIO_KEY "******************************"
그런 다음 MQTT 서버에 연결하기 위해 ESP12 WiFiClient 클래스를 만들었습니다.
WiFiClient 클라이언트;
WiFi 클라이언트와 MQTT 서버 및 로그인 세부 사항을 전달하여 MQTT 클라이언트 클래스를 설정하십시오.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
변경 사항을 게시하기 위해 'Power' 및 'bill' 이라는 피드를 설정합니다.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
설정 기능 에서는 Wi-Fi 모듈을 Wi-Fi 액세스 포인트에 연결합니다.
void setup () { Serial.begin (115200); 지연 (10); Serial.println (F ("Adafruit MQTT 데모")); // WiFi 액세스 포인트에 연결합니다. Serial.println (); Serial.println (); Serial.print ("연결 중"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. … }
에서 루프 기능, 우리는 아두 이노에서 들어오는 데이터를 확인하고 그리고 Adafruit IO이 데이터를 게시합니다.
void loop () { // MQTT 서버에 대한 연결이 활성 상태인지 확인합니다 (이렇게하면 연결이 처음 // 연결되고 연결이 끊어지면 자동으로 다시 연결됩니다). 아래의 MQTT_connect // 함수 정의를 참조하십시오. MQTT_connect (); int i = 0; float watt1;
이 함수는 Arduino에서 들어오는 데이터를 확인하고 serial.read () 함수를 사용 하여이 데이터를 와트 배열에 저장 합니다.
if (Serial.available ()> 0) { delay (100); // 전송 된 모든 시리얼이 함께 수신되도록 허용 while (Serial.available () && i <5) { watt = Serial.read (); } 와트 = '\ 0'; }
atof () 함수는 문자를 float 값으로 변환하고이 float 값을 다른 float 변수 watt1 에 저장합니다.
watt1 = atof (와트);
전력 (Wh)에 에너지 요금을 곱하여 청구 금액을 계산하고이를 1000으로 나누어 전력을 KWh로 만듭니다.
bill_amount = watt1 * (energyTariff / 1000); // 1unit = 1kwH
이제 우리는 물건을 게시 할 수 있습니다!
Serial.print (F ("\ n 송신 전력 값")); Serial.println (watt1); Serial.print ("…");
이 코드는 전력 공급에 전력 값을 게시합니다.
if (! Power.publish (watt1)) {Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
이것은 전기 요금을 청구서 피드에 게시 합니다.
if (! bill.publish (bill_amount)) {Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
청구 금액은 빠르게 변경 될 수 있지만 IFTTT는 애플릿을 트리거하는 데 시간이 걸리므로 이러한 라인은 임계 값 이메일을 수신 할 수 있도록 트리거 할 시간을 제공합니다.
이메일을받을 bill_amount 값을 변경합니다. 또한 IFTTT AdaFruit IO 설정을 변경하십시오.
if (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); 지연 (5000); } bill_amount = 6; }
Arduino 및 NodeMCU ESP12에 대한 전체 코드 는이 튜토리얼의 끝에 제공됩니다.
이제 두 보드에 코드를 업로드합니다. 회로도에 표시된대로 하드웨어를 연결하고 io.adafruit.com을 엽니 다. 방금 만든 대시 보드를 엽니 다. 전력 소비 및 전기 요금이 업데이트되는 것을 볼 수 있습니다.
청구서가 INR 4에 도달하면 다음 과 같은 이메일을 받게됩니다.
전력 소비 모니터링을위한 Android 앱:
Android 앱을 사용하여 값을 모니터링 할 수 있습니다. 이 다운로드 를 위해 Play 스토어 또는이 링크에서 MQTT Dashboard android 앱 을 다운로드하십시오.
io.adafruit.com과의 연결을 설정하려면 다음 단계를 따르십시오.
1 단계: 앱을 열고 "+"기호를 클릭합니다. 고객 ID를 원하는대로 입력하세요. 서버와 포트는 스크린 샷에 표시된 것과 동일하게 유지됩니다. 아래와 같이 AdaFruit IO 대시 보드에서 사용자 이름과 암호 (활성 키)를 얻을 수 있습니다.
Active Key는 비밀번호입니다.
2 단계: 전기 계량기를 선택하고 구독을 선택 합니다. 구독에서 친숙한 이름과 주제를 제공하십시오. 주제 형식은 ' yourusername'/ feeds / 'feedname' 이며 작성을 클릭하십시오.
3 단계: 같은 방법으로 청구서 피드를 구독합니다.
4 단계: 어플라이언스가 에너지를 소비함에 따라 업데이트 된 값이 Power and Bill 아래에 표시됩니다.
이것이 바로 전 세계 어디에서나 모니터링 할 수있을뿐만 아니라 전기 소비량이 많을 때 이메일을 트리거 할 수있는 스마트 전기 에너지 미터를 만드는 방법 입니다.
또한 모든 IoT 프로젝트를 확인하십시오.