Как подключить датчик тока к arduino

Помехи и защита от них

Если в одной цепи питания с Ардуино стоят мощные потребители, такие как сервоприводы, адресные светодиодные ленты, модули реле и прочее, на линии питания могут возникать помехи, приводящие к сильным шумам измерений с АЦП, а более мощные помехи могут дергать прерывания и даже менять состояния пинов, нарушая связь по различным интерфейсам связи и внося ошибки в показания датчиков, выводя чушь на дисплеи, а иногда дело может доходить до перезагрузки контроллера или его зависания. Некоторые модули также могут зависать, перезагружаться и сбоить при плохом питании, например bluetooth модуль спокойно может зависнуть и висеть до полной перезагрузки системы, а радиомодули rf24 вообще не будут работать при “шумном” питании.

Более того, помеха может прийти откуда не ждали – по воздуху, например от электродвигателя, индуктивный выброс ловится проводами и делает с системой всякое. Что же делать? “Большие дяди” в реальных промышленных устройствах делают очень много для защиты от помех, этому посвящены целые книги и диссертации. Мы с вами рассмотрим самое простое, что можно сделать дома на коленке.

  • Питать логическую часть (Ардуино, слаботочные датчики и модули) от отдельного малошумящего блока питания 5V, то есть разделить питание логической и силовой частей, а ещё лучше питаться в пин Vin от блока питания на 7-12V, так как линейный стабилизатор даёт очень хорошее ровное напряжение. Для корректной работы устройств, питающихся отдельно (драйверы моторов, приводы) нужно соединить земли Ардуино и всех внешних устройств;
  • Поставить конденсаторы по питанию платы, максимально близко к пинам 5V и GND: электролит 6.3V 100-470 uF (мкФ, ёмкость зависит от качества питания: при сильных просадках напряжения ставить ёмкость больше, при небольших помехах хватит и 10-47 мкФ) и керамический на 0.1-1 uF. Это сгладит помехи даже от сервоприводов;
  • У “выносных” на проводах элементах системы (кнопки, крутилки, датчики) скручивать провода в косичку, преимущественно с землёй. А ещё лучше использовать экранированные провода, экран естественно будет GND. Таким образом защищаемся от электромагнитных наводок;
  • Соединять все земли одним толстым проводом и по возможности заземлять на центральное заземление;
  • Металлический и заземленный корпус устройства (или просто обернутый фольгой ), на который заземлены все компоненты схемы – залог полного отсутствия помех и наводок по воздуху.

Ещё лучше с фильтрацией помех справится LC фильтр, состоящий из индуктивности и конденсатора. Индуктивность нужно брать с номиналом в районе 100-300 мкГн и с током насыщения больше, чем ток нагрузки после фильтра. Конденсатор – электролит с ёмкостью 100-1000 uF в зависимости опять же от тока потребления нагрузки после фильтра. Подключается вот так, чем ближе к нагрузке – тем лучше:

Подробнее о расчёте фильтров можно почитать здесь.

Индуктивные выбросы

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

  • Для цепей постоянного тока обязательно ставить мощный диод обратно-параллельно нагрузке, максимально близко к клеммам реле. Диод примет (замкнёт) на себя индуктивный выброс от мотора/катушки;
  • Туда же, на клеммы реле, можно поставить RC цепочку, называемую в этом случае искрогасящей: резистор 39 Ом 0.5 Вт, конденсатор 0.1 мкФ 400V (для цепи 220В);
  • Для сетей переменного тока использовать твердотельное (SSR) реле с детектором нуля (Zero-cross detector), они же называются “бесшумные” реле. Если в цепи переменного тока вместо реле стоит симистор с оптопарой, то оптопару нужно использовать опять же с детектором нуля, такая оптопара, как и SSR zero-cross будут отключать нагрузку в тот момент, когда напряжение в сети переходит через ноль, это максимально уменьшает все выбросы.

Подробнее об искрогасящих цепях можно почитать вот в этой методичке.

Arduino как источник питания

Важный момент, который вытекает из предыдущих: использование платы Arduino как источник питания для модулей/датчиков. Варианта тут два:

  • Питание датчиков и модулей от 5V
    • При питании платы от USB – максимальный ток 500 мА
    • При питании платы в Vin – максимальный ток 2 А при Vin 7V, 500 мА при Vin 12V
    • При питании платы в 5V – максимальный ток зависит от блока питания
  • Питание датчиков от GPIO (пинов D и A) – максимальный ток с одного пина: 40 мА, но рекомендуется снимать не более 20 мА. Максимальный суммарный ток с пинов (макс. ток через МК) не должен превышать 200 мА. Допускается объединение нескольких ног для питания нагрузки, но состояние выходов должно быть изменено одновременно (желательно через PORTn), иначе есть риск спалить ногу при её закорачивании на другую во время переключения. Либо делать ногу входом (INPUT), вместо подачи на неё низкого (LOW) сигнала. В этом случае опасность спалить ноги отсутствует.

Схемотехника

Соединение модулей несложное. Немного подробнее остановлюсь на резистивном делителе R1-R2.


Схема соединения ACS712 c ESP8266 (Wemos D1 mini)

АЦП ESP8266 измеряет напряжение от 0 до 1 Вольта. На плате Wemos D1 mini распаян резистивный делитель 220 кОм (верхняя часть плеча) и 100 кОм. Входное напряжение будет делится на 3.2, т.е. при 3.2 V на входе A0 на ADC чипа ESP8266 будет 1 V.

5A Module 20A Module 30A Module
Supply Voltage (VCC)      5VDC     5VDC        5VDC
Measurement Range, A    -5 to +5    -20 to +20       -30 to +30
Voltage at 0A, V    VCC/2    VCC/2       VCC/2
Scale Factor, mV/A    185    100       66
Variant ACS712ELC-05A ACS712ELC-10A      ACS712ELC-30A
Max voltage,V VCC/2 + 0,925V (max3.4 V) VCC/2 + 2V VCC/2 + 1,98V

У модуля ACS712 на каждый ток есть свой scale factor. Например, 30А модулю каждому амперу соответствует 0,066 V выходного напряжения на ACS712. Соответственно, 30А * 0,066V = 1,98V — это вся шкала для измерений.

Поскольку ACS712 измеряет -I и +I, то к замеренному выходному напряжению добавляется постоянная составляющая, равная VCC/2. В моем случае при VCC = 5V получаем постоянную составляющую 2,5V. Это уровень 0, относительно которого будет отображаться замеренное измененение тока. Соответственно, максимальное напряжение на выходе при токе в 30А будет 2,5V + 1,98V = 4,48V.

Если подать напряжение 4,48V на A0, можно сжечь вход АЦП. Да и даже при нагрузке в 10А напряжение получится 0,066V*10A + 2,5V = 3,16V. Т.е. 10-битный ADC ESP8266 по верхней границе уйдет в предел в 1023 отсчет уже при 10А потребления нагрузки и измерять токи больше не получится.

Соответственно, на входе A0 нужно поставить ещё один резистивный делитель. По-правильному, нужно посчитать сопротивления, исходя из того, что параллельно нижнему плечу резистивного делителя будет сопротивление 100 кОм + 220 кОм = 320 кОм. Однако, учитывая значительное суммарное сопротивление 320 кОм им можно пренебречь.

В результате получим, что для трансформации 4,5 V соответствующих предельному значению 30 А в 3.2 V на вход A0 резистивный делитель будет состоять из резисторов: 10 кОм (верхнее плечо) и 22 кОм (нижнее). Если сделать подстраховку и рассчитать делитель для 5V, то резистор нижнего плеча должен быть примерно 18 кОм.

Как подключить датчик давления к Ардуино

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

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

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

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

Создание прикладной программы в IFTTT для передачи SMS/Email

Шаг 1. Зарегистрируйтесь в сервисе IFTTT или войдите туда если у вас уже есть там аккаунт.

Шаг 2. На вкладке My Applets (мои прикладные программы) кликните на New Applet (новая прикладная программа).

Шаг 3. Кликните на +this.

Шаг 4. Найдите AdaFruit и кликните на нее.

Шаг 5. Кликните на «Monitor a feed on AdaFruit IO» (мониторить фид в AdaFruit IO).

Шаг 7. Кликните на +that. В поиске введите G-mail, кликните потом на ней и залогиньтесь со своими данными в g-mail.

Шаг 9. Запишите свой subject (тему) и ее описание (body) как показано на рисунке и кликните на create.

Шаг 10. Ваше уведомление создано. Посмотрите его и нажмите на finish (завершить).

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

“Универсальное” электромагнитное реле

Электромагнитное реле является по сути управляемым механическим выключателем: подали на него ток – оно замкнуло контакты, сняли ток – разомкнуло. Контакты являются именно контактами: металлическими “пятаками”, которые прижимаются друг к другу. Именно поэтому такое реле может управлять как нагрузкой постоянного, так и переменного тока. 

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

После изучения данного урока вы сами сможете её составить (транзистор и диод), а сейчас мы поговорим о модулях реле: готовая плата, на которой стоит само реле, а также цепи коммутации, защиты и даже оптическая развязка. Такие модули бывают “семейными” – с несколькими реле на борту. Спасибо китайцам за это! Купить можно на Aliexpress, также смотрите варианты у меня в каталоге ссылок на Али.

Такое реле сделано специально для удобного управления с микроконтроллера: пины питания VCC (Vin, 5V) и GND подключаются к питанию, а далее реле управляется логическим сигналом, поданным на пин IN. С другой стороны стоит клеммник для подключения проводов, обычно контакты подписаны как NO, NC и COM. Это общепринятые названия пинов кнопок, переключателей и реле:

  • COM – Common, общий. Реле является переключающим, и пин COM является общим.
  • NO – Normal Open, нормально открытый. При неактивном реле данный контакт не соединён с COM. При активации реле он замыкается с COM.
  • NC – Normal Closed, нормально закрытый. При неактивном реле данный контакт соединён с COM. При активации реле он размыкается с COM.

Подключение нагрузки через реле думаю для всех является очевидным:

Важный момент: катушка реле в активном режиме потребляет около 60 мА, то есть подключать больше одного модуля реле при питании платы от USB не рекомендуется – уже появятся просадки по напряжению и помехи:

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

На плате, справа от надписи High/Low trigger есть перемычка, при помощи которой происходит переключение уровня.

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

  • Ограниченное количество переключений: механический контакт изнашивается, особенно при большой и/или индуктивной нагрузке.
  • Противно щёлкает!
  • При большой нагрузке реле может “залипнуть”, поэтому для больших токов нужно использовать более мощные реле, которые придётся включать при помощи… маленьких реле. Или транзисторов.
  • Необходимы дополнительные цепи для управления реле, так как катушка является индуктивной нагрузкой, и нагрузкой самой по себе слишком большой для пина МК (решается использованием китайского модуля реле).
  • Очень большие наводки на всю линию питания при коммутации индуктивной нагрузки.
  • Относительно долгое переключение (невозможно поставить детектор нуля, читай ниже), при управлении индуктивными цепями переменного тока можно попасть на большой индуктивный выброс, необходимо ставить искрогасящие цепи.

Важный момент связан с коммутацией светодиодных светильников и ламп, особенно дешёвых: у них прямо на входе стоит конденсатор, который при резком подключении в цепь становится очень мощным потребителем и приводит к скачку тока. Скачок может быть настолько большим, что 15-20 Ваттная светодиодная лампа буквально сваривает контакты реле и оно “залипает”! Данный эффект сильнее выражен на дешёвых лампах, будьте с ними аккуратнее (за инфу спасибо DAK).

При помощи реле можно плавно управлять сильно инерционной нагрузкой, такой как большой обогреватель. Для этого нужно использовать сверхнизкочастотный ШИМ сигнал, у меня есть готовая библиотека. Не забываем, что реле противно щёлкает и изнашивается, поэтому для таких целей лучше подходит твердотельное реле, о котором мы поговорим ниже.

Уроки Arduino #8 - управление релеУроки Arduino #8 — управление реле

Микросхема датчика тока ACS712

Датчик тока ACS712 является продуктом Allegro MicroSystems, он может использоваться для точного измерения как переменного, так и постоянного тока. Этот датчик основан на эффекте Холла, а ИС имеет встроенное устройство с эффектом Холла. На выходе датчика тока ACS712 выдается аналоговое напряжение, пропорциональное переменному или постоянному току (в зависимости от того, что измеряется).

ACS712 доступна в 8-выводном корпусе SOIC, и на следующем рисунке показана ее схема контактов (распиновка ACS712).

IP+ – это плюсовая клемма для измерения тока, IP- – это минусовая клемма для измерения тока, GND – это сигнальная земля, FILTER – для подключения внешнего конденсатора, VIOUT – аналоговый выход, VCC – питание.

Существует три варианта датчика ACS712 в зависимости от диапазона его измерения тока. Оптимизированные диапазоны: +/- 5А, +/- 20А и +/- 30А. в зависимости от варианта чувствительность на выходе также изменяется следующим образом: ACS712 ELC-05 (+/- 5A) чувствительность 185 мВ/А, ACS712 ELC-20 (+/- 20A) чувствительность 100 мВ/А, ACS712 ELC-30 (+/- 30A) чувствительность 66 мВ/А.

Как упоминалось ранее, ASC712 основана на эффекте Холла. В микросхеме имеется медная полоса, соединяющая контакты IP+ и IP- внутри. Когда некоторый ток протекает через этот медный проводник, создается магнитное поле, которое определяется датчиком Холла.

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

Библиотека HX711.h

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

Остальные процедуры:

Название Параметры по порядку На выходе Описание
begin() A1 — Вывод Ардуино, где DT,

A2 — вывод SCK,

A3 — разрядность датчика 32(B), 64 или 128(A). По умолчанию 128

Ничего Инициализация
 is_ready() Ничего True — готов, False — не готов Тест состояния АЦП
set_gain() 32,64,128 Ничего Установка значения усиления
read() Ничего Сырое значение АЦП Возвращает «чистый» ответ HX711 без поправочных сведений
read_average() Сколько делать проб Возвращает среднюю цифру от выполненных проб (унция) Получить усредненные данные
get_value() Сколько делать проб На выходе средняя масса (унция) без упаковки Получение поправленного значения без веса упаковки
 get_units() Сколько делать проб Усредненная поправленная масса (унция) Возвращает массу с учетом упаковки и поправочных значений.
Tare() Сколько делать проб Масса упаковки (унция) Получение массы упаковки
set_scale() Коэффициент Ничего Задание значения корректировки
get_scale() Ничего Значение Получение текущего значения заданного set_scale()
set_offset() Вес (унция) Ничего Ручная установка веса  упаковки
Get_offset() Ничего Масса (унция) Запрос установленного вручную параметра  упаковки
power_down() Ничего Ничего Перевести HX711 в состояние «сна»
power_up() Ничего Ничего Вывод модуля АЦП из «сна»

Программный код

В данном случае мы измеряем напряжение синусоидальной формы. Предполагаем, что оно достаточно чистой формы,т.е.одна гармоника на частоте 50 Гц.

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

Vpp (Volts Peak to Peak) — размах напряжения сигнала.

Vpeak (Volts peak) — амплитуда синусоидального сигнала.

Vrms = 0,707*Vpeak.

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

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

В статье использован очень простой вариант измерения Vpp. За промежуток времени в 1 сек определяется максимальная и минимальная величина на выходе АЦП. Затем разница между максимальным и минимальным значением (размах) пересчитывается в напряжение и делится пополам, чтобы получить амплитуду sin (Vpeak).

Код в статье плох тем, что останавливает работу программы на секунду при побращении к функции Vpp. Это неприемлемо, если нужно собирать данные с различных датчиков.

const int sensorIn = A0;
int mVperAmp = 66; // use 100 for 20A Module and 66 for 30A Module and 185 for 5A Module

#define ADCSamples      1024.0 //1024 samples
#define maxADCVolt      5.0 //5 Volts
#define ZeroSample      ADCSamples/2
#define OneSampleVolt   maxADCVolt/ADCSamples
#define ZeroCorrection      0.2

double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;

void setup(){ 
 Serial.begin(9600);
}

uint32_t start_time = 0;
int readValue = 0;
int maxValue = 0;
int minValue = ADCSamples;
void loop()
{
  if (millis() - start_time < 250)
  {
    readValue = analogRead(sensorIn);
    maxValue = (readValue > maxValue) ? readValue : maxValue;
    minValue = (readValue < minValue) ? readValue : minValue;
  }
  else
  {
    VRMS = (maxValue - minValue)/2 * OneSampleVolt * 0.707;
    AmpsRMS = (VRMS * 1000)/mVperAmp - ZeroCorrection;
    Serial.println("Amps RMS: " + String(AmpsRMS));
    maxValue = 0;
    minValue = ADCSamples;
    start_time = millis();
  }
}

В приницпе, можно не определять величину размаха, поскольку величина нуля нам известна Vcc/2. В отсчетах АЦП это будет 1024/2 при резистивном делителе 10 кОм +18 кОм. Однако, при таком подходе возникает проблема с калибровкой уровня 0, поскольку есть девиация за счет использования не прецизионных резисторов в делителе напряжения.

Замеры потребления электрочайника с помощью ACS712.

Результаты работы кода представлены на графике. Первый, длинный Скачок в энергопотреблении — это включение чайника. Вода уже довольно горячая, чайник быстро закипает и отключается. Второй пик — это повторное включение чайника.

Видно, что при отключенном чайнике присутствует небольшой уровень шума. По замерам порядка 0,2 A. При включеном чайнике замеренный ток колеблется в районе 8,6 A. Высокоточный мультиметр Uni-T UT16E показывает величину чуть больше 8 A. Т.е. разница порядка 0,6 А, что довольно неплохо. Если откалибровать нулевое значение, добавив соотвествующий поправочный коэффициент (ZeroCorrection), то погрешность измерения уменьшится.

Опять-же, не забываем, что используется 30А ACS712. На 20А измеренные значения будут точнее. Вот, например, результаты измерения энергопотребления двухкомпрессорного холодильника Bosch с помощью ACS712 20A. Все отсчеты с амплитудой менее 0.1А я считаю шумом и зануляю.

Мониторинг энергопотребления двухкомпрессорного холодильника Bosch с помощью датчика на эффекте Холла ACS712

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

Примерно если оценить потребляемую мощность P=220V * 0.4A =88 Ватт для холодильника с классом энергопотребления A++.

Приложение для 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. После того как ваши устройства начнут потреблять электроэнергию значения потребляемой мощности и счета за электричество будут отображаться в приложении.

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

Защита от помех AC

Момент выключения

Напряжение в сети является синусоидой, которая 100 раз в секунду пересекает значение 0. Если выключить нагрузку в тот момент, когда напряжение в сети равно нулю – это сильно уменьшит выброс. Для этих целей проще всего использовать твердотельные реле (SSR) с детектором нуля (Zero-Crossing Detector): такие реле сами отключают и включают нагрузку в нужный момент. Детектор нуля есть почти во всех моделях SSR, но лучше уточнить в документации.

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

Искрогасящие цепи AC

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

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

Принцип работы датчика тока ACS712

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

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

Основным достоинством датчика тока ACS712 является то, что он может измерять как переменный (AC), так и постоянный ток (DC) и он также обеспечивает изоляцию между нагрузкой и измерительным устройством (в нашем случае это будет плата Arduino. Как показано на следующем рисунке, датчик тока ACS712 имеет три контакта – Vcc (питающее напряжение), Vout (выход) и Ground (земля).

Слева на рисунке показаны два контакта, которые подсоединяются к тому месту, где необходимо измерить ток. Датчик работает от напряжения +5V – его необходимо подать на контакт Vcc датчика. Контакт Ground датчика необходимо подсоединить к земле схемы. Если сила измеряемого тока равна нулю, то на выходном контакте датчика напряжение равно 2500mV, если протекающий ток положителен, то напряжение на выходе датчика будет больше 2500mV, если отрицателен – то меньше 2500mV.

Для считывания напряжения с этого контакта мы будем использовать один из аналоговых входов Arduino – на выходе его АЦП (аналогово-цифровой преобразователь) будет значение 512 когда на входе контакта будет напряжение 2500mV – то есть когда ток не протекает. Это значение будет уменьшаться когда ток будет протекать в обратном (отрицательном) направлении, и увеличиваться когда ток будет протекать в прямом (положительном) направлении. В следующей таблице представлены примеры значений на выходе АЦП аналогового контакта Arduino в зависимости от величины протекающего через датчик тока.

Эти значения были рассчитаны на основе даташита на датчик ACS712. Вы их также можете рассчитать по следующим формулам:

Vout Voltage(mV) = (ADC Value/ 1023)*5000Ток через проводник (A) = (Vout(mv)-2500)/185

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий