- Tarvittavat materiaalit ESP32-virtamittarille
- Arduino- ja ESP32-pohjainen tehokkuusmittari - piirikaavio
- Piirilevyn suunnittelu Arduino- ja ESP32-pohjaisiin tehomittareihin
- Arduino- ja ESP32-pohjainen tehokkuusmittari - koodi
- Arduino- ja ESP32-pohjaisen tehomittarin testaus
- Lisäparannuksia
Olemme kaikki tietoisia perusjännitemittareista, ampeerimittareista ja wattimittareista, kolmesta perustavasta, joita tarvitset mittaamaan arvoja kaikissa elektronisissa projekteissa tai piireissä. Jännitteen ja virran mittaaminen yleismittarin avulla voi olla hyvä tapa aloittaa, mutta yksi suurimmista ongelmista, joita kohtaan testatessani virtapiiriä, on energiatehokkuuden mittaaminen. Joten tänään ratkaistaan tämä ongelma rakentamalla Arduino- ja ESP32-pohjainen tehokkuusmittari, joka voi mitata tulojännitettä, tulovirtaa, lähtöjännitettä ja lähtövirtaa. Siksi se voi mitata tulo- ja lähtötehoa samanaikaisesti, ja näiden arvojen avulla voimme mitata tehokkuutta helposti. Aikaisemmin olemme tehneet myös jotain hyvin samanlaista Arduino-pohjaisessa Wattmeter-projektissamme, mutta tässä mitataan sekä syöttö- että lähtöteho laskea tehokkuus.
Sen sijaan, että hankisimme neljä metriä työhön, voimme ratkaista tämän ongelman yhdistämällä kaikkien neljän metrin ominaisuudet yhteen. Digitaalisen mittarin rakentaminen ei vain vähennä kustannuksia, vaan antaa sinulle myös tilaa liikkua päivityksiä ja parannuksia varten. Koska käytämme ESP32: ta tämän projektin rakentamiseen, voimme helposti ottaa tämän mittarin IoT: n käyttöön ja kirjata tiedot verkon kautta, mikä on tulevan projektin aihe. Kun kaikki perusasiat on selvitetty, menemme suoraan siihen.
Huomaa: Tämä tehomittari on tarkoitettu tasavirtapiireille. Jos haluat mitata vaihtovirtaa lasketuksi vaihtovirran tehokkuudeksi, voit tarkistaa IoT-pohjaiset sähköenergiamittari- ja ennakkomaksumittariprojektit.
Tarvittavat materiaalit ESP32-virtamittarille
Alla oleva kuva näyttää piirin rakentamiseen käytetyt materiaalit. Koska tämä on valmistettu hyvin yleisistä komponenteista, sinun pitäisi pystyä löytämään kaikki luetellut materiaalit paikallisesta harrastekaupastasi.
Olen myös luetellut alla olevat komponentit tarvittavan määrän kanssa. Jos rakennat virtapiiriä itse, on erittäin suositeltavaa hankkia kaikki alla olevan luettelon materiaalit.
- ESP32-kortti - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- DC-tynnyriliitin - 1
- 100uF kondensaattori - 2
- 104 pF - 2
- 102 pF - 2
- 10K, 1% - 4
- 68K, 1% - 2
- 6,8 kt, 1% - 2
Arduino- ja ESP32-pohjainen tehokkuusmittari - piirikaavio
Arduino- ja ESP32-pohjaisen tehokkuusmittarin kaavio on esitetty alla. Tämän piirin luominen on hyvin yksinkertaista ja käyttää yleisiä komponentteja.
Piirin toiminta on hyvin yksinkertaista. Mitataan jännite ja virta tässä projektissa, mutta ainutlaatuisella tavalla. Mittaamme jännitettä ja virtaa sekä tulolle että lähdölle, joten voimme nähdä piirin tehokkuuden. Tämä on erittäin hyödyllistä joissakin projekteissa. Esimerkki voisi olla DC-DC-muunnin, jossa tehokkuuden mittaaminen tulee pakolliseksi. Tapa, jolla nämä piirit toimivat, kuvataan alla.
ACS712-virtatunnistimen IC:
Kuten yllä olevasta kuvasta näet, käytämme virran mittaamiseen ACS712-virtatunnistimen IC: tä. Tämä on erittäin mielenkiintoinen IC, koska se käyttää Hall-vaikutusta virran mittaamiseen. Tästä IC: stä on kolme muunnosta, jotka löytyvät markkinoilta f (tai 5A, 20A ja 30A). Käytämme tämän 20A-muunnosta ja se on merkitty nimellä ACS712-20.
ACS712-tietolomake suosittelee, että jännitealue on 4,5 - 5,5, jotta se toimii sujuvasti. Ja kun aiomme mitata virtaa ESP32: lla, se on vain 3,3 V suvaitsevainen, minkä vuoksi olen käyttänyt jännitteenjakajaa kahdella 10K-vastuksella ACS712 IC: n lähtöjännitteen alentamiseksi. Kun virtaa ei virtaa IC: n läpi, se antaa 2,5 V: n virran ja kun IC: n läpi virtaa jonkin verran virtaa, se joko laskee jännitettä tai lisää jännitettä virran virtaussuunnasta riippuen. Olemme käyttäneet kahta näistä IC: stä tulo- ja lähtövirran mittaamiseen. Tutustu aikaisempiin projekteihimme (alla), joissa käytimme tätä ACS712-anturia.
- IoT-pohjainen sähköenergiamittari Arduino- ja ESP8266 Wi-Fi -moduulilla
- Digitaalinen ampeeripiiri PIC-mikrokontrollerilla ja ACS712: llä
Missä keskustelimme näiden antureiden toiminnasta yksityiskohtaisesti. Voit tarkistaa ne, jos haluat tietää enemmän näistä antureista.
Jännitteenjakaja:
Tulo- ja lähtöjännitteen mittaamiseksi meillä on kaksi jännitteenjakajaa piirin tulo- ja lähtöpuolella. Suurin jännite, jonka piiri voi mitata, on 35 V, mutta se voidaan helposti muuttaa muuttamalla jännitteenjakajan vastusarvoja.
Jännitesäädin:
ESP32-, OLED- ja ACS712-mikropiirien virtalähteeseen käytetään yleistä LM7805-jännitesäätäjää. Koska virtalähteenä on melko puhdas teho, kytkentäkondensaattoreita ei käytetä, mutta IC: n vakauttamiseksi olemme käyttäneet 100uF kondensaattoreita sekä tulossa että lähdössä.
ESP32 IC ja OLED-näyttö:
Olemme käyttäneet ESP32: ta pääprosessorina, joka vastaa kaikista lukemista, laskelmista, tuloista ja lähdöistä. Olemme myös käyttäneet 128X64 OLED -näyttöä arvojen tuntemiseen.
Piirilevyn suunnittelu Arduino- ja ESP32-pohjaisiin tehomittareihin
Arduino- ja ESP32-pohjaisen tehomittarin piirilevy on suunniteltu yksipuoliselle levylle. Olen käyttänyt Eaglea piirilevyn suunnitteluun, mutta voit käyttää mitä tahansa valitsemaasi suunnitteluohjelmaa. Taulutietokoneeni 2D-kuva on esitetty alla.
Riittävä maadoitusjälki käytetään asianmukaisten maadoitusyhteyksien luomiseen kaikkien komponenttien välillä. Lisäksi varmistimme, että käytämme asianmukaisia 5 V: n ja 3,3 V: n jälkiä melun vähentämiseksi ja tehokkuuden parantamiseksi.
- Lataa piirilevyjen suunnittelu- ja GERBER-tiedostot Arduino ja ESP32-pohjainen tehokkuusmittari
Käsintehty piirilevy:
Mukavuuden ja testauksen vuoksi tein käsintehty versioni piirilevystä ja se näkyy alla. Ensimmäisessä versiossa tein joitain virheitä, jotka korjasin käyttämällä joitain hyppyjohtoja. Mutta lopullisessa versiossa korjasin ne, voit vain ladata tiedostot ja käyttää niitä.
Arduino- ja ESP32-pohjainen tehokkuusmittari - koodi
Nyt kun olemme ymmärtäneet asioiden laitteistopuolen hyvin, voimme avata Arduino IDE: n ja aloittaa koodauksen. Koodin tarkoituksena on lukea analoginen jännite ESP32-kortin nastoista 35 ja 33. Luemme myös jännitteen 32 ja 34 nastasta, joka on nykyinen arvo. Kun olemme tehneet tämän, voimme kertoa ne tulo- ja lähtötehon saamiseksi, ja lisäämällä sen hyötysuhde-kaavaan voimme saada hyötysuhteen.
Lopuksi näytämme sen LCD-näytöllä. Lopuksi annetaan täydellinen ohjelma tekemään sama, jota voidaan käyttää sellaisenaan edellä käsitellylle laitteistolle. Lisäksi koodi jaetaan pieniksi katkelmiksi ja selitetään.
Koska käytämme 128X64 OLED -näyttöä , tarvitsemme Adafruit_GFX-kirjaston ja Adafruit_SSD1306-kirjaston, jotta voimme olla yhteydessä näyttöön. Voit ladata molemmat Arduinon oletuskortinhallintaterminaalista; jos sinulla on ongelmia taulunhallintaosassa, voit myös ladata ja sisällyttää kirjastot siihen liittyvästä GitHub-arkistosta, joka on annettu alla.
- Lataa Adafruit_GFX-kirjasto
- Lataa Adafruit_SSD1306-kirjasto
Kuten aina, aloitamme koodimme sisällyttämällä kaikki vaaditut kirjastot. Sitten määritellään kaikki tarvittavat nastat ja muuttujat, jotka kaikki on esitetty alla.
#sisältää
SCREEN_WIDTH & SCREEN_HEIGHT määritelmiä käytetään määrittelemään näytön koko. Seuraavaksi olemme määrittäneet kaikki tarvittavat nastat, joiden läpi mittaamme jännitteen ja virran. Seuraavaksi olemme määrittäneet laitteistossa käytetyt vastusarvot, kuten kaaviosta näet. Jos sinulla ei ole näitä arvoja tai haluat muuttaa mittarin aluetta, voit muuttaa näitä arvoja, koodi toimii hyvin.
Koska mittaamme virtaa ACS712: lla, tarvitsemme mVperAmp- arvon virran laskemiseksi jännitteestä. Koska käytän 20A ACS712 -moduulia, mV / A-arvo on 100, kuten taulukossa on esitetty. Mutta koska käytämme ESP32: ta ja jännitteenjakajaa, meillä on puolet arvosta, joka on 50, ja siksi olemme lisänneet mV / AMP-arvon.
ACSoffset on siirtymä, jota tarvitaan virran laskemiseksi jännitteestä. Koska ACS712 IC: t saavat virtaa 5 V: sta, siirtymäjännite on 2,5 V. Mutta kun käytämme jännitteenjakajaa, se laskee 1,25 V: iin. Saatat jo tietää ESP32: n ahdistuneen ADC: n, joten minun piti käyttää arvoa 1136. Jos sinulla on kalibrointiongelmia, voit säätää arvoja ja kompensoida ADC: tä.
Lopuksi loppuun tässä jaksossa tekemällä näyttö tavoitteena Adafruit_SSD1306 luokan ja kulkee näytön leveys, korkeus, I 2 C kokoonpano, ja viimeinen -1 parametria käytetään määrittämään reset toiminnallisuutta. Jos näytölläsi ei ole ulkoista palautustappia (mikä on varmasti minun näyttöni varten), sinun on käytettävä -1 viimeisessä argumentissa.
void setup () {Sarja.alku (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Osoite 0x3D mallille 128x64 Serial.println (F ("SSD1306 allokointi epäonnistui")); varten (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); viive (100); }
Seuraavaksi meillä on setup () -osio. Tässä osassa otamme sarjavianmäärityksen käyttöön, tarkistamme, onko I 2 C -näyttö käytettävissä vai ei, näyttöobjektin aloitusmenetelmän avulla. Lisäksi asetamme I 2 C-osoitteen. Seuraavaksi tyhjennämme näytön clearDisplay () -menetelmällä. Kierrämme myös näyttöä setRotation- menetelmällä, koska se on sekoittanut piirilevyn suunnittelua. Seuraavaksi asetamme 100 ms: n viiveen, jotta toiminnot tulevat voimaan. Kun se on tehty, voimme nyt siirtyä loop-toimintoon. Mutta ennen siirtymistä silmukan toiminto, meidän täytyy keskustella kaksi muuta toimintoja, jotka ovat return_voltage_value () , ja return_current_value () .
tuplapalautusjännite-arvo (int pin_no) {tuplammp = 0; kaksinkertainen ADC-jännite = 0; kaksinkertainen tulojännite = 0; kaksinkertainen keskiarvo = 0; for (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } keskiarvo = tmp / 150; ADC-jännite = ((keskiarvo * 3,3) / (4095)) + 0,138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // kaava jännitteen laskemiseksi eli GND-paluu inputVoltage; }
Return_voltage_value () funktiota käytetään mittaamaan jännite tulossa ADC, ja se vie pin_no argumenttina. Tässä toiminnossa aloitetaan ilmoittamalla muuttujat, jotka ovat tmp, ADCVoltage, inputVoltage ja avg. Tmp-muuttujaa käytetään tallentamaan väliaikainen ADC-arvo, jonka saamme analogRead () -toiminnosta, sitten keskiarvoistamme sen 150 kertaa for for -silmukkaan ja tallennamme arvon muuttujaan nimeltä avg. Lasketaan sitten ADCVoltage annetusta kaavasta, lopuksi lasketaan syöttöjännite ja palautetaan arvot. Näkemäsi arvo +0,138 on kalibrointiarvo, jota käytin jännitetason kalibrointiin, pelaa tällä arvolla, jos saat virheitä.
double return_current_value (int pin_no) {kaksinkertainen tmp = 0; kaksinkertainen keskiarvo = 0; kaksinkertainen ADC-jännite = 0; kaksinkertainen ampeeri = 0; for (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } keskiarvo = tmp / 150; ADC-jännite = ((keskim. / 4095,0) * 3300); // saa sinut mV Vahvistimet = ((ADCVoltage - ACSoffset) / mVperAmp); paluu vahvistimet; }
Seuraavaksi meillä on return_current_value () -funktio. Tämä toiminto ottaa myös argumentin pin_no. Tässä funktiossa meillä on myös neljä muuttujaa, nimittäin. tmp, keskiarvo, ADC-jännite ja vahvistimet
Seuraavaksi luemme nastan analogRead () -toiminnolla ja keskiarvoistimme sen 150 kertaa, seuraavaksi käytämme kaavaa ADC-jännitteen laskemiseen, jolloin laskemme virran ja palautamme arvon. Sen avulla voimme siirtyä silmukkaosaan.
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))); tulon_virta = tulon_virta - 0,025; Serial.print ("Tulojännite:"); Sarja.tulos (syöttöjännite); Serial.print ("- Tulovirta:"); Sarja.tulos (input_current); Serial.print ("- Lähtöjännite:"); Sarja.tulos (lähtöjännite); Serial.print ("- Lähtövirta:"); Serial.println (lähtö_virta); viive (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (syöttöjännite); display.setCursor (70, 0); näyttö.painatus ("V"); }
Aloitamme silmukan osan ilmoittamalla ja määrittelemällä joitain kelluvia muuttujia kaikissa neljässä muuttujassa. Kutsumme vastaavia funktioita, välittämällä argumentiksi pin_no, koska ACS712-moduuli voi palauttaa nykyiset arvot negatiivisina. Käytämme matemaattikirjaston abs () -funktiota tekemään negatiivisesta arvosta positiivisen. Seuraavaksi tulostamme sarjaan kaikki virheenkorjauksen arvot. Seuraavaksi tyhjennämme näytön, asetamme kohdistimen ja tulostamme arvot. Teemme tämän kaikille näytössä näkyville merkeille. Mikä merkitsee silmukkatoiminnon ja ohjelman loppua.
Arduino- ja ESP32-pohjaisen tehomittarin testaus
Kuten näet testiasetukseni yllä olevasta kuvasta. Minulla on 30 V: n muuntajan tulona, ja mittarini on kytketty koelautaan. Käytän LM2596-pohjaista buck-muunninkorttia ja kuormitukseen ja käytän kolmea 10 ohmin vastusta rinnakkain.
Kuten yllä olevasta kuvasta näet, olen liittänyt useita metrejä tulo- ja lähtöjännitteen tarkistamiseksi. Muuntaja tuottaa melkein 32 V ja buck-muuntimen lähtö on 3,95 V.
Tässä kuvassa näkyy tehomittarin ja yleismittarin mittaama lähtövirta. Kuten näette, yleismittari näyttää 0,97 ampeeria, ja jos zoomaat vähän, se näyttää 1,0A, se on hieman pois päältä ACS712-moduulin epälineaarisuuden vuoksi, mutta tämä palvelee tarkoitustamme. Yksityiskohtaisen selityksen ja testauksen voit tarkistaa videosta video-osiosta.
Lisäparannuksia
Tätä esittelyä varten piiri tehdään käsintehdyllä piirilevyllä, mutta piiri voidaan helposti rakentaa laadukkaaksi piirilevyksi. Kokemuksessani piirilevyn koko on todella suuri komponenttikoon vuoksi, mutta tuotantoympäristössä sitä voidaan pienentää käyttämällä halpoja SMD-komponentteja. Piirissä ei myöskään ole sisäänrakennettua suojaustoimintoa, joten suojapiirin sisällyttäminen parantaa piirin yleistä turvallisuutta. Lisäksi kirjoittaessani koodia huomasin, että ESP32: n ADC ei ole niin suuri. Ulkoisen ADC: n, kuten ADS1115-moduulin, sisällyttäminen lisää yleistä vakautta ja tarkkuutta.
Toivottavasti pidit tästä artikkelista ja opit siitä jotain uutta. Jos sinulla on epäilyksiä, voit kysyä alla olevista kommenteista tai käyttää foorumeitamme yksityiskohtaiseen keskusteluun.