- Materials necessaris per al mesurador de potència ESP32
- Mesurador d'eficiència basat en Arduino i ESP32: diagrama de circuits
- Disseny de PCB per a mesuradors d'eficiència basats en Arduino i ESP32
- Mesurador d'eficiència basat en Arduino i ESP32 - Codi
- Prova del mesurador d'eficiència basat en Arduino i ESP32
- Millores addicionals
Tots som conscients d’un voltímetre, amperímetre i wattmeters bàsics, les tres coses bàsiques que necessiteu per mesurar valors en qualsevol projecte o circuit electrònic. Mesurar la tensió i el corrent amb l’ajuda d’un multímetre pot ser una bona manera de començar, però un dels problemes més grans que tinc a l’hora de provar un circuit és mesurar l’eficiència energètica. Per tant, avui resoldrem aquest problema construint un comptador d’eficiència basat en Arduino i ESP32 que pugui mesurar la tensió d’entrada, el corrent d’entrada, el voltatge de sortida i el corrent de sortida. Per tant, pot mesurar la potència d’entrada i la potència de sortida al mateix temps i, amb aquests valors, podem mesurar l’eficiència fàcilment. Anteriorment, també hem fet alguna cosa molt similar al nostre projecte de vattímetre basat en Arduino, però aquí mesurarem tant la potència d’entrada com la de sortida a calcular l’eficiència energètica.
En lloc de comprar quatre metres per al treball, podrem resoldre aquest problema incorporant les capacitats dels quatre metres en un de sol. Construir el comptador digital no només redueix els costos, sinó que també us ofereix un espai reduït per a actualitzacions i millores. Com que estem utilitzant un ESP32 per construir aquest projecte, podem activar fàcilment aquest comptador IoT i registrar dades al web, que és el tema del futur projecte. Amb tots els conceptes bàsics esborrats, aprofundim-hi.
Nota: aquest mesurador de potència està dissenyat per a circuits de corrent continu. Si voleu mesurar el corrent altern a l’eficiència d’alimentació alternada calculada, podeu consultar els projectes de mesurador d’energia elèctrica i prepagament basats en IoT.
Materials necessaris per al mesurador de potència ESP32
La imatge següent mostra els materials utilitzats per construir el circuit. Com que es fabrica amb components molt genèrics, hauríeu de poder trobar tot el material que apareix a la vostra botiga d’aficionats local.

També he enumerat els components següents juntament amb la quantitat necessària. Si esteu construint el circuit vosaltres mateixos, és molt recomanable obtenir tots els materials de la llista següent.
- Junta ESP32 - 1
- OLED 128X64 - 1
- ACS712-20 IC - 2
- DC Barrel Jack - 1
- Condensador 100uF - 2
- 104pF - 2
- 102pF - 2
- 10.000, 1% - 4
- 68.000, 1% - 2
- 6,8 K, 1% - 2
Mesurador d'eficiència basat en Arduino i ESP32: diagrama de circuits
A continuació es mostra l’esquema del mesurador d’eficiència basat en Arduino i ESP32. Crear aquest circuit és molt senzill i utilitza components genèrics.

El funcionament del circuit és molt senzill. Mesurarem el voltatge i el corrent en aquest projecte però d’una manera única. Mesurem el voltatge i el corrent tant d’entrada com de sortida, de manera que podem veure l’eficiència del circuit. Això és molt útil per a alguns projectes. Un exemple podria ser un convertidor de CC a CC on la mesura de l’eficiència esdevingui obligatòria. A continuació es descriu el funcionament d’aquest circuit.
IC del sensor de corrent ACS712:
Com podeu veure a la imatge anterior, estem utilitzant un sensor de corrent ACS712 IC per mesurar el corrent. Es tracta d’un CI molt interessant, ja que utilitza l’ efecte Hall per mesurar el corrent, hi ha tres variants d’aquest IC que es poden trobar al mercat f (o 5A, 20A i 30A). Estem utilitzant la variant 20A d’aquesta i s’etiqueta com a ACS712-20.
El full de dades ACS712 recomana un rang de voltatge de 4,5 a 5,5 per funcionar sense problemes. I com que mesurarem el corrent amb un ESP32, només és tolerant a 3,3 V, per això he utilitzat un divisor de tensió amb dues resistències de 10 K per reduir la tensió de sortida de l’ACS712 IC. Quan no circula corrent a través del CI, emet 2,5V i, quan hi circula una mica de corrent, redueix el voltatge o augmenta el voltatge en funció de la direcció del flux de corrent. Hem utilitzat dos d'aquests circuits integrats per mesurar el corrent d'entrada i sortida. Consulteu els nostres projectes anteriors (a continuació) en què vam utilitzar aquest sensor ACS712.
- Mesurador d'energia basat en IoT que utilitza el mòdul Wi-Fi Arduino i ESP8266
- Circuit d'amperímetre digital mitjançant microcontrolador PIC i ACS712
On vam discutir detalladament el funcionament d’aquests sensors. Podeu consultar-los si voleu obtenir més informació sobre aquests sensors.
El divisor de tensió:
Per mesurar la tensió d’entrada i sortida, tenim dos divisors de tensió a l’entrada i la sortida del circuit. La tensió màxima que pot mesurar el circuit és de 35 V, però es pot canviar fàcilment canviant els valors de la resistència del divisor de tensió.
El regulador de voltatge:
Un regulador de voltatge LM7805 genèric s’utilitza per alimentar els circuits integrats ESP32, OLED i ACS712. Com que l’estem alimentant amb una força força neta, no s’utilitzen condensadors de desacoblament, però hem utilitzat condensadors de 100uF tant a l’entrada com a la sortida per estabilitzar l’IC.
El ESP32 IC i la pantalla OLED:
Hem utilitzat un ESP32 com a processador principal, que s’encarrega de totes les lectures, càlculs, entrades i sortides. A més, hem utilitzat una pantalla OLED de 128X64 per conèixer els valors.
Disseny de PCB per a mesuradors d'eficiència basats en Arduino i ESP32
El PCB del nostre mesurador d’eficiència basat en Arduino i ESP32 està dissenyat en una placa d’una sola cara. He utilitzat Eagle per dissenyar el meu PCB, però podeu utilitzar qualsevol programari de disseny que trieu. A continuació es mostra la imatge 2D del disseny del meu tauler.

S'utilitza una traça de terra suficient per fer connexions de terra adequades entre tots els components. A més, ens hem assegurat d’utilitzar traces adequades de 5V i 3,3V per reduir el soroll i millorar l’eficiència.
- Descarregueu fitxers de disseny de PCB i GERBER Arduino i mesurador d'eficiència basat en ESP32
PCB fet a mà:
Per comoditat i proves, he fet la meva versió feta a mà del PCB i es mostra a continuació. A la primera versió, vaig cometre alguns errors, que vaig corregir amb alguns cables de pont. Però a la versió final, els vaig corregir, només podeu descarregar els fitxers i utilitzar-los.
Mesurador d'eficiència basat en Arduino i ESP32 - Codi
Ara, ja que tenim una bona comprensió de la part del maquinari de les coses, podem obrir l'IDE Arduino i iniciar la nostra codificació. El propòsit del codi és llegir la tensió analògica dels pins 35 i 33 de la placa ESP32. També llegim la tensió de 32 i 34 pins, que és el valor actual. Un cop ho fem, podem multiplicar-los per obtenir potència d’entrada i potència de sortida i, posant-la en la fórmula d’eficiència, podem obtenir-ne l’eficiència.
Finalment, el mostrem a la pantalla LCD. El programa complet per fer el mateix es dóna al final, que es pot utilitzar com a tal per al maquinari comentat anteriorment. A més, el codi es divideix en petits fragments i s'explica.
Com que fem servir una pantalla OLED de 128X64, necessitem la biblioteca Adafruit_GFX i la biblioteca Adafruit_SSD1306 per comunicar-nos amb la pantalla. Podeu descarregar-les totes dues des del terminal de gestor de placa per defecte d'Arduino; si teniu algun problema amb la part del gestor del tauler, també podeu descarregar i incloure les biblioteques des del seu dipòsit GitHub associat, que es mostra a continuació.
- Descarregueu la biblioteca Adafruit_GFX
- Descarregueu la biblioteca Adafruit_SSD1306
Com sempre, comencem el nostre codi incloent totes les biblioteques necessàries. A continuació, definim tots els pins i variables necessaris, que es mostren a continuació.
#incloure
Les definicions SCREEN_WIDTH i SCREEN_HEIGHT s’utilitzen per definir la mida de la pantalla. A continuació, hem definit tots els pins necessaris, a través dels quals anem a mesurar la tensió i el corrent. A continuació, hem definit els valors de resistència que s’utilitzen al maquinari tal com es pot veure a l’esquema. Si no teniu aquests valors o si voleu canviar l'abast del mesurador, podeu canviar-los, el codi funcionarà bé.
Com que estem utilitzant un ACS712 per mesurar el corrent, necessitem el valor mVperAmp per calcular el corrent de tensió. Com que faig servir un mòdul ACS712 de 20A, el valor mV / A és 100 tal com es dóna al full de dades. Però com que fem servir un ESP32 i un divisor de voltatge, tindrem la meitat del valor, que és 50, i és per això que hem introduït el valor mV / AMP.
ACSoffset és el desplaçament necessari per calcular el corrent a partir de la tensió. Com que els ACS712 IC s’alimenten a partir de 5V, la tensió de desplaçament és de 2,5V. Però, com que fem servir un divisor de tensió, baixa fins a 1,25V. És possible que ja conegueu el merdós ADC de l’ESP32, de manera que vaig haver d’utilitzar un valor de 1136. Si teniu problemes de calibratge, podeu modificar els valors i compensar l’ADC.
Finalment, acabem aquesta secció fent un objecte de visualització de la classe Adafruit_SSD1306 i passant l’amplada, l’alçada, la configuració de I 2 C de la pantalla i l’últim paràmetre -1 s’utilitza per definir la funcionalitat de restabliment. Si la pantalla no té un pin de restabliment extern (que sens dubte és per a la meva pantalla), haureu d'utilitzar -1 per a l'últim argument.
configuració nul·la () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adreça 0x3D per a 128x64 Serial.println (F ("Ha fallat l'assignació SSD1306")); per (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); retard (100); }
A continuació, tenim la nostra secció setup () . En aquesta secció, activem la sèrie per a la depuració, comprovem si hi ha disponible una pantalla I 2 C amb l'ajut del mètode inicial de l'objecte de visualització. També establim l' adreça I 2 C. A continuació, esborrem la pantalla amb el mètode clearDisplay () . A més, girem la pantalla amb el mètode setRotation , perquè he desordenat el meu disseny de PCB. A continuació, posem un retard de 100 ms perquè les funcions tinguin efecte. Un cop fet això, ara podem passar a la funció de bucle. Però abans de procedir a la funció de bucle, hem de discutir altres dues funcions que són return_voltage_value () , i return_current_value () .
doble valor_tensió_torn (int pin_no) {doble tmp = 0; doble tensió ADC = 0; voltatge d'entrada doble = 0; doble mitjana = 0; for (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } mitjana = tmp / 150; Tensió ADC = ((mitjana * 3,3) / (4095)) + 0,138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // fórmula per al càlcul de la tensió, és a dir, la volta d’entrada GND Voltatge; }
La funció return_voltage_value () s’utilitza per mesurar el voltatge que entra a l’ADC i pren el pin_no com a argument. En aquesta funció, comencem declarant algunes variables, que són tmp, ADCVoltage, inputVoltage i avg. La variable tmp s’utilitza per emmagatzemar el valor ADC temporal que obtenim de la funció analogRead (), després el fem una mitjana 150 vegades en un bucle for i emmagatzemem el valor en una variable anomenada avg. A continuació, calculem la tensió ADC a partir de la fórmula donada, finalment calculem la tensió d’entrada i retornem els valors. El valor de +0,138 que veieu és el valor de calibratge que he utilitzat per calibrar el nivell de tensió. Jugueu amb aquest valor si teniu algun error.
doble retorn_valor_actual (int pin_no) {doble tmp = 0; doble mitjana = 0; doble tensió ADC = 0; doble amplificador = 0; for (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } mitjana = tmp / 150; ADCVoltage = ((avg / 4095.0) * 3300); // Obté mV Amps = ((ADCVoltage - ACSoffset) / mVperAmp); retorn d'amplis; }
A continuació, tenim la funció return_current_value () . Aquesta funció també pren pin_no com a argument. En aquesta funció també tenim quatre variables a saber. tmp, avg, ADCVoltage i Amps
A continuació, llegim el pin amb la funció analogRead () i el fem mitjana 150 vegades, a continuació fem servir la fórmula per calcular la tensió ADC, amb la qual cosa calculem el corrent i retornem el valor. Amb això, podem passar a la secció de bucle.
bucle buit () {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 ("Voltatge d'entrada:"); Serial.print (input_voltage); Serial.print ("- Corrent d'entrada:"); Serial.print (input_current); Serial.print ("- Voltatge de sortida:"); Serial.print (sortida_voltatge); Serial.print ("- Corrent de sortida:"); Serial.println (output_current); retard (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); visualització.imprimir ("V"); }
Comencem la secció de bucle declarant i definint algunes variables flotants, en les quatre variables. Anomenem les funcions respectives, passant pin_no com a argument, ja que el mòdul ACS712 pot retornar els valors actuals en negatiu. Utilitzem la funció abs () de la biblioteca de matemàtiques per fer que el valor negatiu sigui positiu. A continuació, imprimim en sèrie tots els valors per a la depuració. A continuació, esborrem la pantalla, configurem el cursor i imprimim els valors. Ho fem per a tots els caràcters que es mostren a la pantalla. Que marca el final de la funció de bucle i del programa.
Prova del mesurador d'eficiència basat en Arduino i ESP32
Com podeu veure la configuració de la meva prova a la imatge anterior. Tinc el transformador de 30V com a entrada i tinc el mesurador connectat a la placa de proves. Estic fent servir una placa convertidora basada en LM2596 per a la càrrega i estic fent servir tres resistències de 10 Ohms, en paral·lel.

Com podeu veure a la imatge anterior, m'he connectat a diversos multímetres per comprovar la tensió d'entrada i sortida. El transformador produeix gairebé 32 V i la sortida del convertidor Buck és de 3,95 V.

La imatge aquí mostra el corrent de sortida mesurat pel meu comptador d’eficiència i el multímetre. Com podeu veure, el multímetre mostra 0,97 amperes i, si amplieu una mica, mostra 1.0A, està lleugerament apagat a causa de la no linealitat present al mòdul ACS712, però això serveix per al nostre propòsit. Per obtenir una explicació i proves detallades, podeu consultar el vídeo a la nostra secció de vídeos.
Millores addicionals
Per a aquesta demostració, el circuit es realitza en un PCB fet a mà, però es pot construir fàcilment en un PCB de bona qualitat. Al meu experiment, la mida del PCB és realment gran a causa de la mida dels components, però en un entorn de producció es pot reduir mitjançant l’ús de components SMD econòmics. El circuit tampoc no té cap funció de protecció integrada, de manera que incloure un circuit de protecció millorarà l’aspecte general de seguretat del circuit. A més, mentre escrivia el codi, em vaig adonar que l’ADC de l’ESP32 no era tan fantàstic. La inclusió d’un ADC extern com el mòdul ADS1115 augmentarà l’estabilitat i la precisió generals.
Espero que aquest article us hagi agradat i n’hagueu après alguna cosa nova. Si teniu algun dubte, podeu demanar-los als comentaris següents o fer servir els nostres fòrums per a una discussió detallada.
