Как сделать 5в вольтметр с помощью arduino

Содержание

Приложение для Android для контроля потребления электроэнергии

Вы можете использовать приложение для Android для контроля описанных значений потребления электроэнергии и счета за электричество. Для этого скачайте MQTT Dashboard android app из Play store.

Чтобы осуществить в нем соединение с io.adafruit.com выполните следующую последовательность шагов.

Шаг 1. Откройте приложение и кликните в нем на знак “+”. Напишите в поле Client Id любое значение которое захотите. Сервер и порт оставьте такими как показано на следующем рисунке.

Вы можете получить имя пользователя (Username) и пароль (Active key) с приборной доски AdaFruit IO как показано на следующем рисунке.

Шаг 2. Выберите Electricity Meter (измеритель электричества) и выберите Subscribe (подписаться). Для подписки укажите дружественное (сетевое) имя (friendly name) и тему (topic) в формате ‘yourusername’/feeds/’feedname’, затем нажмите create (создать).

Шаг 3. Аналогичным образом сделайте подписку на значение счета за электричество (bill feed).

Шаг 4. После того как ваши устройства начнут потреблять электроэнергию значения потребляемой мощности и счета за электричество будут отображаться в приложении.

Таким образом, мы сконструировали умный измеритель электроэнергии, благодаря которому мы можем контролировать потребление электроэнергии из любой точки земного шара (где есть интернет). Также на нашем сайте вы можете посмотреть и другие проекты, относящиеся к категории интернета вещей.

[46] Десульфатирующая зарядка своими руками на Arduino — бортжурнал Mitsubishi Lancer 1.5 MT ★ Silver Shark ★ 2009 года на DRIVE2

Вернувшись недавно из отпуска, первым делом я, конечно же, отправился проверять свою любимицу, шутка ли, машина простояла во дворе без движения почти три недели. Аккумулятор у меня стоит до сих пор «родной» а ему между тем исполнилось уже девять лет! Захотелось мне, проверить на нем напряжение после долго простоя. Картина была прямо таки удручающая, 11.

85 вольт, для современного акб это почти полный разряд. Более того, категорически не рекомендуется допускать падение напряжения ниже 12 вольт, так как после этого кальциевый аккумулятор очень быстро приходит в негодность. В общем, я тут же отправился сделать круг по КАДу что-бы подзарядить АКБ и в процессе обдумать, как продлить жизнь моего дедушки аккумулятора.

Полный размер

11.85 вольт для современного акб это почти полный разряд.

Таблица заряда аккумулятора

Хороших зарядных устройств ни у кого из знакомых не оказалось, а идею с покупкой нового я отмел сразу, поскольку нормальный зарядник стоит от трех тысяч рублей и выше, а мой бюджет и так был очень сильно подкошен прошедшим отпуском.

5 ампера2) DC-CC понижающий преобразователь до 9 ампер3) Цифровой Вольтметр/Амперметр4) Ардуино УНО совместимая плата Wemos D15) Пару ардуиновских реле6) LED дисплей, лампа на 5 ватт, резисторы и куча проводов.Подключил я всё это следующим образом.

Полный размер

Схема десульфирующего зарядника своими руками на Arduino

Суть предельно проста: напряжение с блока питания пускаем через преобразователь, настраиваем на выходе 14.4 вольта и до 4 ампер тока, для наглядности пропускаем всё это через вольтметр/амперметр и подключаем к аккумулятору через реле. Через второе реле вешаем на аккум лампочку. Плата Wemos управляет включением и выключением реле, так же к ней подключен LCD дисплей, кнопка включения, а к аналоговому пину A0 через делитель напряжения подведены провода напрямую с клемм акб для постоянного мониторинга напряжения во время зарядки.В скетче изначально я задал два режима:

1) Десульфикация – 3 секунды заряда током до 4 ампер, 3 секунды разряда током 0.4 ампера. Этот цикл заряда длится до повышения напряжения на клеммах до 14.4 вольт, далее автоматически переходит во второй режим.

2) В этом режиме зарядка происходит трёх секундными импульсами с паузами.

Перед зарядкой я так же промерил плотность электролита. В пяти банках она оказалась в пределах 1.20, а в первой к моему великому огорчению всего 1.175. А напряжение составило 12.3 вольта, что соответствует примерно 60% заряда.

Плотность в первой банке

Полный размер

Десульфирующая зарядка своими руками на Arduino

Первый цикл прошел достаточно быстро, всего около 8 часов, в начале заряда ток был около 4 ампер, а к концу цикла составлял всего чуть больше одного ампера. Во втором режиме зарядка проработала еще около двух часов, пока ток не упал до 0.4 ампера. Итого по грубым подсчетам за 10 часов в АКБ было влито всего около 10 ампер тока, явно маловато для 100% заряда, должно было влезть еще минимум 10!Зарядка в действииК этому я был готов заранее. Дело в том, что специфика современных кальциевых АКБ не позволяет зарядить их полностью привычным напряжением 14.4 вольта, им требуется от 15.8 до 16.1 вольта для 100% зарядки. Поэтому я тут же отрегулировал преобразователь на 15.8 вольт с максимальным током в 3 ампера. И поправил скетч в режим 2 секунды заряда, 4 секунды паузы.

Полный размер

Десульфирующая зарядка своими руками на Arduino

По итогу после ночного отстаивания АКБ показал напряжение 12.7 вольт. А вот с плотностью дела обстоят хуже, в пяти банках она поднялась до 1.25, а в первой составила всего 1.20.

Наверное, придётся в ближайшем будущем погонять акум в режиме заряд/разряд.

Всем добра!

Цифровой вольтметр 0-30 Вольт на базе Ардуино

Представлена полезная схема для любителей поэкспериментировать с Ардуино. Это простой цифровой вольтметр, которым надежно можно измерять постоянное напряжение в диапазоне 0 – 30В. Плату Ардуино, как обычно, можно питать от 9В батареи.

Как вам вероятно известно, аналоговые входы Ардуино можно использовать для измерения постоянного напряжения в диапазоне 0 – 5В и этот диапазон можно увеличить, используя два резистора в качестве делителя напряжения. Делитель уменьшит измеряемое напряжение до уровня аналоговых входов Ардуино. А затем программа вычислит реальную величину напряжения.

Аналоговый датчик на плате Ардуино определяет наличие напряжения на аналоговом входе и преобразует его в цифровую форму для дальнейшей обработки микроконтроллером. На рисунке напряжение подается на аналоговый вход (А0) через простой делитель напряжения, состоящий из резисторов R1 (100кОм) и R2 (10кОм).

При этих значениях делителя на плату Ардуино можно подавать напряжение от 0 до 55В. На входе А0 имеем измеряемое напряжение деленное на 11,т.е.55В / 11=5В. Иначе говоря, при измерении 55В на входе Ардуино имеем максимально допустимое значение 5В. На практике лучше на этом вольтметре написать диапазон “0 – 30В”, чтобы оставался Запас по безопасности!

Примечания

• Если показания дисплея не совпадают с показаниями промышленного (лабораторного) вольтметра, то необходимо точным прибором измерить величину сопротивлений R1 и R2 и вставить эти значения вместо R1=100000.0 и R2=10000.0 в коде программы. Затем следует измерить лабораторным вольтметром реальное напряжение между выводами 5В и “Земля” платы Ардуино. Получится значение меньшее, чем 5В, например, получилось 4.95В. Это реальное значение следует вставить в строке кода vout = (value * 5.0) / 1024.0 вместо 5.0. Кроме того, старайтесь применять прецизионные резисторы с допуском 1%.

• Резисторы R1 и R2 обеспечивают некоторую защиту от повышенных входных напряжений.Однако следует помнить, что любые напряжения выше 55В могут вывести из строя плату Ардуино. Кроме того, в этой конструкции не предусмотрены другие виды защиты(от скачков напряжения, от переполюсовки или повышенного напряжения).

Программа цифрового вольтметра

/* DC Voltmeter An Arduino DVM based on voltage divider concept T.K.Hareendran */ #includeLiquidCrystal lcd(7, 8, 9, 10, 11, 12); int analogInput = 0; float vout = 0.0; float vin = 0.0; float R1 = 100000.0; // resistance of R1 (100K) -see text! float R2 = 10000.0; // resistance of R2 (10K) – see text! int value = 0; void setup() pinMode(analogInput, INPUT); lcd.begin(16, 2); lcd.print(“DC VOLTMETER”); >void loop() // read the value at analog input value = analogRead(analogInput); vout = (value * 5.0) / 1024.0; // see text vin = vout / (R2/(R1+R2)); if (vin

• Плата Arduino Uno • 100 кОм резистор • 10 кОм резистор • 100 Ом резистор • 10кОм Подстроечный резистор • LCD дисплей 16?2 ( Hitachi HD44780)

Вольтметр

Я реализую простой вольтметр с одним диапазоном примерно 0 — 20в

Это замечанием важно, тк АЦП нашего контроллера имеет разрядность 10 бит (1024 дискретных значения), поэтому погрешность составит не менее 0.02 в (20 / 1024). Для реализации железно нам нужен аналоговый вход контроллера, делитель из пары резисторов и какой-нибудь вывод (дисплей в законченном варианте, для отладки можно последовательный порт)

Принцип измерения АЦП состоит в сравнении напряжения на аналоговом входе с опорным VRef. Выход АЦП всегда целый — 0 соответствует 0в, 1023 соответствует напряжению VRef. Измерение реализовано путем серии последовательных чтений напряжения и усреднения по периоду между обновлениями значения на экране. Выбор опорного напряжения важен, поскольку по умолчанию оно равно напряжению питания, которое может быть не стабильно. Это нам совершенно не подходит — за основу мы будем брать стабильный внутренний опорный источник напряжением 1.1в, инициализируя его вызовом analogReference(INTERNAL). Затем мы откалибруем его значение по показаниям мультиметра.

На схеме слева — вариант с прямым управлением дисплея (он просто управляется — смотрите стандартный скетч LiquidCrystal\HelloWorld). Справа — вариант с I2C, который я и буду использовать дальше. I2C позволяет сэкономить на проводах (коих в обычном варианте — 10, не считая подсветки). Но при этом необходим дополнительный модуль и более сложная инициализация. В любом случае, отображение символов на модуле надо сначала проверить и настроить контрастность — для этого надо просто вывести после инициализации любой текст. Контрастность настраивается резистором R1, либо аналогичным резистором I2C модуля.

Вход представляет собой делитель 1:19, который позволяет при Vref = 1.1 получить максимальное напряжение около 20в (обычно параллельно входу ставят конденсатор + стабилитрон для защиты, но нам пока это не важно). Резисторы имеют разброс, да и опорное Vref контроллера тоже, поэтому после сборки надо измерить напряжение (хотя бы питания) параллельно нашим устройством и эталонным мультиметром и подобрать Vref в коде до совпадения показания

Так же стоить отметить, что любой АЦП имеет напряжение смещения нуля (которое портит показания в начале диапазона), но мы пока не будем в это углубляться.

Также важным будет разделение питающей и измерительной «земли». Наш АЦП имеет разрешение чуть хуже 1мВ, что может создавать проблемы при неправильной разводке, особенно на макете. Поскольку разводка платы модуля уже сделана и нам остается только выбор пинов. «Земляных» пинов у модуля несколько, поэтому мы должны сделать так, чтобы питание в модуль заходило по одной «земле», а измерения по другой. Фактически для изменений я всегда использую «земляной» пин ближайший к аналоговым входам.

Для управление I2C используется вариант библиотеки LiquidCrystal_I2C — в моем случае указывается специфическая распиновка модуля I2C (китайцы производят модули с отличающимся управлением). Так же отмечу, что I2C в Arduino предполагает использование именно пинов A4, A5 — на плате Pro Mini они находятся не с краю, что неудобно для макетирования на BreadBoard.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы рассмотрим его основные фрагменты.

Цель функционирования программы – считать значения аналогового напряжения с контактов A3 и A4 и рассчитать напряжение, ток и мощность, а потом отобразить все это на экране ЖК дисплея.

Вначале программы нам необходимо инициализировать используемые контакты: A3 и A4 для измерения напряжения и тока соответственно, и цифровые контакты 3, 4, 8, 9, 10 и 11 для подключения ЖК дисплея.

Arduino

int Read_Voltage = A3;
int Read_Current = A4;
const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; //контакты для подключения ЖК дисплея
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

1
2
3
4

intRead_Voltage=A3;

intRead_Current=A4;

constintrs=3,en=4,d4=8,d5=9,d6=10,d7=11;//контакты для подключения ЖК дисплея

LiquidCrystallcd(rs,en,d4,d5,d6,d7);

Далее внутри функции setup мы инициализируем ЖК дисплей и показываем на нем приветственное сообщение “Arduino Wattmeter”, ждем 2 секунды, а потом очищаем экран дисплея.

Arduino

void setup() {
lcd.begin(16, 2); //инициализируем ЖК дисплей 16х2
lcd.print(» Arduino Wattmeter»); //приветственное сообщение на первой строчке
lcd.setCursor(0, 1);
lcd.print(«-Circuitdigest»); //приветственное сообщение на второй строчке
delay(2000);
lcd.clear();
}

1
2
3
4
5
6
7
8

voidsetup(){

lcd.begin(16,2);//инициализируем ЖК дисплей 16х2

lcd.print(» Arduino Wattmeter»);//приветственное сообщение на первой строчке

lcd.setCursor(,1);

lcd.print(«-Circuitdigest»);//приветственное сообщение на второй строчке

delay(2000);

lcd.clear();

}

Внутри главной функции main мы будем использовать функцию analogread для считывания значений напряжения с аналоговых контактов A3 и A4. Плата Arduino имеет 10 битный АЦП (аналогово-цифровой преобразователь) поэтому на его выходе диапазон возможных значений составляет 0-1023. Это значение потом конвертируется в диапазон 0-5V с помощью его умножения на (5/1023). Поскольку в аппаратной части проекта мы преобразуем истинное значение напряжения из диапазона 0-24V в диапазон 0-5V и истинное значение тока из диапазона 0-1A в диапазон 0-5V. Поэтому в программе мы должны использовать умножитель чтобы конвертировать значения с выхода АЦП в истинные значения напряжения и тока. Коэффициенты для этого умножения можно теоретически рассчитать либо с помощью формул, описанных в разделе статьи «работа схемы», либо практически, зная значения измеряемых токов и напряжений. Второй подход представляется более точным, поэтому мы использовали именно его и у нас с его помощью получились коэффициенты умножения 6.46 и 0.239.

Arduino

float Voltage_Value = analogRead(Read_Voltage);
float Current_Value = analogRead(Read_Current);

Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46;
Current_Value = Current_Value * (5.0/1023.0) * 0.239;

1
2
3
4
5

floatVoltage_Value=analogRead(Read_Voltage);

floatCurrent_Value=analogRead(Read_Current);

Voltage_Value=Voltage_Value*(5.01023.0)*6.46;

Current_Value=Current_Value*(5.01023.0)*0.239;

Мотивация

Есть, по крайней
мере, две причины
для измерения
напряжения, питающего
наш
Arduino
(Vcc). Одним из них является наш проект, питающийся от батареи, если мы хотим следить за уровнем напряжения батареи. Кроме того, когда питание от батареи (Vcc) не может быть 5,0 вольт(например питание от 3-х элементов 1.5 В), а мы хотим сделать аналоговые измерения более точными — мы должны использовать либо внутренний источник опорного напряжения 1,1 В либо внешний источник опорного напряжения. Почему?

Обычно предполагают при использовании analogRead () то, что аналоговое напряжение питания контроллера составляет 5.0 вольт, когда в действительности это может быть совсем не так(например питание от 3-х элементов 1.5 В). Официальная документация Arduino даже может привести нас к этому неправильному предположению. Дело в том, что питание не обязательно 5,0 вольт, независимо от текущего уровня это питание подано на Vcc чипа. Если наше питание не стабилизировано или если мы работаем от аккумулятора, это напряжение может меняться совсем немного. Вот пример кода, иллюстрирующий эту проблему:

Double Vcc = 5.0; // не обязательно правда
int value = analogRead(0); / читаем показания с А0
double volt = (value / 1023.0) * Vcc; // верно только если Vcc = 5.0 вольт
Для того чтобы измерить напряжение точно, необходимо точное опорное напряжение. Большинство чипов AVR обеспечивает три источника опорного напряжения:

1,1 в от внутреннего источника, в документации он проходит как bandgap reference (некоторые из них 2,56 В, например ATMega 2560). Выбор осуществляется функцией analogReference() с параметром INTERNAL : analogReference(INTERNAL) ;

внешний источник опорного наптяжения, на ардуинке подписан AREF. Выбор: analogReference(EXTERNAL);

Vcc — источник питания самого контроллера. Выбор: analogReference(DEFAULT).

В Arduino нельзя просто взять и подключить Vcc к аналоговому пину напрямую — по умолчанию AREF связан с Vcc и вы всегда будете получать максимальное значение 1023, от какого бы напряжения вы не питались. Спасает подключение к AREF источника напряжения с заранее известным, стабильным напряжением, но это — лишний элемент в схеме.

Еще можно соединить Vcc с AREF через диод
: падение напряжение на диоде заранее известно, поэтому вычислить Vcc не составит труда. Однако, при такой схеме через диод постоянно протекает ток
, сокращая жизнь батареи, что тоже не очень удачно.

Источник внешнего опорного напряжения является наиболее точным, но требует дополнительных аппаратных средств. Внутренний ИОН стабильным, но не точен + / — 10% отклонение. Vcc является абсолютно ненадежен в большинстве случаев. Выбор внутреннего источника опорного напряжения является недорогим и стабильным, но большую часть времени, мы хотели бы измеряет большее напряжение чем 1.1 В, так что использование Vcc является наиболее практичным, но потенциально наименее точным. В некоторых случаях оно может быть очень ненадежным!

Шаг 8. Измеряем напряжение аккумулятора

Возьмите две батареи, чтобы измерить их напряжение: 1,5 В и 3,7 В. Отцепите соединение второго потенциометра с контактом A0 и GND, что означает удаление потенциометра из цепи. Зажмите конец провода A0 до анода батареи и цепь GND на катод. НЕ подключайте их обратно, иначе получите короткое замыкание на батарее. Значение 0V — это обратное соединение.

Итак, напряжение аккумулятора отображается на ЖК-дисплее. Может быть некоторая погрешность между значением и номинальным, поскольку батарея не полностью заряжена. И именно поэтому мне нужно измерить напряжение, чтобы понять могу я использовать аккумулятор или нет.

Корпус

Чтобы прибор имел презентабельный вид, для него был разработан алюминиевый корпус. Необходимые файлы проекта (Inkscape), шаблоны и трафареты также доступны в разделе загрузок.

На передней панели прибора расположены кнопки управления (выбор диапазона измерения, удержание показаний), разъемы для подключения тестовых щупов и ЖК-индикатор. Внешний вид передней панели прибора и расположение на ней кнопок, разъемов и индикатора изображено на Рисунке 6.

Рисунок 6. Вариант передней панели и корпуса миллиомметра.

Подключение ЖК-индикатора, разъемов  и кнопок указано на Рисунке 7. На рисунке отмечено: 1 – печатная плата прибора, 2 – разъем внешнего питания, 3 – ЖК-индикатор, 4 –разъемы для тестовых щупов Кельвина, 5 –кнопки управления.

Рисунок 7. Подключение кнопок управления, ЖК индикатора, тестовых щупов к разъемам на
печатной плате миллиомметра.

Исходный код программы

Полный код программы приведен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.

В программе мы должны сообщить плате Arduino, к каким ее контактам подключен ЖК дисплей. Контакт RS ЖК дисплея подключен к цифровому контакту 2 платы Arduino, а контакт Enable – к цифровому контакту 3 платы Arduino. Контакты данных ЖК дисплея (D4-D7) подключены к цифровым контактам 4,5,6,7 платы Arduino.

Arduino

LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7

1 LiquidCrystallcd(2,3,4,5,6,7);//rs,e,d4,d5,d6,d7

Затем в программе мы должны инициализировать необходимые нам переменные.

Arduino

int Vin=5; //напряжение на контакте 5V платы arduino
float Vout=0; //напряжение на контакте A0 платы arduino
float R1=3300; //значение сопротивления известного резистора
float R2=0; // значение сопротивления неизвестного резистора

1
2
3
4

intVin=5;//напряжение на контакте 5V платы arduino

floatVout=;//напряжение на контакте A0 платы arduino

floatR1=3300;//значение сопротивления известного резистора

floatR2=;// значение сопротивления неизвестного резистора

Далее в программе мы должны инициализировать наш ЖК дисплей.

Arduino

lcd.begin(16,2);

1 lcd.begin(16,2);

Затем мы должны считать значение на выходе АЦП контакта A0.

Далее значение с выхода АЦП (оно в диапазоне от 0 до 1023) конвертируется в значение напряжения.

Arduino

buffer=a2d_data*Vin;
Vout=(buffer)/1024.0;

1
2

buffer=a2d_data*Vin;

Vout=(buffer)1024.0;

Далее в коде программе исходя из найденного значения напряжения мы рассчитываем значение сопротивления R2.

Arduino

buffer=Vout/(Vin-Vout);
R2=R1*buffer;

1
2

buffer=Vout(Vin-Vout);

R2=R1*buffer;

Далее найденное значение сопротивления резистора R2 выводится на экран ЖК дисплея.

Arduino

lcd.setCursor(4,0);
lcd.print(«ohm meter»);
lcd.setCursor(0,1);
lcd.print(«R (ohm) = «);
lcd.print(R2);

1
2
3
4
5

lcd.setCursor(4,);

lcd.print(«ohm meter»);

lcd.setCursor(,1);

lcd.print(«R (ohm) = «);

lcd.print(R2);

Если вас заинтересовал данный проект, то вы можете следующие похожие проекты на нашем сайте:
— цифровой вольтметр на Arduino;
— цифровой амперметр на Arduino;
— частотомер на Arduino;
— измеритель емкости на Arduino.

Далее приведен полный код программы.

Arduino

#include<LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7
int Vin=5; //напряжение на контакте 5V платы arduino
float Vout=0; //напряжение на контакте A0 платы arduino
float R1=3300; //значение сопротивления известного резистора
float R2=0; // значение сопротивления неизвестного резистора
int a2d_data=0;
float buffer=0;
void setup()
{
lcd.begin(16,2);
}
void loop()
{
a2d_data=analogRead(A0);
if(a2d_data)
{
buffer=a2d_data*Vin;
Vout=(buffer)/1024.0;
buffer=Vout/(Vin-Vout);
R2=R1*buffer;
lcd.setCursor(4,0);
lcd.print(«ohm meter»);
lcd.setCursor(0,1);
lcd.print(«R (ohm) = «);
lcd.print(R2);

delay(1000);
}
}

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
28
29
30

#include<LiquidCrystal.h>

LiquidCrystallcd(2,3,4,5,6,7);//rs,e,d4,d5,d6,d7

intVin=5;//напряжение на контакте 5V платы arduino

floatVout=;//напряжение на контакте A0 платы arduino

floatR1=3300;//значение сопротивления известного резистора

floatR2=;// значение сопротивления неизвестного резистора

inta2d_data=;

floatbuffer=;

voidsetup()

{

lcd.begin(16,2);

}

voidloop()

{

a2d_data=analogRead(A0);

if(a2d_data)

{

buffer=a2d_data*Vin;

Vout=(buffer)1024.0;

buffer=Vout(Vin-Vout);

R2=R1*buffer;

lcd.setCursor(4,);

lcd.print(«ohm meter»);

lcd.setCursor(,1);

lcd.print(«R (ohm) = «);

lcd.print(R2);

delay(1000);

}

}

Поверка вольтметра

Поверка вольтметра заключается в сравнении показаний вольтметра на ардуино с рабочим вольтметром (мультиметром). Если значения отличаются, нужно проверить напряжение на пинах Ардуино 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 вольт.

Шаг 4. Наша схема

У нас был SPI OLED, который валялся без дела, поэтому мы преобразовали его в I2C и использовали. Если вы хотите узнать, как преобразовать SPI в OLED, то мы обязательно это разберем в ближайших уроках.

Схему проекта смотрите выше. И вот как работает эта схема. Сначала Arduino измеряет падение напряжения, создаваемое резистором 10 Ом, если выше 4,3 В, тогда она отключит высокое напряжение дисплея MOSFET, если оно меньше 2,9 В, оно отображает низкое напряжение и выключает MOSFET, а если находится между 4,3 В и 2,9 В, то она включит MOSFET. Батарея начнет разряжаться через резистор, начнется измерение тока, используя закон Ома. Ардуино также использует функцию Миллиса для измерения времени, а произведение тока и времени дает нам пропускную способность.

Работа схемы

Схема рассматриваемого нами цифрового вольтметра на основе платы Arduino представлена на следующем рисунке.

В схеме необходимо сделать следующие соединения:

  1. Соедините высоковольтную часть трансформатора (220V) с источником напряжения, а его низковольтную часть (12v) — с делителем напряжения в схеме.
  2. Соедините резистор 10 кОм последовательно с резистором 4,7 кОм. Убедитесь в том, что на вход схемы напряжение будет поступать с именно с резистора 4,7 кОм (не перепутайте резисторы).
  3. Соедините диод как показано на схеме.
  4. Подсоедините конденсатор и стабилитрон как показано на схеме.
  5. Соедините отрицательный вывод диода с контактом A0 платы Arduino.

Примечание: обязательно соедините землю Arduino с точкой, показанной на рисунке, иначе схема не будет работать.

Зачем нужен делитель напряжения

Поскольку мы используем трансформатор 220/12 это значит что на его низковольтной стороне будет напряжение 12 В, которое не подходит для питания платы Arduino (не подходит в качестве ее входного напряжения). Поэтому мы и используем делитель напряжения чтобы получить подходящее напряжение для платы Arduino.

Зачем нужны диод и конденсатор

Поскольку плата Arduino не может работать с отрицательными значениями напряжения мы должны удалить отрицательные циклы напряжения из поступающего напряжения переменного тока, чтобы остались только положительные циклы. Поэтому для выпрямления поступающего входного напряжения и используется диод.

Но напряжение на выходе диода не будет “гладким” (ровным) и будет содержать большие пульсации, которые нежелательно (в нашем случае) подавать на аналоговый вход платы Arduino. Поэтому в схему и включен конденсатор чтобы сглаживать пульсации напряжения на выходе диода.

Назначение стабилитрона

Можно повредить плату Arduino если на ее контакт подать напряжение более 5 В. Поэтому, чтобы напряжение на контакте Arduino не превысило 5 В, в схеме и используется стабилитрон.