Mundarija:

Arduino aniq va aniq voltmetr (0-90V shahar): 3 qadam
Arduino aniq va aniq voltmetr (0-90V shahar): 3 qadam

Video: Arduino aniq va aniq voltmetr (0-90V shahar): 3 qadam

Video: Arduino aniq va aniq voltmetr (0-90V shahar): 3 qadam
Video: Как измерить любое напряжение постоянного тока с Arduino ARDVC-01 2024, Iyul
Anonim

Bu yo'riqnomada men Arduino Nano yordamida yuqori aniqlikdagi DC (0-90v) yuqori kuchlanishlarni o'lchash uchun voltmetr qurdim.

Men olgan sinov o'lchovlari etarlicha aniq edi, asosan standart voltmetr bilan o'lchangan haqiqiy kuchlanishdan 0,3v ichida (men Astro AI DM6000AR ishlatardim). Bu qurilmani maqsadli ishlatishim uchun etarlicha yaqin.

Buni arxivlash uchun men kuchlanish ma'lumotnomasi (4.096v) va kuchlanish bo'luvchi ishlatilgan.

Kod tomonida men, albatta, Arduino Nano uchun "tashqi mos yozuvlar" variantini va Arduino darsliklarida "Smoothing" misolini ishlatardim.

Ta'minotlar

1 x Arduino Nano - havola

1 x Oled displey (SSD 1306) - havola

1 x 1/4 Vt 1% rezistorlar - 1k ohm - Havola

1 x 1/4 Vt 1% rezistorlar - 220k ohm - Havola

1 x 1/4 Vt 1% rezistorlar - 10k ohm - Havola

1 x 4.096v LM4040DIZ -4.1 kuchlanish mos yozuvlari - havola

Non paneli va simlar - havola

Astro AI DM6000AR - havola

USB quvvat banki - havola

9V batareyalar - havola

CanadianWinters Amazon.com MChJ Associates dasturining ishtirokchisi bo'lib, Amazon.com va unga aloqador saytlarga havola qilish orqali saytlar uchun pul ishlash vositalarini taqdim etish uchun mo'ljallangan sheriklik reklama dasturidir. Ushbu havolalarni ishlatib, Amazon Associate sifatida, agar siz boshqa narsa sotib olsangiz ham, sotib olishdan daromad olaman va bu sizga hech qanday xarajat qilmaydi.

1 -qadam: sxemalar

Sxemalar
Sxemalar
Sxemalar
Sxemalar

Men barcha qismlarni yuqoridagi sxema bo'yicha uladim. Ayniqsa, piksellar sonini yo'qotmaslik uchun 5v belgisiga iloji boricha yaqinroq bo'lish uchun 4.096 kuchlanishli mos yozuvni tanladim.

Ma'lumotlar varag'idan so'ng, men boshqa qiymatdan foydalanish mumkin bo'lsa -da, kuchlanish moslamasi uchun 1K ohmli rezistorni tanladim. Malumot uchun kuchlanish Nano 5v pinidan beriladi.

O'chirish g'oyasi shundaki, o'lchanadigan shahar zo'riqishi kuchlanish qarshiligidan o'tadi. O'lchovli kuchlanish Arduino analog piniga namuna olish, tekislash, qayta o'lchash va OLed displeyida ko'rsatish uchun kiradi.

Men hamma narsani oddiy saqlashga harakat qildim:)

2 -qadam: Kod va rezistorlar hisoblari

Rezistorlar qiymatlari empedansni 10k ohmdan pastda ushlab turish uchun tavsiya etilganidek tanlangan (adashmasam bu Arduino/Atmega ma'lumotlar jadvalida).

Ishlarni soddalashtirish uchun, agar siz turli qarshilik qiymatlaridan foydalanmoqchi bo'lsangiz, hisoblarni avtomatlashtiradigan elektron jadval tuzdim: Google Sheet havolasi

Mana bu loyiha uchun ishlatgan kodim:

#qo'shing

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (aylanish, [reset]) suzuvchi kuchlanish = 0; // kuchlanish qiymatini saqlash uchun ishlatiladi float Radjust = 0.043459459; // Kuchlanishni ajratuvchi omil (R2 /R1+R2) float vbat = 0; // kalkulyatsiyadan keyingi yakuniy kuchlanish- batareya floatining kuchlanishi Vref = 4.113; // Voltaj ma'lumoti - o'lchangan haqiqiy qiymat. Nominal qiymat 4.096v const int numReadings = 50; // o'qish namunalari soni - yanada tekislash uchun oshirish. Tezroq o'qish uchun kamaytiring. int o'qishlari [numReadings]; // analog o'qishdan o'qishlar int readIndex = 0; // joriy o'qish ko'rsatkichi imzosiz uzun umumiy = 0; // ishlaydigan umumiy int o'rtacha = 0; // kechiktirmasdan, ekranni yangilash uchun o'zgaruvchilar unsigned long previousMillis = 0; // oxirgi marta ekran yangilanganda saqlanadi // doimiylar o'zgarmaydi: const long interval = 50; // ekran yangilanadigan interval (millisekundlar) void setup (void) {analogReference (EXTERNAL); // 4.096 mos yozuvlar kuchlanishi uchun AREFdan foydalaning. Mening mos yozuvlar kuchlanishim 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… boshiga o'raladi: readIndex = 0; } // o'rtacha hisob: o'rtacha = (jami / sonReadings); kuchlanish = o'rtacha * (Vref / 1023.0); //4.113 - bu Vref vbat = kuchlanish/Radjust; // Millis yordamida ekranni yangilash uchun kechikishni belgilash, agar (currentMillis - previousMillis> = interval) {// oxirgi marta ekranni yangilashni saqlang oldingiMillis = currentMillis; u8g2.clearBuffer (); // ichki menorini tozalash // Pack Voltaj displeyi u8g2.setFont (u8g2_font_fub20_tr); // 20 pikselli shrift u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 pikselli shrift u8g2.setCursor (76, 20); u8g2.print ("Volts"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters"); u8g2.setCursor (1, 60); u8g2.print ("Aniq kuchlanish"); } u8g2.sendBuffer (); // ichki xotirani displey kechikishiga o'tkazish (1); }

E'tibor bering, men Arduino kodlashda zanglaganman, shuning uchun agar siz biron bir xato yoki kodni yaxshilash yo'lini topsangiz, men takliflarga ochiqman:)

3 -qadam: Sinab ko'raylik

Keling, buni sinovdan o'tkazaylik!
Keling, buni sinovdan o'tkazaylik!
Keling, buni sinovdan o'tkazaylik!
Keling, buni sinovdan o'tkazaylik!
Keling, buni sinovdan o'tkazaylik!
Keling, buni sinovdan o'tkazaylik!

Ushbu voltmetrni sinab ko'rish uchun men mahalliy do'konda sotib olingan 8x 9v batareyalardan foydalanardim. Men ushbu voltmetr yordamida elektr velosipedlar akkumulyatorlaridagi kuchlanishni o'lchashni rejalashtiryapman (ular 24-60v gacha, vaqti-vaqti bilan 72v).

Elektron buyumlar kompyuterga va kichik qutiga joylashtirilgandan so'ng, bu batareya zaryadini o'lchash moslamasini yaratadi. OLED -dagi grafikalar va shriftlar sizning ehtiyojlaringizga moslashtirilgan bo'lishi mumkin (masalan, o'qish uchun katta shrift).

Mening maqsadim - raqamli ko'p o'lchagichimdan unchalik uzoq bo'lmagan Oled/Arduino o'lchagichida kuchlanish ko'rsatkichi bo'lish edi. Men +/- 0, 3v maksimal deltaga intildim. Videodan ko'rinib turibdiki, men buni arxivlay oldim, faqat o'lchovlarning yuqori uchida.

Umid qilamanki, sizga bu ko'rsatma yoqdi va o'z fikrlaringizni bildiring!

Tavsiya: