Sẽ rất thú vị nếu chúng ta có thể tự quan sát được công suất tiêu thụ của các thiết bị điện trong nhà theo thời gian thực, ví dụ như tivi, máy lạnh, laptop..., từ đó giúp chúng ta có sự điều chỉnh thích hợp giúp tiết kiệm hóa đơn tiền điện hàng tháng. Sẽ càng thú vị hơn nếu thông tin này có thể truy cập mọi lúc, mọi nơi thông qua các thiết bị di động như điện thoại, máy tính bảng hay laptop. Sau đây mình sẽ hướng dẫn cho các bạn cách dùng Raspberry pi kết hợp với Watt meter để xây dựng hệ thống quan sát này.
Thiết bị phần cứng cần thiết bao gồm
Bo mạch Raspberry Pi
Phần mềm
Ứng dụng
Thiết bị phần cứng cần thiết bao gồm
- Một bo mạch Raspberry Pi (kèm nguồn micro USB, thẻ SD).
- DDS238: công tơ mini đo công suất có phát xung đầu ra (tôi dùng loại 1600 xung/kWh).
- Điện trở 300 ohm, dây nối.
Bo mạch Raspberry Pi
DDS238: công tơ mini
Sơ đồ kết nối giữa các chân GPIO của Raspberry và cổng S0-, S0+ của DDS238
Phần mềm
- Download và cài đặt hệ điều hành cho RPI lên thẻ SD dùng "Win 32 Disk Imager"
- Đăng ký một tài khoản trên Thingspeak tại https://thingspeak.com/users/sign_up, và tạo channel để lưu dữ liệu
- Sau khi tạo channel, chú ý thông tin quan trọng của channel là API Keys (quyền đọc/ghi dữ liệu)
- Từ máy tính, dùng phần phần mềm Putty để đăng nhập (ssh) vào Raspberry, tài khoản (pi/raspberry)
- Tạo một file python tên monitor.py với nội dung sau, chú ý thay nội dung của biến THINGSPEAKKEY với API Key bên trên
Code:
######################################### import RPi.GPIO as GPIO import time import datetime import os import sys import urllib # URL functions import urllib2 # URL functions def sendData(url,key,field1,field2,temp, counter): values = {'api_key' : key,'field1' : temp,'field2' : counter} postdata = urllib.urlencode(values) req = urllib2.Request(url, postdata) # Send data to Thingspeak response = urllib2.urlopen(req, None, 5) html_string = response.read() response.close() def main(): THINGSPEAKURL = 'https://api.thingspeak.com/update' THINGSPEAKKEY = '6E7EN3J2EAZ1ORQD' GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP) counter = 0 t0 = datetime.datetime.now() while True: #Check pulse input_state = GPIO.input(18) if input_state == False: counter = counter + 1 print('Pulse detected: ' + str(counter)) time.sleep(0.1) #Pulse duration t1 = datetime.datetime.now() duration = (t1 - t0).total_seconds() if counter > 0: power = 2250/duration print('One pulse after (s): ' + str(duration) + '. P: ' + str(power)) #Save to thingspeak sendData(THINGSPEAKURL, THINGSPEAKKEY, 'field1', 'field2', 0.625, power) #reset counter counter = 0 t0 = datetime.datetime.now() if __name__=="__main__": main() #########################################
- Khởi động chương trình python: python monitor.py
- Cắm tải (laptop, tivi, tủ lạnh ....)
- Dùng mobile, đăng nhập vào thingspeak để theo dõi công suất tiêu thụ của tải theo thời gian thực (cho phép tuỳ biến biểu đồ và tạo các dashboard)
Ứng dụng
- Theo dõi công suất tiêu thụ của các thiết bị điên trong gia đình, thay thế những thiết bị dùng quá nhiều điện
- Bố mẹ đi làm nhưng vẫn biết trẻ ở nhà có xem TV quá nhiều hay không!
- Theo dõi công xuất phát của các hệ thống năng lượng gió, mặt trời nối lưới (grid tie).