2 схемы

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

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

Вывод датчика ACS712 Назначение
VCC Питание, 5 В
GND Земля
OUT Аналоговый выход датчика, напряжение на котором линейно зависит от протекающего через датчик тока
IP+ Вывод 1 для подачи измеряемого тока
IP- Вывод 2 для подачи измеряемого тока

Выводы IP+ и IP- как раз и есть тот разрыв цепи, через который нужно пропустить интересующий ток. Если перепутать полярность, то измерения будут с обратным знаком.

Кстати, эта особенность – измерять ток как с положительным, так и отрицательным знаком, позволяет использовать датчик ACS712 для измерений переменного тока.

Таким образом, для подключения датчика ACS712 к плате Arduino используются 3 провода:

Схема подключения датчика тока ACS712 к Arduino

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

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – двигатель постоянного тока

Либо вместо нагрузки можно использовать мощную лампу накаливания. Либо любую другую нагрузку.

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – 10 Вт лампа накаливания

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

Настройка рабочих режимов

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

Заводские настройки обычно составляют такие значения: max — 250 В, min — 175 В, время задержки — 5–15 секунд (каждый завод по-своему). Разумнее всего оставить как есть. Но если в сети сильный разброс, вызывающий частые срабатывания, можно на пять вольт изменить значения, но не более.

Схемы подключения датчиков PNP и NPN

Отличие PNP и NPN датчиков в том, что они коммутируют разные полюсы источника питания. PNP (от слова “Positive”) коммутирует положительный выход источника питания, NPN – отрицательный.

Ниже для примера даны схемы подключения датчиков с транзисторным выходом. Нагрузка – как правило, это вход контроллера.

PNP выход датчика. Нагрузка (Load) постоянно подключена к “минусу” (0V), подача дискретной “1” (+V) коммутируется транзистором. НО или НЗ датчик – зависит от схемы управления (Main circuit)

NPN выход датчика. Нагрузка (Load) постоянно подключена к “плюсу” (+V). Здесь активный уровень (дискретный “1”) на выходе датчика – низкий (0V), при этом на нагрузку подается питание через открывшийся транзистор.

Призываю всех не путаться, работа этих схем будет подробно расписана далее.

На схемах ниже показано в принципе то же самое. Акцент уделён на отличия в схемах PNP и NPN выходов.

Схемы подключения NPN и PNP выходов датчиков

На левом рисунке – датчик с выходным транзистором NPN. Коммутируется общий провод, который в данном случае – отрицательный провод источника питания.

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

Проверенный «бюджетный» вариант

Вот, что надо предпринять для изготовления такого варианта:

  • в ферритовом кольце пропилить канавку по толщине корпуса;
  • на эпоксидный клей посадить МС;
  • сделать определенное количество витков на кольце (кол-во витков будет зависеть от конкретного напряжения);
  • в итоге получится бесконтактный вариант реле, функционирующий на электромагнитной основе.

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

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

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

В первой части были описаны возможные варианты выходов датчиков. По подключению датчиков с контактами (релейный выход) проблем возникнуть не должно. А по транзисторным и с подключением к контроллеру не всё так просто.

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

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • датчика тока ACS712 / TA12-100;
  • источник питания 12 Вольт;
  • нагрузка, например, лампа 12V;
  • провода «папа-папа», «папа-мама».

Датчик ACS712 является аналоговым, для подключения потребуется три провода. Два для питания — GND и 5V и один провод для сигнала. Датчик подключается в разрыв цепи между источником питания и нагрузкой. Используется библиотека TroykaCurrent.h (скачать ее можно здесь), которая переводит значения аналогового сигнала в миллиамперы. Соберите схему, установите библиотеку и загрузите скетч.

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

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

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

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

Arduino

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

1
2
3
4

intRead_Voltage=A3;

intRead_Current=A4;

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

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

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

Arduino

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

1
2
3
4
5
6
7
8

voidsetup(){

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

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

lcd.setCursor(,1);

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

delay(2000);

lcd.clear();

}

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

Arduino

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

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

1
2
3
4
5

floatVoltage_Value=analogRead(Read_Voltage);

floatCurrent_Value=analogRead(Read_Current);

Voltage_Value=Voltage_Value*(5.01023.0)*6.46;

Current_Value=Current_Value*(5.01023.0)*0.239;

4Описание датчика тока,напряжения и мощности INA219

Датчик INA219 – цифровой датчик тока, напряжения и мощности. Он позволяет измерять напряжения от 0 до 26 вольт и ток от 0 до 3,2 ампер. Питается датчик напряжением от 3 до 5,5 В. Существуют модули, полностью готовые к подключению к Arduino. Один из таких модулей GY-219:

Модуль GY-219 с датчиком тока INA219: назначение выводов и частей

Датчик INA219 выполняется в двух разновидностях: A и B. Последняя отличается повышенной точностью и меньшей погрешностью. На фото ниже как раз модификация INA219B.

Модуль GY-219 с датчиком тока INA219

Датчик INA219 имеет 12-разрядный АЦП, соответственно при максимуме измерений ±3,2 А получается разрешающая способность 0,8 мА. Однако можно настроить датчик таким образом, чтобы уменьшить диапазон измеряемой силы тока до ±400 мА; при этом разрешающая способность датчика увеличится до 0,1 мА. При этом можно откалибровать датчик, записав калибровачные данные в специальный регистр. Измеренные данные силы тока, напряжения и можности хранятся в трёх соответствующих регистрах. Кстати, датчик INA219 позволяет осуществлять аппаратную фильтрацию по 128 отсчётам, если измеряемый ток имеет сильные наводки.

Для конфигурирования датчика INA219 и для считывания показаний с него используется последовательный интерфейс I2C. Причём адрес на шине можно задать с помощью перемычек A0 и A1 на модуле. Допустимые адреса:

  • 0x40 (без перемычек);
  • 0x41 (с перемычкой A0);
  • 0x44 (с перемычкой A1);
  • 0x45 (установлены обе перемычки).

Соответственно, на одной шине IIC можно иметь до 4-х таких датчиков, подключённых одновременно.

1Описание датчикатока ACS712

Датчик тока ACS712 – это датчик, который основан на эффекте Холла. Эффект Холла заключается в том, что когда через проводник, помещённый в магнитное поле, протекает электрический ток, в проводнике возникает напряжение. Это напряжение и служит индикатором силы тока: оно линейно зависит от силы тока. Ещё оно имеет небольшую зависимость от температуры окружающей среды и поддаётся влиянию внешних магнитных полей. Так, например, на графике ниже показана зависимость напряжения на выходе датчика ACS712 от силы протекающего тока (для одной из разновидностей датчика, об этом чуть ниже) при различных температурах:

Зависимость напряжения на выходе датчика ACS712 от силы тока

Модуль с датчиком ACS712 может выглядеть, например, так:

Модуль с датчиком тока ACS712 и схема подключения

Датчик ACS712 имеет следующие характеристики:

  • работает с постоянным и переменным током;
  • ток потребления – до 13 мА;
  • температура эксплуатации -40…+85 °C.

Существуют несколько разновидностей датчика ACS712, которые отличаются величиной измеряемого тока. Так, существуют разновидности с максимально измеряемым током 5, 20 и 30 А. Широкий диапазон измеряемых значений тока можно отнести к существенным преимуществам датчика ACS712. Перечисленные модификации имеют чувствительность 185, 100 и 66 мВ/А соответственно.

Принцип работы датчика тока 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

1Описание датчикатока ACS712

Датчик тока ACS712 – это датчик, который основан на эффекте Холла. Эффект Холла заключается в том, что когда через проводник, помещённый в магнитное поле, протекает электрический ток, в проводнике возникает напряжение. Это напряжение и служит индикатором силы тока: оно линейно зависит от силы тока. Ещё оно имеет небольшую зависимость от температуры окружающей среды и поддаётся влиянию внешних магнитных полей. Так, например, на графике ниже показана зависимость напряжения на выходе датчика ACS712 от силы протекающего тока (для одной из разновидностей датчика, об этом чуть ниже) при различных температурах:


Зависимость напряжения на выходе датчика ACS712 от силы тока

Модуль с датчиком ACS712 может выглядеть, например, так:


Модуль с датчиком тока ACS712 и схема подключения

Датчик ACS712 имеет следующие характеристики:

  • работает с постоянным и переменным током;
  • ток потребления – до 13 мА;
  • температура эксплуатации -40…+85 °C.

Существуют несколько разновидностей датчика ACS712, которые отличаются величиной измеряемого тока. Так, существуют разновидности с максимально измеряемым током 5, 20 и 30 А. Широкий диапазон измеряемых значений тока можно отнести к существенным преимуществам датчика ACS712. Перечисленные модификации имеют чувствительность 185, 100 и 66 мВ/А соответственно.

Дальнейшее развитие идеи и замечания

  • Нелинейность датчика составляет приблизительно 3% от максимально измеряемого тока. То есть в случае 100A-ного датчика показания будут гулять в +-3A. . Для меньшего предельного тока выбирайте подходящий датчик, не покупайте «с запасом» по уровню тока.
  • У меня снятое напряжение с датчика отправляется на собственный сервер Blynk, что позволяет грубо отслеживать энергопотребление удаленного от меня дома.
  • Стоит отдельно сказать о том, что датчик показывает именно ток. При стабильном сетевом напряжении в 230 вольт этот ток можно перевести в ватты или киловатты, просто умножив ток на сетевое напряжение. Однако в сельской местности напряжение периодически проседает, и это необходимо учитывать.
  • При отладке я чуть мозг себе не сломал из-за херово работающего dupont-контакта на аналоговый порт. Убедитесь в качественном контакте, чтобы не терять зря целый вечер, как я.
  • Датчик ловит большом количество электромагнитных шумов даже при полном отсутствии какой бы то ни было нагрузки (особенно, около ртутных ламп-трубок, особенно, если он рассчитан на 100А), поэтому это тоже стоит учитывать и, возможно, ставить какой-от программный фильтр. В моем случае датчик обнаруживал в воздухе около 0,03-0,05А тока.
  • Подключить датчик SCT-013-000 к Raspberry не выйдет, так как он отдает аналоговый сигнал, а «голый», без обвеса шилдами raspberry не обладает АЦП. Либо надо покупать шилд АЦП для малинки, либо, что проще, использовать в качестве АЦП Arduino Nano и Arduino Micro, а на «малинку» отдавать уже готовые значения. Притом на Ардуино можно организовать даже примитивный программный фильтр.

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

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

Вывод датчика ACS712 Назначение
VCC Питание, 5 В
GND Земля
OUT Аналоговый выход датчика, напряжение на котором линейно зависит от протекающего через датчик тока
IP+ Вывод 1 для подачи измеряемого тока
IP- Вывод 2 для подачи измеряемого тока

Выводы IP+ и IP- как раз и есть тот разрыв цепи, через который нужно пропустить интересующий ток. Если перепутать полярность, то измерения будут с обратным знаком.

Кстати, эта особенность – измерять ток как с положительным, так и отрицательным знаком, позволяет использовать датчик ACS712 для измерений переменного тока.

Таким образом, для подключения датчика ACS712 к плате Arduino используются 3 провода:

Схема подключения датчика тока ACS712 к Arduino

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

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – двигатель постоянного тока

Либо вместо нагрузки можно использовать мощную лампу накаливания. Либо любую другую нагрузку.

Модуль с датчиком тока ACS712 подключён Arduino, нагрузка – 10 Вт лампа накаливания

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

Практические ниши применения

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

Опять же. Применяя Arduino одновременно с ACS712, как наиболее распространенным датчиком тока платформы, можно использовать микроконтроллер именно в роли детектирующего прибора, который в зависимости от определенного времени производит замер потребления конечной сети. Или как очень «умный» мультиметр, с возможностью построения On-line графиков на дополнительно соединенном к аппарату экране или внешнем компьютере.

3Чтение показаний датчика тока ACS712с помощью Arduino

В скетче будем постоянно читать значение с порта A0 и выводить в монитор последовательных данных. Напомню, АЦП у разных плат Arduino имеет различную разрядность, обычно 10 или 12 бит. Подробнее здесь. Это означает, что с аналогового порта могут приходить значения от 0 до 210 = 1024 для 10-разрядного АЦП. Будем считать, что у нас датчик тока, диапазон измерений которого от -5 А до +5 А, а чувствительность 185 мВ/А.

Если на 1 А приходится 185 мВ, это соответствует примерно 38 единицам измерения АЦП: 185·1024/5000 = 37.888, (1) где 5000 – это максимальное значение напряжения, которое способен измерить АЦП Arduino, в милливольтах.

На выходе OUT датчика ACS712 при отсутствии измеряемого тока должна быть половина напряжения питания, т.е. 2.5 В. Так как вся шкала АЦП лежит в диапазоне от 0 до 1024, то при отсутствии измеряемого тока мы должны считывать с аналогового порта Arduino число 512. Это начало шкалы отсчёта. Обозначим его value_zero. Отклонение тока value_adc от нулевого уровня в большую или меньшую сторону и будет показывать силу тока. Следовательно, чтобы посчитать в амперах значение тока с датчика ACS712, необходимо разницу

нулевого уровня и измеренного значения с аналогового порта A0 поделить на 38. А чтобы получить ток в миллиамперах, следует умножить это значение на 1000: I(mA) = (value_zero − value_adc) / 38·1000 (2)


Пояснение принципа вычисления силы тока На практике значение на аналоговом выводе A0 не будет равняться точно 512. Поэтому, чтобы определить начало отсчёта, добавим в скетч примитивную калибровку. Калибровка будет заключаться в том, что некоторое количество раз прочитаем значение с аналогового порта A0 при отсутствии тока на датчике ACS712, и усредним его. Естественно, нагрузка на время калибровки должна быть выключена, чтобы ток не протекал через датчик.Скетч для измерения постоянного тока датчиком ACS712 (разворачивается) const int acs712_pin = A0; int zero; // уровень нуля, относительно которого измеряется ток, обычно VCC/2 void setup() { Serial.begin(9600); calibrate(); } // определим нуль шкалы (до включения нагрузки)void calibrate(){ zero = 0; int repeats = 10; for (int i=0; iint getCurrent(int adc) { int delta = zero — adc; // отклонение от нуля шкалы float scale = 37.888; // сколько единиц АЦП приходится на 1 ампер, по формуле (1) int current = (int)delta*1000/scale; // считаем ток в мА и округляем до целых, по формуле (2) return current; }

Загрузим скетч и плавно начнём поднимать напряжение и ток на нагрузке. Какое-то время подождём, а затем начнём уменьшать ток. В результате получим примерно такую картинку:


Вывод тока датчика ACS712 в монитор последовательного порта и его график

Как видно, аналоговый сигнал постоянно «прыгает». Чтобы этого избежать, следует добавить в скетч сглаживание. Для этого будем проводить подряд несколько измерений, а затем брать среднее арифметическое от них в качестве действительного значения. Заодно совместим начальную калибровку, т.к. она выполняется точно так же. Вот как изменится в результате скетч:Скетч для измерения постоянного тока датчиком ACS712 со сглаживанием const int acs712_pin = A0; int zero; // уровень нуля, относительно которого измеряется ток, обычно VCC/2 void setup() { Serial.begin(9600); zero = getSmoothedValue(); // определим нуль шкалы (до включения нагрузки) Serial.print(«Zero=»); Serial.println(zero); } // получает сглаженное значение с АЦП Arduinoint getSmoothedValue(){ int value; int repeats = 10; for (int i=0; ivoid loop() { int sensorValue = getSmoothedValue(); // читаем значение с АЦП и выводим в монитор Serial.print(sensorValue); Serial.print(» = «); int c = getCurrent(sensorValue); // преобразуем в значение тока и выводим в монитор Serial.print(c); Serial.println(» mA»); delay(100); } // рассчитывает ток в мА по значению с АЦПint getCurrent(int adc) { int delta = zero — adc; // отклонение от нуля шкалы float scale = 37.888; // сколько единиц АЦП приходится на 1 ампер int current = (int)delta*1000/scale; // считаем ток в мА return current; }

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

В результате выполнения данного скетча картинка получается гораздо более приятная:


Сглаженный график тока, измеренного датчиком ACS712

Тот же самый принцип заложен в библиотеки для Arduino, которые оперируют с датчиком тока ACS712. Например, вот эта библиотека Troyka Current.

По результату эксперимента получается, что датчик ACS712 очень простой, но при этом довольно не точный. Гораздо точнее датчик тока, который мы рассмотрим в следующем разделе.

Description

The ACS712 is a chip to measure current, both AC or DC. The chip has an
analog output that provides a voltage that is lineair with the current.
The ACS712 library supports only a built in ADC by means of analogRead().
There are 2 core functions:

  • int mA_DC()
  • int mA_AC()

To measure DC current a single analogRead() with some conversion math is sufficient to get
a value. To stabilize the signal analogRead() is called twice.

To measure AC current a blocking loop for 20 millis is run to determine the
peak to peak value which is converted to the RMS value. To convert the peak2peak
value to RMS one need the so called crest or form factor. This factor depends heavily
on the signal form. For a perfect sinus the value is sqrt(2)/2.

Схемы подключения и организация работы

Градация аналогового сигнала Arduino составляет 1024 бит. Так как при отсутствии нагрузки сенсор в любом случае показывает 2,5В, значение по умолчанию порта, к которому подключена ACS712 будет 512, что необходимо учитывать при написании скетча микроконтроллера.

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

и скетч для вывода показаний датчика:

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

Результат работы:

И сам скетч:

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

Кусок кода, который в цикле проверяет работу потребляющего устройства:

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

Ну, и напоследок рассмотрим метод серьезного применения датчика ACS712 для контроля нагрузки домашней сети электропитания 220В, до 30А при допустимых потребителях 6 кВт. Несравненным плюсом конструкции служит вывод получаемой информации при помощи Ардуино в сеть, наглядным для человека образом, с графиками и в браузере. Достаточно набрать в подключенном к сети c Arduino компьютере адрес http://192.168.100.10. Единственное ограничение — требуется, чтобы интернет также был доступен. Последнее нужно для внешних компонентов, обрабатывающими числовые значения и выводящие графики.

Сам скетч, который приводится без изменений — уж очень хорошо реализована идея, можно обнаружить по адресу http://liccontrol.com/articles/web_monitor.ino

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector