«Arduino» вольтметр
Вольтметр — устройство для измерения напряжения в цепи. Этот пост является наглядным пособием для постройки вольтметра постоянного напряжения на Ардуино с LCD дисплеем. Он теоретически может измерять напряжение до 55 В. При необходимости вы сможете самостоятельно внести небольшие изменения в схему и скетч, для увеличения верхнего измеряемого значения.
Требуемое оборудование
Для изготовления простого цифрового вольтметра своими руками в домашних условиях понадобятся:
- Arduino uno
- 16×2 LCD жидкокристаллический дисплей
- Резистор 100 кОм
- Резистор 10 кОм
- Потенциометр 10 кОм
- Макетная плата
- Провода (перемычки)
Arduino измерение напряжения
Верхний предел аналоговых выводов Arduino составляет 5 вольт. Для измерения напряжения до 5 В можем напрямую подключить источник напряжения к аналоговому выводу Arduino. В случае измерения напряжения выше 5 В необходимо использовать делитель напряжения. Он защитит от перегрузки по напряжению выходы микроконтроллера. Схема делителя напряжения состоит из двух резисторов, в нашем случае 100 кОм и 10 кОм.
Делитель напряжения
Номиналы резисторов берутся в зависимости от необходимого верхнего предела измерения. Если быть точными, то нас интересует не столько номиналы резисторов, сколько их отношение. Номиналы подбираются по формуле:
R1/R2=Uin/Uout —1
Где R1 и R2 — это номиналы необходимых нам сопротивлений.
Uout — это напряжение на выходе делителя. В нашем случае 5 Вольт. Как уже писалось выше, это максимальное значение, которое мы сможем скормить Ардуино.
Uin — это напряжение на входе делителя, который является верхним пределом измерения вольтметра. В нашем случае 55В.
В качестве примера возьмём равенство для нашего делителя:
100000/10000=55/5—1
Равенство выполняется, значит всё верно. Если вам нужен вольтметр с другим верхним пределом, можете подставить своё значение Uin. И подобрать свои резисторы с необходимым отношением.
«Arduino вольтметр», схема подключения
На схеме выше изображено подключение к Ардуино LCD дисплея справа и делителя, состоящего из двух резисторов слева. Потенциометр на 10кОм необходим для регулировки подсветки дисплея.
Программа (скетч)
Программа ниже использует библиотеку LiquidCrystal. Эта библиотека содержит функции, необходимые для записи результатов измерения на ЖК-дисплей.
Цикл считывает аналоговое значение аналогового входа, и потом вычисляет фактическое значение напряжения. Результат расчета напряжения записывается на ЖК-дисплей.
Поверка вольтметра
Поверка вольтметра заключается в сравнении показаний вольтметра на ардуино с рабочим вольтметром (мультиметром). Если значения отличаются, нужно проверить напряжение на пинах Ардуино 5V и GND. Напряжение может слегка отличаться от 5 вольт. Например, 4,95 В. Тогда в формуле temp = (analogvalue * 5.0) / 1024.0 нужно значение 5 заменить на 4,95. И также необходимо проверить точное сопротивление резисторов R1 и R2 и в строчки float r1=100000.0 и float r2=10000.0 вписать свои значения. После такой поверки мы получим точный вольтметр на Ардуино. Данный прибор способен измерять напряжение до сотых вольт.
И напоследок хотел бы предостеречь вас. Использовать данный вольтметр для измерения 55 вольт не рекомендуется. Это максимальный предел. При незначительном скачке измеряемого напряжения микроконтроллер выйдет из строя. Необходимо дать некий запас для непредвиденных ситуаций. И ограничить диапазон измеряемого напряжения до 45 вольт.
Простой вольтметр на Arduino Uno
В данной статье мы рассмотрим создание на основы платы Arduino Uno и делителя напряжения простого цифрового вольтметра, который будет отображать измеренное значение напряжения на экране жидкокристаллического (ЖК) дисплея 16×2.
Плата Arduino имеет несколько аналоговых входов, к которым внутри платы подсоединены встроенные аналогово-цифровые преобразователи (АЦП). АЦП платы Arduino имеют разрядность 10 бит, поэтому значения на их выходах будут лежать в диапазоне от 0 до 1023. Мы можем считывать эти значения в программе, используя функцию analogRead() . Таким образом, если вы знаете опорное напряжение (reference voltage) АЦП, то вы легко можете рассчитать аналоговое напряжение, присутствующее на входе АЦП. Более подробно об аналогово-цифровом преобразовании в плате Arduino вы можете прочитать в этой статье.
Для измерения напряжения в нашем проекте цифрового вольтметра мы также будем использовать делитель напряжения. Измеренное значение напряжения мы будем показывать на экране ЖК дисплея 16×2 и выводить в окне монитора последовательной связи (Serial Monitor) Arduino IDE. Правильность измеренного значения напряжения мы будем проверять с помощью мультиметра.
Необходимые компоненты
Плата Arduino Uno
ЖК дисплей 16х2
Резистор 100 кОм
Резистор 10 кОм
Потенциометр 10 кОм
Макетная плата
Соединительные провода
Схема делителя напряжения
Делитель напряжения представляет собой схему из двух резисторов, показанную на следующем рисунке.
В нашем примере резисторы R1 и R2 имеют номиналы 10 кОм и 100 кОм. Средняя точка делителя напряжения используется для подачи сигнала на аналоговый вход платы Arduino. Напряжение, падающее на резисторе R2 (Vout), называется напряжением на выходе делителя напряжения. Оно может быть рассчитано по следующей формуле:
Vout = Vin (R2/R1+R2)
То есть напряжение на выходе делителя прямо пропорционально напряжению на его входе и отношению сопротивлений резисторов R1 и R2.
Используя приведенную формулу в коде программы для Arduino мы легко можем определить напряжение на входе делителя. Максимальное напряжение на входе (контактах) платы Arduino составляет 5 В, поэтому при используемых нами номиналах резисторов (их отношение составляет 100:10) мы с помощью нашего вольтметра сможем измерять напряжения до 55 В.
Работа схемы
Схема цифрового вольтметра на основе платы Arduino представлена на следующем рисунке.
ЖК-дисплей подключен в 4-битном режиме. Его контакты DB4, DB5, DB6, DB7, RS и EN непосредственно подключены к контактам D4, D5, D6, D7, D8, D9 платы Arduino Uno.
Средняя точка делителя напряжения на резисторах R1 и R2, подключена к аналоговому контакту A0 платы Arduino. Остальные два конца делителя напряжения подключаются к источнику измеряемого напряжения и корпусу (земле).
Исходный код программы для Arduino
Основную часть кода программы составляет преобразование и отображение входного напряжения в отображаемое выходное напряжение с помощью приведенного выше уравнения Vout = Vin (R2/R1+R2). Как упоминалось ранее, выходное значение АЦП Arduino может варьироваться в диапазоне от 0 до 1023, а максимальное входное напряжение Arduino составляет 5 В, поэтому нам нужно умножить значение на выходе АЦП контакта A0 на 5/1024, чтобы рассчитать входное напряжение (на контакте A0).
void loop()
<
int analogvalue = analogRead(A0);
temp = (analogvalue * 5.0) / 1024.0; // формула для конвертирования значения напряжения
input_volt = temp / (r2/(r1+r2));
Мы будем отображать измеренное значение напряжение на экране ЖК-дисплея с помощью функции lcd.print и в окне монитора последовательной связи с помощью функции Serial.println .
Serial.print(«v= «); // выводим значение напряжения в окно монитора последовательной связи
Serial.println(input_volt);
lcd.setCursor(0, 1);
lcd.print(«Voltage= «); // выводим значение напряжения на экран ЖК дисплея
lcd.print(input_voltage);
Далее представлен полный текст программы.
#include
// библиотека для работы с ЖК дисплеем
LiquidCrystal lcd( 4, 5, 6, 7,8 ,9 ); // контакты, к которым подключен ЖК дисплей
float input_volt = 0.0;
float temp=0.0;
float r1=10000.0; //сопротивление резистора r1
float r2=100000.0; // сопротивление резистора r2
void setup()
<
Serial.begin(9600); // инициализируем последовательный порт связи для передачи на скорости 9600 бод/с
lcd.begin(16, 2); // устанавливаем число столбцов и строк используемого нами ЖК дисплея
lcd.print(«DC DIGI VOLTMETER»);
>
void loop()
<
int analogvalue = analogRead(A0);
temp = (analogvalue * 5.0) / 1024.0; // формула для конвертирования значения напряжения
input_volt = temp / (r2/(r1+r2));
if (input_volt // выводим значение напряжения в окно монитора последовательной связи
Serial.println(input_volt);
lcd.setCursor(0, 1);
lcd.print(«Voltage= «); // выводим значение напряжения на экран ЖК дисплея
lcd.print(input_volt);
delay(300);
>
Видео, демонстрирующее работу схемы
Make this Advanced Digital Ammeter using Arduino
Last Updated on June 26, 2019 by Swagatam
In this post we are going to construct a digital ammeter using 16 x 2 LCD display and Arduino. We will understand the methodology of measuring current using a shunt resistor and implement a design based on Arduino. The proposed digital ammeter can measure current ranging from 0 to 2 Ampere (absolute maximum) with reasonable accuracy.
How Ammeters Work
There are two types of ammeters: Analog and digital, their workings are way different from each other. But, they both have one concept in common: A shunt resistor.
A shunt resistor is a resistor with very small resistance placed between the source and the load while measuring the current.
Let’s see how an analog ammeter works and then it will be easier to understand the digital one.
A shunt resistor with very low resistance R and assume some kind analog meter is connected across the resistor who’s deflection is directly proportional to voltage through the analog meter.
Now let’s pass some amount of current from left hand side. i1 is the current before entering the shunt resistor R and i2 will be the current after passing through shunt resistor.
The current i1 will be greater than i2 since it dropped a fraction of current through shunt resistor. The current difference between the shunt resistor develops very small amount of voltage at V1 and V2.
The amount of voltage will be measured by that analog meter.
The voltage developed across the shunt resistor depends on two factors: the current flowing through the shunt resistor and the value of the shunt resistor.
If the current flow is greater through the shunt the voltage developed is more. If the value of the shunt is high the voltage developed across the shunt is more.
The shunt resistor must be very tiny value and it must possess higher wattage rating.
A small value resistor ensures that the load is getting adequate amount of current and voltage for normal operation.
Also the shunt resistor must have higher wattage rating so that it can tolerate the higher temperature while measuring the current. Higher the current through the shunt more the heat is generated.
By now you would have got the basic idea, how an analog meter works. Now let’s move on to digital design.
By now we know that a resistor will produce a voltage if there is a current flow. From the diagram V1 and V2 are the points, where we take the voltage samples to the microcontroller.
Calculating Voltage to Current Conversion
Now let’s see the simple math, how can we convert the produced voltage to current.
The ohm’s law: I = V/R
We know the value of the shunt resistor R and it will be entered in the program.
The voltage produced across the shunt resistor is:
V = V2 – V1 (to avoid negative symbol while measuring and also negative symbol depend on direction of current flow)
So we can simplify the equation,
I = (V1 – V2)/R
Or
I = (V2 — V1)/R
One of the above equations will be entered in the code and we can find the current flow and will be displayed in the LCD.
Now let’s see how to choose the shunt resistor value.
The Arduino has built in 10 bit analog to digital converter (ADC). It can detect from 0 to 5V in 0 to 1024 steps or voltage levels.
So the resolution of this ADC will be 5/1024 = 0.00488 volt or 4.88 millivolt per step.
So 4.88 millivolt/2 mA (minimum resolution of ammeter) = 2.44 or 2.5 ohm resistor.
We can use four 10 ohm, 2 Watt resistor in parallel to get 2.5 ohm which was tested in the prototype.
So, how can we say the maximum measurable range of the proposed ammeter which is 2 Ampere.
The ADC can measure from 0 to 5 V only i.e. . Anything above will damage the ADC in the microcontroller.
From the tested prototype what we have observed that, at the two analog inputs from point V1 and V2; when the current measured value X mA, the analog voltage reads X/2 (in serial monitor).
Say for example, if the ammeter reads 500 mA the analog values on serial monitor reads 250 steps or voltage levels. The ADC can tolerate up to 1024 steps or 5 V maximum, So when the ammeter reads 2000 mA, the serial monitor reads 1000 steps approx. which is near to 1024.
Anything above 1024 voltage level will damage the ADC in Arduino. To avoid this just before 2000 mA a warning message will prompt on LCD saying to disconnect the circuit.
By now you would have understood how the proposed ammeter works.
Now let’s move on to constructional details.
Schematic diagram:
The proposed circuit is very simple and beginner friendly. Construct as per the circuit diagram. Adjust the 10K potentiometer to adjust display contrast.
You can power the Arduino from USB or via DC jack with 9 V batteries. Four 2 watt resistors will dissipate the heat evenly than using one 2.5 ohm resistor with 8- 10 watt resistor.
When no current is passing the display may read some small random value which you may ignore it, this might be due to stray voltage across measuring terminals.
NOTE: Don’t reverse the input load supply polarity.
Program Code:
//——————Program Developed by R.GIRISH——————//
#include
#define input_1 A0
#define input_2 A1
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int AnalogValue = 0;
int PeakVoltage = 0;
float AverageVoltage = 0;
float input_A0 = 0;
float input_A1 = 0;
float output = 0;
float Resolution = 0.00488;
unsigned long sample = 0;
int threshold = 1000;
void setup()
<
lcd.begin(16,2);
Serial.begin(9600);
>
void loop()
<
PeakVoltage = 0;
for(sample = 0; sample = threshold)
<
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Reached Maximum»);
lcd.setCursor(0,1);
lcd.print(«Limit. «);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Disconnect now!!»);
delay(1000);
>
while(analogRead(input_A0) >= threshold)
<
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Reached Maximum»);
lcd.setCursor(0,1);
lcd.print(«Limit. «);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«Disconnect now!!»);
delay(1000);
>
lcd.clear();
lcd.setCursor(0,0);
lcd.print(«DIGITAL AMMETER»);
lcd.setCursor(0,1);
lcd.print(output);
lcd.print(» mA»);
Serial.print(«Volatge Level at A0 = «);
Serial.println(analogRead(input_A0));
Serial.print(«Volatge Level at A1 = «);
Serial.println(analogRead(input_A1));
Serial.println(«——————————«);
delay(1000);
>
//——————Program Developed by R.GIRISH——————//
If you have any specific question regarding this Arduino based digital ammeter circuit project, please express in the comment section, you may receive a quick reply.