- Матеріали, необхідні для вимірювача потужності ESP32
- Вимірювач ефективності на основі Arduino та ESP32 - принципова схема
- Дизайн друкованої плати для вимірювача ефективності на основі Arduino та ESP32
- Вимірювач ефективності на основі Arduino та ESP32 - код
- Тестування вимірювача ефективності на основі Arduino та ESP32
- Подальші вдосконалення
Ми всі знаємо про базовий вольтметр, амперметр і ватметри, три основні речі, які вам потрібні для вимірювання значень на будь-яких електронних проектах або схемах. Вимірювання напруги та струму за допомогою мультиметра може бути хорошим способом для початку, але однією з найбільших проблем, з якою я стикаюся під час тестування схеми, є вимірювання енергоефективності. Отже, сьогодні ми вирішимо цю проблему шляхом побудови вимірювача ефективності на основі Arduino та ESP32, який може вимірювати вхідну напругу, вхідний струм, вихідну напругу та вихідний струм. Отже, він може одночасно вимірювати вхідну та вихідну потужність, і за цих значень ми можемо легко виміряти ефективність. Раніше ми також робили щось дуже подібне в нашому проекті на основі ватметра на базі Arduino, але тут ми виміряємо як вхідну, так і вихідну потужність розрахувати енергоефективність.
Замість того, щоб придбати чотири метри для роботи, ми зможемо вирішити цю проблему, об’єднавши можливості всіх чотирьох метрів в один. Побудова цифрового лічильника не тільки зменшує вартість, але й надає вам можливість хитатися для модернізації та вдосконалення. Оскільки ми використовуємо ESP32 для побудови цього проекту, ми можемо легко включити цей лічильник IoT та реєструвати дані через Інтернет, що є темою для майбутнього проекту. Поки всі основи очищені, давайте перейдемо до цього.
Примітка: Цей лічильник потужності призначений для ланцюгів постійного струму. Якщо ви хочете виміряти струм змінного струму за розрахунковою ефективністю енергії змінного струму, ви можете ознайомитися з проектами лічильника електроенергії на базі IoT та проектів лічильника енергії з передплаченою оплатою.
Матеріали, необхідні для вимірювача потужності ESP32
На зображенні нижче показано матеріали, що використовуються для побудови схеми. Оскільки це зроблено з дуже загальними компонентами, ви зможете знайти весь перерахований матеріал у своєму місцевому магазині хобі.
Я також перерахував компоненти нижче разом із необхідною кількістю. Якщо ви будуєте схему самостійно, настійно рекомендується отримати всі матеріали зі списку нижче.
- Плата ESP32 - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- Домкрат DC Barrel - 1
- Конденсатор 100 мкФ - 2
- 104pF - 2
- 102pF - 2
- 10K, 1% - 4
- 68 тис., 1% - 2
- 6,8 тис., 1% - 2
Вимірювач ефективності на основі Arduino та ESP32 - принципова схема
Схема вимірювача ефективності на базі Arduino та ESP32 наведена нижче. Створення цієї схеми дуже просте і використовує загальні компоненти.
Робота схеми дуже проста. Ми будемо вимірювати напругу та струм у цьому проекті, але унікальним чином. Ми вимірюємо напругу і струм як на вході, так і на виході, отже, ми можемо побачити ефективність схеми. Це дуже зручно для деяких проектів. Прикладом може бути перетворювач постійного струму в постійний, де вимірювання ефективності стає обов'язковим. Принцип роботи цієї схеми описаний нижче.
Схема датчика струму ACS712:
Як ви можете бачити на наведеному малюнку, для вимірювання струму ми використовуємо мікросхему датчика струму ACS712. Це дуже цікава мікросхема, оскільки вона використовує ефект Холла для вимірювання струму. Є три варіанти цієї мікросхеми, які можна знайти на ринку f (або 5А, 20А і 30А). Ми використовуємо варіант 20А цього, і він позначений як ACS712-20.
Таблиця даних ACS712 рекомендує діапазон напруги 4,5 - 5,5 для безперебійної роботи. І оскільки ми збираємося вимірювати струм за допомогою ESP32, він допускає лише 3,3 В, саме тому я використав дільник напруги з двома резисторами 10 К для зниження вихідної напруги ІС ACS712. Коли через мікросхему не протікає струм, він видає 2,5 В, а коли деяка кількість струму протікає через мікросхему, він або знижує напругу, або збільшує напругу залежно від напрямку потоку струму. Ми використовували дві з цих ІС для вимірювання вхідного та вихідного струму. Перегляньте наші попередні проекти (нижче), в яких ми використовували цей датчик ACS712.
- Вимірювач електроенергії на основі IoT за допомогою модуля Wi-Fi Arduino та ESP8266
- Схема цифрового амперметра з використанням мікроконтролера PIC та ACS712
Де ми детально обговорили роботу цих датчиків. Ви можете перевірити їх, якщо хочете дізнатись більше про ці датчики.
Дільник напруги:
Для вимірювання вхідної та вихідної напруги ми маємо два дільники напруги на вхідній та вихідній сторонах схеми. Максимальна напруга, яку може виміряти схема, становить 35 В, але її можна легко змінити, змінивши значення резистора для дільника напруги.
Регулятор напруги:
Загальний регулятор напруги LM7805 використовується для живлення ІС ESP32, OLED та ACS712. Оскільки ми живимо його досить чистою потужністю, конденсатори для роз’єднання не використовуються, але ми використовували конденсатори 100 мкФ як на вході, так і на виході для стабілізації ІС.
Схема ESP32 та OLED-дисплей:
Ми використовували ESP32 як основний процесор, який відповідає за всі показання, розрахунки, входи та виходи. Крім того, ми використовували OLED-дисплей 128X64, щоб знати значення.
Дизайн друкованої плати для вимірювача ефективності на основі Arduino та ESP32
Друкована плата для нашого вимірювача ефективності на базі Arduino та ESP32 розроблена на односторонній платі. Я використовував Eagle для проектування моєї друкованої плати, але ви можете використовувати будь-яке програмне забезпечення для дизайну на ваш вибір. Двовимірне зображення мого дизайну дошки показано нижче.
Для належного з'єднання заземлення між усіма компонентами використовується достатня кількість заземлення. Крім того, ми подбали про використання належних трассів 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 20A, значення mV / A дорівнює 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 за допомогою методу початку об'єкта відображення. Крім того, ми встановлюємо адресу I 2 C. Далі ми очищаємо дисплей методом clearDisplay () . Крім того, ми обертаємо дисплей методом setRotation , це тому, що я зіпсував свій дизайн друкованої плати. Далі ми встановлюємо затримку 100 мс, щоб функції набрали чинності. Після цього ми можемо перейти до функції циклу. Але перш ніж перейти до функції контуру, ми повинні обговорити дві інші функції, які return_voltage_value () , і return_current_value () .
подвійне значення_повернення_напруги (int pin_no) {подвійне tmp = 0; подвійний ADCVoltage = 0; подвійний inputVoltage = 0; подвійне середнє = 0; for (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((середнє * 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 використовується для зберігання тимчасового значення ADC, яке ми отримуємо з функції analogRead (), потім ми в середньому обчислюємо його 150 разів у циклі for, і ми зберігаємо значення до змінної, що називається avg. Потім ми розраховуємо ADCVoltage з наведеної формули, нарешті, обчислюємо вхідну напругу і повертаємо значення. Значення +0,138, яке ви бачите, - це значення калібрування, яке я використовував для калібрування рівня напруги, пограйте з цим значенням, якщо у вас виникають помилки.
double_current_value (int pin_no) {double tmp = 0; подвійне середнє = 0; подвійний ADCVoltage = 0; подвійні підсилювачі = 0; for (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((avg / 4095.0) * 3300); // Отримує підсилювачі mV = ((ADCVoltage - ACSoffset) / mVperAmp); зворотні підсилювачі; }
Далі ми маємо функцію return_current_value () . Ця функція також приймає pin_no як аргумент. У цій функції ми також маємо чотири змінні, а саме. tmp, avg, ADCVoltage та Amps
Далі ми зчитуємо штифт з функцією analogRead () і усереднюємо його 150 разів, далі використовуємо формулу для розрахунку напруги ADCvoltage, при цьому ми обчислюємо струм і повертаємо значення. З цим ми можемо перейти до розділу циклу.
порожній цикл () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); плаваючий 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,9 ампер, а якщо трохи збільшити масштаб, він показує 1,0 А, він трохи відключений через нелінійність, присутню в модулі ACS712, але це служить нашій меті. Для детального пояснення та тестування ви можете переглянути відео у нашому розділі відео.
Подальші вдосконалення
Для цієї демонстрації схема виконана на друкованій платі ручної роботи, але її легко вбудувати в друковану плату хорошої якості. У моєму експерименті розмір друкованої плати дійсно великий через розмір компонента, але у виробничому середовищі його можна зменшити, використовуючи дешеві компоненти SMD. Схема також не має жодної вбудованої функції захисту, тому включення схеми захисту покращить загальний аспект безпеки схеми. Крім того, під час написання коду я помітив, що АЦП ESP32 не такий вже й чудовий. Включення зовнішнього АЦП, як модуль ADS1115, підвищить загальну стабільність і точність.
Сподіваюся, вам сподобалась ця стаття і ви дізналися з неї щось нове. Якщо у вас є якісь сумніви, ви можете запитати в коментарях нижче або скористатися нашими форумами для детального обговорення.