Voltmeter empat saluran 0-50V berdasarkan pada Digital Laboratory kit NR05

Seringkali ada kebutuhan untuk secara bersamaan mengontrol beberapa tegangan, misalnya, tegangan keluaran catu daya komputer, beberapa baterai, dll. Dalam publikasi terakhir, kami memeriksa prinsip kunci kombinasi, dan sekarang, berdasarkan kit ekspansi kit Laboratorium Digital NR05 , kami merakit digital saluran empat. voltmeter dengan indikasi hasil pada layar yang terpasang di papan. Kisaran tegangan yang diukur dapat diubah menggunakan pembagi eksternal, dan langkah pengukuran ditentukan oleh resolusi konverter analog-ke-digital (ADC) dari mikrokontroler Atmega 328 yang digunakan dalam papan Arduino dan bernilai 1024. Kemudian, dalam rentang tegangan 0-50V, langkah pengukuran tegangan akan menjadi sekitar 50 mV, yang cukup untuk penggunaan domestik.



Kami akan menghubungkan voltase yang diukur ke input analog gratis dari board. Ini adalah input A0, A4, A5 dan A7 yang terletak di bagian kanan bawah papan. Untuk menggunakan input A0, jatuhkan sementara resistor R4 yang terletak di dekat konektor XP3 di bagian kanan bawah papan.



Kami akan membuat pembagi eksternal dengan konektor untuk menghubungkan voltase yang diukur dan papan ekspansi menggunakan metode LUT (yang disebut "teknologi setrika-laser") dan etsa papan dalam larutan besi klorida. Kami menggunakan resistor SMD, tetapi jika Anda tidak memiliki printer laser, Anda dapat membuat pembagi dengan menggambar konduktor dengan spidol tahan air. Dalam hal ini, lebih baik menggunakan resistor keluaran, karena ukuran akurasi dari konduktor yang dihasilkan akan lebih rendah. Secara rinci, teknologi pembuatan papan sirkuit tercetak dengan mengetsa besi klorida dapat dipelajari dengan membeli satu set NN201 yang diproduksi oleh Master Kit.

Papan pembagi yang sudah selesai ditunjukkan pada foto di bawah ini.



Papan ekspansi memiliki layar kristal cair 2-garis dengan 16 karakter di setiap baris. Pada indikator seperti itu, empat pembacaan dari 0 hingga 50 volt dengan satu tempat desimal dan pengidentifikasi saluran cukup nyaman untuk ditempatkan.

Pengukuran itu sendiri disarankan untuk dilakukan beberapa kali dalam waktu singkat, rata-rata nilainya. Ini akan mengurangi kesalahan pengukuran acak.
Kami juga menyadari dalam program β€œmembekukan” hasilnya ketika Anda mengklik salah satu tombol yang ada di papan tulis, misalnya, yang di tengah. Pers kedua akan melanjutkan pengukuran berkelanjutan.

Kami menggunakan LED yang terhubung ke keluaran digital ke-13 Arduino untuk menunjukkan proses pengukuran.

Berdasarkan hal tersebut di atas, kami akan membuat program untuk Arduino:

Spoiler
/*--------------------------------------------------------------
0-50, ,
, LCD-
16 , 2 ,


NR05 Β« Β»; 4 10
1, 100, A0,A4,A5,A7


5 V_REF
.
-
.

(
)
Vin
.
Vout .
DIV_* Vin/Vout.

startingelectronics.com
--------------------------------------------------------------*/
#include <LiquidCrystal.h>

// ( )
#define LED 13
//
#define NUM_SAMPLES 20
//
#define DIV_1 11.186
#define DIV_2 11.186
#define DIV_3 11.186
#define DIV_4 11.186
//
#define V_REF 4.575
//
#define NUM_KEYS 5
// ( )
int adcKeyVal[NUM_KEYS] = {30, 150, 360, 535, 760};

LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);
unsigned long sum[4] = {0}; //
unsigned char sample_count = 0; //
float voltage[4] = {0.0}; //
int cnt = 0; //
int keyIsPressed = 0; // «»

void setup()
{
lcd.begin(16, 2);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
}

void loop()
{
// 3 , «»
if (get_key() == 3){
keyIsPressed = !keyIsPressed;
delay(500);
}
// (1),
if (keyIsPressed == 0){
digitalWrite(LED, LOW);
//
while (sample_count < NUM_SAMPLES) {
// sample channel A0, A4, A5, A7
sum[0] += analogRead(A0);
sum[1] += analogRead(A4);
sum[2] += analogRead(A5);
sum[3] += analogRead(A7);
sample_count++;
delay(10);
}
digitalWrite(LED, HIGH);
//
for (cnt = 0; cnt < 4; cnt++) {
voltage[cnt] = ((float)sum[cnt] / (float)NUM_SAMPLES * V_REF) / 1024.0;
}
//
lcd.setCursor(0, 0);
lcd.print(Β«A β€ž);
lcd.print(voltage[0] * DIV_1, 1);
lcd.print(β€œV β€ž);
// voltage 2 β€” B (pin A4)
lcd.setCursor(8, 0);
lcd.print(β€œB β€ž);
lcd.print(voltage[1] * DIV_2, 1);
lcd.print(β€œV β€ž);
// voltge 3 β€” C (pin A5)
lcd.setCursor(0, 1);
lcd.print(β€œC β€ž);
lcd.print(voltage[2] * DIV_3, 1);
lcd.print(β€œV β€ž);
// voltage 4 β€” D (pin A7)
lcd.setCursor(8, 1);
lcd.print(β€œD β€ž);
lcd.print(voltage[3] * DIV_4, 1);
lcd.print(β€œV β€ž);

//
sample_count = 0;
for (cnt = 0; cnt < 4; cnt++) sum[cnt] = 0;
delay(20);
}
}

//
int get_key()
{
int input = analogRead(A6);
int k;
for (k = 0; k < NUM_KEYS; k++)
if (input < adcKeyVal[k])
return k + 1;
return 0;
}


Program ini dilengkapi dengan komentar yang cukup rinci yang menjelaskan fitur-fitur implementasi algoritma.

Mungkin fitur yang paling penting adalah proses kalibrasi konstanta yang dijelaskan dalam komentar yang terlibat dalam perhitungan tegangan yang diukur. Untuk mengkalibrasi pembagi (dilakukan sekali), gunakan sumber tegangan konstan yang stabil. Mengingat kalibrasi membutuhkan waktu singkat, Anda dapat berhasil menggunakan baterai 9V "Krona" dan multimeter digital. Multimeter dari "Set of a Young Electronic Engineer" NR02 cukup cocok. Kit ini juga bagus untuk mengajar solder dan perakitan PCB.

Perlu dicatat bahwa ketika tegangan suplai yang tiba di Arduino berubah, nilai kalibrasi dari tegangan referensi harus diubah sesuai dengan itu, nilai relatif yang diukur.

Untuk mengubah rentang pengukuran, perlu untuk menerapkan pembagi dengan rasio pembagian yang berbeda dari tegangan input.

Source: https://habr.com/ru/post/id393225/


All Articles