Двухканальный вольт-амперметр может использоваться как индикатор для лабораторного блока питания с максимальным выходным напряжением 30 В и максимальным выходным током 3А. При желании можно изменить диапазон измерения напряжения и тока, подобрав номиналы делителя напряжения и сопротивление шунта.
На аналоговые входы А0 А1 через делители напряжения подается измеряемое напряжение. Для измерения тока используются входы A2 A3, так как при сопротивлении шунта 0.01 Ом и максимальном токе 3 А напряжение на шунте не превысит 30 мВ используется усилитель напряжения на ОУ LM358. После усиления напряжения шунта до 5 В при токе 3 А, напряжение через токоограничивающие резисторы поступает на входы A2 A3.
Для питания ОУ LM358 необходимо напряжение от 9 В до 12В , но можно подать и 5 В, при этом максимальное выходное напряжение ОУ не превысит 4 В, что немного ограничит диапазон измерения тока.
#include <LiquidCrystal.h> LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7 void setup(){ lcd.begin(16, 2);// LCD 16X2 /////////10 bit 0...1023 ///////// pinMode(A0,INPUT); // U1 pinMode(A1,INPUT); // U2 pinMode(A2,INPUT); // A1 pinMode(A4,INPUT); // A2 } int a0,a1,a2,a3,n0,n1; float u0,u1,u2,u3; void loop(){ a0 = analogRead(A0); a1 = analogRead(A1); a2 = analogRead(A2); a3 = analogRead(A3); u0 = a0*30.0/1023; u1 = a1*30.0/1023; u2 = a2*3.0/1023; u3 = a3*3.0/1023; if(u0>=10){n0=1;}else{n0=2;} if(u1>=10){n1=1;}else{n1=2;} lcd.setCursor(1,0); lcd.print(u0,n0); lcd.print(" B "); lcd.print(u1,n1); lcd.print(" B "); lcd.setCursor(1,1); lcd.print(u2,2); lcd.print(" A "); lcd.print(u3,2); lcd.print(" A "); delay(500); }
Для увеличения точности измерения можно использовать внешнее опорное напряжения, для этого в функцию setup добавьте следующий код:
analogReference(EXTERNAL);/* используем внешний источник опорного напряжения, подаем +5В от ИОН на вывод AREF через сопротивление 5 кОм. При этом следует учесть внутреннее сопротивление вывода AREF в 32 кОм и ввести коррекцию при пересчете измерения в вольты */