Меню

Arduino измерить силу тока



Делаем амперметр с использованием Ардуино

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

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

Введение

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

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

V = IR

V = напряжение на проводнике в вольтах (v),
I = ток проходит через проводник в амперах (А),
R = постоянная сопротивления в Ом (Ω).

Чтобы найти текущий ток через устройство, мы просто переставляем уравнение, как показано ниже, или мы можем вычислить с помощью калькулятора закона Ома.

I = V / R

Поэтому, чтобы узнать ток, нам нужны некоторые данные:

  • напряжение,
  • сопротивление.

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

Как и на приведенном выше рисунке, мы должны найти два напряжения, протекающие через резистор. Разница между напряжениями (V1-V2) на двух концах резисторов дает нам падение напряжения на резисторе (R), и мы делим падение напряжения на величину резистора, мы получаем ток (I) через устройство. Вот как мы можем вычислить текущее значение, проходящее через него.

Необходимые инструменты и периферия для реализации проекта «Амперметр» на базе микроконтроллера Arduino

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

  1. База, в которой будет находиться весь программный код. Ею выступит стандартная Arduino nano (можно и Uno), выбранная, не в последнюю очередь, благодаря своему размеру. Раз уж мы создаём что-то своё, почему не собрать измеритель силы тока, который вы не найдёте в магазине. Останется лишь подобрать соответствующий корпус.
  2. Оболочка, в которую конечный результат будет всунут. Здесь всё зависит исключительно от вас. Кому-то привычнее видеть голые провода и платы, а кто-то хочет эстетики. Использовать можно как уже готовые квадратные боксы, в которых останется пропаять пару дырочек, так и специальные, вырезанные на 3-д принтере корпуса, если он у вас есть. Всё зависит исключительно от вашей фантазии.
  3. Чтобы амперметр на Аrduino не был бесполезным набором проводов и выводил какую-то информацию, нам потребуется экран. Можете взять любой простой LCD экранный шилд, который найдёте у себя на балконе. А для особо заинтересованных в программной части подойдёт набор диодов, которые необходимо будет подключить комбинированным способом. Мы рассмотрим вариант с шилдом, так как он проще в реализации.
  4. Несколько резисторов, один на 56 Ом, второй на 100 кОм, ведь нам нужно быть готовым к любому току, который подадут на наше устройство. Вместе с ними стоит прикупить и конденсатор на 10 мКф.
  5. В зависимости от ваших потребностей, подберите датчик тока. Они бывают под различные номинальные и максимальные измерения, мы же возьмём простейший CT – Talema AC103, на 30 и 75 А соответственно. Его достоинством является небольшая стоимость и испытанное не одним проектом качество.

Здесь у любого инженера закрадётся вопрос, а что же собой представляет этот датчик тока? На деле, такой модуль – это просто магнитопровод с небольшим зазором и обмоткой для компенсации. Всё это можно было бы собрать самостоятельно, если бы не встроенные датчики Холла и плата для управления.

Выше обозначенный датчик размещают в зазорах магнитопровода. Он реагирует на создаваемое электромагнитное поле, которое образуется вследствие протекания тока по катушке. В зависимости от напряжения и напряжённости поля, датчик подаёт различные сигналы, усиливаемые микроконтроллером внутри него. Датчик стоит подбирать отдельно под переменный или постоянный ток. Бывают также и комбинированные, но в нашем случае мы выбрали универсальный вариант – модуль для измерения переменного тока.
Помимо периферии, вам также потребуется иметь при себе:

  1. Место или специальный стол для пайки.
  2. Припой и олово.
  3. Паяльник.
  4. Плоскогубцы.

Всё это – стандартный набор инструментов для соединения Ардуино со вспомогательными модулями и датчиками.

Схема подключения и алгоритм работы в проекте «Амперметр» на базе МК Arduino

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

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

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

R=N/I ,

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

Ближе всего при подстановке чисел, в нашем случае, окажется резистор на 56 Ом, его мы и возьмём. А вот, чтобы делить основное напряжение, подаваемое на питание платы, необходимо будет поставить пару одинаковых резисторов.

Кодирование МК Arduino для работы амперметра

Это самый важный момент, ведь без программного кода собранная конструкция останется просто грудой металлолома. Вы можете воспользоваться уже готовыми библиотеками, но в них есть весомый недостаток – придётся долго искать ПО, подходящее под ваши модули и резисторы. С другой стороны, для тех, кто никогда не занимался программированием и не знает даже основ алгоритмизации – это оптимальное решение.

Читайте также:  Трансформатор тока тти а 125 5а

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

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

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

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

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

Источник

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

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

Счетчик электроэнергии на Arduino

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

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

Датчик тока CT-Talema AC103

Датчик тока — это магнитопровод с зазором и обмоткой компенсации, а так же встроенный датчик Холла и плата управления. Датчик Холла размещается в зазоре магнитопровода и реагирует на создаваемое катушкой магнитное поле. Чем сильнее напряженность магнитного поля, тем сильнее датчик Холла подает сигнал, который усиливается платой управления.
Датчики тока бывают для измерения переменного тока и постоянного тока. Наш — 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 — подобранный коэффициент для компенсации расхождений в измерениях.

Источник

Амперка / Блог

koder-4.900.600.s

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

В рамках одного проекта (будет отдельная публикация) с использованием Arduino Uno потребовалось измерять силу тока в цепи в пределах нескольких ампер с большими допустимыми погрешностями. Проект был временный: собирается модель, проводятся испытания, делаются выводы, модель разбирается. Поэтому части модели подбирались по принципу «что ближе лежит на полке».

Ближе всех лежал сенсор тока ACS758 производства DFROBOT. Амперка называет это изделие «Сенсором», а сам чувствительный элемент «Датчиком», но я бы называл их наоборот. Сам автор в тексте вышеуказанной страницы на сайте Амперки в паре мест путается и меняет систему названий. Я и сам датчик ACS758, и его же с обвязкой, далее буду называть просто датчиком. Датчик для измерения использует эффект Холла.

Для подключения питания и провода данных предусмотрен как стандартный разъём, так и отверстия на плате под пайку, обозначенные как VCC, GND и два VOUT. Я решил подключить датчик именно через них. Один из двух VOUTов я выбрал случайным образом.

Всё спаял, собрал, как рекомендует DFROBOT на примере. Не работает. Судя по тому, что считывает Arduino с VOUT, последний просто висит в воздухе. Странно…

Взял мультиметр и стал «звонить» все ножки и контакты. И действительно «в воздухе»: один из двух VOUT не был ни к чему припаян. Сигнал надо было снимать с другого VOUT. Большое «фи» DF-роботу за «точную» маркировку контактной площадки.

Убедившись, что соответствующий аналоговый порт Adrduino реагирует на изменения протекающего тока через одноимённый датчик, я стал искать на сайте производителя инструкции по преобразованию цифровых значений в реальные аналоговые. Они там быстро нашлись в виде скетча для Arduino.

В прошлой своей публикации я писал про корявый китайский код. DFROBOT тоже является китайской компанией. И её код оказался не менее корявым. Но оба вышеупомянутых кода являются рабочими. Что неудивительно, т.к. это напрямую влияет на объёмы продаж. А вот корявость вряд ли влияет. В общем, кнута и Кнута на них не хватает. Но желания коммерческих компаний сэкономить на программистах вполне понятны.

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

А что же он сеет?

Итак, скетч со страницы «Сглаживание» сайта arduino.cc, которую следовало озаглавить «Как не надо программировать».

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

Автор в начале страницы прямо декларирует обучающие цели приводимого кода. Он пишет: «Этот пример … также демонстрирует использование массивов для хранения данных».

Читайте также:  Силовые линии магнитного поля прямого проводника с током представляют собой прямые линии

Итак, чему же он учит.

Это очень плохой стиль. Да, этот пример приводится практически во всех статьях интернет-журналистов, рассказывающих про использовании const в программах на C++. О том, что он чисто иллюстративный, авторы не говорят или потому, что сами этого не понимают, или просто допускают методологическую ошибку в процессе обучения своей потенциальной аудитории.

Это и читабельнее, и код получается после компиляции меньше и быстрее. Для Ардуино, кстати, это вполне актуально. А подчёркивание (или какая-то иная система обозначений) требуется для того, чтобы в тексте визуально было просто отличить константы от переменных.

Это в разы читабельнее.

Сама идея вынести этот кусок в настроечную область скетча — правильная. Только надо было ещё выше вынести, до объявления рабочих переменных. А реализация — плохая.

Числа в коде — это неправильно. Надо объявлять в заголовке в помощью #define мнемонические идентификаторы и потом использовать их в тексте программы.

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

А это уже грубая ошибка. Предположим, что датчик выдал одно значение, равное 0, и девять значений, равных 1. Нет сомнений, что итоговое, «сглаженное» значение, должно быть равно 1. Однако по алгоритму автора мы получим 0 как результат целочисленного деления 9 на 10 с отбрасыванием дробной части.

И ещё ошибка: пока не будет считано 10 значений, все результаты фактически являются неправильными, т.к. усредняются с инициализирующими буфер нулями. В большинстве практических применений это, наверное, не имеет большого значения. А где имеет — легко поправить код. На раз публикация носит академический характер, то я считаю это недопустимой ошибкой.

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

В целом, у них такой же стиль, как и у скетча-донора. Поэтому остановимся только на различиях.

Буфер увеличен до 30. Почему именно до этой величины — непонятно.

Все величины они сделали float. Это устраняет вышеупомянутую ошибку с неправильным округлением. Но это в корне неверный подход. analogRead() даёт целую величину, в буфере хранятся эти же самые целые величины, операции по корректировке суммы всех величин в буфере тоже являются целочисленными. Следовательно, все переменные для хранения этих величин должны иметь тип int. Целому — целое! А вот когда при делении появляется float, то именно в тот момент и надо сделать коррекцию как я написал выше. Т.е. непосредственно перед делением использовать явное приведение типа int к float.

Очень сомнительная идея, захламляющая код: ввести в программу мнемоническую переменную (currentValue) только для того, чтобы показать, что вычисленное среднее значение один к одному становится текущим значением целевого параметра (тока, в данном случае).

По умолчанию, Serial.println выведет 2 знака после запятой. Что, учитывая контекст, эквивалентно утверждению производителя «Датчик + Arduino c 10-битным аналоговым портом меряют ток с точностью 0.01″ (10 бит потому, что в коде скетча считанное значение после знакового сдвига делится на 1024). А так ли это?

DFROBOT пишет про свой датчик: «Sensitivity: 40 mV/A».

10-битный аналоговый порт с опорным напряжением в 5 вольт (это тоже следует из кода скетча) измеряет напряжение с точностью 5/1024 =

Таким образом, максимальная теоретическая точность измерений: (5/1024) / 0.04 =

Т.е. ни о каких сотых долях ампера речи и быть не может.

Тут 2 ошибки стиля. Во-первых, лучше использовать мнемоническую константу А0. Во-вторых, лучше сделать как в оригинале: завести константный идентификатор, инициализацию которого вынести в верхнюю часть кода, и использовать потом его.

Это вообще что-то очень странное. Почему именно такая скорость? Скорее всего, у большинства в Arduino IDE в настройках стоит 9600 по умолчанию, чего хватает для отладочных нужд. Чтобы заработал этот скетч, надо лезть в меню и менять скорость. А при отладке другого скетча, наверняка, возвращать в умалчиваемое значение. Или исправлять скорость на 9600 в этом скетче. В любом случае, какие-то совсем ненужные хлопоты. А у неопытного пользователя может возникнуть впечатление, что указанная скорость является рекомендуемой производителем и как-то связана с аппаратными особенностями датчика.

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

Каждые 30 мс скетч будет отправлять максимум 6 байт (например, 17.67 + ‘\n’). Для этого потребуется канал: 6 байт * 8 бит/байт / 0.03 с = 1600 бод. Т.е. 9600 хватает с большим запасом.

Ну и с точки зрения визуального контроля отладочной информации, delay(30) — это запредельно быстро и не имеет никакого практического смысла. Не думаю, что даже китайцы в состоянии контролировать показатели со скоростью 30 измерений в секунду.

К скорости работы датчика и порта «delay(30)» тоже не имеет никакого отношения.

Наверняка, DFROBOT и Массимо Банци читают блоги Амперки и поправят свои программные косяки.

total= total — readings[index];

total= total + readings[index];
index = index + 1;
——————————-

total -= readings[index];

total += readings[index];
index++;
———————————

«В т.ч. помогает компилятору сделать более оптимальный код, т.к. отражает суть процессорной системы команд.»

А что, еще есть компиляторы, которые для данных вариантов породят разный исполняемый код даже при отключенной оптимизации?

Наверное, уже нет. Но помогает же

int readings[numReadings];
int index = 0;
int total = 0;
int average = 0;
———————————

int readings[_numReadings],
index = 0,
total = 0,
average = 0;
———————————
«Это в разы читабельнее.»

Это уже религиозное. Для меня все-таки читабельнее первый вариант.

#define _numReadings 10

Тоже религиозное: макроопределениям в С и С++ принято давать идентификаторы из прописных букв. Подчеркивание в начале совсем необязательно.

Я всего лишь хотел сказать, что идентификатор в макроопределении должен визуально отличаться от идентификаторов других типов. И привёл пример. Лично мне подчёркивание очень нравится для визуальных разделений: слова не теряют читабельность, поддаются поиску по началу и т.п. У других известных систем свой набор преимуществ и недостатков. Полный обзор выходит за рамки этой заметки. Моя задача была — дать пищу для размышлений тем, кто ещё сам для себя не выбрал систему и даже не знал, что её нужно выбирать.

Валерий, Вы действительно верите, что
#define _x 10
будет генерировать более короткий и быстрый код, чем
const int x = 10;
На чем основана ваша вера, позвольте узнать?

Намёк ваш понял и посмотрел ассемблерный листинг avr-gcc.
И действительно: операции с переменными, объявленными const, скомпилированы как будто это было объявлено с помощью #define. Т.е. компилятор вместо переменной просто оперирует тем, чем она была инициализирована. Раньше такого безобразия не было

Читайте также:  Ограничение тока конденсатором расчет

Вы уверены, что когда-то было по-другому? Или просто сглаживаете ситуацию?
С++ компилятор считает все константные выражения до генерации кода.

Я имею ввиду идеологию языка С.
Тот же самый компилятор avr-gcc в отношении файла *.c, если он запущен с ключом -O0, прекрасно понимает, что от него хотят: он создаёт полноценную переменную, потом её же и использует, а объявление const использует только на этапе компиляции для проверки.
В идеологии C++ так управлять компиляцией не удаётся (я этого не знал до публикации).
В этом смысле «раньше» действительно было по-другому.

Объяснения про то, что совсем раньше (в прошлом тысячелетии) был C, в котором изначально не было const, принимаются.
Но, справедливости ради, надо отметить, что в Arduino-среде с самого начала был уже C++. Так что const int x = NNN; можно использовать везде, где должны быть константные выражения. По мне так это лучше, чем #define, поскольку типизировано. Но не буду навязывать свою точку зрения.

И поправьте, если не трудно, текст. А то новички будут думать, что const int x = y; менее эффективно, чем #define

Боюсь, что тут такой фичи нет. Будем считать обсуждение публикации неотъемлемой частью самой публикации

>> был C, в котором изначально не было const
Не в const дело. Я удивился тому, что оказывается в С++ программист уже не имеет полной власти над компилятором. Это для меня и есть «безобразие».

Насчёт «поскольку типизировано» — это весомый аргумент.

Валерий, что Вы подразумеваете под «не имеет власти над компилятором»? Может, просто программисту надо хотя бы прочитать langauge reference, чтобы получить эту власть?

Может быть. Но я, пожалуй, воздержусь от продолжения нашего диалога, т.к. он не эффективен с точки зрения целей этого блога: маркетинг через обучение, обмен информацией, мнениями и т.п. С точки зрения этих целей, от участников ожидается прямое изложение информации. В случае с const и #define, например, вам просто достаточно было написать, что компилятор сгенерирует одинаковый код. Но вы действуете иначе, ставя какие-то цели, больше относящиеся к области психологии.

По-моему как раз это вам надо было написать, что будет одинаковый код!

Вы, ребята, зануды 80-го уровня Сначала всерьёз читал, потом улыбался
Я — новичок. На меня больше подействовало бы такое:
«вот, решил испытать два одинаковых кода по скомпилированному размеру и по времени выполнения моего самописного бенчмарка на тему констант vs определений»

Думаю, в данном случае удобнее использовать экспоненциальное скользящее среднее:

average = (alpha * analogRead(inputPin) ) + (1.0 — alpha) * average;

где alpha подбирается от 0 до 1, в зависимости от numReading.

Может быть 57600 взято потому, что при задержке в 30 мс между
измерениями скорости 9600 не хватит для передачи данных?
—————
сейчас там у dfrobot скорость 115200 и пауза в loop 10ms.
может для калибровки нуля это все так быстро ?

еще они там в конце статьи померили синусоиду тока в сети 220в 50гц(20мс период), снизив паузу в loop до 2мс.

Каждые 30 мс скетч будет отправлять максимум 6 байт (например, 17.67 + ‘n’). Для этого потребуется канал: 6 байт * 8 бит/байт / 0.03 с = 1600 бод. Т.е. 9600 хватает с большим запасом.

Это не совсем правильный расчёт, ибо там же 9 бит передаётся: 8 данных и один стоповый

Источник

Arduino.ru

Измерение силы тока.

Для одного супер мудрёного и дебильного проекта понадобилось измерять силу тока при помощи ардуино с погрешностью в 1(!) mA. Сёрфинг в интернете не выдал результатов: настолько точных датчиков не предлагается. Именно по этому решил обратится сюда, на форум. Может кто знает, как это можно осуществить? Или, быть может, вправит мне мозги и покажет более простой путь, ведь мне для проект не обязательно именно Ардуино.

ЕвгенийП аватар

А какие токи? Диапазон?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

trembo аватар

Погрешность бывает абсолютная и относительная.
Или вы собрались измерить 100500 Ампер с погрешностью 1 мА?
Тогда не получится.
А если вы собрались измерить ток 2 мА
с погрешностью 1 мА?
50 % вас устраивает?
Теперь вы поняли смысл своего вопроса?
А не понял.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Теперь всё сложнее, по вдруг открывшемся данным, точность нужна в 1 микроАмпер (!). А диапазон: от 1 до 150 микроАмпер.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

dimax аватар

Mrak, Думаю вам лучше купить готовый. тут в ассортименте, вам с шкалой до 200µA

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

dimax, если бы всё было так просто, то я бы не обращался на форум по микроконтроллеру. Мне не просто нужно измерить силу тока, а использовать это значение в вычислениях, но если вдруг вы знаете, как можно совместить этот амперметр с ардуино или ещё чем-нибудь, то буду безмерно благодарен за пояснения.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

dimax аватар

Mrak, неизвестно каков ваш уровень. Что-бы сделать аналогичный прибор самому нужно одновременно быть уверенным ардуино-программистом, и знать «на пятёрку» закон Ома. Можно сделать на популярных модулях INA219/INA226. Примеров на форуме и в сети множество, но там нужно менять шунт и пересчитывать всё под другой. Т.к. исходный модуль рассчитан на бОльшие токи.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

На такой диапазон надо самому делать преобразователь 150 мкА -> 5 Вольт . Иначе ни как. Нет шилдов на такой ток.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

nik182, преобразователь? А если по подробнее?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

trembo аватар

Какое у вас допустимое падение напряжения на шунте?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

trembo, в каком смысле? На данный момент какой либо датчик, в котором должен присутствовать шунт, отсутствует.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Как измеряется сила тока? Токовыми клещами ( не в вашем случае), либо измерением падения напряжения на шунте, которое нужно потом усилить до нужных вам значений с помощью достаточно точного малошумящего усилителя с весьма чистым и стабильным питанием. А полученое значение уже подаём на ардуину или куда вам надо. Так вот. На шунте полюбому потеряется часть напряжения. В вашем случае очень маленькая. Сколько миливольт ва готовы пожертвовать для измерения тока?

Подсказка: больше падение- точнее измерение.

Источник