Электроника

Подключение датчика переменного тока SCT-013-000 к Arduino, ESP8266 или NodeMCU.

Датчик тока SCT-013-030 представляет собой неинвазивный датчик тока, принцип которого похож на работу трансформатора. Силовой кабель пропускается через датчик, и по сути является первичной обмоткой трансформатора с одним витком. На магнитопровод намотан тонкий медный провод в несколько тысяч витков (например, для модели SCT-013-030 количество витков вторичной обмотки составляет 2000). Таким образом, 100А переменного тока силового кабеля создают 50 мА тока во вторичной обмотке. Соответственно, двухжильный вывод датчика и создает переменный ток, величина которого пряма пропорциональна току силового кабеля.

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

АЦП микроконтроллеров способно воспринимать только напряжение, а не ток. Соответственно, вторичную обмотку нужно нагрузить нагрузочным резистором – на его концах и появится напряжение. Однако это напряжение будет переменным, а АЦП микроконтроллера способно воспринимать только положительное напряжение. Для этого необходимо поднять ноль на половину напряжение питания микроконтроллера; для Arduino это будет половина от 5В, для NodeMCU– половина от 3,3В. Делается это классическим делителем напряжения из двух одинаковых резисторов по 10 кОм каждый. Кроме того, стоит поставит конденсатор между землей и половиной питания. Таким образом, принципиальная схема будет иметь вид:

  • Идеальный нагрузочный резистор для микроконтроллеров с питанием 5В – 35,4 Ом (можно взять на 33 Ома)
  • Идеальный нагрузочный резистор для микроконтроллера с питанием 3,3В – 19,1 Ом. (можно взять на 18 Ом при работе микроконтроллера от батарей или 22 Ома при работе от сети)
  • В качестве конденсатора достаточно взять любой подходящий на 10 мкФ.

Чтобы самостоятельно рассчитать значения нагрузочных резисторов, можно воспользоваться формулами с официального сайта производителя https://openenergymonitor.org/forum-archive/node/156.html

Распиновка штекера датчика (хотя лично я использовал для отладки dupont-кабель, а впоследствии пайку):

Программная часть

Для работы с подобным датчиком и подобным обвесом есть библиотека EmonLib. Скачать можно тут:https://github.com/openenergymonitor/EmonLib

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

#include «EmonLib.h»

EnergyMonitor emon1;

void setup(){

Serial.begin(9600);

emon1.current(0, 80);

}

void loop(){

double Irms = emon1.calcIrms(1480);

Serial.println(Irms);

}

Функция emon1.current(0, 80) – имеет два параметра. Первый параметр, номер аналогового порта, куда подключен датчик, второй – калибровочный коэффициент, который лично я подбирал экспериментальным путем. В моем случае (нагрузочный резистор 22 Ом, напряжение питания 3,3В, коэффициент составил 80). Калибровать лучше всего сторонним амперметром переменного тока.

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

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

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

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