Амперметр arduino: пример реализации устройства

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Амперметр на Arduino своими руками

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

В данном материале показан проект, который может измерять неизвестное текущее значение постоянного тока. При этом величина зарегистрированного тока отображается на LCD-дисплее 16*2.

Здесь используется плата Arduino pro mini. Концепция проекта заключается в применении АЦП для считывания напряжение, которое в последствии делится на значение сопротивления резистора, через который проходит ток, чтобы получить искомую величину тока. Резистор в данном случае представляет собой шунт, поскольку включен в схему таким образом, чтобы через его основные терминалы протекал ток цепи, а измерительными терминалами он подключается параллельно плате Arduino для считывания напряжения. На каждом терминале, подключенном к определенной линии АЦП, присутствует напряжение в диапазоне от 0 до 5 В, и разность напряжений этих двух терминалов пропорциональна току, текущему через шунт. Схематично подключение шунта можно представить на изображении ниже.

Здесь I представляет собой ток, текущий через резистор-шунт, R является сопротивлением этого шунта, а V представляет собой разность потенциалов между двумя измерительными терминалами, то есть V = V2 – V1. Тогда по закону Ома ток находится очень легко: I = (V2 – V1) / R.

В данном проекте также нужно грамотно подойти к вопросу выбора сопротивления для резистора-шунта. Оно должно быть таким, чтобы не оказывать влияния на работу нагрузки, которая потребляет ток. Использование высокого значения сопротивления приведет к тому, что падение напряжения на резистивном пути будет слишком большим, что не обеспечит нагрузку достаточным током. Использование же слишком малого значения сопротивления не позволит АЦП правильно считать значение. Для выбора сопротивления можно применить следующее правило: R >Vр / I. Здесь Vр представляет собой напряжение разрешения АЦП, то есть минимальное напряжение, которое может зарегистрировать аналогово-цифровой преобразователь. В нашем случае оно составляет 4.88 мВ. Тогда, например, если минимальное требуемое значение тока для измерения составляет 0.5 мА, то получим: R > 4.88 мВ / 0.5 мА > 9.76. То есть можно взять сопротивление 10 Ом.

Ниже представлена схема амперметра на Arduino, и приведен код программы.

Амперметр на ардуино для умного дома

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

Для сборки я использовал плату Arduino nano (никто не мешаем вам использовать тот же код для ESP или STM плат), LCD экранный шилд, резистор на 56 Ом, резисторы 100 кОм, конденсатор 10 мКф, датчик тока CT – Talema AC103 (с номинальным измерением 30A и максимальным 75A).

Что такое датчик тока?

Датчик тока – это магнитопровод с зазором и обмоткой компенсации, а так же встроенный датчик Холла и плата управления. Датчик Холла размещается в зазоре магнитопровода и реагирует на создаваемое катушкой магнитное поле. Чем сильнее напряженность магнитного поля, тем сильнее датчик Холла подает сигнал, который усиливается платой управления.
Датчики тока бывают для измерения переменного тока и постоянного тока. Наш – CT-Talema AC103 – для переменного.

Соберем наше устройство согласно схеме:

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

Не забываем, что нам нужно выполнить калибровку нагрузочного резистора R3. Формула расчета R = V / I – R = 2,5 / 0,042 = 59,5 Ом где 2,5 – опорное напряжение на плате, а 42mA – потребление платы. По тому принимаем самый близкий резистор по номиналу – 56 Ом.
Для деление основного напряжения питания до опорного 5/2 вам потребуется поставить два одинаковых резистора R1 и R2.

Остается только загрузить пример кода в Arduino:

Завершающим шрихом нашей установки станет калибровка. Ее лучше выполнять при включенной эталонной нагрузке известной мощности. Для этого хорошо подходят мощные лампы накаливания. Возьмем лампу на 100 Ват. Включаем плату и высчитываем поправочный коэффициент:
Двойной RMSCurrent = ((maxCurrent – 516) * 0,707) /11,8337 где 11.8337 – подобранный коэффициент для компенсации расхождений в измерениях.

Амперметр arduino: пример реализации устройства

Итак к этому момент у нас есть вольтметр постоянного напряжения с пределом 0..20в (смотрите предыдущую часть). Теперь мы добавляем к нему амперметр 0..5а. Для этого немного модифицируем схему – она станет проходной, то есть имеет как вход так и выход.

Часть касающуюся отображения на LCD я убрал – она не будет меняться. Впринципе основной новый элемент – шунт Rx на 0.1 Ом. Цепочка R1-C1-VD1 служит для защиты аналогового входа. Такую же имеет смысл поставить и по входу A0. Поскольку мы предполагаем достаточно большие токи, есть требования к монтажу – силовые линии должны быть выполнены достаточно толстым проводом и соединяться с выводами шунта непосредственно (проще говоря, припаяны), иначе показания будут далеки от реальности. Есть так же замечание по току – впринципе опорное напряжение 1.1в позволяет регистрировать на шунте 0.1 Ом ток до 11 ампер с точностью немного хуже 0.01а, но при падении на Rх такого напряжения выделяемая мощность превысит 10 Вт, что совсем не весело. Для решения проблемы можно было бы использовать усилитель с коэффициентом усиления 11 на качественном ОУ и шунт на 10 мОм (0.01Ом). Но пока мы не будем усложнять себе жизнь и просто ограничимся в токе до 5а (при этом мощность Rx можно выбрать порядка 3-5 Вт).

На этом этапе меня ждал сюрприз – оказалось что АЦП контроллера имеет достаточно большое смешение нуля – около -3мВ. То есть АЦП просто не видит сигналы менее 3мВ, а сигналы чуть большего уровня видны с характерной неточностью -3мВ, что портит линейность в начале диапазона. Беглый поиск не дал явных ссылок на такую проблему (смещение нуля это нормально, но оно должно быть существенно меньше), поэтому вполне возможно это проблема конкретного экземпляра Atmega 328. Решение я выбрал двоякое – по напряжению – программную ступеньку в начале диапазона (отображение начинается с 0.06 вольт), по току – подтягивающий резистор на шину 5в. Резистор обозначен пунктиром.

Исходный код

Полную версию этого вольт-ампер-метра (в варианте с I2C) можно скачать по ссылке в конце статье. Далее я покажу изменения в исходном коде. Добавилось чтение аналогового входа A1 с таким же усреднением как и для вольтметра. По сути это тот же вольтметр, только без делителя, а амперы мы получаем по формуле Ома: I = U/Rx (например, если падение напряжения на Rx = 0.01 В, то ток равен 0.1А). Также я ввел константу усиления по току AmpMult – на будущее. Константу AmpRx с сопротивлением шунта вероятно придется подобрать – учесть неточность резистора шунта. Ну и раз уже это это вольт-ампер-метр и на дисплее 1602 еще осталось место, то осталось вывести текущую потребляемую мощность в ваттах, получив не сложный дополнительный функционал.

Arduino в роли вольтметра. Вывод напряжения на LCD дисплей

Всем привет сегодня я хотел бы показать, как превратить Arduino Uno в вольтметр.

Смотрите видео: Arduino в роли вольтметра. Вывод напряжения на LCD дисплей

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

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

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

Обратите внимание, мы выводили текст на LCD экран, в принципе здесь отличие единственное это второе сопротивление. Здесь по подключению, я думаю вопросов не возникнет, мы используем 4, 6, 10, 11, 12, 13 разъемы, минус берём общий, он расходится по плате, минус на первый контакт, и на последний(16).

Он здесь обозначен на моей плате буквой К, на сколько я помню на разных схемах по-разному. На одних схемах A и K на других LED+ LED- . Давайте напишем скетч, поскольку мы использовали в ней контакты 4, 6, 10, 11, 12, 13 нам нужно будет их обозначить.

И поскольку мы опять работаем с LCD дисплеем, мы должны будем подключить библиотеку liquidcrystal , константу для нашего аналогового разъёма, объявим массив контактов, которые мы использовали.

Объявим переменную val, в которую мы будем считывать, преобразовывать, так сказать получать, исходя из значение A0.

В setup мы включим, в принципе это дело по пожеланию, для мониторинга последовательный порт, объявим LCD 16 символов по 2 строки и выведем текст не указывая конкретно на какой строке значение напряжения. Это будет первая строка. В цикле loop мы получим в переменную val значение с нашего разъема, которое у нас определяется как значение между плюс-минус и вот это выводится из A0 .

Далее мы его преобразовываем, поскольку мы знаем, что там 5 Вольт, у нас было как максимальное значение, предполагаемое максимальное значение, изменяется значение от 0 до 1024, мы выводим его методом пропорции, поэтому для замера напряжения пальчиковой батарейки в формуле будем умножать не на 5, а на 1,5. Далее выводим значение в последовательный порт и печатаем после него символ вольтажа, английскую букву V.

Теперь на первой строке, она по сути вторая строка, с 6 символа выводим значение нашей переменной val , символ вольтажа, английскую букву V и сделаем небольшую задержку в одну пятую секунды, или 200 миллисекунд. Сохраним наш скетч, в принципе, после этого плата Arduino может стать небольшим вольтметром, который можно проверить напряжение небольшой батарейки.

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

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

Полный текст скетча вольтметр на ардуино

Смотрите видео: Arduino в роли вольтметра. Вывод напряжения на LCD дисплей

Источники:

http://digitrode.ru/computing-devices/mcu_cpu/522-ampermetr-na-arduino-svoimi-rukami.html

http://diytimes.ru/post/85

http://alexeevd.narod.ru/publ/arduino_vametr/1-1-0-9

http://maxfad.ru/programmer/osnovy-arduino/632-arduino-v-roli-voltmetra-vyvod-napryazheniya-na-lcd-displej.html

http://arduino-diy.com/arduino-rezistivnyy-datchik-davleniya

Ссылка на основную публикацию