- Sơ đồ khối đồng hồ đo năng lượng thông minh Raspberry Pi
- Các thành phần bắt buộc
- Chuẩn bị Pi
- Sơ đồ mạch đồng hồ năng lượng Pi
- Mã Python cho Đồng hồ năng lượng Pi
- Bản giới thiệu
Màn hình Năng lượng, cho dù bao phủ toàn bộ căn hộ hay được triển khai để giám sát chỉ một thiết bị, cung cấp một cách để bạn theo dõi mức tiêu thụ của mình và thực hiện các điều chỉnh cần thiết. Trong khi chúng ngày càng có sẵn trên thị trường, nhà sản xuất trong tôi vẫn cảm thấy đó là một ý tưởng tuyệt vời để xây dựng một phiên bản DIY có thể được điều chỉnh để đáp ứng các yêu cầu cá nhân cụ thể. Như vậy, đối với hướng dẫn hôm nay, chúng tôi sẽ xây dựng một màn hình Tiêu thụ điện năng của Raspberry Pi có khả năng thu được mức tiêu thụ năng lượng và tải lên Adafruit.io.
Bạn cũng có thể xem Đồng hồ đo năng lượng IoT dựa trên Arduino và Đồng hồ đo năng lượng GSM trả trước mà chúng tôi đã xây dựng trước đó.
Sơ đồ khối đồng hồ đo năng lượng thông minh Raspberry Pi
Dưới đây là sơ đồ khối thể hiện cách thức hoạt động của hệ thống.
Các bác sĩ cho biết thêm:Để lần lượt chọn các đơn vị;
Bộ cảm biến dòng điện : Bộ phận cảm biến dòng điện được tạo thành từ cảm biến dòng điện SCT -013 có thể đo lên đến 100A, tùy thuộc vào phiên bản bạn mua. Cảm biến biến đổi dòng điện đi qua dây dẫn mà nó được kẹp thành dòng điện nhỏ, sau đó được đưa vào ADC thông qua một mạng lưới các bộ chia điện áp.
Bộ phận cảm biến điện áp: Trong khi tôi không thể đặt tay vào mô-đun cảm biến điện áp, Chúng tôi sẽ chế tạo một bộ cảm biến điện áp không biến áp tự chế để đo điện áp bằng cách sử dụng nguyên tắc của bộ chia điện áp. Cảm biến điện áp DIY liên quan đến giai đoạn phân áp nơi điện áp cao được biến đổi thành giá trị phù hợp với đầu vào ADC.
Đơn vị xử lý: Đơn vị xử lý bao gồm ADC và Raspberry pi. ADC lấy tín hiệu tương tự và gửi nó đến mâm xôi pi, sau đó sẽ tính toán lượng điện năng tiêu thụ chính xác và gửi nó đến một đám mây thiết bị được chỉ định. Với mục đích của hướng dẫn này, chúng tôi sẽ sử dụng Adafruit.io làm Đám mây thiết bị của mình. Chúng tôi cũng đã xây dựng
Tuyên bố từ chối trách nhiệm: Trước khi chúng tôi bắt đầu, điều quan trọng cần đề cập là dự án này liên quan đến việc kết nối với nguồn cung cấp AC rất nguy hiểm và có thể gây tử vong nếu không được xử lý an toàn. Đảm bảo bạn có kinh nghiệm làm việc xung quanh AC trước khi thử điều này.
Sẵn sàng? Hãy đi sâu vào.
Các thành phần bắt buộc
Các thành phần sau được yêu cầu để xây dựng dự án này;
- Raspberry Pi 3 hoặc 4 (quy trình phải giống với RPI2 với WiFi Dongle)
- ADS1115 16 bit I2C ADC
- YHDC SCT-013-000
- Bộ chuyển đổi nguồn 2.5A 5V MicroUSB
- Điện trở 2W 10K (1)
- Điện trở 1 / 2W 10K (2)
- Điện trở 33ohms (1)
- Điện trở 2W 3.3k (1)
- Điốt IN4007 (4)
- Điốt Zener 3.6v (1)
- Chiết áp 10k (hoặc Cài đặt sẵn) (1)
- Tụ điện 50v 1uf
- Tụ điện 50v 10uf (2)
- BreadBoard
- Dây nhảy
- Các phụ kiện khác để sử dụng Raspberry Pi.
Bên cạnh các thành phần phần cứng được liệt kê ở trên, dự án cũng yêu cầu một số thư viện và phụ thuộc phần mềm mà chúng tôi sẽ cài đặt khi tiếp tục.
Mặc dù hướng dẫn này sẽ hoạt động bất kể hệ điều hành Raspberry pi được sử dụng, tôi sẽ sử dụng Hệ điều hành Raspberry Pi chạy trên Pi 3 (cũng sẽ hoạt động trên Pi 4) và tôi sẽ cho rằng bạn đã quen với việc thiết lập Raspberry Pi với Hệ điều hành Raspbian Buster (khá giống với các phiên bản trước) và bạn biết cách SSH vào hệ điều hành này bằng cách sử dụng một phần mềm đầu cuối như hyper. Nếu bạn gặp vấn đề với bất kỳ vấn đề nào trong số này, có rất nhiều Hướng dẫn về Raspberry Pi trên trang web này có thể trợ giúp
Chuẩn bị Pi
Trước khi chúng tôi bắt đầu nối dây các thành phần và mã hóa, có một số tác vụ đơn giản chúng tôi cần thực hiện trên raspberry pi để đảm bảo rằng chúng tôi đã sẵn sàng sử dụng.
Bước 1: Bật Pi I2C
Cốt lõi của dự án ngày nay không chỉ là raspberry pi mà là ADC dựa trên ADS1115 16bit I2C. ADC cho phép chúng tôi kết nối các cảm biến tương tự với Raspberry Pi vì bản thân Pi không có ADC sẵn có. Nó lấy dữ liệu thông qua ADC của chính nó và chuyển tiếp nó đến mâm xôi pi thông qua I2C. Do đó, chúng ta cần kích hoạt giao tiếp I2C trên Pi để nó có thể giao tiếp với nó.
Bus I2C của Pi có thể được bật hoặc tắt thông qua trang cấu hình của raspberry pi. Để khởi chạy nó, hãy nhấp vào Biểu tượng Pi trên màn hình và chọn các tùy chọn, sau đó là cấu hình Raspberry pi.
Điều này sẽ mở trang cấu hình. Kiểm tra nút radio đã bật cho I2C và nhấp vào OK để lưu nó và khởi động lại Pi để thực hiện các thay đổi.
Nếu bạn đang chạy Pi ở chế độ không đầu, bạn có thể truy cập trang cấu hình Raspbian bằng cách chạy sudo raspi-config.
Bước 2: Cài đặt thư viện ADS11xx từ Adafruit
Điều thứ hai chúng ta cần làm là cài đặt thư viện python ADS11xx chứa các hàm và quy trình giúp chúng ta dễ dàng viết script python để tìm nạp các giá trị từ ADC.
Làm theo các bước dưới đây để thực hiện việc này.
- Cập nhật số pi của bạn bằng cách chạy; sudo apt-get update sau bởi sudo apt-get upgrade này sẽ cập nhật pi đảm bảo không có vấn đề tương thích với bất kỳ phần mềm mới, bạn chọn cài đặt.
- Tiếp theo, chạy lệnh cd ~ để đảm bảo bạn đang ở trong thư mục chính.
- Tiếp theo, cài đặt các bản build-cần thiết bằng cách chạy; sudo apt-get install build-essential python-dev python-smbus git
- Tiếp theo, sao chép thư mục Adafruit git có chứa thư viện ADS bằng cách chạy; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Thay đổi vào thư mục của tệp được sao chép và chạy tệp thiết lập bằng cách sử dụng; cd Adafruit_Python_ADS1x1z theo sau là sudo python setup.py install
Với việc này, quá trình cài đặt sẽ hoàn tất.
Bạn có thể kiểm tra cài đặt thư viện bằng cách kết nối ADS1115 như được hiển thị trong phần sơ đồ bên dưới và chạy mã mẫu đi kèm với thư viện trước tiên, thay đổi vào thư mục của nó bằng cách sử dụng; cd ví dụ và chạy ví dụ bằng cách sử dụng; python simpletest.py
Bước 3: Cài đặt Mô-đun Python Adafruit.IO
Như đã đề cập trong phần giới thiệu, chúng tôi sẽ xuất bản các bài đọc từ cảm biến điện áp và dòng điện lên Adafruit IO Cloud mà từ đó nó có thể được xem từ khắp nơi trên thế giới hoặc kết nối với IFTTT để thực hiện bất kỳ hành động nào bạn muốn.
Mô-đun python Adafruit.IO chứa các chương trình con và chức năng mà chúng tôi sẽ tận dụng để dễ dàng truyền dữ liệu lên đám mây. Làm theo các bước bên dưới để cài đặt mô-đun.
- Chạy cd ~ để trở về thư mục chính.
- Tiếp theo, chạy lệnh; sudo pip3 install adafruit-io . Nó sẽ cài đặt mô-đun python IO Adafruit.
Bước 4: Thiết lập tài khoản Adafruit.io của bạn
Để sử dụng Adafruit IO, trước tiên bạn cần tạo tài khoản và lấy khóa AIO. Khóa AIO này cùng với tên người dùng của bạn sẽ được sử dụng bởi tập lệnh python của bạn để truy cập dịch vụ đám mây Adafruit IO. Để tạo một tài khoản, hãy truy cập; https://io.adafruit.com/, nhấp vào nút bắt đầu miễn phí và điền vào tất cả các thông số cần thiết. Khi Đăng ký hoàn tất, bạn sẽ thấy nút View AIO Key ở bên phải trang chủ của mình.
Nhấp vào nó để nhận khóa AIO của bạn.
Với khóa được sao chép, chúng tôi đã sẵn sàng để bắt đầu. Tuy nhiên, để làm cho quá trình gửi dữ liệu lên dịch vụ đám mây dễ dàng hơn, bạn cũng có thể tạo nguồn cấp dữ liệu mà dữ liệu sẽ được gửi đến. (có thể tìm thêm thông tin về nguồn cấp dữ liệu AIO tại đây). Vì về cơ bản chúng tôi sẽ gửi Điện năng tiêu thụ, chúng tôi sẽ tạo nguồn cấp cho năng lượng. Để tạo nguồn cấp dữ liệu, hãy nhấp vào “nguồn cấp dữ liệu” ở đầu trang AIO và nhấp vào thêm nguồn cấp dữ liệu mới.
Đặt cho nó bất cứ cái tên nào bạn muốn nhưng để mọi thứ đơn giản, tôi sẽ gọi nó là tiêu thụ năng lượng. Bạn cũng có thể quyết định tạo nguồn cấp dữ liệu cho điện áp và dòng điện và điều chỉnh mã để xuất bản dữ liệu cho chúng.
Với tất cả những điều này, chúng tôi đã sẵn sàng để bắt đầu xây dựng dự án.
Sơ đồ mạch đồng hồ năng lượng Pi
Các sơ đồ cho dự án Raspberry Pi Energy Monitor tương đối phức tạp và nó liên quan đến việc kết nối với điện áp AC như đã đề cập trước đó, vui lòng đảm bảo bạn thực hiện tất cả các biện pháp phòng ngừa cần thiết để tránh bị điện giật. Nếu bạn không quen với việc xử lý điện áp AC một cách an toàn, hãy để niềm vui khi thực hiện điều này trên bảng mạch, mà không cần cấp nguồn, là thỏa đáng.
Các sơ đồ liên quan đến việc kết nối đơn vị cảm biến điện áp và dòng điện với ADC, sau đó sẽ gửi dữ liệu từ các cảm biến đến Raspberry Pi. Để làm cho các kết nối dễ theo dõi hơn, các sơ đồ cho mỗi đơn vị được trình bày riêng.
Sơ đồ cảm biến hiện tại
Kết nối các thành phần cho cảm biến hiện tại như thể hiện trong sơ đồ bên dưới.
Máy biến dòng được sử dụng trong dự án này được hiển thị bên dưới, như bạn có thể thấy, chúng tôi có ba dây từ nó, đó là nối đất, Cout và 3.3V
Sơ đồ cảm biến điện áp
Kết nối các thành phần cho cảm biến điện áp như trong sơ đồ bên dưới.
Sơ đồ đơn vị xử lý
Kết nối mọi thứ với nhau bằng ADC (ADS1115) được kết nối với pi mâm xôi và đầu ra của cảm biến dòng điện và điện áp được kết nối với chân A0 và A1 của ADS1115 tương ứng.
Đảm bảo các chân GND của cả hai đơn vị cảm biến được kết nối với GND của ADC hoặc pi raspberry.
Để làm cho mọi thứ bớt rung lắc hơn một chút, tôi đã triển khai các cảm biến điện áp và dòng điện trên Protoboard. Ngoài ra, không nên xây dựng một mạch nguồn AC trên breadboard. Nếu bạn làm tương tự, thiết lập cuối cùng của bạn có thể giống như hình ảnh bên dưới;
Với các kết nối hoàn tất, bây giờ chúng tôi đã sẵn sàng để viết mã cho dự án.
Mã Python cho Đồng hồ năng lượng Pi
Như thường lệ với các dự án raspberry pi của chúng tôi, chúng tôi sẽ phát triển mã cho dự án bằng python. Nhấp vào biểu tượng quả mâm xôi pi trên màn hình, chọn lập trình và khởi chạy bất kỳ phiên bản python nào bạn muốn sử dụng. Tôi sẽ sử dụng Python 3 và một số hàm trong python 3 có thể không hoạt động đối với python 2.7. Vì vậy, có thể cần phải thực hiện một số thay đổi đáng kể đối với mã nếu bạn muốn sử dụng python 2.7. Tôi sẽ phân tích mã thành các đoạn nhỏ và chia sẻ mã hoàn chỉnh với bạn ở phần cuối.
Sẵn sàng? Mát mẻ.
Thuật toán đằng sau mã rất đơn giản. Tập lệnh python của chúng tôi truy vấn ADS1115 (trên I2C) để biết điện áp và dòng điện. Giá trị tương tự nhận được sẽ được nhận, được lấy mẫu và thu được giá trị bình phương căn bậc hai của điện áp và dòng điện. Công suất tính bằng kilowatt được tính toán và gửi đến nguồn cấp dữ liệu IO của Adafruit sau những khoảng thời gian cụ thể.
Chúng tôi bắt đầu tập lệnh bằng cách bao gồm tất cả các thư viện mà chúng tôi sẽ sử dụng. Điều này bao gồm các thư viện tích hợp sẵn như thư viện thời gian và toán học và các thư viện khác mà chúng tôi đã cài đặt trước đó.
nhập thời gian nhập Adafruit_ADS1x15 từ Adafruit_IO nhập * nhập toán
Tiếp theo, chúng tôi tạo một phiên bản của thư viện ADS1115 sẽ được sử dụng để giải quyết ADC vật lý về sau.
# Tạo phiên bản ADS1115 ADC (16-bit).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Tiếp theo, cung cấp tên người dùng IO adafruit và khóa “AIO”.
username = 'nhập tên người dùng của bạn vào giữa dấu ngoặc kép này' AIO_KEY = 'your aio key' aio = Client (tên người dùng, AIO_KEY)
Vui lòng giữ chìa khóa an toàn. Nó có thể được sử dụng để truy cập vào tài khoản adafruit io của bạn mà không cần bạn cho phép.
Tiếp theo, chúng tôi tạo một số biến như mức tăng cho ADC, số lượng mẫu chúng tôi muốn và đặt làm tròn chắc chắn không quan trọng.
GAIN = 1 # xem tài liệu ads1015 / 1115 để biết các giá trị tiềm năng. mẫu = 200 # số mẫu lấy từ quảng cáo1115 địa điểm = int (2) # đặt làm tròn
Tiếp theo, Chúng tôi tạo một vòng lặp trong khi để theo dõi dòng điện và điện áp và gửi dữ liệu đến Adafruit io theo từng khoảng thời gian. Vòng lặp while bắt đầu bằng cách đặt tất cả các biến thành 0.
trong khi True: # biến đặt lại count = int (0) datai = datav = maxIValue = 0 # giá trị hiện tại max trong mẫu maxVValue = 0 # giá trị điện áp max trong mẫu IrmsA0 = 0 #root trung bình dòng điện bình phương VrmsA1 = 0 # điện áp bình phương trung bình gốc ampsA0 = 0 # volt đỉnh dòng điện A1 = 0 # kilowatts điện áp = float (0)
Vì chúng ta đang làm việc với các mạch điện xoay chiều, đầu ra của SCT-013 và cảm biến điện áp sẽ là một sóng sinewave, do đó Để tính dòng điện và điện áp từ sóng sin, chúng ta sẽ cần lấy các giá trị đỉnh. Để có được các giá trị đỉnh, chúng tôi sẽ lấy mẫu cả điện áp và dòng điện (200 mẫu), và tìm các giá trị cao nhất (giá trị đỉnh).
cho số lượng trong phạm vi (mẫu): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN))))) # xem bạn có bản in maxValue mới (datai) nếu datai> maxIValue: maxIValue = datai nếu datav> maxVValue: maxVValue = datav
Tiếp theo, chúng tôi chuẩn hóa các giá trị bằng cách chuyển đổi từ giá trị ADC sang giá trị thực, sau đó chúng tôi sử dụng phương trình Root Mean Square để tìm điện áp và dòng điện RMS.
# tính toán dòng điện bằng cách sử dụng dữ liệu được lấy mẫu # sct-013 đang được sử dụng được hiệu chỉnh cho đầu ra 1000mV @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, place) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, place) # Tính điện áp VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1, place) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1, place) print ('Voltage: {0}'. format (voltsA1)) print ('Dòng điện: {0} '. Format (ampsA0))
Khi điều này được thực hiện, công suất được tính toán và dữ liệu được xuất bản trên adafruit.io
#calculate power power = round (ampsA0 * voltsA1, place) print ('Power: {0}'. format (power)) #post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', power)
Đối với các tài khoản miễn phí, adafruit yêu cầu rằng có một thời gian trễ giữa các lần yêu cầu hoặc tải lên dữ liệu.
# Chờ trước khi lặp lại loop time.sleep (0)
Các mã hoàn chỉnh cho dự án có sẵn ở dưới cùng của trang này
Bản giới thiệu
Với mã hoàn tất, hãy lưu nó và nhấn nút chạy trên IDE python. Trước đó, hãy đảm bảo Pi được kết nối với internet qua WiFi hoặc LAN, khóa aio và tên người dùng của bạn là chính xác. Sau một thời gian, bạn sẽ bắt đầu thấy dữ liệu năng lượng (sức mạnh) được hiển thị trên nguồn cấp dữ liệu trên Adafruit.io. Thiết lập phần cứng của tôi trong bản demo như thế này
Để tiến xa hơn, bạn có thể tạo trang tổng quan trên adafruit.io và thêm một thành phần biểu đồ để bạn có thể có được chế độ xem đồ họa của dữ liệu như được hiển thị trong hình ảnh bên dưới.
Vậy là xong, bạn có thể theo dõi mức tiêu thụ năng lượng của mình từ mọi nơi trên thế giới. Điều quan trọng cần lưu ý là chắc chắn phải thực hiện nhiều tinh chỉnh và hiệu chỉnh hơn nữa để biến nó thành một giải pháp thực sự chính xác, nhưng tôi tin rằng điều này cung cấp cho bạn hầu hết mọi thứ bạn cần để tiến hành.
Hãy đặt câu hỏi cho tôi về dự án qua phần bình luận. Tôi sẽ cố gắng trả lời càng nhiều càng tốt. Cho đến thời điểm tiếp theo.