Меню

Датчик тока 220в arduino

Arduino Pro Mini + токовый датчик GY-712 ведут контроль перегорания ламп

Всем привет. Хочу поделится одним из проектом созданным на базе Arduino.
Для меня работа с токовыми датчиками GY-712 была впервые. Перед созданием этого проекта создавался тестовый блок.

Если вам уже интересно, тогда продолжим.

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

Было тех задание:
1) Лампы(фонари) 50-65ВТ 220В переменка или 24В постоянка;
2) Индикация работы лампы (светодиод на панели);
3) Звуковая индикация перегоревшей лампы.

Решение было принято такое:
Используем токовый датчик GY-712 5А

По причинам:
1) Меряет переменный и постоянный ток;
2) Легко подключается к контроллеру;
3) Компактный;
4) Недорогой при заказе с Китая.

Давайте посмотрим на схему:

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

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

Вот простая схема без контроля тумблера, просто световая индикация. Это на тот случай кому просто нужен будет световой индикатор нагрузки – но тогда можно просто намотать на ферритовое кольцо провода(сделать трансформатор тока) и подключить светодиодик.

const int currentPin1 = 0; // Аналоговый вход с датчика тока

const unsigned long sampleTime = 100000UL; // sample over 100ms, it is an exact number of cycles for both 50Hz and 60Hz mains
const unsigned long numSamples = 250UL; // choose the number of samples to divide sampleTime exactly, but low enough for the ADC to keep up
const unsigned long sampleInterval = sampleTime/numSamples; // the sampling interval, must be longer than then ADC conversion time
//const int adc_zero = 512; // relative digital zero of the arudino input from ACS712 (could make this a variable and auto-adjust it)
int adc_zero1; //Переменная автоматической калибровки

void setup()
<
pinMode(13, OUTPUT);// Пин индикатора
pinMode(12, OUTPUT); // пин звука
pinMode(2, INPUT); // пин входа реле (тумблер)

digitalWrite(13, LOW);
digitalWrite(12, LOW);

tone(12,1500,100); // Звук старта калибровки
delay(180);
tone(12,1500,100);
delay(180);
tone(12,1500,100);

//Serial.begin(9600);
adc_zero1 = determineVQ(currentPin1); //Quiscent output voltage — the average voltage ACS712 shows with no load (0 A)
digitalWrite(13, HIGH);
tone(12,1000,100);

delay(150);
digitalWrite(13, LOW);

void loop() <
// Serial.print(«ACS712@A2_1:»);Serial.print(readCurrent(currentPin1,adc_zero1),3);Serial.println(» mA»);
delay(300);

if(digitalRead(2)==0) < // Если включен тумблер то:
if (readCurrent(currentPin1,adc_zero1)> srab) // Если ток больше указанного порга сработки то:
<
digitalWrite(13, HIGH); // Включить индикатор

>
else // Иначе
<
if(digitalRead(2)==0) < //Если тумблер все еще включен то:
digitalWrite(13, LOW); // Погасить индикатор
tone(12,2000,500); > // и выдать звуковой сигнал
>

Источник

Датчики тока для работы с Ардуино

Главное преимущество микроконтроллера по сравнению со многими средствами управления оборудованием — универсальность. Можно не только отдавать с его помощью конечные команды на включение двигателей, зажигания ламп, или произведения каких-либо действий, но и выполнять определенные «логические» реакции в зависимости от изменившихся внешних условий. Последняя возможность предоставляется в первую очередь внешними датчиками и уже во вторую ветвлениями внутренней программы. В сущности, микроконтроллер — миниатюрный компьютер, ограниченный по мощности, но обладающий определенными плюсами, изначально направленными на применение его в комплексе с различной аппаратурой. Сюда относятся не только контролирующие цепи, но и различные сенсоры, предоставляющие информацию самому логическому блоку. В контексте статьи речь пойдет об одном из ярких представителей названого класса устройств — Ардуино и датчике тока ACS712, специально разработанного в целях совместного с ним использования.

Читайте также:  Датчики раздатки л200 супер селект

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

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

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

ACS712 на основе эффекта Холла

Описываемый датчик построен на основе эффекта Холла. Представьте себе проводящую пластину, к двум сторонам которой подключены полюсы источника тока. На боковых ее гранях напряжение регистрироваться не будет, так как количество «дырок» поступающей энергии с одной стороны равно сумме электронов с другой. Ситуация изменится, если на поверхность начнет действовать магнитное поле. На боковые грани пластины при нем начнет идти часть тока линии, который можно замерить. Его количество станет пропорционально равному воздействию, а значит доступным к определению. Именно названый эффект и лежит в основе работы датчика Холла.

Технологически, в ACS712 сенсор настоящего типа представлен микросхемой SOIC-8, со следующим расположением контактов:

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

Конечно, в контексте платы дополняющей Arduino, электрические контакты выполнены с более удобным расположением соединяющих проводников:

Читайте также:  Ошибка по датчику распредвала ваз 2115

Два контакта одной стороны устройства предназначены для подключения его в разрыв цепи прохождения тока нагрузки, другие три – целям соединения к самому микроконтроллеру. Здесь OUT связывается с любым аналоговым входом Arduino, на VCC подается +5В питания, GND с общей землей.

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

Технические характеристики

Рассмотрим характеристики платы ACS712 более подробно, естественно с разделением их в зависимости от возможностей различных моделей:

  • Питание — 5В;
  • потребляемый ток — 0,11А;
  • сопротивление по шинам — до 1,2 мОм;
  • вид измеряемой характеристики — постоянный или переменный ток;
  • температурный режим работы — от –40 до +85°С;
  • дополнительные индикаторы — присутствует светодиод поступления тока на питание устройства;
  • размеры (в среднем) — 31 x 13 мм;
  • критичная сила тока, приводящая к пробою устройства — 50А.
Модель мВ/А
ACS712 5A 185
ACS712 20A 100
ACS712 30A 66
ACS713 20A 185
ACS713 30A 133

Внутренняя электронная схема сенсора:

Ограничения ACS712

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

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

Теперь, что касается чувствительности: чем датчик рассчитан на больший ампераж работы, тем она ниже. Что тоже нужно брать во внимание, при проектировании схем на основе ACS712. Отдельным вариантом тут выступает ACS713 30A, частично сохраняющий названую возможность за счет относительно удачной схемы.

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

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

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

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

#include

LiquidCrystal lcd (7, 6, 5, 4, 3, 2);
const int APIN = A3; // аналоговый пин подключения микроконтроллера
int SENS_ACS712 = 66; // Здесь задается чувствительность конкретного ACS712
int ADCV= 0;
int MINV = 2500;
double ADCVOL = 0;
double tVAL = 0;
void setup()
<
// Отладочная часть, при работе с экраном не используется
// Serial.begin(9600);
lcd.begin(16, 2);
lcd.print(» ACS823 SENS «);
lcd.setCursor(0,1);
lcd.print(» from ARDUINO «);
delay(2000);
>
void loop()
<
ADCV = analogRead(APIN);
ADCVOL = (ADCV / 1024.0) * 5000;
tVAL = ((ADCVOL — MINV) / SENS_ACS712);
// Отладочная часть, при работе с экраном не используется
// Serial.print(«Sens pure = » );
// Serial.print(ADCV);
lcd.clear();
delay(1000);
//lcd.display();
lcd.setCursor(0,0);
lcd.print(«ADC = «);
lcd.setCursor(12,0);
lcd.print(ADCV);
delay(2000);
// Отладочная часть, при работе с экраном не используется
//Serial.print(«\t mV = «);
//Serial.print(ADCVOL,3);
lcd.setCursor(0,0);
lcd.print(«V/mV = «);
lcd.setCursor(10,0);
lcd.print(ADCVOL,1);
delay(2000);
// Отладочная часть, при работе с экраном не используется
//Serial.print(«\t tVAL = «);
//Serial.println(tVAL,3);
lcd.setCursor(0,0);
lcd.print(«ACS712 = «);
lcd.setCursor(10,0);
lcd.print(tVAL,2);
lcd.setCursor(14,0);
lcd.print(«A»);
delay(2500);
>

Читайте также:  Датчик овод мд 20м

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

#include
#define APIN A3
ACS712 dataI(APIN);
void setup() <
Serial.begin(9600);
>
void loop() <
Serial.print(«Troyka value: «);
Serial.print(dataI.readCurrentAC());
// Если требуется постоянный, то используется
// конструкция Serial.print(dataI.readCurrentDC());
Serial.println(» A»);
delay(1000);
>

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

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

const int APIN = A3; // аналоговый пин подключения микроконтроллера
void setup() <
SetSerial(9600);
>
void loop() <
// для обычного контроля любого устройства потребления,
// знание конкретной характеристики объема расходуемого
// тока не важно, главное его определить и отправить
// сообщение в com-порт
if (analogRead(APIN)>2500)
Serial.print(«Device Active)
else
Serial.print(«Device in state OFF»);
delay(2000);
>

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

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

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

Вывод

Хотелось бы заметить, что сенсоры ACS712 с 2017 года больше не производятся. Взамен их правообладатель Allegro Microsystems выпускает модификацию ACS723, которая и поставляется на мировые рынки в текущий момент времени.

Видео по теме

Источник

Adblock
detector