Амперметр используется для измерения протекающего тока через нагрузку или устройство. В этой статье мы рассмотрим создание простого цифрового амперметра на основе платы Arduino Uno, а вместе с этим повторим и основные положения закона Ома, которые нам потребуются для измерения силы тока.
Основные положения закона Ома
Наверняка все из вас хорошо знают трактовку закона Ома: "разность потенциалов между двумя полюсами или клеммами проводника прямо пропорциональна количеству тока, проходящего через этот проводник", в качестве константы этой пропорциональности мы используем сопротивление. Выражение для закона Ома выглядит следующим образом:
V = IR
V - напряжение на проводнике в вольтах (В),
I - ток, проходящий через проводник в амперах (А),
R – сопротивление проводника в омах (Ω).
Для того чтобы найти ток, протекающий через устройство, необходимо преобразовать приведенную формулу закона Ома к виду:
I = V / R
То есть для нахождения значения тока нам нужно знать всего 2 величины: напряжение и сопротивление.
В нашем проекте мы последовательно с устройством, силу тока через которое нужно измерить, будем включать сопротивление. Поскольку нам нужно найти падение напряжения, то нам просто необходимо измерить напряжение перед и после сопротивления как показано на следующем рисунке.
Согласно приведенной схемы мы будем находить 2 значения напряжения. Разница между напряжениями (V1-V2) на двух концах резистора даст нам падение напряжения на резисторе (R), и когда мы разделим падение напряжения на сопротивление резистора, мы получим силу тока (I) через устройство.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Резистор 22 Ом (купить на AliExpress).
- Светодиод (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Мультиметр.
- Макетная плата.
- Соединительные провода.
Принципиальная схема и соединения
Схема устройства представлена на следующем рисунке.
От платы Arduino Uno осуществляется питание всех остальных компонентов схемы. Выход датчика измерения силы тока подключен к одному из аналоговых контактов платы Arduino. ЖК дисплей подключен к цифровым контактам Arduino (7,8,9,10,11,12).
ЖК дисплей содержит 16 контактов, первые два контакта (VSS,VDD) и последние два контакта (анод и катод) подключены к земле и 5v. Контакты сброса (RS) и доступности (E) подключены к цифровым контактам Arduino 7 и 8. Контакты данных D4-D7 подключены к цифровым контактам Arduino (9,10,11,12). Контакт V0 подключен к средней точке потенциометра. Красный и черный провода – соответственно 5v и gnd (земля).
Измерение тока
Схема нашего амперметра содержит резистор и светодиод в качестве нагрузки. Резистор соединен последовательно со светодиодом, поэтому ток через него можно определить измеряя падение напряжения на резисторе. Точки V1, V2, в которых измеряется напряжение, подсоединены к аналоговым входам платы Arduino.
На этих аналоговых входах стоят АЦП (аналогово-цифровые преобразователи) с разрешением 10 бит, которые конвертируют входное напряжение в число от 0 до 1023. Параметры этого конвертирования мы можем изменить в программе. Также нам необходимо знать, какое минимальное напряжение способны обрабатывать АЦП на аналоговых входах платы Arduino – оно составляет 4.88mV. Таким образом, мы можем просто умножить значение с выхода АЦП на 4.88mV и получить, соответственно, значение напряжения на входе АЦП (на входе аналогового контакта платы). Более подробно про АЦП в Arduino можно прочитать в этой статье.
Расчеты
Итак, значение на выходах АЦП платы Arduino лежит в диапазоне 0-1023, а опорное напряжение – в диапазоне 0-5v.
Рассмотрим пример. Допустим, V1= 710, V2= 474 и R=22Ω, разница между напряжениями (точнее их конвертированными значениями на выходах АЦП) составляет 236. Умножив 236 на 0.00488 мы получим значение напряжения 1.15v – это и есть нужное нам значение падения напряжения. Разделив это значение напряжения на 22 (сопротивление) мы получим текущее значение тока 0.005A. Таким образом, с помощью платы Arduino мы можем достаточно просто измерять силу тока, проходящего через нагрузку.
Исходный код программы
Полный текст программы приведен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.
Сначала в программе нам необходимо подключить все используемые библиотеки (в нашем случае мы будем использовать только одну библиотеку – для работы с ЖК дисплеем). Затем мы будем считывать значения напряжения в двух точках с помощью функции analogread.
1 2 |
int voltage_value0 = analogRead(A0); int voltage_value1 = analogRead(A1); |
Затем мы объявим временную переменную (value), в которой будем хранить разницу значений voltage_value0 и voltage_value1. Затем значение этой переменной мы будем умножать на 0.00488 чтобы получить действительную величину падения напряжения на резисторе, а затем получившуюся величину мы будем делить на 22 (сопротивление) чтобы получить значение силы тока.
1 2 3 |
int subraction_value =(voltage_value0 - voltage_value1) ; float temp_val = (subraction_value*0.00488); float current_value = (temp_val/22); |
Далее представлен полный текст программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include<LiquidCrystal.h> // библиотека для работы с ЖК дисплеем LiquidCrystal lcd (7,8,9,10,11,12); // контакты платы Arduino, к которым подключен ЖК дисплей void setup() { // put your setup code here, to run once: Serial.begin(9600); lcd.begin(16,2); lcd.clear(); } void loop() { // put your main code here, to run repeatedly: int voltage_value0 = analogRead(A0); int voltage_value1 = analogRead(A1); int subraction_value =(voltage_value0 - voltage_value1) ; float temp_val = (subraction_value*0.00488); float current_value = (temp_val/22); Serial.print(current_value); lcd.setCursor(0,0); lcd.print("current value="); lcd.setCursor(0,1); lcd.print (current_value); // выводим измеренное значение тока на экран ЖК дисплея lcd.print("A"); delay(1000); } |
А какое напряжение может пропускать через себя этот амперметр? Только до 5 вольт?
Да почти любое если вместо одного резистора используете делитель напряжения из двух резисторов, а напряжение на вход Ардуино подаете со среднего отвода этого делителя. Разумеется, в код программы нужно будет внести небольшие поправки чтобы ток правильно измерялся. Здесь с одним резистором ограничение только из-за того что на контакты платы Ардуино нельзя больше 5 В подавать.
Подойдет для измерения постоянного тока после диодного моста, включенного в сеть 220В без трансформатора на порядок 10-20А ?
Подойдет практически для любого тока лишь бы резистор такой ток выдержал, а падение напряжения на резисторе при максимальном токе не превышало бы 5 В, иначе плата Ардуино может сгореть. Ну и номинал резистора вместе с коэффициентами для расчета тока в программе нужно будет рассчитать под ваши значения тока, но это несложно.
Здравствуйте, а для чего нужен потенциометр и какая библиотека используется для работы с дисплеем?
Добрый вечер. Библиотека для работы с дисплеем подключается в коде программы - это LiquidCrystal.h. А потенциометр нужен для регулировки контрастности дисплея во время работы. Можете заменить на постоянный резистор если вам не нужна данная опция. Вот статья про подключение жидкокристаллического (ЖК) дисплея к Arduino.