Mündəricat:

Arduino Həssas və Dəqiq Volt Ölçən (0-90V DC): 3 addım
Arduino Həssas və Dəqiq Volt Ölçən (0-90V DC): 3 addım

Video: Arduino Həssas və Dəqiq Volt Ölçən (0-90V DC): 3 addım

Video: Arduino Həssas və Dəqiq Volt Ölçən (0-90V DC): 3 addım
Video: Как измерить любое напряжение постоянного тока с Arduino ARDVC-01 2024, Noyabr
Anonim

Bu təlimatda, Arduino Nano istifadə edərək yüksək gərginliyi DC (0-90v) nisbi dəqiqliklə və dəqiqliklə ölçmək üçün bir voltmetr qurdum.

Aldığım test ölçüləri kifayət qədər dəqiq idi, əsasən standart bir voltmetrlə ölçülmüş faktiki gərginliyin 0,3v -dən çox olmamaqla (bir Astro AI DM6000AR istifadə etdim). Bu cihazdan məqsədli istifadə üçün kifayət qədər yaxındır.

Bunu arxivləşdirmək üçün bir gərginlik istinadını (4.096v) və gərginlik bölücüdən istifadə etdim.

Kod tərəfində, əlbəttə ki, Arduino Nano üçün "xarici istinad" seçimini və Arduino dərslərində "Düzləşdirmə" nümunəsini istifadə etdim.

Təchizat

1 x Arduino Nano - Bağlantı

1 x Oled Ekran (SSD 1306) - Bağlantı

1 x 1/4W 1% Rezistorlar - 1k ohm - Bağlantı

1 x 1/4W 1% Rezistorlar - 220k ohm - Bağlantı

1 x 1/4W 1% Rezistorlar - 10k ohm - Bağlantı

1 x 4.096v LM4040DIZ -4.1 Gərginlik Referansı - Bağlantı

Çörək paneli və tellər - Bağlantı

Astro AI DM6000AR - Bağlantı

USB Güc Bankı - Bağlantı

9V Batareyalar - Bağlantı

CanadianWinters, Amazon.com və əlaqəli saytlara keçid etməklə saytların ödəniş qazanması üçün bir vasitə təmin etmək üçün hazırlanmış Amazon Services LLC Associates Proqramının iştirakçısıdır. Bu bağlantıları istifadə edərək, Amazon Associate olaraq, başqa bir şey satın alsanız da, uyğun satınalmalardan qazanıram-və bunun sizə heç bir dəyəri olmayacaq.

Addım 1: Şematik

Sxemalar
Sxemalar
Sxemalar
Sxemalar

Bütün hissələri yuxarıdakı sxemə görə bağladım. Xüsusilə qətnaməni itirməmək üçün 5v işarəsinə mümkün qədər yaxın olmaq üçün 4.096 gərginlik istinadını seçdim.

Məlumat cədvəlindən sonra fərqli bir dəyərdən istifadə oluna bilsə də, gərginlik istinadı üçün 1K ohm rezistor seçdim. İstinad üçün gərginlik Nano 5v pinindən verilir.

Dövrün fikri, ölçülən DC gərginliyinin bir gərginlik rezistorundan keçməsidir. Ölçülən gərginlik Arduinonun analoq pininə daxil olur, nümunələnir, hamarlanır, yenidən ölçülür və OLed ekranda göstərilir.

Hər şeyi sadə saxlamağa çalışdım:)

Addım 2: Kod və Rezistor Hesablamaları

Rezistorların dəyərləri, empedansı 10k ohmdan aşağı saxlamaq üçün tövsiyə olunduğu kimi seçildi (səhv etmirəmsə Arduino/Atmega məlumat cədvəlindədir).

İşləri asanlaşdırmaq üçün fərqli müqavimət dəyərlərindən istifadə etmək istəsəniz hesablamaları avtomatlaşdıran bir elektron cədvəl hazırladım: Google Hesabına bağlantı

Bu layihə üçün istifadə etdiyim kod budur:

#daxil edin

#daxil U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (fırlanma, [sıfırlama]) üzmə gərginliyi = 0; // float gərginlik dəyərini saxlamaq üçün istifadə olunur Radjust = 0.043459459; // Gərginlik bölücü faktoru (R2 /R1+R2) float vbat = 0; // hesablamadan sonra son gərginlik- batareya float gərginliyi Vref = 4.113; // Gerilim arayış - ölçülmüş real dəyər. Nominal dəyər 4.096v const int numReadings = 50; // oxu nümunələrinin sayı - daha hamarlaşdırmaq üçün artırın. Daha sürətli oxumaq üçün azaldın. int oxunuşları [numReadings]; // analoq girişdən oxunmalar int readIndex = 0; // indiki oxunuş indeksi işarəsiz uzun ümumi = 0; // işləyən ümumi int orta = 0; // gecikmədən istifadə etmədən ekranı yeniləmək üçün dəyişənlər işarəsiz uzun əvvəlkiMillis = 0; // son dəfə ekran yenilənəndə saxlayacaq // sabitlər dəyişməyəcək: const long interval = 50; // ekranı yeniləmək üçün vaxt (milisaniyə) boşluq qurulması (boşluq) {analogReference (EXTERNAL); // istinad gərginliyi 4.096 üçün AREF istifadə edin. İstinad real gərginliyim 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… əvvəlinə sarın: readIndex = 0; } // ortalamanı hesabla: orta = (cəmi / sayıOxumlar); gərginlik = orta * (Vref / 1023.0); //4.113 Vref vbat = gərginlik/Radjust; // Millis istifadə edərək ekranın yenilənməsi üçün gecikməni təyin edin (currentMillis - previousMillis> = interval) {// ekranın son dəfə yeniləndiyini qeyd edin əvvəlkiMillis = currentMillis; u8g2.clearBuffer (); // daxili menyu silin // Paket Gərginliyi ekranı u8g2.setFont (u8g2_font_fub20_tr); // 20px font u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px font u8g2.setCursor (76, 20); u8g2.print ("Volt"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters"); u8g2.setCursor (1, 60); u8g2.print ("Həssas Gərginlik"); } u8g2.sendBuffer (); // daxili yaddaşı ekran gecikməsinə köçürün (1); }

Arduino kodlaşdırma ilə bir az paslı olduğumu unutmayın, buna görə hər hansı bir səhv və ya kodu təkmilləşdirmək üçün bir yol taparsanız, təkliflərə açıqam:)

Addım 3: Gəlin Test Edək

Gəlin Test Edək!
Gəlin Test Edək!
Gəlin Test Edək!
Gəlin Test Edək!
Gəlin Test Edək!
Gəlin Test Edək!

Bu voltmetrini yoxlamaq üçün yerli bir mağazada aldığım 8x 9v batareyalardan istifadə etdim. Elektrikli velosiped batareyalarımdakı gərginliyi ölçmək üçün bu voltmetrdən istifadə etməyi planlaşdırıram (aralıqda 72v olan 24-60v arasında dəyişir).

Elektronika bir pcb və kiçik bir qutuya yığıldıqdan sonra bu, gözəl və portativ bir batareya paketi sayğacına çevriləcəkdir. OLED üzərindəki qrafika və şriftlər ehtiyaclarınıza uyğunlaşdırıla bilər (məsələn, asan oxumaq üçün daha böyük şrift).

Məqsədim, Rəqəmsal Çox Ölçmə cihazımdan çox da uzaq olmayan Oled/Arduino sayğacında bir gərginlik oxunuşuna sahib olmaq idi. +/- 0, 3v max delta üçün hədəfləyirdim. Videodan da gördüyünüz kimi, bunu ölçmələrin yuxarı ucundan başqa arxivləşdirə bildim.

Ümid edirəm bu Təlimatlandırmadan zövq aldınız və fikirlərinizi mənə bildirin!

Tövsiyə: