Tartalomjegyzék:

Arduino pontos és pontos voltmérő (0-90V DC): 3 lépés
Arduino pontos és pontos voltmérő (0-90V DC): 3 lépés

Videó: Arduino pontos és pontos voltmérő (0-90V DC): 3 lépés

Videó: Arduino pontos és pontos voltmérő (0-90V DC): 3 lépés
Videó: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Július
Anonim

Ebben az utasításban egy voltmérőt építettem a nagyfeszültségű DC (0-90v) relatív pontossággal és pontossággal történő mérésére Arduino Nano segítségével.

Az elvégzett tesztmérések elég pontosak voltak, többnyire 0,3 V -on belül a szabványos voltmérővel mért tényleges feszültségtől (Astro AI DM6000AR -t használtam). Ez elég közel van a készülék rendeltetésszerű használatához.

Ennek archiválásához feszültségreferenciát (4,096v) és feszültségosztót használtam.

A kódoldalon természetesen a "külső referencia" opciót használtam az Arduino Nano számára, és a "Smoothing" példát az Arduino oktatóanyagokban.

Kellékek

1 x Arduino Nano - Link

1 x Oled kijelző (SSD 1306) - Link

1 x 1/4W 1% ellenállás - 1k ohm - Link

1 x 1/4W 1% ellenállás - 220k ohm - Link

1 x 1/4W 1% ellenállás - 10k ohm - Link

1 x 4.096v LM4040DIZ -4.1 Feszültség referencia - Link

Kenyértábla és vezetékek - Link

Astro AI DM6000AR - Link

USB Power Bank - Link

9V elemek - Link

A CanadianWinters részt vesz az Amazon Services LLC Associates Programban, amely egy társult hirdetési program, amelynek célja, hogy eszközöket biztosítson a webhelyek számára, hogy díjakat keressenek az Amazon.com -ra és a kapcsolódó webhelyekre mutató linkekkel. Ezen linkek használatával Amazon munkatársaként a minősített vásárlásokból keresek, még akkor is, ha mást vásárol-és ez nem kerül semmibe.

1. lépés: A vázlatok

A sémák
A sémák
A sémák
A sémák

Az összes alkatrészt a fenti rajz szerint kötöttem össze. Különösen a 4,096 feszültségreferenciát választottam, hogy a felbontás elkerülése érdekében a lehető legközelebb maradjak az 5v jelhez.

Az adatlapot követve 1K ohmos ellenállást választottam a feszültségreferencia számára, annak ellenére, hogy más érték is használható. A referencia feszültségét a Nano 5V -os tű biztosítja.

Az áramkör ötlete az, hogy a mérendő egyenáramú feszültség egy feszültségellenálláson megy keresztül. A skálázott feszültség, majd az Arduino analóg érintkezőjébe kerül, hogy mintát vegyen, simítson, újra skálázzon és megjelenjen az OLed kijelzőn.

Megpróbáltam leegyszerűsíteni a dolgokat:)

2. lépés: A kód és az ellenállás számítása

Az ellenállások értékeit úgy választottuk meg, ahogy célszerű (ha nem tévedek, ez szerepel az Arduino/Atmega adatlapján), hogy az impedanciát 10 k ohm alatt tartsuk.

A dolgok egyszerűsítése érdekében készítettem egy táblázatot, amely automatizálja a számításokat arra az esetre, ha különböző ellenállásértékeket szeretne használni: Link a Google Sheethez

Íme a kód, amelyet ehhez a projekthez használtam:

#befoglalni

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (forgatás, [reset]) úszófeszültség = 0; // feszültségérték úszó tárolására szolgál Radjust = 0,043459459; // Feszültségosztó tényező (R2 /R1+R2) float vbat = 0; // végső feszültség calcs után- az akkumulátor úszó feszültsége Vref = 4,133; // Feszültség referencia - mért valós érték. Névleges érték 4,096v const int numReadings = 50; // olvasási minták száma - növelje a simítást. Csökkentse a gyorsabb olvasást. int olvasmányok [numReadings]; // az analóg bemenet leolvasása int readIndex = 0; // az aktuális leolvasás indexe előjel nélküli hosszú összesen = 0; // a futó teljes int átlag = 0; // változók a képernyő frissítéséhez késleltetés nélkül unsigned long previousMillis = 0; // a képernyő utolsó frissítésekor tárolja // az állandók nem változnak: const long interval = 50; // a képernyő frissítésének időköze (ezredmásodperc) void setup (void) {analogReference (EXTERNAL); // használja az AREF referenciafeszültséget 4.096. A referencia reálfeszültségem 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… tekerje az elejére: readIndex = 0; } // kiszámítja az átlagot: átlagos = (összesen / számReadings); feszültség = átlagos * (Vref / 1023.0); //4.113 a Vref vbat = feszültség/Radjust; // A képernyőfrissítés késleltetésének beállítása Millis használatával, ha (currentMillis - previousMillis> = intervallum) {// mentse el a képernyő utolsó frissítésének időpontját előzőMillis = currentMillis; u8g2.clearBuffer (); // a belső menória törlése // Pack Voltage display u8g2.setFont (u8g2_font_fub20_tr); // 20 képpont betűtípus u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px betűtípus u8g2.setCursor (76, 20); u8g2.print ("Volt"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Pontos feszültség"); } u8g2.sendBuffer (); // belső memória átvitele a kijelző késleltetésére (1); }

Felhívjuk figyelmét, hogy kissé rozsdás vagyok az Arduino kódolással, így ha bármilyen hibát talál, vagy módot talál a kód javítására, nyitott vagyok a javaslatokra:)

3. lépés: Próbáljuk ki

Próbáljuk ki!
Próbáljuk ki!
Próbáljuk ki!
Próbáljuk ki!
Próbáljuk ki!
Próbáljuk ki!

Ennek a voltmérőnek a teszteléséhez 8x 9V -os elemeket használtam, amelyeket a helyi boltban kaptam. Ezzel a voltmérővel tervezem mérni az elektromos kerékpárok akkumulátorainak feszültségét (ezek feszültsége 24-60V és esetenként 72V).

Miután az elektronikát egy PCB -be és egy kis dobozba csomagolták, ez egy szép és hordozható akkumulátor -mérőt eredményez. Az OLED grafikája és betűtípusai személyre szabhatók az Ön igényeinek megfelelően (pl. Nagyobb betűtípus az egyszerű olvasás érdekében).

Célom az volt, hogy feszültség leolvasást készítsek az Oled/Arduino mérőn, nem túl messze a digitális multiméteremtől. +/- 0, 3v max delta volt a célom. Amint a videóból látható, ezt archiválni tudtam, kivéve a mérések felső végén.

Remélem, tetszett ez az Instructable és tudassa velem gondolatait!

Ajánlott: