İçindekiler:

Arduino Hassas ve Doğru Volt Metre (0-90V DC): 3 Adım
Arduino Hassas ve Doğru Volt Metre (0-90V DC): 3 Adım

Video: Arduino Hassas ve Doğru Volt Metre (0-90V DC): 3 Adım

Video: Arduino Hassas ve Doğru Volt Metre (0-90V DC): 3 Adım
Video: DC-DC VOLTAJ DÜŞÜRÜCÜ 2024, Temmuz
Anonim

Bu talimatta, bir Arduino Nano kullanarak yüksek voltajlı DC'yi (0-90v) göreceli hassasiyet ve doğrulukla ölçmek için bir voltmetre oluşturdum.

Aldığım test ölçümleri yeterince doğruydu, çoğunlukla standart bir voltmetre ile ölçülen gerçek voltajın 0,3v'si dahilindeydi (Astro AI DM6000AR kullandım). Bu, cihazı kullanım amacım için yeterince yakın.

Bunu arşivlemek için bir voltaj referansı (4.096v) ve voltaj bölücü kullandım.

Kod tarafında, elbette, Arduino Nano için "harici referans" seçeneğini ve Arduino eğitimlerinde "Smoothing" örneğini kullandım.

Gereçler

1 x Arduino Nano - Bağlantı

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

1 x 1/4W %1 Dirençler - 1k ohm - Bağlantı

1 x 1/4W %1 Dirençler - 220k ohm - Bağlantı

1 x 1/4W %1 Dirençler - 10k ohm - Bağlantı

1 x 4.096v LM4040DIZ-4.1 Voltaj Referansı - Bağlantı

Breadboard ve teller - Bağlantı

Astro AI DM6000AR - Bağlantı

USB Güç Bankası - Bağlantı

9V Piller - Bağlantı

CanadianWinters, sitelerin Amazon.com'a ve bağlı sitelere bağlanarak ücret kazanmaları için bir araç sağlamak üzere tasarlanmış bir bağlı kuruluş reklam programı olan Amazon Services LLC Associates Programının bir katılımcısıdır. Bu bağlantıları kullanarak, başka bir şey satın alsanız bile, uygun satın alımlardan kazanıyorum - ve size hiçbir maliyeti olmayacak.

Adım 1: Şemalar

şemalar
şemalar
şemalar
şemalar

Tüm parçaları yukarıdaki şemaya göre bağladım. Çözünürlüğü kaybetmemek için özellikle 5v işaretine mümkün olduğunca yakın kalmak için 4.096 voltaj referansını seçtim.

Veri sayfasını takip ederek, farklı bir değer kullanılabilse de voltaj referansı için 1K ohm'luk bir direnç seçtim. Referans için voltaj, Nano 5v pininden sağlanır.

Devrenin fikri, ölçülecek DC voltajının bir voltaj direncinden geçmesidir. Ölçeklenen voltaj ve ardından örneklenmek, düzlenmek, yeniden ölçeklenmek ve OLed ekranda görüntülenmek üzere Arduino'nun analog pimine girer.

İşleri basit tutmaya çalıştım:)

Adım 2: Kod ve Direnç Hesapları

Direnç değerleri, empedansı 10k ohm'un altında tutmak için tavsiye edildiği gibi (yanılmıyorsam bu Arduino/Atmega veri sayfasındadır) seçildi.

İşleri basitleştirmek için, farklı direnç değerleri kullanmak istemeniz durumunda hesaplamaları otomatikleştiren bir elektronik tablo hazırladım: Link to Google Sheet

İşte bu proje için kullandığım kod:

#Dahil etmek

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (dönme, [sıfırlama]) kayan gerilim =0; // voltaj değerini saklamak için kullanılır float Radjust = 0.043459459; //Voltaj bölücü faktör (R2 / R1+R2) float vbat =0; //hesaplamadan sonraki son voltaj- akü şamandıra voltajı Vref = 4.113; //Voltaj referansı - ölçülen gerçek değer. Nominal değer 4.096v const int numOkumalar = 50; // okuma örneklerinin sayısı - daha fazla yumuşatma için artırın. Daha hızlı okumak için azaltın. int okumalar[numReadings]; // analog girişten okumalar int readIndex = 0; // mevcut okumanın indeksi unsigned long total = 0; // çalışan toplam int ortalama = 0; //gecikme kullanmadan ekranı yenilemek için değişkenler unsigned long öncekiMillis = 0; // ekranın en son güncellendiği zamanı kaydeder // sabitler değişmez: const uzun aralık = 50; // ekranın yenileneceği aralık (milisaniye) void setup(void) { analogReference(EXTERNAL); // 4.096 referans gerilimi için AREF kullanın. Referans gerçek voltajım 4.113v u8g2.begin(); for (int thisReading = 0; thisReading = numReadings) { // …başa sar: readIndex = 0; } // ortalamayı hesapla: ortalama = (toplam / numOkumalar); voltaj = ortalama * (Vref / 1023.0); //4.113 Vref vbat'tır = voltaj/Radjust; // Ekran yenileme için gecikmeyi Millis kullanarak ayarlama if (currentMillis - öncekiMillis >= interval) { // ekranın en son güncellendiği zamanı kaydedin öncekiMillis = currentMillis; u8g2.clearBuffer(); // dahili menory'yi temizle //Paket Voltajı ekranı u8g2.setFont(u8g2_font_fub20_tr); // 20px yazı tipi u8g2.setCursor (1, 20); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // 10 piksel yazı tipi u8g2.setCursor (76, 20); u8g2.print("Volt"); u8g2.setCursor (1, 40); u8g2.print("Kanada Kışları"); u8g2.setCursor (1, 60); u8g2.print("Hassas Voltaj"); } u8g2.sendBuffer(); // dahili belleği ekran gecikmesine aktarın(1); }

Arduino kodlama konusunda biraz paslanmış olduğumu lütfen unutmayın, bu yüzden herhangi bir hata veya kodu iyileştirmenin bir yolunu bulursanız, önerilere açığım:)

3. Adım: Hadi Test Edelim

Hadi Test Edelim!
Hadi Test Edelim!
Hadi Test Edelim!
Hadi Test Edelim!
Hadi Test Edelim!
Hadi Test Edelim!

Bu voltmetreyi test etmek için yerel bir mağazadan aldığım 8x 9v pil kullandım. Bu voltmetreyi elektrikli bisikletlerimin pil takımlarındaki voltajı ölçmek için kullanmayı planlıyorum (ara sıra 72v olanlarla 24-60v arasında değişen voltajları var).

Elektronikler bir pcb ve küçük bir kutuya paketlendikten sonra, bu güzel ve taşınabilir bir pil takımı ölçer yapacaktır. OLED üzerindeki grafikler ve yazı tipleri ihtiyaçlarınıza uyacak şekilde özelleştirilebilir (örn. kolay okuma için daha büyük yazı tipi).

Amacım, Dijital Çoklu Sayacımdan çok uzak olmayan Oled/Arduino sayacında voltaj okuması yapmaktı. +/-0, 3v max delta hedefliyordum. Videodan da görebileceğiniz gibi, ölçümlerin en üst kısmı dışında bunu arşivleyebildim.

Umarım bu Eğitilebilir Yazıyı beğenmişsinizdir ve düşüncelerinizi bana bildirin!

Önerilen: