Sisällysluettelo:

Arduino tarkka ja tarkka voltimittari (0-90V DC): 3 vaihetta
Arduino tarkka ja tarkka voltimittari (0-90V DC): 3 vaihetta

Video: Arduino tarkka ja tarkka voltimittari (0-90V DC): 3 vaihetta

Video: Arduino tarkka ja tarkka voltimittari (0-90V DC): 3 vaihetta
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Marraskuu
Anonim

Tässä ohjeessa olen rakentanut voltimittarin mittaamaan suurjännitteitä DC (0-90v) suhteellisen tarkasti ja tarkasti Arduino Nano -laitteella.

Otamani testimittaukset olivat riittävän tarkkoja, enimmäkseen 0,3 V: n sisällä normaalista voltimittarilla mitatusta todellisesta jännitteestä (käytin Astro AI DM6000AR -laitetta). Tämä on riittävän lähellä laitteen käyttötarkoitusta.

Tämän arkistoimiseen käytin jänniteviitettä (4,096v) ja jännitteenjakajaa.

Koodipuolella käytin tietysti "ulkoista viitettä" -vaihtoehtoa Arduino Nanolle ja "Smoothing" -esimerkkiä Arduino -opetusohjelmissa.

Tarvikkeet

1 x Arduino Nano - linkki

1 x Oled -näyttö (SSD 1306) - linkki

1 x 1/4W 1% vastukset - 1 k ohmia - linkki

1 x 1/4W 1% vastukset - 220 k ohmia - linkki

1 x 1/4W 1% vastukset - 10 k ohmia - linkki

1 x 4.096v LM4040DIZ -4.1 Jänniteohje - linkki

Leipälauta ja johdot - Linkki

Astro AI DM6000AR - Linkki

USB -virtapankki - linkki

9V Akut - Linkki

CanadianWinters osallistuu Amazon Services LLC Associates -ohjelmaan, joka on kumppanimainosohjelma, jonka tarkoituksena on tarjota sivustoille mahdollisuus ansaita maksuja linkittämällä Amazon.com -sivustoon ja siihen liittyville sivustoille. Käyttämällä näitä linkkejä ansaitsen Amazonin yhteistyökumppanina kelpoisuusostoista, vaikka ostat jotain muuta-eikä se maksa sinulle mitään.

Vaihe 1: Kaaviot

Kaaviot
Kaaviot
Kaaviot
Kaaviot

Yhdistin kaikki osat yllä olevan kaavion mukaisesti. Valitsin erityisesti 4,096 jänniteohjeen pysyäkseen mahdollisimman lähellä 5v -merkkiä, jotta resoluutio ei häviä.

Tietolomakkeen jälkeen valitsin 1K ohmin vastuksen jänniteohjeeksi, vaikka eri arvoa voitaisiin käyttää. Referenssijännite syötetään Nano 5v -nastasta.

Piirin idea on, että mitattava DC -jännite kulkee jännitevastuksen läpi. Skaalattu jännite ja sitten joutuu Arduinon analogiseen nastaan näytteenottoa, tasoitusta, skaalausta ja OLED-näyttöä varten.

Yritin pitää asiat yksinkertaisina:)

Vaihe 2: Koodi- ja vastuslaskut

Vastusten arvot valittiin, koska on suositeltavaa (jos en erehdy, tämä on Arduino/Atmega -tietolomakkeessa) pitää impedanssi alle 10 k ohmia.

Asioiden yksinkertaistamiseksi tein laskentataulukon, joka automatisoi laskelmat, jos haluat käyttää erilaisia vastusarvoja: Linkki Google -taulukkoon

Tässä on koodi, jota käytin tässä projektissa:

#sisältää

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (kierto, [nollaus]) kelluva jännite = 0; // käytetään jännitearvon kellukkeen tallentamiseen Radjust = 0,043459459; // Jännitteenjakajatekijä (R2 /R1+R2) kelluva vbat = 0; // lopullinen jännite kalkkien jälkeen- akun kellukkeen jännite Vref = 4.113; // Jänniteohje - mitattu todellinen arvo. Nimellisarvo 4,096v const int numReadings = 50; // lukunäytteiden määrä - lisää tasoitusta. Vähennä lukemista nopeammin. int lukemat [numReadings]; // analogisen tulon lukemat int readIndex = 0; // nykyisen lukeman indeksi allekirjoittamaton pitkä yhteensä = 0; // juokseva kokonaiskeskiarvo = 0; // muuttujat näytön päivittämiseksi ilman viivettä unsigned long previousMillis = 0; // tallentaa viimeksi kun näyttö päivitettiin // vakioita ei muuteta: const long interval = 50; // aikaväli, jolloin näyttö päivitetään (millisekuntia) void setup (void) {analogReference (EXTERNAL); // käytä AREF -viitejännitettä 4.096. Oma viite todellinen jännite on 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… kääri alkuun: readIndex = 0; } // laskea keskiarvo: keskiarvo = (total / numReadings); jännite = keskimääräinen * (Vref / 1023.0); //4.113 on Vref vbat = jännite/Radjust; // Näytön päivityksen viiveen asettaminen Millis -toiminnolla if (currentMillis - previousMillis> = interval) {// tallenna näytön viimeisin päivitys aikaisemminMillis = currentMillis; u8g2.clearBuffer (); // tyhjennä sisäinen valikko // Pack Voltage display u8g2.setFont (u8g2_font_fub20_tr); // 20px fontti u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px fontti u8g2.setCursor (76, 20); u8g2.print ("volttia"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Tarkka jännite"); } u8g2.sendBuffer (); // siirtää sisäinen muisti näytön viiveeseen (1); }

Huomaa, että olen hieman ruosteinen Arduinon koodauksessa, joten jos löydät virheen tai keinon parantaa koodia, olen avoin ehdotuksille:)

Vaihe 3: Testataan

Testaa se!
Testaa se!
Testaa se!
Testaa se!
Testaa se!
Testaa se!

Tämän volttimittarin testaamiseen käytin 8x 9v paristoja, jotka sain paikallisesta kaupasta. Suunnittelen tämän volttimittarin käyttämistä sähköpolkupyörän akkujen jännitteen mittaamiseen (niiden jännitteet vaihtelevat 24-60v ja satunnaiset 72v).

Kun elektroniikka on pakattu piirilevyyn ja pieneen laatikkoon, tästä tulee mukava ja kannettava akkumittari. OLED -näytön grafiikka ja fontit voidaan räätälöidä tarpeidesi mukaan (esim. Isompi fontti helpon lukemisen vuoksi).

Tavoitteeni oli saada jännitteen lukema Oled/Arduino -mittariin, joka ei ole liian kaukana digitaalisesta monimittaristani. Tavoittelin +/- 0, 3v max deltaa. Kuten videosta näet, pystyin arkistoimaan tämän paitsi mittausten yläpäässä.

Toivottavasti pidit tästä Instructable -ohjelmasta ja kerro minulle mielipiteesi!

Suositeltava: