Sisukord:

Arduino täpne ja täpne voltmeeter (0-90V DC): 3 sammu
Arduino täpne ja täpne voltmeeter (0-90V DC): 3 sammu

Video: Arduino täpne ja täpne voltmeeter (0-90V DC): 3 sammu

Video: Arduino täpne ja täpne voltmeeter (0-90V DC): 3 sammu
Video: Как измерить любое напряжение постоянного тока с Arduino ARDVC-01 2024, November
Anonim

Selles juhendis olen ehitanud voltmeetri, et mõõta Arduino Nano abil suhteliselt täpselt ja täpselt kõrgepingeid (0-90v).

Minu tehtud testmõõtmised olid piisavalt täpsed, enamasti 0,3 V piires tavalise voltmeetriga mõõdetud tegelikust pingest (kasutasin Astro AI DM6000AR). See on minu kavandatud seadme kasutamiseks piisavalt lähedal.

Selle arhiveerimiseks kasutasin pingeandurit (4,096v) ja pingejaoturit.

Koodipoolel kasutasin muidugi Arduino Nano valikut "väline viide" ja Arduino õpetuste näidet "Silumine".

Tarvikud

1 x Arduino Nano - link

1 x Oled ekraan (SSD 1306) - link

1 x 1/4W 1% takistid - 1 k ohm - link

1 x 1/4W 1% takistid - 220 kΩ - Link

1 x 1/4W 1% takistid - 10 k ohm - Link

1 x 4.096v LM4040DIZ -4.1 pinge võrdlus - link

Leivalaud ja juhtmed - link

Astro AI DM6000AR - link

USB toitepank - link

9V patareid - link

CanadianWinters osaleb sidusreklaamiprogrammis Amazon Services LLC Associates Program, mis on loodud selleks, et pakkuda saitidele vahendeid tasu teenimiseks, linkides saidile Amazon.com ja sellega seotud saitidele. Neid linke kasutades teenin Amazoni sidusettevõttena kvalifitseeruvatest ostudest, isegi kui ostate midagi muud-ja see ei maksa teile midagi.

Samm: skeemid

Skeemid
Skeemid
Skeemid
Skeemid

Ühendasin kõik osad vastavalt ülaltoodud skeemile. Eelkõige valisin 4,096 pinge võrdluspunkti, et jääda 5v märgile võimalikult lähedale, et vältida eraldusvõime kaotamist.

Pärast andmelehte valisin pinge võrdluseks 1K oomi takisti, kuigi võiks kasutada teistsugust väärtust. Võrdluspinge tarnitakse Nano 5v tihvtilt.

Vooluahela mõte on see, et mõõdetav alalispinge läbib pingetakisti. Skaleeritud pinge ja seejärel satub Arduino analoogpistikusse, kust proovid võetakse, silutakse, skaleeritakse uuesti ja kuvatakse OLed-ekraanil.

Üritasin asju lihtsana hoida:)

2. samm: koodi ja takisti arvutused

Takistite väärtused valiti nii, nagu on soovitav (kui ma ei eksi, on see Arduino/Atmega andmelehel) hoida takistus alla 10 k oomi.

Asjade lihtsustamiseks koostasin arvutustabeli, mis automatiseerib arvutused juhuks, kui soovite kasutada erinevaid takisti väärtusi: Link to Google Sheet

Siin on kood, mida ma selle projekti jaoks kasutasin:

#kaasake

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (pöörlemine, [lähtestamine]) ujukipinge = 0; // kasutatakse pinge väärtuse ujuki salvestamiseks Radjust = 0,043459459; // Pinge jagaja tegur (R2 /R1+R2) ujuk vbat = 0; // lõpppinge pärast kaltsium- aku ujuki pinge Vref = 4,133; // Pinge võrdlus - mõõdetud tegelik väärtus. Nimiväärtus 4,096v const int numReadings = 50; // lugemisproovide arv - suuremaks silumiseks suurendage. Vähendage kiiremaks lugemiseks. int näidud [numReadings]; // analoogsisendi näidud int readIndex = 0; // praeguse näidu indeks allkirjata pikk kogusumma = 0; // jooksev kogu int keskmine = 0; // muutujad ekraani värskendamiseks ilma viivitust kasutamata unsigned long previousMillis = 0; // salvestab viimati ekraani värskendamise ajal // konstandid ei muutu: const pikk intervall = 50; // intervall ekraani värskendamiseks (millisekundid) void setup (void) {analogReference (EXTERNAL); // kasutage võrdluspinge jaoks AREF 4.096. Minu võrdlus reaalne pinge on 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… keerake algusesse: readIndex = 0; } // arvuta keskmine: keskmine = (kokku / numReadings); pinge = keskmine * (Vref / 1023.0); //4.113 on Vref vbat = pinge/Radjust; // Ekraani värskendamise viivituse määramine Millise abil, kui (currentMillis - previousMillis> = intervall) {// salvesta viimane kord, kui ekraani uuendati, eelmineMillis = currentMillis; u8g2.clearBuffer (); // sisemise menüü tühjendamine // Paki pingekuva u8g2.setFont (u8g2_font_fub20_tr); // 20px font u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px font u8g2.setCursor (76, 20); u8g2.print ("Voldid"); u8g2.setCursor (1, 40); u8g2.print ("Kanada talved"); u8g2.setCursor (1, 60); u8g2.print ("Täpne pinge"); } u8g2.sendBuffer (); // sisemälu ülekandmine kuvarile (1); }

Pange tähele, et olen Arduino kodeerimisel natuke roostes, nii et kui leiate vea või koodi täiustamise viisi, olen soovitustele avatud:)

Samm: proovime seda

Proovime järele!
Proovime järele!
Proovime järele!
Proovime järele!
Proovime järele!
Proovime järele!

Selle voltmeetri testimiseks kasutasin 8x 9v patareisid, mille sain kohalikust poest. Kavatsen seda voltmeetrit kasutada oma elektrijalgrataste akude pinge mõõtmiseks (nende pinge on vahemikus 24–60 V ja aeg-ajalt 72 V).

Kui elektroonika on trükkplaadile ja väikesesse karpi pakitud, saab sellest kena ja kaasaskantava akumõõdiku. OLED -i graafikat ja fonte saab kohandada vastavalt teie vajadustele (nt suurem font lihtsaks lugemiseks).

Minu eesmärk oli pinge näit Oled/Arduino arvestile mitte liiga kaugel minu digitaalsest multimõõturist. Sihtisin +/- 0, 3v max delta. Nagu videost näete, suutsin selle arhiveerida, välja arvatud mõõtmiste ülaosas.

Loodan, et teile meeldis see Instructable ja andke mulle oma mõtetest teada!

Soovitan: