- Materiāli, kas nepieciešami ESP32 jaudas skaitītājam
- Arduino un ESP32 bāzes efektivitātes mērītājs - shēmas diagramma
- PCB dizains Arduino un ESP32 bāzes efektivitātes skaitītājam
- Arduino un ESP32 bāzes efektivitātes mērītāja kods
- Arduino un ESP32 bāzes efektivitātes mērītāja pārbaude
- Turpmākie uzlabojumi
Mēs visi zinām par pamata voltmetru, ampērmetru un vatmetriem - trim pamatlietām, kas jums nepieciešamas, lai izmērītu vērtības visos elektroniskajos projektos vai ķēdēs. Sprieguma un strāvas mērīšana ar multimetra palīdzību var būt labs sākums, taču viena no lielākajām problēmām, ar kuru saskaras, testējot ķēdi, ir enerģijas efektivitātes mērīšana. Tātad, šodien mēs atrisināsim šo problēmu, izveidojot Arduino un ESP32 balstītu efektivitātes mērītāju, kas var izmērīt ieejas spriegumu, ieejas strāvu, izejas spriegumu un izejas strāvu. Tādējādi tas var vienlaikus izmērīt ieejas jaudu un izejas jaudu, un ar šīm vērtībām mēs varam viegli izmērīt efektivitāti. Iepriekš mēs arī Arduino bāzētajā Wattmeter projektā esam izdarījuši kaut ko ļoti līdzīgu, taču šeit mēs izmērīsim gan ieejas, gan izejas jaudu aprēķināt enerģijas efektivitāti.
Tā vietā, lai nopirktu četrus metrus šim darbam, mēs varēsim atrisināt šo problēmu, apvienojot visu četru metru iespējas vienā. Digitālā mēraparāta uzbūve ne tikai samazina izmaksas, bet arī dod iespēju jauninājumiem un uzlabojumiem. Tā kā šī projekta izveidošanai mēs izmantojam ESP32, mēs varam viegli iespējot šo skaitītāju IoT un reģistrēt datus tīmeklī, kas ir topošā projekta tēma. Kad visi pamati ir iztīrīti, iedziļināsimies tajā.
Piezīme: Šis jaudas mērītājs ir paredzēts līdzstrāvas ķēdēm. Ja vēlaties izmērīt maiņstrāvu līdz aprēķinātajai maiņstrāvas jaudas efektivitātei, varat apskatīt IoT balstītos elektroenerģijas enerģijas skaitītāja un priekšapmaksas enerģijas skaitītāja projektus.
Materiāli, kas nepieciešami ESP32 jaudas skaitītājam
Zemāk redzamajā attēlā ir parādīti materiāli, kas izmantoti ķēdes izveidošanai. Tā kā tas ir izgatavots ar ļoti vispārīgiem komponentiem, jums vajadzētu būt iespējai atrast visu uzskaitīto materiālu savā vietējā hobiju veikalā.
Es arī uzskaitīju komponentus zemāk kopā ar nepieciešamo daudzumu. Ja ķēdi veidojat pats, ļoti ieteicams iegūt visus materiālus no zemāk esošā saraksta.
- ESP32 valde - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- DC Barrel Jack - 1
- 100uF kondensators - 2
- 104pF - 2
- 102pF - 2
- 10K, 1% - 4
- 68K, 1% - 2
- 6,8 tūkstoši, 1% - 2
Arduino un ESP32 bāzes efektivitātes mērītājs - shēmas diagramma
Arduino un ESP32 bāzes efektivitātes skaitītāja shēma ir parādīta zemāk. Šīs shēmas izveide ir ļoti vienkārša un izmanto vispārīgus komponentus.
Ķēdes darbība ir ļoti vienkārša. Šajā projektā mēs mērīsim spriegumu un strāvu, taču unikālā veidā. Mēs mēra spriegumu un strāvu gan ieejai, gan izejai, tādējādi mēs varam redzēt ķēdes efektivitāti. Dažiem projektiem tas ir ļoti noderīgi. Piemērs varētu būt līdzstrāvas pārveidotājs, kur efektivitātes mērīšana kļūst obligāta. Šīs ķēdes darbības veids ir aprakstīts zemāk.
ACS712 strāvas sensora IC:
Kā redzat augšējā attēlā, strāvas mērīšanai mēs izmantojam ACS712 strāvas sensora IC. Tas ir ļoti interesants IC, jo strāvas mērīšanai izmanto Hall efektu, tirgū ir atrodami trīs šīs IC varianti (vai 5A, 20A un 30A). Mēs izmantojam 20A variantu, un tas ir apzīmēts kā ACS712-20.
Datu lapā ACS712 ieteicams sprieguma diapazons no 4,5 līdz 5,5, lai darbotos nevainojami. Tā kā mēs mērīsim strāvu ar ESP32, tas ir tikai 3.3V tolerants, tāpēc es esmu izmantojis sprieguma dalītāju ar diviem 10K rezistoriem, lai pazeminātu ACS712 IC izejas spriegumu. Ja caur IC nedarbojas strāva, tas izplūst 2,5 V un, kad caur IC plūst zināms daudzums strāvas, tas vai nu pazemina spriegumu, vai arī palielina spriegumu atkarībā no pašreizējās plūsmas virziena. Mēs esam izmantojuši divus no šiem IC, lai mērītu ieejas un izejas strāvu. Apskatiet mūsu iepriekšējos projektus (zemāk), kuros mēs izmantojām šo ACS712 sensoru.
- IoT bāzes elektroenerģijas enerģijas skaitītājs, izmantojot Arduino un ESP8266 Wi-Fi moduli
- Digitālā ampērmetra ķēde, izmantojot PIC mikrokontrolleru un ACS712
Kur mēs detalizēti apspriedām šo sensoru darbību. Jūs varat tos pārbaudīt, ja vēlaties uzzināt vairāk par šiem sensoriem.
Sprieguma dalītājs:
Lai izmērītu ieejas un izejas spriegumu, ķēdes ieejas un izejas pusē mums ir divi sprieguma dalītāji. Maksimālais spriegums, ko ķēde var izmērīt, ir 35 V, taču to var viegli mainīt, mainot sprieguma dalītāja rezistora vērtības.
Sprieguma regulators:
ESP32, OLED un ACS712 IC darbināšanai tiek izmantots vispārējs LM7805 sprieguma regulators. Tā kā mēs to darbinām ar diezgan tīru jaudu, netiek izmantoti atsaistīšanas kondensatori, bet IC stabilizēšanai esam izmantojuši 100uF kondensatorus gan ieejā, gan izejā.
ESP32 IC un OLED displejs:
Mēs kā galveno procesoru esam izmantojuši ESP32, kas ir atbildīgs par visiem rādījumiem, aprēķiniem, ieejām un izvadēm. Turklāt, lai uzzinātu vērtības, mēs izmantojām 128X64 OLED displeju.
PCB dizains Arduino un ESP32 bāzes efektivitātes skaitītājam
Mūsu Arduino un ESP32 bāzes efektivitātes mērītāja PCB ir veidots uz vienpusējas plātnes. Esmu izmantojis Eagle, lai izstrādātu savu PCB, taču jūs varat izmantot jebkuru izvēlēto dizaina programmatūru. Mana dēļa dizaina 2D attēls ir parādīts zemāk.
Lai izveidotu pareizus zemes savienojumus starp visām sastāvdaļām, tiek izmantots pietiekams zemes pēdu daudzums. Mēs arī pārliecinājāmies izmantot pareizas 5V un 3,3 V pēdas, lai samazinātu troksni un uzlabotu efektivitāti.
- Lejupielādējiet PCB Design un GERBER failus Arduino un ESP32 bāzes efektivitātes mērītājs
Roku darbs PCB:
Ērtības un testēšanas nolūkos es izgatavoju savu PCB versiju ar rokām, un tā ir parādīta zemāk. Pirmajā versijā es pieļāvu dažas kļūdas, kuras novērsu, izmantojot dažus džemperu vadus. Bet galīgajā versijā es tos izlaboju, jūs varat vienkārši lejupielādēt failus un tos izmantot.
Arduino un ESP32 bāzes efektivitātes mērītāja kods
Tagad, kad mums ir laba izpratne par aparatūras pusi, mēs varam atvērt Arduino IDE un sākt kodēšanu. Koda mērķis ir nolasīt analogo spriegumu no ESP32 plates 35. un 33. kontakta. Mēs arī nolasījām spriegumu no 32 un 34 kontaktiem, kas ir pašreizējā vērtība. Kad mēs to izdarīsim, mēs varam tos reizināt, lai iegūtu ieejas un izejas jaudu, un, pieliekot to efektivitātes formulai, mēs varam iegūt efektivitāti.
Visbeidzot, mēs to parādām LCD ekrānā. Pilnīga programma, lai izdarītu to pašu, ir dota beigās, kuru kā tādu var izmantot iepriekš apspriestajai aparatūrai. Tālāk kods tiek sadalīts mazos fragmentos un paskaidrots.
Tā kā mēs izmantojam 128X64 OLED displeju, mums ir nepieciešama Adafruit_GFX bibliotēka un Adafruit_SSD1306 bibliotēka, lai sazinātos ar displeju. Abus no tiem varat lejupielādēt no Arduino noklusējuma dēļu pārvaldnieka termināļa; ja jums ir kādas problēmas ar dēļu pārvaldnieka daļu, varat arī lejupielādēt un iekļaut bibliotēkas no ar to saistītās GitHub repozitorijas, kas sniegts zemāk.
- Lejupielādējiet Adafruit_GFX bibliotēku
- Lejupielādējiet Adafruit_SSD1306 bibliotēku
Kā vienmēr, mēs sākam savu kodu, iekļaujot visas nepieciešamās bibliotēkas. Tad mēs definējam visus nepieciešamos tapas un mainīgos, kuri visi ir parādīti zemāk.
# iekļaut
Par SCREEN_WIDTH & SCREEN_HEIGHT definīcijas tiek izmantoti, lai definētu ekrāna izmēru. Tālāk mēs esam definējuši visas nepieciešamās tapas, caur kurām mēs mērīsim spriegumu un strāvu. Pēc tam mēs esam definējuši rezistoru vērtības, kuras tiek izmantotas aparatūrā, kā redzat no shēmas. Ja jums nav šo vērtību vai vēlaties mainīt skaitītāja diapazonu, varat mainīt šīs vērtības, kods darbosies lieliski.
Tā kā strāvas mērīšanai mēs izmantojam ACS712, mums ir nepieciešama mVperAmp vērtība, lai aprēķinātu strāvu no sprieguma. Tā kā es izmantoju moduli 20A ACS712, mV / A vērtība ir 100, kā norādīts datu lapā. Bet, tā kā mēs izmantojam ESP32 un sprieguma dalītāju, mums būs puse no vērtības, kas ir 50, un tāpēc mēs esam ievietojuši mV / AMP vērtību.
ACSoffset ir nobīde, kas nepieciešama strāvas aprēķināšanai no sprieguma. Tā kā ACS712 IC tiek darbināti no 5 V, nobīdes spriegums ir 2,5 V. Bet, tā kā mēs izmantojam sprieguma dalītāju, tas samazinās līdz 1,25 V. Jūs, iespējams, jau zināt ESP32 nežēlīgo ADC, tāpēc man bija jāizmanto vērtība 1136. Ja rodas kalibrēšanas problēmas, varat pielāgot vērtības un kompensēt ADC.
Visbeidzot, mēs pabeidzim šo sadaļu, izveidojot Adafruit_SSD1306 klases displeja objektu un nokārtojot ekrāna platumu, augstumu, I 2 C konfigurāciju, un pēdējais -1 parametrs tiek izmantots atiestatīšanas funkcionalitātes noteikšanai. Ja jūsu displejam nav ārējas atiestatīšanas tapas (kas noteikti ir paredzēts manam displejam), tad pēdējam argumentam jāizmanto -1.
void setup () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adrese 0x3D 128x64 sērijas.println (F ("SSD1306 piešķiršana neizdevās")); priekš (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); kavēšanās (100); }
Tālāk mums ir sadaļa setup () . Šajā sadaļā mēs iespējojam sērijveida atkļūdošanu, mēs ar displeja objekta sākuma metodes palīdzību pārbaudām, vai ir pieejams I 2 C displejs. Mēs arī iestatījām I 2 C adresi. Pēc tam mēs notīriet displeju ar clearDisplay () metodi. Mēs arī pagriežam displeju ar metodi setRotation , tas ir tāpēc, ka es esmu sajaucis savu PCB dizainu. Tālāk mēs ieviesām 100 ms kavēšanos, lai funkcijas stātos spēkā. Kad tas ir izdarīts, tagad mēs varam pāriet uz cilpas funkciju. Bet pirms pāriet pie cilpas funkciju, mums ir nepieciešams, lai pārrunātu divas citas funkcijas, kas ir return_voltage_value () , un return_current_value () .
dubultā atgriešanās sprieguma vērtība (int pin_no) {dubultā tmp = 0; dubultā ADCVoltage = 0; dubultā ievadeVoltage = 0; dubultā vidējā = 0; par (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } vid. = tmp / 150; ADCVoltage = ((vid. * 3.3) / (4095)) + 0.138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // formula sprieguma aprēķināšanai, ti, GND atgriešanās ieejāVoltage; }
Funkcija return_voltage_value () tiek izmantota, lai izmērītu spriegumu, kas nonāk ADC, un kā argumentu tā izmanto pin_no. Šajā funkcijā mēs vispirms deklarējam dažus mainīgos, kas ir tmp, ADCVoltage, inputVoltage un avg. Tmp mainīgais tiek izmantots, lai saglabātu ADC pagaidu vērtību, ko iegūstam no analogRead (), pēc tam mēs to 150 reizes vidēji izvelkam for for loop, un vērtību mēs saglabājam mainīgajam ar nosaukumu avg. Pēc tam mēs aprēķinām ADCVoltage no norādītās formulas, visbeidzot, mēs aprēķinām ieejas spriegumu un atgriežam vērtības. +0,138 vērtība, kuru redzat, ir kalibrēšanas vērtība, kuru es izmantoju, lai kalibrētu sprieguma līmeni, spēlējiet ar šo vērtību, ja rodas kļūdas.
double return_current_value (int pin_no) {dubultā tmp = 0; dubultā vidējā = 0; dubultā ADCVoltage = 0; dubultie ampēri = 0; par (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } vid. = tmp / 150; ADCVoltage = ((vid. / 4095.0) * 3300); // Iegūst jūs mV ampēri = ((ADCVoltage - ACSoffset) / mVperAmp); atgriešanās ampēri; }
Tālāk mums ir funkcija return_current_value () . Šī funkcija kā argumentu ņem arī pin_no. Šajā funkcijā mums ir arī četri mainīgie, ti. tmp, avg, ADCVoltage un ampēri
Pēc tam mēs nolasām tapu ar analogRead () funkciju un vidēji to 150 reizes, pēc tam mēs izmantojam formulu, lai aprēķinātu ADCvoltage, ar to mēs aprēķinām strāvu un mēs atgriežam vērtību. Ar to mēs varam pāriet uz cilpas sadaļu.
void loop () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); float input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)); pludiņa izejas spriegums = abs (atgriešanās sprieguma vērtība (OUTPUT_VOLTAGE_SENSE_PIN)); float output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))); ievades_strāva = ievades_strāva - 0,025; Serial.print ("Ieejas spriegums:"); Serial.print (ievades_spriegums); Serial.print ("- ieejas strāva:"); Serial.print (ievades_strāva); Serial.print ("- izejas spriegums:"); Serial.print (izejas_spriegums); Serial.print ("- izejas strāva:"); Serial.println (izejas_strāva); kavēšanās (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (ievades_spriegums); display.setCursor (70, 0); displejs.druka ("V"); }
Mēs sākam cikla sadaļu, deklarējot un definējot dažus mainīgos mainīgos visos četros mainīgajos. Mēs izsaucam attiecīgās funkcijas, kā argumentu nododot pin_no, jo modulis ACS712 pašreizējās vērtības var atgriezt negatīvās. Mēs izmantojam matemātikas bibliotēkas funkciju abs () , lai negatīvo vērtību padarītu par pozitīvu. Tālāk mēs sērijveidā izdrukājam visas atkļūdošanas vērtības. Pēc tam mēs notīrām displeju, iestatām kursoru un izdrukājam vērtības. Mēs to darām visām displejā redzamajām rakstzīmēm. Kas iezīmē cilpas funkcijas un programmas beigas.
Arduino un ESP32 bāzes efektivitātes mērītāja pārbaude
Kā redzat manu testa iestatījumu iepriekš redzamajā attēlā. Man kā ieejai ir mans 30 V transformators, un mans skaitītājs ir pievienots testa dēlim. Es izmantoju uz kravas pārveidotāja LM2596 balstītu plāksni un slodzei, un es paralēli izmantoju trīs 10 omu rezistorus.
Kā redzat iepriekš redzamajā attēlā, esmu pieslēdzies vairākiem skaitītājiem, lai pārbaudītu ieejas un izejas spriegumu. Transformators ražo gandrīz 32 V, un spraudņa pārveidotāja jauda ir 3,95 V.
Šeit redzamajā attēlā parādīta izejas strāva, ko mēra ar manu efektivitātes mērītāju un multimetru. Kā redzat, multimetrs rāda.97 ampēri, un, ja jūs nedaudz pietuvināt, tas parāda 1.0A, tas ir nedaudz izslēgts, pateicoties nelinearitātei, kas atrodas modulī ACS712, taču tas kalpo mūsu mērķim. Lai iegūtu detalizētu skaidrojumu un testēšanu, varat apskatīt videoklipu mūsu video sadaļā.
Turpmākie uzlabojumi
Šajā demonstrācijā shēma tiek izgatavota uz rokām darinātas PCB, taču shēmu var viegli iebūvēt labas kvalitātes PCB. Manā eksperimentā PCB izmērs ir patiešām liels, pateicoties komponentu izmēram, taču ražošanas vidē to var samazināt, izmantojot lētus SMD komponentus. Shēmai nav arī iebūvētas aizsardzības funkcijas, tāpēc aizsardzības ķēdes iekļaušana uzlabos ķēdes vispārējo drošības aspektu. Rakstot kodu, es pamanīju, ka ESP32 ADC nav tik lielisks. Iekļaujot ārēju ADC, piemēram, ADS1115 moduli, tiks palielināta vispārējā stabilitāte un precizitāte.
Es ceru, ka jums patika šis raksts un uzzinājāt no tā kaut ko jaunu. Ja jums ir kādas šaubas, varat jautāt zemāk esošajos komentāros vai arī izmantot mūsu forumus detalizētai diskusijai.