Daftar Isi:

Pengukur Volt Akurat & Akurat Arduino (0-90V DC): 3 Langkah
Pengukur Volt Akurat & Akurat Arduino (0-90V DC): 3 Langkah

Video: Pengukur Volt Akurat & Akurat Arduino (0-90V DC): 3 Langkah

Video: Pengukur Volt Akurat & Akurat Arduino (0-90V DC): 3 Langkah
Video: Bagaimana mengukur Setiap Tegangan DC dengan Arduino ARDVC-01 2024, November
Anonim

Dalam instruksi ini, saya telah membuat voltmeter untuk mengukur tegangan tinggi DC (0-90v) dengan presisi dan akurasi relatif menggunakan Arduino Nano.

Pengukuran tes yang saya lakukan cukup akurat, sebagian besar dalam 0,3v dari tegangan aktual yang diukur dengan voltmeter standar (saya menggunakan Astro AI DM6000AR). Ini cukup dekat untuk tujuan penggunaan perangkat saya.

Untuk arsip ini saya menggunakan referensi tegangan (4.096v) dan pembagi tegangan.

Di sisi kode, saya menggunakan, tentu saja, opsi "referensi eksternal" untuk Arduino Nano dan contoh "Smoothing" dalam tutorial Arduino.

Perlengkapan

1 x Arduino Nano - Tautan

1 x Layar Oled (SSD 1306) - Tautan

1 x 1/4W 1% Resistor - 1k ohm - Tautan

1 x 1/4W 1% Resistor - 220k ohm - Tautan

1 x 1/4W 1% Resistor - 10k ohm - Tautan

Referensi Tegangan 1 x 4.096v LM4040DIZ-4.1 - Tautan

Papan tempat memotong roti dan kabel - Tautan

Astro AI DM6000AR - Tautan

Bank Daya USB - Tautan

Baterai 9V - Tautan

CanadianWinters adalah peserta dalam Program Associates Amazon Services LLC, program periklanan afiliasi yang dirancang untuk menyediakan sarana bagi situs untuk mendapatkan biaya dengan menautkan ke Amazon.com dan situs afiliasi. Dengan menggunakan tautan ini, sebagai Rekanan Amazon, saya memperoleh penghasilan dari pembelian yang memenuhi syarat, bahkan jika Anda membeli sesuatu yang lain--dan itu tidak akan dikenakan biaya apa pun.

Langkah 1: Skema

Skema
Skema
Skema
Skema

Saya menghubungkan semua bagian sesuai skema di atas. Secara khusus saya memilih referensi tegangan 4.096 untuk tetap sedekat mungkin dengan tanda 5v untuk menghindari kehilangan resolusi.

Mengikuti lembar data, saya memilih resistor 1K ohm untuk referensi tegangan meskipun nilai yang berbeda dapat digunakan. Tegangan untuk referensi disuplai dari pin Nano 5v.

Ide rangkaian adalah bahwa tegangan DC yang akan diukur melewati resistor tegangan. Tegangan yang diskalakan kemudian masuk ke pin analog Arduino untuk diambil sampelnya, dihaluskan, diskalakan ulang dan ditampilkan pada layar OLed.

Saya mencoba untuk menjaga hal-hal sederhana:)

Langkah 2: Perhitungan Kode dan Resistor

Nilai resistor dipilih seperti yang disarankan (jika saya tidak salah ini ada di lembar data Arduino/Atmega) untuk menjaga impedansi di bawah 10k ohm.

Untuk menyederhanakan, saya membuat spreadsheet yang mengotomatiskan perhitungan jika Anda ingin menggunakan nilai resistor yang berbeda: Tautan ke Google Sheet

Berikut adalah kode yang saya gunakan untuk proyek ini:

#termasuk

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (rotasi, [reset]) tegangan float =0; // digunakan untuk menyimpan nilai tegangan float Radjust = 0.043459459; //Faktor pembagi tegangan (R2 / R1+R2) float vbat =0; //tegangan akhir setelah kals- tegangan pelampung baterai Vref = 4.113; //Referensi tegangan - nilai nyata yang diukur. Nilai Nominal 4.096v const int numReadings = 50; // jumlah sampel bacaan - tingkatkan untuk lebih menghaluskan. Kurangi untuk membaca lebih cepat. int bacaan[numReadings]; // pembacaan dari input analog int readIndex = 0; // indeks pembacaan saat ini unsigned total panjang = 0; // total int rata-rata yang berjalan = 0; //variabel untuk me-refresh layar tanpa menggunakan delay unsigned long beforeMillis = 0; // akan menyimpan terakhir kali layar diperbarui // konstanta tidak akan berubah: const long interval = 50; // interval untuk menyegarkan layar (milidetik) void setup(void) { analogReference(EXTERNAL); // gunakan AREF untuk tegangan referensi 4.096. Tegangan nyata referensi saya adalah 4.113v u8g2.begin(); for (int thisReading = 0; thisReading = numReadings) { // …membungkus ke awal: readIndex = 0; } // menghitung rata-rata: rata-rata = (total / angkaBacaan); tegangan = rata-rata * (Vref / 1023.0); //4.113 adalah Vref vbat = tegangan/Sesuaikan; // Mengatur penundaan untuk penyegaran layar menggunakan Millis if (currentMillis - beforeMillis >= interval) { // simpan terakhir kali layar diperbarui sebelumnyaMillis = currentMillis; u8g2.clearBuffer(); // kosongkan memori internal //tampilan Tegangan Paket u8g2.setFont(u8g2_font_fub20_tr); // 20px font u8g2.setCursor (1, 20); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // font 10 px u8g2.setCursor (76, 20); u8g2.print("Volt"); u8g2.setCursor (1, 40); u8g2.print("Musim Dingin Kanada'"); u8g2.setCursor (1, 60); u8g2.print("Tegangan Tepat"); } u8g2.sendBuffer(); // transfer memori internal ke penundaan tampilan(1); }

Harap dicatat saya agak berkarat dengan pengkodean Arduino, jadi jika Anda menemukan kesalahan atau cara untuk memperbaiki kode, saya terbuka untuk saran:)

Langkah 3: Mari Mengujinya

Mari Mengujinya!
Mari Mengujinya!
Mari Mengujinya!
Mari Mengujinya!
Mari Mengujinya!
Mari Mengujinya!

Untuk menguji voltmeter ini saya menggunakan baterai 8x 9v yang saya dapatkan di toko lokal. Saya berencana untuk menggunakan voltmeter ini untuk mengukur tegangan pada baterai sepeda listrik saya (mereka memiliki tegangan mulai dari 24-60v dengan kadang-kadang 72v).

Setelah elektronik dikemas ke dalam PCB dan kotak kecil, ini akan membuat meteran baterai yang bagus dan portabel. Grafik dan font pada OLED dapat disesuaikan agar sesuai dengan kebutuhan Anda (misalnya font yang lebih besar agar mudah dibaca).

Tujuan saya adalah agar pembacaan voltase pada pengukur Oled/Arduino tidak terlalu jauh dari Multi Meter Digital saya. Saya membidik +/-0, delta maks 3v. Seperti yang Anda lihat dari video, saya dapat mengarsipkan ini kecuali di ujung atas pengukuran.

Saya harap Anda menikmati Instruksi ini dan beri tahu saya pendapat Anda!

Direkomendasikan: