에너지 모니터는 아파트 전체를 포함하든 하나의 어플라이언스 만 모니터링하기 위해 배포 되든 상관없이 소비량을 추적하고 필요한 조정을 수행 할 수있는 방법을 제공합니다. 시장에서 점점 더 많이 출시되고 있지만, 제 안에있는 제작자는 특정 개인 요구 사항을 충족하도록 맞춤화 할 수있는 DIY 버전을 만드는 것이 여전히 좋은 생각이라고 생각합니다. 따라서 오늘의 자습서에서는 에너지 소비량을 얻고 Adafruit.io에 업로드 할 수 있는 Raspberry Pi 전력 소비량 모니터를 구축합니다.
아두 이노 기반 IoT 에너지 미터와 우리가 이전에 구축 한 선불 GSM 에너지 미터를 확인할 수도 있습니다.
Raspberry Pi 스마트 에너지 미터 블록 다이어그램
시스템 작동 방식을 보여주는 블록 다이어그램이 아래에 나와 있습니다.
단위를 하나씩 선택하려면;
전류 감지 장치: 전류 감지 장치는 구입 한 버전에 따라 최대 100A까지 측정 할 수 있는 SCT -013 전류 센서로 구성됩니다. 센서는 클램프 된 전선을 통과하는 전류를 작은 전류로 변환 한 다음 전압 분배기 네트워크를 통해 ADC에 공급합니다.
전압 감지 장치: 전압 센서 모듈에 손을 얹을 수 없었지만 전압 분배기 원리를 사용하여 전압을 측정하는 변압기없는 전압 센서 DIY를 만들 것입니다. DIY 전압 센서는 고전압이 ADC 입력에 적합한 값으로 변환되는 전압 분배기 단계를 포함합니다.
처리 장치: 처리 장치는 ADC와 Raspberry pi로 구성됩니다. ADC는 아날로그 신호를 받아 라즈베리 파이로 보낸 다음 소비되는 전력의 정확한 양을 계산하여 지정된 장치 클라우드로 보냅니다. 이 튜토리얼의 목적에 따라 Adafruit.io를 Device Cloud로 사용 합니다. 우리는 또한 다른 것을 만들었습니다
면책 조항: 시작하기 전에이 프로젝트에는 위험하고 안전하게 취급하지 않으면 치명적일 수있는 AC 공급 장치에 대한 연결이 포함된다는 점을 언급하는 것이 중요합니다. 이를 시도하기 전에 AC 주변에서 작업 한 경험이 있는지 확인하십시오.
준비된? 뛰어 들자.
필수 구성 요소
이 프로젝트를 빌드하려면 다음 구성 요소가 필요합니다.
- Raspberry Pi 3 또는 4 (WiFi 동글이있는 RPI2의 경우 프로세스가 동일해야 함)
- ADS1115 16 비트 I2C ADC
- YHDC SCT-013-000
- 2.5A 5V MicroUSB 전원 어댑터
- 2W 10K 저항기 (1)
- 1 / 2W 10K 저항기 (2)
- 33ohms 저항기 (1)
- 2W 3.3k 저항기 (1)
- IN4007 다이오드 (4)
- 3.6v 제너 다이오드 (1)
- 10k 전위차계 (또는 사전 설정) (1)
- 50v 1uf 커패시터
- 50v 10uf 커패시터 (2)
- 브레드 보드
- 점퍼 와이어
- Raspberry Pi의 사용을위한 기타 액세서리.
위에 나열된 하드웨어 구성 요소 외에도 프로젝트에는 계속해서 설치할 소프트웨어 종속성 및 라이브러리가 필요합니다.
이 튜토리얼은 사용 된 라즈베리 파이 OS에 관계없이 작동하지만, 저는 파이 3에서 실행되는 라즈베리 파이 버스터 OS를 사용할 것이며 (파이 4에서도 작동해야 함) 라즈베리 파이 설정에 익숙하다고 가정합니다 Raspbian Buster OS (이전 버전과 거의 동일한 프로세스), 하이퍼와 같은 터미널 소프트웨어를 사용하여 SSH에 접속하는 방법을 알고 있습니다. 이와 관련하여 문제가있는 경우이 웹 사이트에 도움이 될 수있는 수많은 Raspberry Pi 자습서가 있습니다.
파이 준비
구성 요소를 연결하고 코딩을 시작하기 전에 준비가되었는지 확인하기 위해 라즈베리 파이에서 수행해야하는 몇 가지 간단한 작업이 있습니다.
1 단계: Pi I2C 활성화
오늘 프로젝트의 핵심은 라즈베리 파이뿐만 아니라 ADS1115 16 비트 I2C 기반 ADC입니다. ADC를 사용하면 Pi 자체에 ADC가 내장되어 있지 않기 때문에 아날로그 센서를 Raspberry Pi에 연결할 수 있습니다. 자체 ADC를 통해 데이터를 가져와 I2C를 통해 라즈베리 파이로 전달합니다. 따라서 Pi와 통신 할 수 있도록 I2C 통신을 활성화해야합니다.
Pi의 I2C 버스는 raspberry pi의 구성 페이지를 통해 활성화 또는 비활성화 할 수 있습니다. 시작하려면 바탕 화면에서 Pi 아이콘을 클릭하고 기본 설정을 선택한 다음 Raspberry pi 구성을 선택하십시오.
구성 페이지가 열립니다. I2C에 대해 활성화 된 라디오 버튼을 확인하고 확인을 클릭하여 저장하고 Pi를 재부팅하여 변경 사항을 적용합니다.
헤드리스 모드에서 Pi를 실행하는 경우 sudo raspi-config를 실행하여 Raspbian 구성 페이지에 액세스 할 수 있습니다 .
2 단계: Adafruit에서 ADS11xx 라이브러리 설치
두 번째로해야 할 일은 ADC에서 값을 가져 오는 파이썬 스크립트를 쉽게 작성할 수 있도록하는 함수와 루틴이 포함 된 ADS11xx 파이썬 라이브러리를 설치하는 것입니다.
이렇게하려면 아래 단계를 따르십시오.
- 실행하여 파이를 업데이트하십시오. sudo apt-get 업데이트 다음 에 sudo apt-get 업그레이드 이것은 설치하기로 선택한 새 소프트웨어에 대한 호환성 문제가 없도록 pi를 업데이트합니다.
- 다음으로 cd ~ 명령을 실행 하여 홈 디렉토리에 있는지 확인하십시오.
- 다음으로 다음을 실행하여 빌드 필수 항목을 설치하십시오. sudo apt-get install build-essential python-dev python-smbus git
- 다음으로 실행하여 ADS 라이브러리가 포함 된 Adafruit git 폴더를 복제합니다. git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- 복제 된 파일의 디렉토리로 변경하고 다음을 사용하여 설정 파일을 실행합니다. cd Adafruit_Python_ADS1x1z 다음에 sudo python setup.py install
이 작업이 완료되면 설치가 완료됩니다.
아래 회로도 섹션에 표시된대로 ADS1115를 연결하여 라이브러리 설치를 테스트하고 먼저 라이브러리와 함께 제공된 샘플 코드를 실행하여 다음을 사용하여 해당 폴더로 변경할 수 있습니다. cd 예제 및 다음을 사용하여 예제 실행; 파이썬 simpletest.py
3 단계: Adafruit.IO Python 모듈 설치
소개에서 언급했듯이 전압 및 전류 센서의 판독 값을 Adafruit IO Cloud에 게시하여 전 세계에서 보거나 IFTTT와 연결하여 원하는 작업을 수행 할 수 있습니다.
Adafruit.IO python 모듈에는 데이터를 클라우드로 쉽게 스트리밍하기 위해 활용할 서브 루틴과 함수가 포함되어 있습니다. 아래 단계에 따라 모듈을 설치하십시오.
- cd ~ 를 실행하여 홈 디렉토리로 돌아갑니다.
- 다음으로 명령을 실행하십시오. sudo pip3 설치 adafruit-io . Adafruit IO python 모듈을 설치해야합니다.
4 단계: Adafruit.io 계정 설정
Adafruit IO를 사용하려면 먼저 계정을 만들고 AIO 키를 얻어야합니다. 사용자 이름과 함께이 AIO 키는 Python 스크립트에서 Adafruit IO 클라우드 서비스에 액세스하는 데 사용됩니다. 계정을 만들려면 다음을 방문하십시오. https://io.adafruit.com/에서 무료로 시작하기 버튼을 클릭하고 필요한 모든 매개 변수를 입력합니다. 가입이 완료되면 홈페이지 오른쪽에 AIO 키보기 버튼이 표시됩니다.
AIO 키를 받으려면 클릭하십시오.
키가 복사되었으므로 준비가 완료되었습니다. 그러나 클라우드 서비스로 데이터를 보내는 프로세스를 더 쉽게 만들기 위해 데이터를 보낼 피드를 만들 수도 있습니다. (AIO 피드에 대한 자세한 정보는 여기에서 찾을 수 있습니다). 기본적으로 전력 소비량을 보낼 것이므로 전력 피드를 생성합니다. 피드를 생성하려면 AIO 페이지 상단의 "피드"를 클릭하고 새 피드 추가를 클릭하십시오.
원하는대로 이름을 지정하되 단순하게 유지하기 위해 에너지 소비라고 부르겠습니다. 또한 전압 및 전류에 대한 피드를 만들고 데이터를 게시하도록 코드를 조정할 수도 있습니다.
이 모든 것이 준비되었으므로 이제 프로젝트 구축을 시작할 준비가되었습니다.
Pi 에너지 미터 회로도
Raspberry Pi Energy Monitor 프로젝트 의 회로도 는 비교적 복잡하며 앞서 언급 한대로 AC 전압에 연결하는 것이 포함됩니다. 감전을 피하기 위해 필요한 모든 예방 조치를 취하십시오. AC 전압을 안전하게 처리하는 데 익숙하지 않은 경우 전원을 공급하지 않고 브레드 보드에이를 구현하는 즐거움을 만끽하십시오.
회로도에는 전압 및 전류 센서 장치를 ADC에 연결 한 다음 센서에서 Raspberry Pi로 데이터를 보냅니다. 연결을보다 쉽게 수행 할 수 있도록 각 장치의 회로도가 자체적으로 제공됩니다.
전류 센서 회로도
아래 회로도에 표시된대로 전류 센서의 구성 요소를 연결합니다.
이 프로젝트에 사용 된 전류 트랜스포머는 아래에 나와 있습니다. 3 개의 전선, 즉 접지, Cout 및 3.3V가 있음을 알 수 있습니다.
전압 센서 회로도
아래 회로도에 표시된대로 전압 센서의 구성 요소를 연결합니다.
처리 장치 회로도
라즈베리 파이에 연결된 ADC (ADS1115)와 ADS1115의 핀 A0 및 A1에 각각 연결된 전류 및 전압 센서의 출력과 함께 모든 것을 연결합니다.
두 감지 장치의 GND 핀이 ADC 또는 라즈베리 파이의 GND에 연결되어 있는지 확인합니다.
흔들림을 줄이기 위해 Protoboard에 전압 및 전류 센서를 구현했습니다. 또한 브레드 보드에 AC 주전원 회로를 구축하지 않는 것이 좋습니다. 동일한 작업을 수행하면 최종 설정이 아래 이미지와 같을 수 있습니다.
연결이 완료되었으므로 이제 프로젝트에 대한 코드를 작성할 준비가되었습니다.
Pi 에너지 미터 용 Python 코드
라즈베리 파이 프로젝트에서 평소처럼 파이썬을 사용하여 프로젝트 코드를 개발할 것입니다. 바탕 화면에서 라즈베리 파이 아이콘을 클릭하고 프로그래밍을 선택하고 사용하려는 Python 버전을 실행하십시오. 저는 Python 3을 사용할 것이며 Python 3의 일부 기능은 Python 2.7에서 작동하지 않을 수 있습니다. 따라서 Python 2.7을 사용하려면 코드를 크게 변경해야 할 수도 있습니다. 코드를 작은 조각으로 나누고 마지막에 전체 코드를 공유하겠습니다.
준비된? 멋있는.
코드의 알고리즘은 간단합니다. 우리의 파이썬 스크립트는 전압 및 전류 판독 값에 대해 ADS1115 (I2C를 통해)를 쿼리합니다. 수신 된 아날로그 값이 수신되고 샘플링되며 전압 및 전류의 제곱 평균 값이 획득됩니다. 킬로와트 단위의 전력이 계산되어 특정 간격 후에 Adafruit IO 피드로 전송됩니다.
사용할 모든 라이브러리를 포함하여 스크립트를 시작합니다. 여기에는 시간 및 수학 라이브러리와 같은 내장 라이브러리와 이전에 설치 한 다른 라이브러리가 포함됩니다.
import 시간 import Adafruit_ADS1x15 from Adafruit_IO import * import math
다음으로, 앞으로의 물리적 ADC 주소를 지정하는 데 사용될 ADS1115 라이브러리의 인스턴스를 생성합니다.
# ADS1115 ADC (16 비트) 인스턴스 생성.. adc1 = Adafruit_ADS1x15.ADS1115 ()
다음으로 adafruit IO 사용자 이름과 "AIO"키를 제공합니다.
username = '이 따옴표 사이에 사용자 이름을 입력하십시오' AIO_KEY = 'your aio key'aio = Client (username, AIO_KEY)
열쇠를 안전하게 보관하십시오. 귀하의 허가없이 adafruit io 계정에 액세스하는 데 사용할 수 있습니다.
다음으로 ADC의 이득, 원하는 샘플 수와 같은 몇 가지 변수를 만들고 절대 중요하지 않은 반올림을 설정합니다.
GAIN = 1 # 잠재적 값은 ads1015 / 1115 문서를 참조하세요. samples = 200 # ads에서 가져온 샘플 수 1115 곳 = int (2) # 반올림 설정
다음으로 전류와 전압을 모니터링하는 while 루프를 생성하고 데이터를 간격으로 Adafruit io로 보냅니다. while 루프는 모든 변수를 0으로 설정하여 시작합니다.
while True: # 리셋 변수 개수 = int (0) datai = datav = maxIValue = 0 # 샘플 내 최대 전류 값 maxVValue = 0 # 샘플 내 최대 전압 값 IrmsA0 = 0 # 제곱 평균 제곱 전류 VrmsA1 = 0 # 제곱 평균 제곱 전압 ampsA0 = 0 # 현재 피크 볼트 A1 = 0 # 전압 킬로와트 = float (0)
AC 회로로 작업하기 때문에 SCT-013의 출력과 전압 센서는 사인파가 될 것이므로 사인파에서 전류와 전압을 계산하려면 피크 값을 얻어야합니다. 피크 값을 얻기 위해 전압과 전류 (200 샘플)를 모두 샘플링하고 가장 높은 값 (피크 값)을 찾습니다.
범위 (샘플)의 카운트 : datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) 새 maxValue를의 경우 #보고 인쇄 (타이) 타이> maxIValue 경우: maxIValue = 타이를 하는 경우 datav> maxVValue: maxVValue = datav
다음으로 ADC 값을 실제 값으로 변환하여 값을 표준화 한 다음 Root Mean Square 방정식을 사용하여 RMS 전압과 전류를 찾습니다.
# 샘플 데이터를 사용하여 전류 계산 # 사용중인 sct-013은 30A에서 1000mV 출력에 대해 교정됩니다. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, places) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, places) # 전압 계산 VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1, places) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1, places) print ('Voltage: {0}'. format (voltsA1)) print ('Current: {0} '. format (ampsA0))
이 작업이 완료되면 전력이 계산되고 데이터가 adafruit.io에 게시됩니다.
#calculate power power = round (ampsA0 * voltsA1, places) print ('Power: {0}'. format (power)) #post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', 전력)
무료 계정의 경우 adafruit는 요청 또는 데이터 업로드 사이에 약간의 시간 지연이있을 것을 요구합니다.
# 루프 시간을 반복하기 전에 기다 립니다.sleep (0)
프로젝트 의 전체 코드 는이 페이지 하단에 있습니다.
데모
코드가 완료되면 저장하고 파이썬 IDE에서 실행 버튼을 누르십시오. 그 전에 Pi가 WiFi 또는 LAN을 통해 인터넷에 연결되어 있고 aio 키와 사용자 이름이 올바른지 확인하십시오. 잠시 후 Adafruit.io의 피드에 표시된 에너지 데이터 (전력)를보기 시작해야합니다. 데모 중 내 하드웨어 설정은 다음과 같았습니다.
더 나아가 adafruit.io에 대시 보드를 만들고 그래프 구성 요소를 추가하여 아래 이미지와 같이 데이터의 그래픽보기를 얻을 수 있습니다.
이제 전 세계 어디서나 에너지 소비를 모니터링 할 수 있습니다. 정말 정확한 솔루션으로 변환하기 위해 수행해야 할 미세 조정 및 보정이 훨씬 더 많이 필요하다는 점에 유의하는 것이 중요하지만, 이것이 진행하는 데 필요한 거의 모든 것을 제공한다고 생각합니다.
댓글 섹션을 통해 프로젝트에 대한 질문을 자유롭게 보내주십시오. 최대한 많은 답변을 드리겠습니다. 다음 시간까지.