- Структурна схема вимірювача енергії Raspberry Pi
- Необхідні компоненти
- Підготовка Пі
- Схема електричного лічильника енергії Пі
- Код Python для вимірювача енергії Pi
- Демо
Енергомонітори, незалежно від того, чи охоплюють вони всю квартиру, чи розміщені для спостереження лише за одним приладом, забезпечують вам спосіб відстеження споживання та внесення необхідних коригувань. Незважаючи на те, що вони все більше стають доступними на ринку, виробник у мене все ще вважає, що буде чудовою ідеєю створити версію "зроби сам", яка може бути адаптована до конкретних особистих вимог. Таким чином, для сьогоднішнього підручника ми створимо монітор споживання енергії Raspberry Pi, здатний отримувати споживання енергії та завантажувати на Adafruit.io.
Ви також можете ознайомитися з вимірювачем енергії IoT на базі Arduino та з передплаченим лічильником енергії GSM, який ми створили раніше.
Структурна схема вимірювача енергії Raspberry Pi
Блок-схема, що показує, як працює система, наведена нижче.
UВибирати одиниці один за одним;
Блок вимірювання струму : Блок вимірювання струму складається з датчика струму SCT -013, який може вимірювати до 100 А, залежно від придбаної версії. Датчик перетворює струм, що проходить через провід, на якому він затискається, у невеликий струм, який потім подається в АЦП через мережу дільників напруги.
Блок вимірювання напруги : Хоча я не зміг накласти руку на модуль датчика напруги, ми побудуємо "зроби сам" безтрансформаторний датчик напруги, який вимірює напругу за принципом дільників напруги. Датчик напруги "зроби сам" включає ступінь дільника напруги, де висока напруга перетворюється на значення, придатне для введення в АЦП.
Блок обробки: Блок обробки включає АЦП і Raspberry pi. АЦП приймає аналоговий сигнал і передає його на малиновий пі, який потім обчислює точну кількість споживаної енергії і відправляє його у призначену хмару пристрою. Для цілей цього підручника ми будемо використовувати Adafruit.io як нашу Хмару пристроїв. Ми також побудували інші
Застереження: Перш ніж розпочати, важливо зазначити, що цей проект передбачає підключення до джерела змінного струму, яке є небезпечним і може призвести до летального результату, якщо з ним не працювати безпечно. Переконайтеся, що у вас є досвід роботи з AC замість цього.
Готові? Зануримось.
Необхідні компоненти
Для побудови цього проекту необхідні наступні компоненти;
- Raspberry Pi 3 або 4 (процес повинен бути однаковим для RPI2 з WiFi Dongle)
- ADS1115 16-бітний I2C АЦП
- YHDC SCT-013-000
- 2,5А адаптер живлення MicroUSB на 5 В
- Резистор потужністю 2 Вт (1)
- 1 / 2W 10K резистор (2)
- Резистор 33 Ом (1)
- Резистор 2 Вт 3,3 тис. (1)
- Діод IN4007 (4)
- 3.6v стабілітрон (1)
- 10k потенціометр (або попередньо встановлений) (1)
- Конденсатор 50v 1uf
- Конденсатор 50v 10uf (2)
- Хлібна дошка
- Дріт перемички
- Інші аксесуари для використання Raspberry Pi.
Окрім апаратних компонентів, перелічених вище, проект також вимагає деяких програмних залежностей та бібліотек, які ми будемо встановлювати по мірі продовження.
Хоча цей підручник буде працювати незалежно від використовуваної ОС Raspberry Pi, я буду використовувати ОС Busberry Raspberry Pi, що працює на Pi 3 (також повинна працювати на Pi 4), і я вважаю, що Ви знайомі з налаштуванням Raspberry Pi з ОС Raspbian Buster (майже такий самий процес, як і попередні версії), і ви знаєте, як SSH в неї використовувати за допомогою термінального програмного забезпечення, такого як гіпер. Якщо у вас є проблеми з цим, на цьому веб-сайті є безліч підручників з Raspberry Pi, які можуть вам допомогти
Підготовка Пі
Перш ніж розпочати підключення компонентів та кодування, є кілька простих завдань, які нам потрібно виконати на Raspberry Pi, щоб переконатися, що ми готові до роботи.
Крок 1: Увімкнення Pi I2C
В основі сьогоднішнього проекту лежить не просто Raspberry Pi, а 16-бітний ADC на базі ISC ADS1115. АЦП дозволяє нам підключати аналогові датчики до Raspberry Pi, оскільки сам Pi не має вбудованого АЦП. Він приймає дані через власний АЦП і направляє їх до малинового пі через I2C. Таким чином, нам потрібно увімкнути зв'язок I2C на Pi, щоб він міг з ним спілкуватися.
Шину I2C Pi можна ввімкнути або вимкнути через сторінку конфігурації Raspberry Pi. Щоб запустити його, клацніть піктограму Pi на робочому столі та оберіть налаштування з подальшою конфігурацією Raspberry pi.
Це має відкрити сторінку конфігурації. Перевірте включений перемикач для I2C та натисніть кнопку OK, щоб зберегти його та перезавантажте Pi, щоб внести зміни.
Якщо ви запускаєте Pi в режимі без голови, сторінку конфігурації Raspbian можна отримати, запустивши sudo raspi-config.
Крок 2: Встановлення бібліотеки ADS11xx від Adafruit
Друге, що нам потрібно зробити, це встановити бібліотеку пітонів ADS11xx, яка містить функції та підпрограми, які полегшують нам написання сценарію python для отримання значень з АЦП.
Для цього виконайте наведені нижче дії.
- Оновіть свій pi, запустивши; Sudo APT-отримати оновлення з подальшим по Sudo APT-отримати оновлення цього оновить пі запобігає немає проблем сумісності для будь-якого нового програмного забезпечення ви вибрали для установки.
- Потім запустіть команду cd ~, щоб переконатися, що ви перебуваєте у домашньому каталозі.
- Далі встановіть основи побудови, запустивши; sudo apt-get install build-vital python-dev python-smbus git
- Далі клонуйте папку Adafruit git, що містить бібліотеку ADS, запустивши; клон git https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Перейдіть у каталог клонованого файлу та запустіть файл налаштування за допомогою; cd Adafruit_Python_ADS1x1z, за яким слід sudo python setup.py install
Після цього встановлення має бути завершено.
Ви можете протестувати встановлення бібліотеки, підключивши ADS1115, як показано в розділі схеми нижче, і запустити зразок коду, що входить до бібліотеки, спочатку, змінивши її папку за допомогою; cd приклади та запуск прикладу з використанням; python simpletest.py
Крок 3: Встановіть модуль Adafruit.IO Python
Як згадувалось під час вступу, ми будемо публікувати показання датчиків напруги та струму на хмарі Adafruit IO, звідки його можна буде переглядати з усього світу або підключати до IFTTT для виконання будь-яких дій, які ви забажаєте.
Модуль python Adafruit.IO містить підпрограми та функції, якими ми будемо користуватися, щоб легко передавати дані в хмару. Виконайте наведені нижче дії, щоб встановити модуль.
- Запустіть cd ~, щоб повернутися до домашнього каталогу.
- Далі запустіть команду; sudo pip3 встановити adafruit-io . Він повинен встановити модуль пітону Adafruit IO.
Крок 4: Налаштування облікового запису Adafruit.io
Для використання Adafruit IO неодмінно потрібно спочатку створити обліковий запис і отримати ключ AIO. Цей ключ AIO разом із вашим іменем користувача буде використовуватися вашим сценарієм python для доступу до хмарної служби Adafruit IO. Щоб створити обліковий запис, відвідайте; https://io.adafruit.com/, натисніть на кнопку розпочати безкоштовно і заповніть усі необхідні параметри. З Повною реєстрацією ви повинні побачити кнопку Перегляд клавіші AIO праворуч від домашньої сторінки.
Клацніть на ньому, щоб отримати ключ AIO.
З скопійованим ключем ми готові до роботи. Однак, щоб полегшити процес надсилання даних до хмарної служби, ви також можете створити канали, куди будуть надсилатися дані. (більше інформації про те, що таке AIO-канали, можна знайти тут). Оскільки ми в основному будемо надсилати енергоспоживання, ми створимо джерело живлення. Щоб створити стрічку, натисніть «стрічки» у верхній частині сторінки AIO та натисніть на додавання нової стрічки.
Дайте йому будь-яке ім’я, яке хочете, але щоб все було простіше, я називатиму це споживанням енергії. Ви також можете вирішити створити джерела напруги та струму та адаптувати код для публікації даних до них.
З усім цим на місці, ми готові розпочати розробку проекту.
Схема електричного лічильника енергії Пі
Схеми проекту Raspberry Pi Energy Monitor є відносно складними і передбачають підключення до змінної напруги, як уже згадувалося раніше, будь ласка, переконайтесь, що ви вживаєте всіх запобіжних заходів, необхідних для уникнення ураження електричним струмом. Якщо ви не знайомі з безпечним керуванням напругою змінного струму, нехай задоволення від впровадження цього на макетній панелі без його живлення буде задовільним.
Схеми передбачають підключення датчика напруги та струму до АЦП, який потім передає дані від датчиків до Raspberry Pi. Для полегшення з'єднань схеми кожного блоку представлені окремо.
Схема датчика струму
Підключіть компоненти датчика струму, як показано на схемі нижче.
Трансформатор струму, що використовується в цьому проекті, показаний нижче, як ви можете бачити, у нас від нього є три дроти, а саме заземлення, Cout та 3.3V
Схеми датчиків напруги
Підключіть компоненти датчика напруги, як показано на схемі нижче.
Схеми обробного блоку
Підключіть все разом з АЦП (ADS1115), підключеним до малинового пі, та виходом датчиків струму та напруги, підключених до контактів A0 та A1 ADS1115 відповідно.
Переконайтеся, що штифти GND обох датчиків підключені до GND АЦП або малинового пі.
Щоб зробити ситуацію трохи менш хиткою, я застосував датчики напруги та струму на протоборді. Крім того, не рекомендується будувати мережу змінного струму на макетній дошці. Якщо ви зробите те саме, остаточне налаштування може виглядати як на малюнку нижче;
Після завершення з’єднань ми готові написати код проекту.
Код Python для вимірювача енергії Pi
Як завжди з нашими малиновими проектами pi, ми розробимо код проекту за допомогою python. Клацніть на піктограму raspberry pi на робочому столі, виберіть програмування та запустіть будь-яку версію python, яку ви хочете використовувати. Я буду використовувати Python 3, і деякі функції в python 3 можуть не працювати для python 2.7. Тож може знадобитися внести суттєві зміни в код, якщо ви хочете використовувати python 2.7. Я зроблю розбивку коду на невеликі фрагменти та в кінці поділюся з вами повним кодом.
Готові? Класно.
Алгоритм коду простий. Наш скрипт python запитує ADS1115 (над I2C) щодо показників напруги та струму. Отримане аналогове значення приймається, відбирається проба і отримується середньоквадратичне значення напруги та струму. Потужність у кіловатах обчислюється та надходить на подачу Adafruit IO через певні інтервали.
Ми починаємо сценарій, включаючи всі бібліотеки, якими ми будемо користуватися. Це включає вбудовані бібліотеки, такі як бібліотека часу та математики та інші бібліотеки, які ми встановили раніше.
час імпорту імпорт Adafruit_ADS1x15 з Adafruit_IO import * математика імпорту
Далі ми створюємо екземпляр бібліотеки ADS1115, який буде використовуватися для вирішення фізичного АЦП в майбутньому.
# Створіть екземпляр ADS1115 ADC (16-розрядний).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Потім надайте своє ім’я користувача Adafruit IO та ключ “AIO”.
username = 'введіть своє ім'я користувача між цитатами' AIO_KEY = 'ваш ключ aio ' aio = Клієнт (ім'я користувача, AIO_KEY)
Зберігайте ключ у безпеці. Його можна використовувати для доступу до вашого облікового запису adafruit io без вашого дозволу.
Далі ми створюємо деякі змінні, такі як коефіцієнт підсилення для АЦП, кількість вибірок, яку ми хочемо, і встановлюємо округлення, яке, безумовно, не є критичним.
GAIN = 1 # див. Документацію до ads1015 / 1115 щодо потенційних значень. вибірки = 200 # кількість зразків, взятих з оголошень1115 місць = int (2) # набір округлень
Далі ми створюємо цикл while для контролю струму та напруги та з інтервалами надсилаємо дані до Adafruit io. Цикл while починається з встановлення всіх змінних на нуль.
while True: # скидання змінних count = int (0) datai = datav = maxIValue = 0 #max поточне значення в вибірці maxVValue = 0 #max значення напруги в зразку IrmsA0 = 0 # корінь середньоквадратичного струму VrmsA1 = 0 # середньоквадратична напруга ampsA0 = 0 # поточні пікові вольтA1 = 0 # кіловат напруги = поплавок (0)
Оскільки ми працюємо з ланцюгами змінного струму, вихід SCT-013 і датчик напруги будуть синусоїдою, отже, для розрахунку сили струму та напруги від синусоїди нам потрібно буде отримати пікові значення. Щоб отримати пікові значення, ми візьмемо вибірку напруги та струму (200 зразків) та знайдемо найвищі значення (пікові значення).
для підрахунку в діапазоні (зразки): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # подивіться, чи є у вас новий друк maxValue (datai), якщо datai> maxIValue: maxIValue = datai, якщо datav> maxVValue: maxVValue = datav
Далі ми стандартизуємо значення, перетворюючи значення ADC у фактичні значення, після чого використовуємо рівняння середнього квадратного значення, щоб знайти середньоквадратичну напругу та струм.
# обчислити струм за допомогою даних вибірки # використовуваний sct-013 відкалібрований для вихідної напруги 1000 мВ при 30А. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = круглі (IrmsA0, місця) 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} '. Формат (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 (' Використання енергії ', потужність)
Для безкоштовних облікових записів adafruit вимагає деякої затримки часу між запитами або завантаженням даних.
# Зачекайте, перш ніж повторити цикл time.sleep (0)
Повний код для проекту доступний в нижній частині цієї сторінки
Демо
Після завершення коду збережіть його та натисніть кнопку запуску на IDE python. Перед цим переконайтеся, що Pi підключений до Інтернету через Wi-Fi або локальну мережу, і ваш ключ aio та ім’я користувача правильні. Через деякий час ви повинні побачити дані про енергію (потужність), що відображаються на стрічці на Adafruit.io. Під час демонстрації моє апаратне налаштування було таким
Щоб піти далі, ви можете створити інформаційну панель на adafruit.io і додати графічний компонент, щоб отримати графічний вигляд даних, як показано на малюнку нижче.
От і все, хлопці, тепер ви можете контролювати споживання енергії з будь-якої точки світу. Важливо зазначити, що, безумовно, потрібно зробити набагато більше тонкої настройки та калібрування, щоб перетворити це на справді точне рішення, але я вважаю, що це дає вам майже все, що потрібно для продовження.
Не соромтеся записувати мені питання щодо проекту через розділ коментарів. Я постараюся відповісти якомога більше. До наступного разу.