- Материалы, необходимые для измерителя мощности ESP32
- Измеритель эффективности на базе Arduino и ESP32 - принципиальная схема
- Дизайн печатной платы для измерителя эффективности на базе Arduino и ESP32
- Измеритель эффективности на базе Arduino и ESP32 - Код
- Тестирование измерителя эффективности на базе Arduino и ESP32
- Дальнейшие улучшения
Все мы знаем об основных вольтметрах, амперметрах и ваттметрах, трех основных вещах, которые вам нужны для измерения значений в любых электронных проектах или схемах. Измерение напряжения и тока с помощью мультиметра может быть хорошим началом, но одна из самых больших проблем, с которыми я сталкиваюсь при тестировании схемы, - это измерение энергоэффективности. Итак, сегодня мы решим эту проблему, создав измеритель эффективности на базе Arduino и ESP32, который может измерять входное напряжение, входной ток, выходное напряжение и выходной ток. Следовательно, он может измерять входную мощность и выходную мощность одновременно, и с этими значениями мы можем легко измерить эффективность. Ранее мы также делали нечто очень похожее в нашем проекте ваттметра на основе Arduino, но здесь мы будем измерять как входную, так и выходную мощность для рассчитать энергоэффективность.
Вместо того, чтобы покупать четыре счетчика для работы, мы сможем решить эту проблему, объединив возможности всех четырех счетчиков в один. Создание цифрового счетчика не только снижает стоимость, но и дает вам простор для обновлений и улучшений. Поскольку мы используем ESP32 для создания этого проекта, мы можем легко включить этот измеритель IoT и регистрировать данные через Интернет, что является темой для будущего проекта. Разобрав все основы, давайте перейдем к делу.
Примечание. Этот измеритель мощности разработан для цепей постоянного тока. Если вы хотите измерить переменный ток для расчетной эффективности переменного тока, вы можете проверить проекты счетчиков электроэнергии на основе Интернета вещей и счетчиков электроэнергии с предоплатой.
Материалы, необходимые для измерителя мощности ESP32
На изображении ниже показаны материалы, использованные для создания схемы. Поскольку это сделано из очень общих компонентов, вы сможете найти все перечисленные материалы в вашем местном магазине для хобби.
Я также перечислил компоненты ниже вместе с необходимым количеством. Если вы собираете схему самостоятельно, настоятельно рекомендуется получить все материалы из списка ниже.
- Плата ESP32 - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- Разъем DC Barrel Jack - 1
- Конденсатор 100 мкФ - 2
- 104пФ - 2
- 102пФ - 2
- 10 тыс., 1% - 4
- 68 тыс., 1% - 2
- 6,8 тыс., 1% - 2
Измеритель эффективности на базе Arduino и ESP32 - принципиальная схема
Схема измерителя эффективности на базе Arduino и ESP32 показана ниже. Создание этой схемы очень просто и использует общие компоненты.
Работа схемы очень проста. В этом проекте мы будем измерять напряжение и ток, но уникальным способом. Мы измеряем напряжение и ток как на входе, так и на выходе, поэтому мы можем видеть эффективность схемы. Это очень удобно для некоторых проектов. Примером может быть преобразователь постоянного тока в постоянный, где измерение эффективности становится обязательным. Принцип работы этой схемы описан ниже.
Микросхема датчика тока ACS712:
Как вы можете видеть на картинке выше, мы используем микросхему датчика тока ACS712 для измерения тока. Это очень интересная ИС, поскольку она использует эффект Холла для измерения тока. На рынке есть три варианта этой ИС (5А, 20А и 30А). Мы используем его вариант 20А, он обозначен как ACS712-20.
В таблице данных ACS712 рекомендуется диапазон напряжений от 4,5 до 5,5 для бесперебойной работы. И поскольку мы собираемся измерить ток с помощью ESP32, он допускает только 3,3 В, поэтому я использовал делитель напряжения с двумя резисторами 10 кОм, чтобы понизить выходное напряжение микросхемы ACS712. Когда ток не течет через ИС, он выдает 2,5 В, а когда через ИС проходит некоторое количество тока, он либо снижает напряжение, либо увеличивает напряжение в зависимости от направления потока тока. Мы использовали две из этих микросхем для измерения входного и выходного тока. Ознакомьтесь с нашими предыдущими проектами (ниже), в которых мы использовали этот датчик ACS712.
- Счетчик электроэнергии на основе Интернета вещей с использованием модуля Wi-Fi Arduino и ESP8266
- Схема цифрового амперметра с использованием микроконтроллера PIC и ACS712
Где мы подробно обсуждали работу этих датчиков. Вы можете проверить их, если хотите узнать больше об этих датчиках.
Делитель напряжения:
Для измерения входного и выходного напряжения у нас есть два делителя напряжения на входе и выходе схемы. Максимальное напряжение, которое может измерить схема, составляет 35 В, но его можно легко изменить, изменив номиналы резисторов для делителя напряжения.
Регулятор напряжения:
Стандартный стабилизатор напряжения LM7805 используется для питания микросхем ESP32, OLED и ACS712. Поскольку мы включаем его с довольно чистой мощностью, разделительные конденсаторы не используются, но мы использовали конденсаторы емкостью 100 мкФ как на входе, так и на выходе для стабилизации IC.
Микросхема ESP32 и OLED-дисплей:
Мы использовали ESP32 в качестве основного процессора, который отвечает за все показания, вычисления, вводы и выводы. Кроме того, мы использовали OLED-дисплей 128X64, чтобы узнать значения.
Дизайн печатной платы для измерителя эффективности на базе Arduino и ESP32
Печатная плата для нашего измерителя эффективности на базе Arduino и ESP32 спроектирована на односторонней плате. Я использовал Eagle для разработки своей печатной платы, но вы можете использовать любое программное обеспечение для проектирования по вашему выбору. 2D-изображение моего дизайна платы показано ниже.
Достаточная проводка заземления используется для правильного заземления всех компонентов. Кроме того, мы постарались использовать правильные дорожки 5 В и 3,3 В для снижения шума и повышения эффективности.
- Скачать PCB Design и файлы GERBER Измеритель эффективности на основе Arduino и ESP32
Печатная плата ручной работы:
Для удобства и тестирования я сделал свою ручную версию печатной платы, она показана ниже. В первой версии я допустил несколько ошибок, которые исправил с помощью перемычек. Но в финальной версии я их исправил, вы можете просто скачать файлы и использовать их.
Измеритель эффективности на базе Arduino и ESP32 - Код
Теперь, когда у нас есть хорошее понимание аппаратной части вещей, мы можем открыть IDE Arduino и начать кодирование. Код предназначен для считывания аналогового напряжения с контактов 35 и 33 платы ESP32. Кроме того, мы считываем напряжение с 32 и 34 контактов, которые являются текущим значением. Сделав это, мы можем умножить их, чтобы получить входную мощность и выходную мощность, и, применив это к формуле эффективности, мы можем получить эффективность.
Наконец, мы отображаем это на ЖК-экране. Полная программа, выполняющая то же самое, приведена в конце, и ее можно использовать как таковую для оборудования, описанного выше. Далее код разбивается на небольшие фрагменты и объясняется.
Поскольку мы используем OLED-дисплей 128X64, нам нужны библиотеки Adafruit_GFX и Adafruit_SSD1306 для связи с дисплеем. Вы можете загрузить их оба из терминала диспетчера плат Arduino по умолчанию; если у вас возникли проблемы с частью менеджера доски, вы также можете загрузить и включить библиотеки из соответствующего репозитория GitHub, который указан ниже.
- Скачать библиотеку Adafruit_GFX
- Скачать библиотеку Adafruit_SSD1306
Как всегда, мы начинаем наш код с включения всех необходимых библиотек. Затем мы определяем все необходимые контакты и переменные, все из которых показаны ниже.
#включают
Определения SCREEN_WIDTH и SCREEN_HEIGHT используются для определения размера экрана. Далее мы определили все необходимые контакты, через которые мы собираемся измерять напряжение и ток. Затем мы определили номиналы резисторов, которые используются в оборудовании, как вы можете видеть на схеме. Если у вас нет этих значений или если вы хотите изменить диапазон измерителя, вы можете изменить эти значения, код будет работать нормально.
Поскольку мы используем ACS712 для измерения тока, нам нужно значение mVperAmp, чтобы рассчитать ток по напряжению. Поскольку я использую модуль ACS712 на 20 А, значение мВ / А равно 100, как указано в таблице данных. Но поскольку мы используем ESP32 и делитель напряжения, у нас будет половина значения, равного 50, и поэтому мы ввели значение mV / AMP.
ACSoffset - это смещение, которое необходимо для расчета тока по напряжению. Поскольку микросхемы ACS712 питаются от 5 В, напряжение смещения составляет 2,5 В. Но поскольку мы используем делитель напряжения, оно снижается до 1,25 В. Возможно, вы уже знаете дрянной АЦП ESP32, поэтому мне пришлось использовать значение 1136. Если у вас возникли проблемы с калибровкой, вы можете настроить значения и компенсировать АЦП.
Наконец, мы закончить эту секцию, сделав отображения объекта Adafruit_SSD1306 класса и проходя по ширине экрана, высоту, I 2 конфигурации C, а последний -1 параметра используются для определения функции сброса. Если на вашем дисплее нет внешнего вывода сброса (который, безусловно, предназначен для моего дисплея), вам нужно использовать -1 в качестве последнего аргумента.
void setup () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Адрес 0x3D для 128x64 Serial.println (F («Ошибка выделения SSD1306»)); за (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); задержка (100); }
Далее у нас есть наш раздел setup () . В этом разделе мы включаем последовательный порт для отладки, мы проверяем, доступен ли дисплей I 2 C или нет, с помощью метода start экранного объекта. Также мы устанавливаем адрес I 2 C. Затем мы очищаем дисплей с помощью метода clearDisplay () . Кроме того, мы поворачиваем дисплей с помощью метода setRotation , потому что я испортил дизайн своей печатной платы. Затем мы устанавливаем задержку в 100 мс, чтобы функции вступили в силу. Как только это будет сделано, мы можем перейти к функции цикла. Но прежде чем перейти к функции контура, мы должны обсудить две другие функции, которые return_voltage_value () , и return_current_value () .
двойной return_voltage_value (int pin_no) {двойной tmp = 0; двойное напряжение ADCVoltage = 0; двойной inputVoltage = 0; двойной средний = 0; для (int я = 0; я <150; я ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((avg * 3.3) / (4095)) + 0.138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // формула для расчета напряжения, т.е. GND return inputVoltage; }
Функция return_voltage_value () используется для измерения напряжения, поступающего на АЦП, и принимает в качестве аргумента значение pin_no. В этой функции мы начинаем с объявления некоторых переменных, таких как tmp, ADCVoltage, inputVoltage и avg. Переменная tmp используется для хранения временного значения АЦП, которое мы получаем от функции analogRead (), затем мы усредняем его 150 раз в цикле for и сохраняем значение в переменной с именем avg. Затем мы вычисляем ADCVoltage по заданной формуле, наконец, мы вычисляем входное напряжение и возвращаем значения. Значение +0,138, которое вы видите, - это значение калибровки, которое я использовал для калибровки уровня напряжения, поиграйте с этим значением, если вы получаете какие-либо ошибки.
двойной return_current_value (int pin_no) {двойной tmp = 0; двойной средний = 0; double ADCVoltage = 0; двойной ампер = 0; для (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((avg / 4095.0) * 3300); // Получить мВ ампер = ((ADCVoltage - ACSoffset) / mVperAmp); возвратные Амперы; }
Далее у нас есть функция return_current_value () . Эта функция также принимает в качестве аргумента pin_no. В этой функции также есть четыре переменных, а именно. tmp, avg, ADCVoltage и Amps
Затем мы считываем вывод с помощью функции analogRead () и усредняем его 150 раз, затем мы используем формулу для вычисления напряжения АЦП, с этим мы вычисляем ток и возвращаем значение. После этого мы можем перейти к разделу цикла.
void loop () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); float input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)); float output_voltage = abs (return_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)); float output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))); input_current = input_current - 0,025; Serial.print («Входное напряжение:»); Serial.print (input_voltage); Serial.print ("- Входной ток:"); Serial.print (input_current); Serial.print ("- Выходное напряжение:"); Serial.print (output_voltage); Serial.print ("- Выходной ток:"); Serial.println (output_current); задержка (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); дисплей.печать ("V"); }
Мы начинаем раздел цикла с объявления и определения некоторых переменных с плавающей запятой во всех четырех переменных. Мы вызываем соответствующие функции, передавая pin_no в качестве аргумента, поскольку модуль ACS712 может возвращать текущие значения отрицательными. Мы используем функцию abs () математической библиотеки, чтобы сделать отрицательное значение положительным. Затем мы последовательно печатаем все значения для отладки. Затем мы очищаем дисплей, устанавливаем курсор и печатаем значения. Мы делаем это для всех символов, отображаемых на дисплее. Это означает конец функции цикла и программы.
Тестирование измерителя эффективности на базе Arduino и ESP32
Как вы можете видеть мою тестовую установку на изображении выше. У меня есть трансформатор 30 В в качестве входа, и я подключил свой измеритель к тестовой плате. Я использую плату понижающего преобразователя на основе LM2596, в качестве нагрузки и параллельно использую три резистора на 10 Ом.
Как вы можете видеть на изображении выше, я подключил мультиметры, чтобы проверить входное и выходное напряжение. Трансформатор выдает почти 32 В, а выход понижающего преобразователя - 3,95 В.
На изображении показан выходной ток, измеренный моим измерителем эффективности и мультиметром. Как вы можете видеть, мультиметр показывает 0,97 А, и если вы немного увеличите масштаб, он показывает 1,0 А, это немного не так из-за нелинейности, присутствующей в модуле ACS712, но это служит нашей цели. Для подробного объяснения и тестирования вы можете посмотреть видео в нашем разделе видео.
Дальнейшие улучшения
Для этой демонстрации схема сделана на печатной плате ручной работы, но схему можно легко встроить в печатную плату хорошего качества. В моем эксперименте размер печатной платы действительно велик из-за размера компонентов, но в производственной среде его можно уменьшить, используя дешевые компоненты SMD. Схема также не имеет встроенной функции защиты, поэтому включение схемы защиты улучшит общий аспект безопасности схемы. Кроме того, во время написания кода я заметил, что АЦП ESP32 не так уж хорош. Включение внешнего АЦП, такого как модуль ADS1115, повысит общую стабильность и точность.
Надеюсь, вам понравилась эта статья и вы узнали из нее что-то новое. Если у вас есть сомнения, вы можете задать вопрос в комментариях ниже или воспользоваться нашим форумом для подробного обсуждения.