Меню

Измерение тока напряжения ардуино

Arduino AREF пин: измеряем точное напряжение

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

Обзор

Вы можете вспомнить, что вы можете использовать функцию Arduino analogRead() для измерения напряжения электрического тока от датчиков и т.п., используя один из выводов аналогового входа. Значение, возвращаемое функцией analogRead(), должно быть в диапазоне от 0 до 1023, где ноль представляет собой ноль вольт, а 1023 представляет рабочее напряжение используемой платы Arduino.

И когда мы говорим, рабочее напряжение — это напряжение, доступное Arduino после схемы питания. Например, если у вас есть типичная плата Arduino Uno и вы запускаете ее через разъем USB (для платы есть доступные 5 В через разъем USB на вашем компьютере), то напряжение немного уменьшается, поскольку ток идет через всю схему к микроконтроллеру или USB-источник может не давать абсолютное значение.

Это можно легко продемонстрировать, подключив Arduino Uno к USB и установив мультиметр для измерения напряжения на контактах 5В и GND. Некоторые платы возвращают напряжение до 4,8 В, некоторые показывают значения выше 4,8 В, ниже 5 В. Поэтому, если вы стремитесь к точности, питайте вашу плату от внешнего источника питания через разъем постоянного тока или Vin-контакт, например, 9 В постоянного тока. Затем, после этого, пройдя через цепь регулятора мощности, вы получите хорошее напряжение 5 В.

Это важно, поскольку точность любых значений analogRead() будет зависеть от отсутствия истинных 5 В. Если у вас нет никакой опции, вы можете использовать некоторые математические расчеты в своем эскизе, чтобы компенсировать падение напряжения. Например, если ваше напряжение равно 4,8 В — диапазон analogRead() от 0 до 1023 будет относиться к 0

5 В. Это может звучать тривиально, однако, если вы используете датчик, который возвращает значение в виде напряжения (например, датчик температуры TMP36) — рассчитанное значение будет неверным. Поэтому в интересах точности используйте внешний источник питания.

Почему analogRead() возвращает значение от 0 до 1023?

Это связано с разрешением АЦП. Разрешение (в рамках этой статьи) — это степень, в которой что-то может быть представлено численно. Чем выше разрешение, тем выше точность, с которой что-то можно представить. Мы измеряем разрешение в терминах количества бит разрешения.

Например, 1-битное разрешение позволит использовать только два (два в степени одного) значения — ноль и единицу. 2-битное разрешение позволило бы получить четыре (два в степени двух) значения — ноль, один, два и три. Если мы попытаемся измерить диапазон в пять вольт с двухбитным разрешением, а измеренное напряжение будет равно четырем вольтам, наш АЦП вернет числовое значение 3 — при падении четырех вольт между 3,75 и 5В. Проще представить это с изображением выше.

Таким образом, в нашем примере АЦП с 2-битным разрешением может представлять напряжение только с четырьмя возможными результирующими значениями. Если входное напряжение падает между 0 и 1,25, АЦП возвращает цифру 0; если напряжение падает между 1,25 и 2,5, АЦП возвращает числовое значение 1. И так далее. С диапазоном АЦП нашего Arduino от 0 до 1023 — у нас есть 1024 возможных значения — или от 2 до 10, поэтому у наших Arduino есть АЦП с 10-битным разрешением.

Что такое AREF?

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

Для более популярных плат Arduino, таких как платы Uno, Mega, Duemilanove и Leonardo / Yún, рабочее напряжение 5В. Если у вас есть плата Arduino Due, рабочее напряжение составляет 3,3 В. Таким образом, если у Вас есть опорное напряжение 5 В, каждый блок, возвращаемого analogRead() оценивается в 0.00488 В. (Это рассчитывается путем деления 1024 на 5В). Что если мы хотим измерить напряжения между 0 и 2 или 0 и 4,6? Как АЦП узнает, что составляет 100% от нашего диапазона напряжений?

И в этом заключается причина существования вывода AREF. AREF означает Analog Reference. Это позволяет нам «скормить» Arduino опорное напряжение от внешнего источника питания. Например, если мы хотим измерить напряжения с максимальным диапазоном 3,3 В, мы бы подали хорошие плавные 3,3 В на вывод AREF, например, от ИС регулятора напряжения.

Тогда каждый шаг АЦП будет представлять около 3,22 милливольт (разделить 1024 на 3,3В). Обратите внимание, что самое низкое опорное напряжение вы можете иметь 1.1В. Существует две формы AREF — внутренняя и внешняя, поэтому давайте их проверим.

Внешний AREF

Внешний AREF тот, куда направляется внешний источник опорного напряжения на плате Arduino. Это может происходить от регулируемого источника питания, или, если вам нужно 3,3 В, вы можете получить его от 3,3 В вывода Arduino. Если вы используете внешний источник питания, обязательно подключите GND к выводу GND Arduino. Или, если вы используете источник 3,3 В Arduno — просто установите перемычку с контакта 3,3 В на контакт AREF.

Чтобы активировать внешний AREF, используйте следующее в void setup ():

Это устанавливает опорное напряжение на то, что вы подключили к пину AREF, что, конечно, будет иметь напряжение между 1,1В и напряжением работы платы.

Очень важное примечание — при использовании внешнего опорного напряжения вы должны установить analogReference() на EXTERNAL (внешнее), прежде чем использовать analogRead(). Это предотвратит вас от короткого замыкания активного внутреннего опорного напряжения и вывода AREF, которое может повредить микроконтроллер на плате. При необходимости вы можете вернуться к рабочему напряжению платы для AREF (то есть — вернуться в нормальное состояние) с помощью следующей команды:

Как нам продемонстрировать внешний AREF в работе? Используя AREF 3,3 В, следующий скетч измеряет напряжение от A0 и отображает процентная доля всего AREF и рассчитанного напряжения:

Результаты скетча показаны на видео выше.

Внутренний AREF

Микроконтроллеры на наших платах Arduino также могут генерировать внутреннее опорное напряжение 1.1В, и мы можем использовать это для работы AREF. Просто используйте строку:

Для плат Arduino Mega в void setup() используйте:

Для Arduino Mega есть также опорное напряжение 2.56В, которое активируется так:

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

Читайте также:  Схема регулятора сварочного тока из журнала радио

Источник

Измерение тока напряжения ардуино

Для измерения тока с помощью Arduino воспользуемся датчиком ACS712 от компании Allegro Microsystems. Данный датчик позволяет измерять переменный и постоянный ток в силовой, промышленной и бытовой электронике. Его можно использовать при управлении двигателями, обнаружении и управлении нагрузкой, создании защит от перегрузки по току.

Согласно документации Allegro, данные датчики не предназначены для применения их в автомобилях, для этих целей применяются ACS714.

Д атчик ACS712 поставляется в корпусе SOIC8 и предназначен для поверхностного монтажа. Выводы IP+ и IP- клеммы для измерения тока. FILTER — вывод для подключения конденсатора. VIOUT — аналоговый выход. VCC — питание датчика 5В. GND — земля.

Действие датчика основывается на эффекте Холла. Вблизи точного линейного датчика Холла расположена медная проводящая дорожка (на концах выводы IP+ и IP-) . Толщина медной дорожки обеспечивает выживание устройства при 5-кратном превышении тока. Её сопротивление 1,2 мОм. Протекающий через эт у дорожку ток , генерирует магнитное поле, которое воспринимается схемой Холла и преобразуется в пропорциональное напряжение.

Семейство датчиков ACS712 состоит из 3-х чипов на разные диапазоны измерения тока: 5 А ( ACS712ELCTR-05B-T ) , 20 А ( ACS712ELCTR-20A-T ) и 30А мпер ( ACS712ELCTR-30A-T ) .

Ниже представлены графики на которых видно, какой будет ток в зависимости от напряжения на выходе датчика:

При питании датчика от 5 вольт, если к его измеряемым клеммам не будет подключена нагрузка, выходное напряжение датчика будет равно 2,5В (рассчитывается по формуле VCC/2, где VCC — напряжение питания датчика) . 2,5В — это базовое напряжение датчика, которое нужно вычитать из измеренного напряжения.

Чувствительность датчик ов (Sens) изменяется в зависимости от диапазона измерения силы тока микросхемы и зависит от напряжения питания. С увеличением диапазона — уменьшается чувствительность. На графиках ниже представлены графики чувствительности в зависимости от диапазона измеряемого тока:

ACS712ELCTR-05B-T имеет чувствительность 185 мВ/А

ACS712ELCTR-20A-T чувствительность 100 мВ/А

ACS712ELCTR-30A-T чувствительность 66 мВ/А

Датчик облада е т низкой погрешностью ±1% , при температуре от 25 до 150°С. Это достигается благодаря его калибр овке на стадии производства . В процессе этой операции измеряется погрешность чувствительности и выходное напряжение в рабочей точке. Эти параметры измеряются при комнатной температуре и температуре в диапазоне 85…150°С. Данные заносятся в специальную память.

Среди прочих характеристик:
— Работа в диапазоне температур -40…85°C.
— Полоса пропускания 80 кГц.
— Почти нулевой магнитный гистерезис.

Подключение датчика ACS712 к Arduino.

Для подключения датчика к Arduin o удобнее использовать готовый модуль.

Внешний вид с 2-х сторон.

Принципиальная схема модуля. К разъёму Р1 подключается измеряемая цепь, к разъёму Р2 — микроконтроллер (в примере Ардуино). Измеряемая цепь изолирована от выводов микроконтроллера. Среднеквадратичное минимальное напряжение изоляции между контактами 1 — 4 и 5 — 8 — 2,1 кВ. Светодтод D1 сигнализирует о питающем напряжении на датчике. Считаю это бесполезной функцией, поскольку в готовых проектах подобные датчики спрятаны в каких то коробках и не находятся на видном месте.

Для подключения к Arduino используется 3 вывода:

Источник

Измерение уровня заряда аккумулятора на Ардуино

Измерение уровня заряда Аккумулятора на Ардуино

Отслеживание уровня заряда аккумулятора или батареи является одной из основных задач при разработке автономных устройств. Особенно она актуальна для устройств, которые работают удалённо и сообщают о своём статусе, используя, например, GSM канал*. Даже когда устройство находится рядом с вами, индикация уровня заряда аккумулятора поможет сделать его использование более удобным. В данной статье мы рассмотрим простой способ отслеживания уровня заряда аккумулятора или батареи при помощи Ардуино.

*Знакомые с GSM модулями могут возразить, что в их составе уже присутствуют средства мониторинга заряда аккумулятора, и не нужно изобретать велосипед. Справедливое замечание. Но при условии, что для GSM модуля не используется стабилизация напряжения, скажем, от 12-вольтового аккумулятора. В этом случае модуль не сможет оценить уровень заряда аккумулятора. Таким образом, не стоит преуменьшать актуальность данной темы.

Теория

Предлагаемый способ отслеживания уровня заряда основан на измерении напряжения источника питания. Возьмем, к примеру, литий-ионный аккумулятор. В процессе разрядки его напряжение изменяется от 4.2 В до 3 В. Выполняя периодические замеры напряжения и сопоставляя полученный результат с приведённым диапазоном 4.2. 3 В, мы можем оценить уровень заряда. Но не всё так однозначно. Дело в том, что напряжение аккумулятора при разряде изменяется не линейно. Это видно из графика разряда литий-ионного аккумулятора, который легко найти в google по запросу li-ion discharge graph:

График разряда аккумулятора Panasonic NCR18650B

Данный график позаимствован с сайта batteryuniversity. На нём отражён процесс разряда аккумулятора Panasonic NCR18650B 3200мАч разными токами от 0.2C до 2C. Как видите, напряжение аккумулятора изменяется более-менее линейно лишь при разряде большими токами. Здесь можно вспомнить математику и посчитать процент оставшегося заряда по линейной формуле. Но это, скорее, частный случай. Пожалуй, более актуальны случаи, когда устройство потребляет незначительные токи, поэтому ориентироваться мы будем на красную и синюю кривые.

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

Следующий момент, который я беру во внимание – это то, что высокая детализация уровня заряда (в тех же процентах, которые дают нам 100 значений) бывает нужна крайне редко. В большинстве случаев достаточно понимания: когда уровень заряда находится в «зелёной зоне», когда в «жёлтой», а когда нужно быть готовым к отключению устройства из-за разряда аккумулятора. Поэтому наиболее рациональным представляется подход, когда мы выделяем 3-4 пороговых напряжения и относительно них определяем уровень заряда. Грубо говоря, если напряжение литий-ионного аккумулятора больше 4 В, то заряд высокий; если меньше 3.2 В – аккумулятор вот-вот разрядится, а между этими двумя значениями выделяем еще несколько зон. Если необходимо выразить заряд именно в процентах – пожалуйста: выделяем 10 зон и показываем результат десятками (10%, 20% и т.д.).

Аналогичные графики разряда можно найти и для других элементов питания, смысл будет тот же.

Реализация

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

  • измерять напряжение, используя АЦП Ардуино;
  • воспользоваться датчиком напряжения, например, INA219.

Первый вариант хорош тем, что для него ничего не требуется. Разве что пара резисторов. А датчик напряжения – это уже дополнительный компонент. Зато он позволит более точно измерять напряжение. Кроме того INA219 измеряет потребляемый ток и мощность, поэтому имеет потенциал для дальнейшего развития в плане мониторинга питания (с его помощью можно построить ту же кривую разряда аккумулятора, определить его ёмкость, спрогнозировать время работы устройства), но это уже отдельная тема.

Читайте также:  Какая сила тока у usb порта компьютера

Вариант 1. Измерение напряжения при помощи Ардуино.

Все платы Ардуино имеют в своём составе АЦП. У популярных плат (UNO, NANO, MEGA2560) разрядность АЦП составляет 10 бит, у более продвинутых (Due, Zero) – 12 бит. АЦП позволяет измерять напряжение в диапазоне от 0 В до опорного напряжения Vref. Значение Vref в общем случае соответствует напряжению питания платы – 5 В или 3.3 В, но может быть привязано к внутреннему стабилизатору. Для лучшего понимания принципов использования АЦП предлагаю рассмотреть следующий скетч.

Загрузите скетч в Ардуино, соедините A0 с выводом 5V и откройте монитор порта. Вы должны увидеть следующий результат:

Arduino analogRead 1023

Этот скетч измеряет напряжение на входе A0 и выводит результат в монитор порта. Разрешение АЦП используемой мной Ардуино УНО составляет 10 бит, а значит, результатом измерений будет число от 0 до 1023 (2^10 значений). При этом значение 0 будет говорить об отсутствии напряжения, а максимальное значение – 1023 – о его равенстве (а так же превышении, что мы не будем рассматривать) опорному напряжению Vref, каким бы оно ни было. У меня в монитор порта выводится как раз число 1023. Поскольку опорным напряжением АЦП по умолчанию является напряжение питания Ардуино – 5 вольт, выдаваемые USB портом компьютера (разумеется, это не точное значение), можно утверждать, что напряжение на входе A0 тоже составляет 5 вольт.

Попробуем отсоединить A0 от вывода 5V и подсоединить к 3v3. Теперь у меня в монитор порта выводится значение 687. Зная опорное напряжение, нетрудно вычислить напряжение на A0:

(5 В / 1024) * 687 = 3.35 В

Для получения более точного результата следует измерить напряжение, выдаваемое USB портом.

Если же вывод A0 соединить с «землёй», то в монитор порта будет выводиться значение 0.

Вернёмся к нашей задаче. Питание от аккумулятора не всегда предполагает наличие стабильного напряжения, которое может использоваться как опорное для АЦП. В таких случаях в качестве Vref следует использовать напряжение от внутреннего стабилизатора Ардуино. Для большинства плат, в том числе Ардуино УНО, это напряжение составляет 1.1 В. Это означает, что измеряемое напряжение необходимо понизить при помощи делителя, чтобы оно не превышало 1.1 В. Здесь нам помогут пара резисторов номиналом в несколько десятков-сотен кОм, включенные по следующей схеме:

Делитель напряжения на резисторах

Это простейший резистивный делитель напряжения. Он характеризуется коэффициентом передачи, который показывает, во сколько раз выходное напряжение будет меньше входного, то есть:

Сам коэффициент рассчитывается по следующей формуле:

Остаётся лишь подобрать номиналы резисторов таким образом, чтобы понизить напряжение аккумулятора до нужного нам уровня. Для измерения напряжения аккумулятора 18650 я выбрал номиналы 47k и 10k. Реальное сопротивление будет отличаться, поэтому их нужно обязательно измерить мультиметром. Выбранные мной номиналы дают коэффициент

0.175, что позволяет измерять напряжение до 1.1 В / 0.175 = 6,27 В. Ниже приведены схема, пример скетча, реализующий описанный функционал, и результат его работы. Предполагается, что Ардуино питается от аккумулятора, поэтому результаты выводятся на дисплей 1602, а не в Serial.

Определение уровня заряда аккумулятора. Делитель напряжения

Результат измерения уровня заряда 18650 lcd1602

На фото видно, что результат измерения напряжения при помощи Ардуино и делителя не сильно отличается от того значения, что показывает мультиметр. Это хороший результат.

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

Опорное напряжение, выдаваемое внутренним стабилизатором, не обязательно будет 1.1 В, и может отличаться от одного микроконтроллера к другому. Даташит допускает разброс от 1.0 до 1.2 В. Поэтому для получения более точных измерений можно вычислить значение Vref и использовать его в скетче при расчетах. Его легко найти путём измерения заранее известного напряжения (обозначим его как V(A0)):

Vref = V(A0) * 1024 / analogRead(A0)

Вариант 2. Использование датчика напряжения INA219.

После шаманства со всеми этими делителями и внутренними источниками опорного напряжения преимущество датчиков напряжения на базе специализированных микросхем очевидно. Они позволяют измерять напряжение (а некоторые ещё и потребляемый устройством ток) в широком диапазоне и с высокой точностью. INA219 – хороший пример такого датчика. Он потребляет не более 1мА, а в спящем режиме менее 15мкА, что весьма ценно при создании автономных устройств, в условиях энергосбережения. Подробное описание датчика и используемой далее библиотеки для работы с ним вы найдёте здесь: https://compacttool.ru/datchik-napryazheniya-i-toka-na-chipe-ina219

Для отслеживания уровня заряда аккумулятора 18650 при помощи INA219 и вывода результата на дисплей я соединил компоненты в соответствии со схемой:

Определение уровня заряда аккумулятора. INA219

В этот раз я решил выделить 10 уровней заряда, чтобы отображать его в процентах. Скетч и результат его работы ниже:

Измерение уровня заряда 18650. LCD1602

Заключение

Конечно, предложенный способ не претендует на высокую точность. Существуют специализированные микросхемы мониторинга питания, которые определяют оставшуюся ёмкость аккумулятора с учётом нагрузки и других параметров. Они находят применение в ноутбуках, телефонах и другой портативной технике. Но вряд ли вы найдёте что-то подобное в любительских проектах – не тот уровень. Таким образом, определение уровня заряда аккумулятора по напряжению – приемлемая альтернатива, не требующая серьёзных аппаратных или программных ресурсов.

Источник



Ваттметр на Arduino – измерение напряжения, тока и мощности

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

Внешний вид самодельного ваттметра на основе Arduino

Некоторые могут сказать зачем делать такой прибор если его можно сейчас сравнительно недорого купить. Да, это так. Но ведь наверняка некоторым из вас хочется сделать более продвинутый ваттметр чем тот, который можно просто купить. Используя плату Arduino для создания ваттметра мы можем выводить измеряемые значения на экран компьютера, строить их график, сохранять их значения на SD карту когда их значения находятся в заданных интервалах и многое другое.

Читайте также:  Устройство для определения тока кз в цепях постоянного тока импульс с комплектом автоматов

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. Операционный усилитель LM358 (купить на AliExpress).
  3. Регулятор напряжения LM7805 (купить на AliExpress).
  4. ЖК дисплей 16х2 (купить на AliExpress).
  5. Шунтирующий резистор 0.22 ohm 2Watt (купить на AliExpress).
  6. Подстроечный потенциометр 10 кОм (Trimmer pot) (купить на AliExpress).
  7. Резисторы 10 кОм, 20 кОм, 2,2 кОм, 1 кОм (купить на AliExpress).
  8. Конденсаторы 0,1 мкФ (купить на AliExpress).
  9. Тестируемая нагрузка.
  10. Перфорированная или макетная плата.

Работа схемы

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

Схема ваттметра на основе платы Arduino

Для облегчения понимания схема разделена на 2 части. Верхняя часть схемы – это ее измерительная часть, а нижняя часть схемы служит для проведения вычислений и отображения их результатов. Места соединения обоих частей схемы обозначены с помощью меток.

Схема спроектирована для работы с напряжением в диапазоне 0-24V с током 0-1A – эти параметры специально подобраны для работы с Solar PV (солнечная фотоэлектрическая система). Но если вы поймете принципы работы этой схемы вы легко можете расширить диапазоны ее работы до необходимых вам. Основополагающий принцип работы этой схемы заключается в измерении напряжения и тока в нагрузке чтобы затем рассчитать потребляемую нагрузкой мощность. Значения всех измеряемых параметров будут отображаться на экране ЖК дисплея 16х2.

Далее рассмотрим работу по отдельности небольших элементов представленной схемы чтобы лучше понять ее работу.

Измерительный блок

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

Делитель напряжения, используемый в нашем проекте

Входное напряжение на этой схеме обозначено как Vcc. Как мы говорили ранее, схема спроектирована для измерения напряжений от 0V до 24V. Но плата Arduino не может измерять такие большие напряжения – она может измерять напряжения только в диапазоне 0-5V. Соответственно, мы должны преобразовать измеряемое напряжение в диапазоне 0-24V в диапазон 0-5V. Это преобразование как раз и осуществляется с помощью представленного делителя напряжения. Соответственно, и номиналы резисторов в схеме этого делителя (10 кОм и 2,2 кОм) как раз подобраны таким образом, чтобы преобразовывать диапазон 0-24V в диапазон 0-5V. Если вам нужно изменить диапазон измеряемых схемой напряжений вам всего лишь нужно изменить значения номиналов резисторов в представленной схеме делителя напряжения. Значение напряжение на выходе делителя напряжения можно рассчитать по хорошо известной формуле:

Vout = (Vin × R2) / (R1 + R2)

Преобразованное к диапазону 0-5V напряжение со средней точки делителя напряжения у нас на схеме обозначено меткой Voltage. В дальнейшем это преобразованное значение напряжения подается на аналоговый вход платы Arduino.

Далее мы должны измерять ток через нагрузку (LOAD). Поскольку микроконтроллеры могут считывать только аналоговые значения напряжения нам необходимо преобразовать значение тока в значение напряжения. Это можно сделать при помощи добавления шунтирующего резистора – в соответствии с законом Ома падение напряжения на нем будет пропорционально протекающему по нему току. Поскольку на шунтирующем резисторе падение напряжения будет очень маленькое мы будем использовать операционный усилитель чтобы усилить его. Схема для осуществления этого процесса показана на следующем рисунке:

Схема для измерения тока через нагрузку

Значение сопротивления шунтирующего резистора (SR1) в нашем случае равно 0.22 Ом. Как было указано ранее, наша схема спроектирована для измерения силы тока в диапазоне 0-1A, поэтому в соответствии с законом Ома при максимальном токе через нагрузку 1 А падение напряжения на нашем шунтирующем резисторе будет примерно 0.2V. Это напряжение мало для считывания микроконтроллером, поэтому мы используем операционный усилитель в неинвертированном усилительном режиме чтобы усилить это напряжение до значения, которое можно комфортно считать с помощью платы Arduino.

Операционный усилитель в неинвертированном режиме показан на вышеприведенной схеме. Усилитель спроектирован таким образом чтобы его коэффициент усиления составлял значение 21, итого получаем 0.2*21 = 4.2V. Формула для расчета коэффициента усиления представленного операционного усилителя выглядит следующим образом:

Gain = Vout / Vin = 1 + (Rf / Rin)

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

В нашем случае значение сопротивления резистора Rf равно 20 кОм, а значение сопротивления резистора Rin равно 1 кОм, что обеспечивает коэффициент усиления 21 для операционного усилителя. Далее напряжение с выхода операционного усилителя подается на RC фильтр, состоящий из резистора 1 кОм и конденсатора 0,1 мкФ. Данный фильтр предназначен для фильтрации нежелательных шумов. Далее отфильтрованное напряжение подается на аналоговый вход платы Arduino.

И, наконец, последний компонент который нам необходимо рассмотреть в блоке измерений нашей схемы – это регулятор напряжения. Поскольку мы подаем на вход схемы изменяемое напряжение нам необходимо стабилизированное напряжение +5V для питания платы Arduino и операционного усилителя. Это регулированное (стабилизированное) напряжение в нашей схеме обеспечивается с помощью регулятора напряжения 7805. Конденсатор добавлен на выход схемы регулятора для фильтрации шума.

Регулятор напряжения на основе микросхемы 7805

Блок вычислений и отображения информации

В блоке измерений мы спроектировали схему чтобы конвертировать измеряемые значения и тока в диапазон напряжений 0-5V, которые непосредственно подаются на аналоговые входы Arduino. В этой же части схемы мы подсоединяем эти провода с напряжениями к плате Arduino, а также подключаем к плате Arduino алфавитно-цифровой ЖК дисплей для отображения результатов измерений. Схема этого блока представлена на следующем рисунке.

Блок вычислений и отображения информации в проекте ваттметра на Arduino

Как вы можете видеть из схемы, контакт с значением напряжения подключается к аналоговому контакту A3, а контакт со значением тока – к аналоговому контакту A4 платы Arduino. ЖК дисплей запитывается от напряжения +5V с регулятора 7805 и подключен к цифровым контактам платы Arduino в 4-битном режиме. Мы также используем потенциометр 10 кОм, подключенный к контакту Con ЖК дисплея чтобы регулировать его контрастность.

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

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

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

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

Источник