- Необходими материали за измервател на мощност 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 барел жак - 1
- Кондензатор 100uF - 2
- 104pF - 2
- 102pF - 2
- 10K, 1% - 4
- 68K, 1% - 2
- 6.8K, 1% - 2
Измервател на ефективност, базиран на Arduino и ESP32 - Електрическа схема
Схемата за измервател на ефективност на базата на Arduino и ESP32 е показана по-долу. Създаването на тази схема е много просто и използва общи компоненти.
Работата на веригата е много проста. Ще измерваме напрежението и тока в този проект, но по уникален начин. Измерваме напрежение и ток както за входа, така и за изхода, следователно можем да видим ефективността на веригата. Това е много полезно за някои проекти. Пример може да бъде преобразувател DC в DC, където измерването на ефективността става задължително. Начинът, по който работи тази схема, е описан по-долу.
IC IC на сензора за ток ACS712:
Както можете да видите на горната снимка, ние използваме ACS712 токов сензор за измерване на тока. Това е много интересна интегрална схема, тъй като използва ефекта на Хол за измерване на тока, има три варианта на тази интегрална схема, които могат да бъдат намерени на пазара f (или 5A, 20A и 30A). Използваме вариант 20А на това и е означен като ACS712-20.
Техническият лист ACS712 препоръчва диапазон на напрежение 4,5 - 5,5, за да работи гладко. И тъй като ще измерваме тока с ESP32, то е толерантно само до 3.3V, поради което използвах делител на напрежение с два 10K резистора, за да сваля изходното напрежение на ACS712 IC. Когато през IC не протича ток, той извежда 2.5V и когато някакво количество ток протича през IC, или намалява напрежението, или увеличава напрежението в зависимост от посоката на текущия поток. Използвали сме две от тези интегрални схеми за измерване на входния и изходния ток. Вижте нашите предишни проекти (по-долу), в които използвахме този сензор ACS712.
- Измервател на електрическа енергия на базата на IoT, използващ Wi-Fi модул Arduino и ESP8266
- Цифрова схема на амперметър с помощта на микроконтролер PIC и ACS712
Къде обсъдихме подробно работата на тези сензори. Можете да ги проверите, ако искате да научите повече за тези сензори.
Разделителят на напрежението:
За измерване на входното и изходното напрежение имаме два делителя на напрежението на входната и изходната страна на веригата. Максималното напрежение, което веригата може да измери, е 35V, но може лесно да бъде променено чрез промяна на стойностите на резистора за делителя на напрежението.
Регулаторът на напрежението:
Общ регулатор на напрежение LM7805 се използва за захранване на интегралните схеми ESP32, OLED и ACS712. Тъй като го захранваме с доста чиста мощност, не се използват разединяващи кондензатори, но ние използвахме кондензатори 100uF както на входа, така и на изхода, за да стабилизираме IC.
ESP32 IC и OLED дисплеят:
Използвахме ESP32 като основен процесор, който отговаря за всички показания, изчисления, входове и изходи. Също така, ние използвахме 128X64 OLED дисплей, за да знаем стойностите.
Дизайн на печатни платки за измервател на ефективност, базиран на Arduino и ESP32
ПХБ за нашия измервател на ефективност, базиран на Arduino и ESP32, е проектиран върху едностранна платка. Използвал съм Eagle за проектиране на моята печатна платка, но можете да използвате всеки софтуер за дизайн по ваш избор. 2D изображението на моя дизайн на дъска е показано по-долу.
Използва се достатъчно земна следа, за да се направят правилни земни връзки между всички компоненти. Също така се погрижихме да използваме правилни 5V и 3.3V следи, за да намалим шума и да подобрим ефективността.
- Изтеглете PCB Design и GERBER файлове Arduino и ESP32 Базиран метър за ефективност
Ръчно изработени печатни платки:
За удобство и тестване направих ръчно изработената версия на печатната платка и тя е показана по-долу. В първата версия направих някои грешки, които поправих с помощта на някои джъмперни проводници. Но във финалната версия ги поправих, можете просто да изтеглите файловете и да ги използвате.
Измервател на ефективност, базиран на Arduino и ESP32 - код
Сега, след като добре разбираме хардуерната страна на нещата, можем да отворим IDE на Arduino и да започнем нашето кодиране. Целта на кода е да отчете аналоговото напрежение от щифтове 35 и 33 на платката ESP32. Също така отчитаме напрежението от 32 и 34 пина, което е текущата стойност. След като направим това, можем да ги умножим, за да получим входна мощност и изходна мощност, и като го сложим във формулата за ефективност, можем да получим ефективността.
Накрая го показваме на LCD екрана. Пълната програма да направи същото е дадена в края, която може да се използва като такава за обсъдения по-горе хардуер. Освен това кодът е разделен на малки фрагменти и обяснен.
Тъй като ние сме с помощта на дисплея OLED 128x64, ние се нуждаем от Adafruit_GFX библиотека и библиотеката Adafruit_SSD1306 да комуникира с дисплея. Можете да изтеглите и двете от терминала на Arduino по подразбиране на борда; ако имате някакви проблеми с частта на мениджъра на борда, можете също да изтеглите и включите библиотеките от свързаното с него хранилище на GitHub, което е дадено по-долу.
- Изтеглете библиотеката Adafruit_GFX
- Изтеглете библиотеката Adafruit_SSD1306
Както винаги, ние започваме нашия код, като включваме всички необходими библиотеки. След това дефинираме всички необходими щифтове и променливи, всички от които са показани по-долу.
#include
Определенията SCREEN_WIDTH & SCREEN_HEIGHT се използват за определяне на размера на екрана. След това дефинирахме всички необходими щифтове, чрез които ще измерваме напрежението и тока. След това дефинирахме стойностите на резистора, които се използват в хардуера, както можете да видите от схемата. Ако нямате тези стойности или ако искате да промените обхвата на измервателния уред, можете да промените тези стойности, кодът ще работи добре.
Тъй като използваме ACS712 за измерване на тока, ни е необходима стойността mVperAmp, за да изчислим тока от напрежението. Тъй като използвам модул 20A ACS712, стойността на mV / A е 100, както е дадено в листа с данни. Но тъй като използваме ESP32 и делител на напрежението, ще имаме половината от стойността, която е 50, и затова сме поставили стойността mV / AMP.
ACSoffset е изместването, което е необходимо за изчисляване на тока от напрежението. Тъй като ACS712 IC се захранват от 5V, компенсираното напрежение е 2.5V. Но тъй като ние използваме делител на напрежението, той намалява до 1,25V. Може би вече знаете скапания ADC на ESP32, така че трябваше да използвам стойност 1136. Ако имате проблеми с калибрирането, можете да промените стойностите и да компенсирате ADC.
И накрая, завършваме този раздел, като правим дисплеен обект от класа Adafruit_SSD1306 и предаваме ширината на екрана, височината, конфигурацията I 2 C и последният параметър -1 се използва за дефиниране на функцията за нулиране. Ако вашият дисплей няма външен щифт за нулиране (което със сигурност е за моя дисплей), тогава трябва да използвате -1 за последния аргумент.
void setup () {Serial.begin (115200); ако (! 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 ms, за да влязат функциите в сила. След като приключим, вече можем да преминем към функцията цикъл. Но преди да се пристъпи към функцията цикъл, ние трябва да обсъдим две други функции, които са return_voltage_value () , и return_current_value () .
двойно return_voltage_value (int pin_no) {двойно tmp = 0; двойно ADCVoltage = 0; двоен inputVoltage = 0; двойно ср. = 0; за (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 () се използва за измерване на напрежението, постъпващо в ADC, и приема pin_no като аргумент. В тази функция започваме с деклариране на някои променливи, които са tmp, ADCVoltage, inputVoltage и avg. Променливата tmp се използва за съхраняване на временната стойност на ADC, която получаваме от функцията analogRead (), след това я осредняваме 150 пъти в цикъл for и съхраняваме стойността в променлива, наречена avg. След това изчисляваме ADCVoltage от дадената формула, накрая изчисляваме входното напрежение и връщаме стойностите. Стойността +0,138, която виждате, е стойността на калибриране, която използвах за калибриране на нивото на напрежението, играйте с тази стойност, ако получавате грешки.
двойно return_current_value (int pin_no) {двойно tmp = 0; двойно ср. = 0; двойно ADCVoltage = 0; двойни усилватели = 0; за (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 (входно_напрежение); Serial.print ("- Входен ток:"); Serial.print (input_current); Serial.print ("- Изходно напрежение:"); Serial.print (изходно напрежение); Serial.print ("- Изходен ток:"); Serial.println (текущ_изход); забавяне (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
Както можете да видите моята тестова настройка в горното изображение. Имам 30V трансформатор като вход и имам моят метър, закачен за тестовата платка. Използвам LM2596 базирана конверторна платка и за товара и успоредно използвам три резистора от 10 ома.
Както можете да видите на горното изображение, аз съм се свързал с мулти-метри, за да проверя входното и изходното напрежение. Трансформаторът произвежда почти 32V, а изходът на конвертора е 3,95V.
Изображението тук показва изходния ток, измерен от моя измервателен уред за ефективност и мултицет. Както можете да видите, мултиметърът показва.97 ампера и ако увеличите малко, той показва 1.0A, той е леко изключен поради нелинейността, присъстваща в модула ACS712, но това служи на нашата цел. За подробно обяснение и тестване можете да разгледате видеоклипа в нашата видео секция.
Допълнителни подобрения
За тази демонстрация схемата е направена на ръчно изработена печатна платка, но веригата може лесно да бъде вградена в печатни платки с добро качество. В моя експеримент размерът на печатната платка е наистина голям поради размера на компонента, но в производствена среда той може да бъде намален чрез използване на евтини SMD компоненти. Веригата също няма вградена функция за защита, така че включването на схема за защита ще подобри цялостния аспект на безопасността на веригата. Също така, докато пишех кода, забелязах, че ADC на ESP32 не е толкова голям. Включването на външен ADC като модула ADS1115 ще увеличи общата стабилност и точност.
Надявам се тази статия да ви е харесала и да сте научили нещо ново от нея. Ако имате някакви съмнения, можете да попитате в коментарите по-долу или да използвате нашите форуми за подробна дискусия.