- Блок-схема интеллектуального счетчика энергии Raspberry Pi
- Необходимые компоненты
- Подготовка Пи
- Принципиальная схема счетчика энергии Pi
- Код Python для счетчика энергии Pi
- Демо
Мониторы энергопотребления, охватывающие всю квартиру или развернутые для мониторинга только одного устройства, позволяют вам отслеживать свое потребление и вносить необходимые корректировки. Хотя они становятся все более доступными на рынке, я по-прежнему считаю, что создание самостоятельной версии, которая может быть адаптирована для удовлетворения конкретных личных требований, будет отличной идеей. Таким образом, для сегодняшнего урока мы создадим монитор энергопотребления Raspberry Pi, способный измерять потребление энергии и загружать его на Adafruit.io.
Вы также можете проверить IoT Energy Meter на базе Arduino и Prepaid GSM Energy Meter, которые мы создали ранее.
Блок-схема интеллектуального счетчика энергии Raspberry Pi
Блок-схема, показывающая, как работает система, показана ниже.
Взаимодействие с другими людьмиПодбирать юниты один за другим;
Блок измерения тока: Блок измерения тока состоит из датчика тока SCT -013, который может измерять ток до 100 А, в зависимости от версии, которую вы покупаете. Датчик преобразует ток, проходящий через провод, на котором он зажат, в небольшой ток, который затем подается в АЦП через сеть делителей напряжения.
Блок измерения напряжения: пока мне не удалось достать модуль датчика напряжения, мы сделаем своими руками бестрансформаторный датчик напряжения, который измеряет напряжение, используя принцип делителей напряжения. Датчик напряжения DIY включает в себя каскад делителя напряжения, где высокое напряжение преобразуется в значение, подходящее для ввода в АЦП.
Блок обработки: Блок обработки состоит из АЦП и Raspberry Pi. АЦП принимает аналоговый сигнал и отправляет его на raspberry pi, который затем вычисляет точное количество потребляемой мощности и отправляет его в указанное облако устройства. Для целей этого руководства мы будем использовать Adafruit.io в качестве облака устройств. Мы также построили другие
Отказ от ответственности: прежде чем мы начнем, важно упомянуть, что этот проект включает подключение к источнику переменного тока, что опасно и может быть фатальным, если с ним не обращаться безопасно. Прежде чем пытаться это сделать, убедитесь, что у вас есть опыт работы с AC.
Готов? Давайте погрузимся.
Необходимые компоненты
Для создания этого проекта требуются следующие компоненты;
- Raspberry Pi 3 или 4 (процесс должен быть таким же для RPI2 с Wi-Fi Dongle)
- ADS1115 16-битный I2C АЦП
- YHDC SCT-013-000
- Адаптер питания 2.5A 5V MicroUSB
- Резистор 2Вт 10К (1)
- Резистор 1/2 Вт 10 кОм (2)
- Резистор 33 Ом (1)
- Резистор 2Вт 3.3к (1)
- IN4007 Диод (4)
- Стабилитрон 3,6 В (1)
- Потенциометр 10k (или предустановленный) (1)
- Конденсатор 50 В 1 мкФ
- Конденсатор 50v 10uf (2)
- Хлебная Доска
- Перемычка
- Другие аксессуары для использования Raspberry Pi.
Помимо аппаратных компонентов, перечисленных выше, проекту также требуются некоторые программные зависимости и библиотеки, которые мы будем устанавливать по мере продолжения.
Хотя это руководство будет работать независимо от используемой ОС Raspberry Pi, я буду использовать ОС Raspberry Pi buster, работающую на Pi 3 (также должна работать на Pi 4), и я предполагаю, что вы знакомы с настройкой Raspberry Pi с ОС Raspbian Buster (в значительной степени тот же процесс, что и в предыдущих версиях), и вы знаете, как подключиться к ней по SSH с помощью терминального программного обеспечения, такого как hyper. Если у вас есть проблемы с чем-либо из этого, на этом веб-сайте есть множество руководств по Raspberry Pi, которые могут помочь
Подготовка Пи
Прежде чем мы начнем разводку компонентов и кодирование, нам нужно выполнить несколько простых задач на Raspberry Pi, чтобы убедиться, что мы готовы к работе.
Шаг 1. Включение Pi I2C
В основе сегодняшнего проекта лежит не только Raspberry Pi, но и 16-битный АЦП ADS1115 на базе I2C. АЦП позволяет нам подключать аналоговые датчики к Raspberry Pi, поскольку сам Pi не имеет встроенного АЦП. Он принимает данные через собственный АЦП и пересылает их на Raspberry Pi через I2C. Таким образом, нам нужно включить связь I2C на Pi, чтобы он мог общаться с ним.
Шину I2C Pi можно включить или отключить на странице конфигурации raspberry pi. Чтобы запустить его, щелкните значок Pi на рабочем столе и выберите настройки, а затем настройку Raspberry pi.
Это должно открыть страницу конфигурации. Отметьте включенный переключатель для I2C и нажмите OK, чтобы сохранить его, и перезагрузите Pi, чтобы изменения вступили в силу.
Если вы используете Pi в автономном режиме, страницу конфигурации Raspbian можно получить, запустив sudo raspi-config.
Шаг 2: Установка библиотеки ADS11xx от Adafruit
Второе, что нам нужно сделать, это установить библиотеку python ADS11xx, которая содержит функции и процедуры, которые упрощают нам написание сценария python для получения значений из ADC.
Для этого выполните следующие действия.
- Обновите свой пи, запустив; sudo apt-get update, за которым следует sudo apt-get upgrade, это обновит pi, гарантируя отсутствие проблем совместимости для любого нового программного обеспечения, которое вы выберете для установки.
- Затем запустите команду cd ~, чтобы убедиться, что вы находитесь в домашнем каталоге.
- Затем установите необходимое для сборки, запустив; sudo apt-get install build-essential python-dev python-smbus git
- Затем клонируйте папку Adafruit git, содержащую библиотеку ADS, запустив; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Перейдите в каталог клонированного файла и запустите установочный файл, используя; cd Adafruit_Python_ADS1x1z, а затем sudo python setup.py install.
После этого установка должна быть завершена.
Вы можете протестировать установку библиотеки, подключив ADS1115, как показано в разделе схем ниже, и запустить образец кода, поставляемый с библиотекой, сначала перейдя в ее папку с помощью; cd examples и запуск примера с помощью; python simpletest.py
Шаг 3. Установите модуль Python Adafruit.IO
Как упоминалось во время введения, мы будем публиковать показания датчиков напряжения и тока в облаке ввода-вывода Adafruit, из которого их можно будет просматривать со всего мира или связать с IFTTT для выполнения любых действий, которые вы пожелаете.
Модуль Python Adafruit.IO содержит подпрограммы и функции, которые мы будем использовать, чтобы легко передавать данные в облако. Следуйте инструкциям ниже, чтобы установить модуль.
- Запустите cd ~, чтобы вернуться в домашний каталог.
- Затем запустите команду; sudo pip3 установить adafruit-io . Он должен установить модуль Python Adafruit IO.
Шаг 4: Настройте свой аккаунт Adafruit.io
Для использования Adafruit IO определенно необходимо сначала создать учетную запись и получить ключ AIO. Этот ключ AIO вместе с вашим именем пользователя будет использоваться вашим скриптом Python для доступа к облачной службе Adafruit IO. Чтобы создать учетную запись, посетите; https://io.adafruit.com/, нажмите кнопку «Начать бесплатно» и введите все необходимые параметры. После завершения регистрации вы должны увидеть кнопку View AIO Key справа на главной странице.
Щелкните по нему, чтобы получить ключ AIO.
Когда ключ скопирован, мы готовы к работе. Однако, чтобы упростить процесс отправки данных в облачную службу, вы также можете создать каналы, в которые будут отправляться данные. (более подробную информацию о том, что такое AIO-каналы, можно найти здесь). Поскольку мы в основном будем отправлять данные о потребляемой мощности, мы создадим канал для мощности. Чтобы создать канал, нажмите «каналы» в верхней части страницы AIO и нажмите «Добавить новый канал».
Назовите его как хотите, но для простоты я буду называть это потреблением энергии. Вы также можете создать каналы для напряжения и тока и адаптировать код для публикации в них данных.
Теперь, когда все это готово, мы готовы приступить к созданию проекта.
Принципиальная схема счетчика энергии Pi
Схема для проекта Raspberry Pi Energy Monitor относительно сложна и включает подключение к источнику переменного тока, как упоминалось ранее, пожалуйста, убедитесь, что вы приняли все меры предосторожности, необходимые для предотвращения поражения электрическим током. Если вы не знакомы с безопасным обращением с переменным напряжением, пусть радость реализации этого на макетной плате без питания будет удовлетворительной.
Схемы включают подключение блока датчиков напряжения и тока к АЦП, который затем отправляет данные с датчиков на Raspberry Pi. Чтобы упростить подключение, схемы для каждого блока представлены отдельно.
Схема датчика тока
Подключите компоненты датчика тока, как показано на схемах ниже.
Трансформатор тока, используемый в этом проекте, показан ниже, поскольку вы можете видеть, что у нас есть три провода от него, а именно земля, Cout и 3,3 В.
Схема датчика напряжения
Подключите компоненты датчика напряжения, как показано на схемах ниже.
Схема блока обработки
Подключите все вместе с АЦП (ADS1115), подключенным к raspberry pi, и выходом датчиков тока и напряжения, подключенным к контактам A0 и A1 ADS1115 соответственно.
Убедитесь, что контакты GND обоих датчиков подключены к GND АЦП или Raspberry Pi.
Чтобы сделать вещи менее шаткими, я реализовал датчики напряжения и тока на Protoboard. Также не рекомендуется встраивать на макетную плату сеть переменного тока. Если вы сделаете то же самое, ваша окончательная настройка может выглядеть как на изображении ниже;
После завершения подключения мы готовы написать код для проекта.
Код Python для счетчика энергии Pi
Как обычно с нашими проектами raspberry pi, мы будем разрабатывать код проекта с использованием python. Щелкните значок Raspberry Pi на рабочем столе, выберите программирование и запустите ту версию Python, которую вы хотите использовать. Я буду использовать Python 3, и некоторые функции в python 3 могут не работать для python 2.7. Таким образом, может потребоваться внести существенные изменения в код, если вы хотите использовать python 2.7. Я разобью код на небольшие фрагменты и в конце поделюсь с вами полным кодом.
Готов? Круто.
Алгоритм, лежащий в основе кода, прост. Наш скрипт python запрашивает у ADS1115 (через I2C) показания напряжения и тока. Полученное аналоговое значение принимается, дискретизируется и получается среднеквадратичное значение напряжения и тока. Мощность в киловаттах рассчитывается и отправляется в канал ввода-вывода Adafruit через определенные промежутки времени.
Мы запускаем скрипт с включения всех библиотек, которые мы будем использовать. Сюда входят встроенные библиотеки, такие как библиотека времени и математики, а также другие библиотеки, которые мы установили ранее.
время импорта импорт Adafruit_ADS1x15 из Adafruit_IO импорт * импорт математики
Затем мы создаем экземпляр библиотеки ADS1115, который будет использоваться для адресации физического АЦП в будущем.
# Создать экземпляр ADS1115 ADC (16-бит).. adc1 = Adafruit_ADS1x15.ADS1115 ()
Затем укажите свое имя пользователя adafruit IO и ключ «AIO».
username = 'введите ваше имя пользователя между кавычками' AIO_KEY = 'ваш ключ aio ' aio = Client (имя пользователя, AIO_KEY)
Пожалуйста, сохраните ключ в надежном месте. Его можно использовать для доступа к вашей учетной записи adafruit io без вашего разрешения.
Затем мы создаем некоторые переменные, такие как усиление для АЦП, количество выборок, которые мы хотим, и устанавливаем округление, которое определенно не критично.
GAIN = 1 # потенциальные значения см. В документации по ads1015 / 1115. samples = 200 # количество образцов, взятых из ads1115 places = int (2) # установить округление
Затем мы создаем цикл while, чтобы контролировать ток и напряжение и через определенные промежутки времени отправлять данные в Adafruit io. Цикл while начинается с установки всех переменных в ноль.
while True: # сбросить переменные count = int (0) datai = datav = maxIValue = 0 # максимальное значение тока в выборке maxVValue = 0 # максимальное значение напряжения в выборке 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 print (datai) if datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
Затем мы стандартизируем значения путем преобразования значений АЦП в фактическое значение, после чего мы используем уравнение среднеквадратического значения, чтобы найти среднеквадратичные значения напряжения и тока.
# рассчитать ток, используя данные выборки # используемый sct-013 откалиброван для выхода 1000 мВ @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = круглый (IrmsA0, разряды) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = круглый (ampsA0, разряды) # Рассчитать напряжение VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = круглое (VrmsA1, разряды) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = круглое (voltsA1, разряды) print ('Voltage: {0}'. format (voltsA1)) print ('Current: {0} '. Формат (ampsA0))
После этого рассчитывается мощность и данные публикуются на adafruit.io.
#calculate power power = round (ampsA0 * voltsA1, разряды) print ('Power: {0}'. format (power)) # отправка данных в adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', мощность)
Для бесплатных аккаунтов adafruit требует наличия некоторой задержки между запросами или загрузкой данных.
# Ждем перед повторением цикла time.sleep (0)
Полный код для проекта доступен в нижней части этой страницы
Демо
Завершив код, сохраните его и нажмите кнопку запуска в среде IDE python. Перед этим убедитесь, что Pi подключен к Интернету через Wi-Fi или LAN, а ваш ключ aio и имя пользователя верны. Через некоторое время вы должны начать видеть данные об энергии (мощности), отображаемые в ленте на Adafruit.io. Моя аппаратная установка во время демонстрации была такой
Чтобы пойти дальше, вы можете создать информационную панель на adafruit.io и добавить компонент графика, чтобы вы могли получить графическое представление данных, как показано на изображении ниже.
Вот и все, ребята, теперь вы можете отслеживать потребление энергии из любой точки мира. Важно отметить, что определенно необходимо провести гораздо больше тонких настроек и калибровок, чтобы превратить его в действительно точное решение, но я считаю, что это дает вам почти все, что вам нужно для продолжения.
Не стесняйтесь задавать мне вопросы о проекте через раздел комментариев. Постараюсь ответить как можно большему количеству. До следующего раза.