Turinys:

Tikslus ir tikslus „Arduino“voltų matuoklis (0–90 V DC): 3 žingsniai
Tikslus ir tikslus „Arduino“voltų matuoklis (0–90 V DC): 3 žingsniai

Video: Tikslus ir tikslus „Arduino“voltų matuoklis (0–90 V DC): 3 žingsniai

Video: Tikslus ir tikslus „Arduino“voltų matuoklis (0–90 V DC): 3 žingsniai
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Lapkritis
Anonim

Šioje instrukcijoje aš sukūriau voltmetrą, skirtą santykinai tiksliai ir tiksliai išmatuoti aukštą įtampą (0-90v), naudojant „Arduino Nano“.

Mano atlikti bandomieji matavimai buvo pakankamai tikslūs, dažniausiai 0,3 V riboje nuo faktinės įtampos, išmatuotos standartiniu voltmetru (aš naudoju „Astro AI DM6000AR“). Tai pakankamai arti mano numatyto prietaiso naudojimo.

Norėdami tai archyvuoti, naudoju įtampos etaloną (4.096v) ir įtampos daliklį.

Kodo pusėje, žinoma, naudojau „Arduino Nano“parinktį „išorinė nuoroda“ir „Išlyginimo“pavyzdį „Arduino“vadovėliuose.

Prekės

1 x „Arduino Nano“- nuoroda

1 x apšviestas ekranas (SSD 1306) - nuoroda

1 x 1/4W 1% rezistoriai - 1k omas - Nuoroda

1 x 1/4W 1% rezistoriai - 220k omų - Nuoroda

1 x 1/4W 1% rezistoriai - 10k omų - Nuoroda

1 x 4.096v LM4040DIZ -4.1 įtampos nuoroda - nuoroda

Duonos lenta ir laidai - nuoroda

„Astro AI DM6000AR“- nuoroda

USB maitinimo bankas - nuoroda

9 V baterijos - nuoroda

„CanadianWinters“yra „Amazon Services LLC Associates“programos - filialų reklamos programos, skirtos svetainėms užsidirbti mokesčių susiejant su „Amazon.com“ir susijusiomis svetainėmis, dalyvis. Naudodamas šias nuorodas aš, kaip „Amazon“asocijuotas partneris, uždirbu iš tinkamų pirkimų, net jei perkate ką nors kita-ir tai jums nieko nekainuos.

1 žingsnis: schemos

Schemos
Schemos
Schemos
Schemos

Aš sujungiau visas dalis pagal aukščiau pateiktą schemą. Visų pirma pasirinkau 4.096 įtampos atskaitos tašką, kad būtų kuo arčiau 5v žymos, kad neprarastų skiriamosios gebos.

Vadovaudamasis duomenų lapu, įtampos atskaitos taškui pasirinkau 1K omą, nors būtų galima naudoti kitokią vertę. Atskaitos įtampa tiekiama iš „Nano 5v“kaiščio.

Grandinės idėja yra ta, kad matuojama nuolatinė įtampa eina per įtampos rezistorių. Sumažinta įtampa ir tada patenka į analoginį „Arduino“kaištį, kad būtų galima paimti mėginius, išlyginti, pakeisti mastelį ir parodyti OLed ekrane.

Stengiausi, kad viskas būtų paprasta:)

2 žingsnis: kodo ir rezistoriaus skaičiavimai

Rezistorių vertės buvo pasirinktos taip, kaip patartina (jei neklystu, tai yra „Arduino“/„Atmega“duomenų lape), kad varža būtų mažesnė nei 10 k omų.

Kad viskas būtų paprasčiau, sukūriau skaičiuoklę, kuri automatizuoja skaičiavimus, jei norite naudoti skirtingas rezistorių reikšmes: Nuoroda į „Google“lapą

Štai kodas, kurį naudoju šiam projektui:

#įtraukti

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (sukimas, [atstatymas]) plūdės įtampa = 0; // naudojamas įtampos vertės plūdės saugojimui Radjust = 0.043459459; // Įtampos daliklio koeficientas (R2 /R1+R2) plūdė vbat = 0; // galutinė įtampa po kalkių- akumuliatoriaus plūdės įtampa Vref = 4.113; // Įtampos atskaita - išmatuota tikroji vertė. Nominali vertė 4,096v const int numReadings = 50; // skaitymo pavyzdžių skaičius - padidinkite, kad būtų daugiau išlyginimo. Sumažinkite, kad galėtumėte greičiau skaityti. int rodmenys [numReadings]; // rodmenys iš analoginės įvesties int readIndex = 0; // dabartinio rodmens indeksas nepasirašytas ilgas bendras = 0; // veikiantis bendras int vidurkis = 0; // kintamieji, skirti atnaujinti ekraną nenaudojant delsos unsigned long previousMillis = 0; // išsaugos paskutinį kartą atnaujintą ekraną // konstantos nesikeis: const long interval = 50; // intervalas, per kurį reikia atnaujinti ekraną (milisekundės) void setup (void) {analogReference (EXTERNAL); // naudoti AREF atskaitos įtampai 4.096. Mano atskaitos tikroji įtampa yra 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… apvyniokite pradžią: readIndex = 0; } // apskaičiuoti vidurkį: vidurkis = (total / numReadings); įtampa = vidutinė * (Vref / 1023.0); //4.113 yra Vref vbat = įtampa/Radjust; // Ekrano atnaujinimo uždelsimo nustatymas naudojant Millis if (currentMillis - previousMillis> = intervalas) {// išsaugoti paskutinį kartą, kai ekranas buvo atnaujintas, ankstesnisMillis = currentMillis; u8g2.clearBuffer (); // išvalyti vidinį meniu // Pack Voltage display u8g2.setFont (u8g2_font_fub20_tr); // 20 taškų šriftas u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px šriftas u8g2.setCursor (76, 20); u8g2.print („Voltai“); u8g2.setCursor (1, 40); u8g2.print („Kanados žiemos“); u8g2.setCursor (1, 60); u8g2.print („Tiksli įtampa“); } u8g2.sendBuffer (); // perkelti vidinę atmintį į ekrano uždelsimą (1); }

Atkreipkite dėmesį, kad aš esu šiek tiek aprūdijęs naudojant „Arduino“kodavimą, todėl, jei radote klaidą ar būdą patobulinti kodą, esu atviras pasiūlymams:)

3 žingsnis: išbandykime

Išbandykime!
Išbandykime!
Išbandykime!
Išbandykime!
Išbandykime!
Išbandykime!

Norėdami išbandyti šį voltmetrą, aš naudoju 8x 9V baterijas, kurias gavau vietinėje parduotuvėje. Aš planuoju naudoti šį voltmetrą, norėdamas išmatuoti mano elektrinių dviračių akumuliatorių įtampą (jų įtampa svyruoja nuo 24 iki 60 V, o kartais-72 V).

Kai elektronika bus supakuota į PCB ir mažą dėžutę, tai bus gražus ir nešiojamas akumuliatoriaus matuoklis. OLED grafika ir šriftai gali būti pritaikyti pagal jūsų poreikius (pvz., Didesnis šriftas, kad būtų lengviau skaityti).

Mano tikslas buvo, kad Oled/Arduino matuoklio įtampa būtų rodoma ne per toli nuo mano skaitmeninio daugiafunkcio matuoklio. Aš siekiau +/- 0, 3v max delta. Kaip matote iš vaizdo įrašo, galėjau tai archyvuoti, išskyrus viršutinį matavimų galą.

Tikiuosi, kad jums patiko šis „Instructable“ir praneškite man savo mintis!

Rekomenduojamas: