Mundarija:

Arduino volt o'lchagich (0-100V DC) - 2 -versiya (yaxshiroq): 3 qadam
Arduino volt o'lchagich (0-100V DC) - 2 -versiya (yaxshiroq): 3 qadam

Video: Arduino volt o'lchagich (0-100V DC) - 2 -versiya (yaxshiroq): 3 qadam

Video: Arduino volt o'lchagich (0-100V DC) - 2 -versiya (yaxshiroq): 3 qadam
Video: DC-DC 5V to 3.5V/12V USB Step Down Power Supply Module Adjustable Boost Buck Converter Out 1.2V-24V 2024, Sentyabr
Anonim
Image
Image
1 -qadam: sxemalar
1 -qadam: sxemalar

Bu yo'riqnomada men Arduino Nano va ADS 1115 ADC yordamida yuqori aniqlikdagi DC (0-100v) yuqori kuchlanishlarni o'lchash uchun voltmetr qurdim.

Bu voltmetrning ikkinchi versiyasi, bu erda oldingi ko'rsatmalarni ishlatganman:

Men olgan test o'lchovlari aniq edi, asosan standart voltmetr bilan o'lchangan haqiqiy kuchlanishdan 0,1v ichida (men Astro AI DM6000AR ishlatardim).

Bu mening fikrimcha, Arduino -da tashqi kuchlanish moslamasini ishlatishdan ko'ra osonroq va osonroq.

Ta'minotlar

1 x Arduino Nano - havola

1 x Oled displey (SSD 1306) - havola

1 x ADS 1115 - 16 bitli ADC - havola

1 x 1/4 Vt (men 1W rezistorlardan foydalanishni taklif qilaman) 1% rezistorlar - 220k ohm - Havola

1 x 1/4 Vt (men 1 Vt rezistorlardan foydalanishni taklif qilaman) 1% rezistorlar - 10k ohm - 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: 1 -qadam: sxemalar

1 -qadam: sxemalar
1 -qadam: sxemalar

Men barcha qismlarni yuqoridagi sxema bo'yicha uladim.

Men ADC1115 ning ADDR pinini erga bog'ladim. Bu ADC manzilini 0x48 ga o'rnatadi.

2 -qadam: 2 -qadam: kod va rezistor hisoblari

2 -qadam: kod va rezistor hisoblari
2 -qadam: kod va rezistor hisoblari

Oldingi ko'rsatmalarda bo'lgani kabi, sxemaning g'oyasi shundaki, o'lchanadigan shahar zo'riqishi kuchlanish qarshiligidan o'tadi. O'lchovli kuchlanish ADC konvertorining analog piniga o'qiladi, so'ngra I2C orqali Arduino-ga o'tadi, so'ngra qayta o'lchanadi va OLed displeyida ko'rsatiladi.

Men bu holatda kodni o'rtacha yoki tekislashni ishlatmadim, chunki o'qishlar juda aniq ko'rinadi. Shovqinni kamaytirish uchun siz A0 (ADC) va tuproq o'rtasida kichik kondansatör qo'shishingiz mumkin. Bu mening testim uchun kerak emas edi.

Bir narsani payqadimki, batareya ulanmaganida (0 volt) biroz shovqin eshitildi. Men ADC qiymatini ko'rsatish va uni kod orqali to'g'rilash/sozlash uchun Arduino seriyali monitoridan foydalandim.

Oldingi ko'rsatmalarda bo'lgani kabi, men kuchlanish taqsimlagichida har xil qarshilik qiymatlarini ishlatmoqchi bo'lsangiz, hisob -kitoblarni avtomatlashtiradigan elektron jadval tuzdim: Google Sheet -ga havola.

Mana bu loyiha uchun ishlatgan kodim:

#qo'shing

#include #include #include Adafruit_ADS1115 reklamalari (0x48); // ADC manzili U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (aylanish, [reset]) int calib = 7; // Xatolik suzuvchi kuchlanishni kamaytirish uchun ADS1115 kalibrlash qiymati = 0; // kuchlanish qiymatini saqlash uchun ishlatiladi float Radjust = 0.043421905; // Kuchlanishni ajratuvchi omil (R2 / R1+R2) float vbat = 0; // hisobdan keyingi yakuniy kuchlanish- batareya quvvati // kechiktirmasdan ekranni yangilash uchun o'zgaruvchilar imzosiz uzoq oldingiMillis = 0; // oxirgi marta ekran yangilanganda saqlanadi // doimiylar o'zgarmaydi: const long interval = 250; // ekran yangilanadigan interval (millisekundlar) void setup (void) {Serial.begin (9600); u8g2.begin (); ads.begin (); } void loop (void) {int16_t adc0; // 16 bit ADC A0 kirishini o'qiydi adc0 = ads.readADC_SingleEnded (0); kuchlanish = ((adc0 + kalibr) * 0,1875)/1000; belgisiz uzun oqimMillis = millis (); vbat = kuchlanish/Radjust; // Batareya uzilganda salbiy kuchlanish paydo bo'lishining oldini oling, agar (vbat = interval) {previousMillis = currentMillis; u8g2.clearBuffer (); // ichki menoriyni tozalash // Paket kuchlanish ko'rsatkichi - bu sahifadagi shriftlar: https://github.com/olikraus/u8g2/wiki/fntlistall //u8g2.setFont(u8g2_font_fub20_tr); // 20 pikselli shrift u8g2.setFont (u8g2_font_fub35_tr); // 35 pikselli shrift u8g2.setCursor (1, 42); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 pikselli shrift u8g2.setCursor (1, 60); u8g2.print ("Volts"); } u8g2.sendBuffer (); // ichki xotirani displey kechikishiga o'tkazish (1); }

3 -qadam: 3 -qadam: Keling, buni sinab ko'ramiz

3 -qadam: Sinab ko'raylik!
3 -qadam: Sinab ko'raylik!

Ushbu voltmetrni sinab ko'rish uchun men mahalliy do'konda sotib olgan 10x 9v batareyalardan foydalanardim. Bu safar men 97 voltgacha o'lchashim mumkin edi! 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.

Ko'rsatma boshidagi videodan ko'rib turganingizdek, men buni arxivlay oldim! Ko'p o'qishlar aniq joyida edi!

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

Tavsiya: