Датчик тока для Ардуино ACS712

Можно ли заставить работать “C2000-Ethernet”? Зачем в коридорах квартир стоят проводные пожарные датчики? 11 января 2020 г.Просмотров: 4163 Arduino

Задача проверки наличия 220в появилась для диспетчеризации работы теплого пола.

Необходимо определять – подано ли напряжение на сервоприводы клапанов коллектора теплого пола.

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

Выбор платы для контроля 220В.

Существуют в продаже специальные платы.

На вход подается исследуемая на наличие 220В линия, а на выходе будет 0 или +5В.

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

Бывают три вида плат с разным количеством измеряемых каналов: 1, 3, 8 – по цене 120, 320 и 622р соответственно.

image1-Bit AC 220V Optocoupler Isolation Module Voltage Detect Board Adaptive 3-5V For PLC1 image3 Channel Optocoupler Isolation Module AC 220V Detection Module AC 220V 8 Channel MCU TTL Level 8 Ch Optocoupler Isolation Test Board Isolated Detection Tester Module PLC Processors

Мне нужно контролировать наличие 220В нескольких направлений, поэтому заказал плату на 8 каналов.

Как работают изолированные оптопары.

Для начала необходимо выяснить – как же работает плата AC 220V 8 Channel MCU TTL Level 8 Ch Optocoupler Isolation Test Board Isolated Detection Tester Module PLC Processors.

Подключим ее к контроллеру Arduino Uno WiFi и посмотрим что будет на аналоговом входе при подаче 220В.

Пока на соответствующем контролируемом направлении сетевое питание отсутствует, на аналоговом входе Arduino мы наблюдаем значение 1023:

После подачи напряжения значение на аналоговом входе фиксируется на уровне 17-20:

Конечно имеет место переходный процесс:

Как использовать плату для контроля 220В при помощи Arduino.

Нам не нужно аналоговое значение, а нужно бинарное значение: ВКЛ/ВЫКЛ.

Получить это значение можно при помощи такого кода:

value1 = analogRead(analog1); if(value1 < 500) current1 = HIGH; else current1 = LOW; if(last1 != current1){    outflag = HIGH;    out1 = current1;    last1 = current1;    Serial.println(out1); }

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

Возможно нужно добавить область неопределенности

if(value1 < 200) current1 = HIGH; else if(value1 > 700) current1 = LOW; else // что-то непонятное

Но в моем случае это лишне усложнит код, а работает и так.

Проблемы.

Ну а куда же без них.

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

Там я контролировал питание 4-х головок-актуаторов направлений и питание насоса.

В зависимости от ситуации бывали моменты, когда плата зависала.

Исследования показали, что плата не зависала, а прекращался обмен по Serial, если включались направления, висящие на 4 и 5 аналоговых входах Arduino.

Помогла выяснить причину смена полярности подключения VSS,GND платы с оптронами к Arduino UNO.

Раньше подключение было: VSS-5.0V, GND-GND.

Теперь подключил наоборот: GND-VSS, 5.0V-GND.

После этой смены значения аналоговых входов A1-A3 стали таки зависеть от сигнала:

Значения же A4,A5 не менялись и не зависели от сигнала.

Вот листинг вывода значений A1-A5, иллюстрирующий ситуацию:

В последних показаниях все направления включены, но выходы A4,A5 показывают иные значения, чем A1-A3.

В первых строчках направления для A4,A5 и направление A1 выключены, но показания A4,A5 постоянны.

Причем причина была не в плате с оптронами, а именно в Arduino – перестановка пина A3 на направления с пинов A4,A5 показывало, что каналы платы с оптронами работают одинаково.

Причем так же вела себя и совсем другая Arduino, что, вероятно, означает что тут я делаю что-то не так, а не Arduino такая.

Решать проблему не стал и обошёлся нормальными входами A0-A3.

В экспериментах я использовал входы A1-A4 для контроля направлений и вход A5 для контроля насоса.

Перенес контроль направлений на входы A0-A3, а от контроля насоса отказался.

Вернул полярность подключения в исходную и при не задействованных A4, A5 все работает нормально.

Спец. Цена только для постоянных покупателей! Тензодатчик. Датчик для весов до 1 кг полумостовой. 330 руб  розн. 303 руб  опт. 289 руб  спец. 100.00 руб–> шт. Тензодатчик. Датчик для весов до 5 кг полумостовой. 350 руб  розн. 318 руб  опт. 311 руб  спец. 100.00 руб–> шт. Тензодатчик. Датчик для весов до 10 кг полумостовой. 380 руб  розн. 307 руб  опт. 281 руб  спец. 100.00 руб–> шт. Тензодатчик. Датчик для весов до 50 кг полумостовой. 180 руб  розн. 150 руб  опт. 144 руб  спец. 100.00 руб–> шт. Датчик расхода воды YF-S201. Расходомер (диаметр 1/2 400 руб  розн. 322 руб  опт. 296 руб  спец. 100.00 руб–> шт. Диск для Датчика скорости на Мотор-Редуктор 40 руб  розн. 19 руб  опт. 13 руб  спец. 100.00 руб–> шт. DS3231. Часы реального времени для Raspberry 190 руб  розн. 170 руб  опт. 163 руб  спец. 100.00 руб–> шт. Кнопка – триггер бистабильный переключатель KY002 240 руб  розн. 244 руб  опт. 236 руб  спец. 100.00 руб–> шт. Дальномер лазерный GY-VL53L0XV2. Датчик Ардуино 600 руб  розн. 548 руб  опт. 533 руб  спец. 100.00 руб–> шт. SW520D Датчик вибрации 100 руб  розн. 59 руб  опт. 57 руб  спец. 100.00 руб–> шт. BME280 Датчик атмосферного давления. Барометр. Влажность. 500 руб  розн. 419 руб  опт. 385 руб  спец. 100.00 руб–> шт. Датчик уровня воды. Поплавковый выключатель. 200 руб  розн. 207 руб  опт. 204 руб  спец. 100.00 руб–> шт. ACS712. Датчик тока 30A 320 руб  розн. 259 руб  опт. 252 руб  спец. 100.00 руб–> шт. Датчик линии TCRT5000 цифровой и аналоговый выход 130 руб  розн. 96 руб  опт. 59 руб  спец. 100.00 руб–> шт. ACS712. Датчик тока 5A 300 руб  розн. 264 руб  опт. 237 руб  спец. 100.00 руб–> шт. INA219 Датчик тока напряжения и мощности. 300 руб  розн. 244 руб  опт. 204 руб  спец. 100.00 руб–> шт. DHT11. Датчик температуры и влажности Ардуино. 170 руб  розн. 152 руб  опт. 148 руб  спец. 100.00 руб–> шт. DHT12. Датчик температуры и влажности Ардуино 410 руб  розн. 324 руб  опт. 281 руб  спец. 100.00 руб–> шт. DHT22 (AM2302). ДАТЧИК ТЕМПЕРАТУРЫ И ВЛАЖНОСТИ АРДУИНО. 400 руб  розн. 355 руб  опт. 340 руб  спец. 100.00 руб–> шт. DHT22 (AM2302) Датчик температуры и влажности 440 руб  розн. 376 руб  опт. 370 руб  спец. 100.00 руб–> шт. SHT10 (MHT02) Датчик температуры и влажности. 450 руб  розн. 344 руб  опт. 333 руб  спец. 100.00 руб–> шт. Датчик ультрафиолетового излучения GY-ML8511 439 руб  розн. 419 руб  опт. 411 руб  спец. 100.00 руб–> шт. Датчик сердечного ритма AD8232 ECG 720 руб  розн. 592 руб  опт. 555 руб  спец. 100.00 руб–> шт. Вольтметр. Датчик напряжения Ардуино 140 руб  розн. 105 руб  опт. 104 руб  спец. 100.00 руб–> шт. Датчик касания TTP223B большой 80 руб  розн. 76 руб  опт. 65 руб  спец. 100.00 руб–> шт. Датчик движения ИК HC-SR501 170 руб  розн. 136 руб  опт. 130 руб  спец. 100.00 руб–> шт. Датчик движения ИК HC-SR505 180 руб  розн. 164 руб  опт. 155 руб  спец. 100.00 руб–> шт. Датчик движения доплеровский RCWL-0516 150 руб  розн. 118 руб  опт. 104 руб  спец. 100.00 руб–> шт. Датчик движения микроволновый. RCWL-0516. (Индукционный) 150 руб  розн. 138 руб  опт. 133 руб  спец. 100.00 руб–> шт. Датчик распознавания цвета TCS230 GY-31 440 руб  розн. 389 руб  опт. 370 руб  спец. 100.00 руб–> шт. Датчик Дождя, уровня воды c модулем FC-37 120 руб  розн. 81 руб  опт. 67 руб  спец. 100.00 руб–> шт. Термопара К-типа с модулем MAX6675 530 руб  розн. 505 руб  опт. 481 руб  спец. 100.00 руб–> шт.

 Всем привет. Хочу поделится одним из проектов созданным на базе Arduino Pro Mini. Для меня работа с токовыми датчиками GY-712 была впервые. Перед созданием этого проекта создавался тестовый блок.
 Если вам уже интересно, тогда продолжим.
 Здесь я расскажу об одном модуле, так как описывать и зарисовывать 7 модулей не очень-то и легко.
 Решение было принято такое — используем токовый датчик GY-712 5А
По причинам: 1) Меряет переменный и постоянный ток; 2) Легко подключается к контроллеру Arduino Pro Mini; 3) Компактный; 4) Недорогой при заказе с Китая.
Давайте посмотрим на схему:
Как работает программа.
  При старте он проверяется, включен ли тумблер, если включен ты выдается звуковой сигнал и световая индикация, что бы датчик можно было откалибровать без нагрузки. Если тумблер выключить то прога выдаст звук + индикация.
 Далее идет калибровка. После калибровки – звуковой сигнал.
 И стартует основная программа. Контроль тумблера, если включен то контроль тока нагрузки лампы, если ток выше заданного порога то включить индикацию если тока нет, то выключить индикацию и выдать звуковой сигнал.
 Вот простая схема без контроля тумблера, просто световая индикация. Это на тот случай кому просто нужен будет световой индикатор нагрузки – но тогда можно просто намотать на ферритовое кольцо провода(сделать трансформатор тока) и подключить светодиодик
.
 Фото тестов:

Этим проектом всё не закончилось, далее поступил заказ на очередное устройство с корректировкой техзадания(напряжения,токи). Всё это Вы можете увидеть во втором Видео ролике(лайф канал).

 Пример IDE1.5.2:

float srab = 0.650; 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; //Переменная автоматической калибровки float first; void setup() {  pinMode(13, OUTPUT);// Пин индикатора   pinMode(12, OUTPUT); // пин звука  pinMode(2, INPUT); // пин входа реле (тумблер)  digitalWrite(13, LOW);   digitalWrite(12, LOW); while(digitalRead(2)==0 ) { // Если включен тумблер то выдать звуковой и световой сигнал пока не отключат для возможности калибровки  tone(12,2000,500);  digitalWrite(13, HIGH);  delay(500);  digitalWrite(13, LOW);  delay(500);  }  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); } // и выдать звуковой сигнал  } } else { // Иначе digitalWrite(13, LOW); // // Погасить индикатор  }  //-------------------------------------------------------------------------------------------------------------------------------------------------  delay(250); } int determineVQ(int PIN) { //Serial.print(«estimating avg. quiscent voltage:»); long VQ = 0; //read 5000 samples to stabilise value for (int i=0; i<5000; i++) { VQ += analogRead(PIN); delay(1);//depends on sampling (on filter capacitor), can be 1/80000 (80kHz) max. } VQ /= 5000; //Serial.print(map(VQ, 0, 1023, 0, 5000));Serial.println(" mV"); return int(VQ); }  float readCurrent(int PIN, int adc_zero0) { unsigned long currentAcc = 0; unsigned int count = 0; unsigned long prevMicros = micros() — sampleInterval; while (count < numSamples) { if (micros() — prevMicros >= sampleInterval) { int adc_raw = analogRead(PIN) — adc_zero0; currentAcc += (unsigned long)(adc_raw * adc_raw); ++count; prevMicros += sampleInterval; } } float rms = sqrt((float)currentAcc/(float)numSamples) * (75.7576 / 1024.0); return rms; //Serial.println(rms); }

Ссылки на модули: Arduino Pro Mini , GY-712, Реле, DC-DC .

Привет всем! Собрал для себя такой вот тестер. Характеристики: – Мозги. Arduino pro mini. – Тест радиодеталей. – Токовые клещи до 950 ампер. – Вольтметр переменки до 600 вольт. – Вольтметр постоянки до 50 вольт (можно изменить до 600) – Прозвонка. – Тестер термопар ТХА.(К.L) – Термометр до 650 градусов. – Амперметр промышленных сигналов 0-20мА. – Амперметр до 10А – Тестер датчиков ТСМ, ТСП 50-100. – Омметр – Память независимая для записи параметров измеряемых. – Меню настройки для калибровки (чтоб не подключаться к ноутбуку) Работаю на ТЭЦ цех ТАИ. Станция большая, на щиты ходить далеко. Вдруг что-то вышло из строя или крутнуть по клещам задвижку, но или мало чего. Идти до себя далеко, долго чтобы взять “Цэшку” или клещи, и потом груженый барахлом разным идти на заявку. Возникла идея сделать авометр, клещи, термометр в одном корпусе. Да еще и с разными примочками (тестер радиодеталей, память для параметров с записью в режиме реального времени, и прочие мелочи). Итак теперь к делу.

Меню тестера (не полное).

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

Режим токовых клещей. Замерял на подключеном в сеть чайнике термосе. Показывает 0.36 А. Шкала на 2 А установлена. (Шкалу для 2А сделал максимально чувствительной

Измерение тока работающей микроволновки и чайника.

Измерение статора двигателя.

И измерение одной из обмоток с определением ее индуктивности.

Далее тест биполярного транзистора. С определением его выводов (База, коллектор, эмиттер) Структуры (NPN). Коэффициент усиления (87). И напряжение открытия (597мВ).

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

И еще измерение датчика типа ТСМ50 (такие используют для измерения температуры)

Тестер замеряет сопротивление датчика, далее математика переводит оМы в температуру для 50М, 100М, 50П, 100П. Погрешность в этом режиме 0,7 градуса. Более подробно о гаджете здесь: https://youtu.be/3ikp3bh8pxY Ну вообщем такой вот аппарат. Схема, функции, и прочее делалось только под себя (свои условия работы) Все легко можно изменить, перепаяв схему (добавить датчики и прочее) или изменив софт (изменить логику работы математических обсчетов, добавить пункты меню, заставить работать новые подключенные устройства). Пользуюсь уже год, замечаний нет. рџ�Ђрџ�Ђ Естественно ТБшники не знают чем я работаю.

28 июня 2019

image

автоматизацияуниверсальное применениеInfineonновостьдатчикисредства разработки и материалыArduinoд

Датчик тока TLI4970 производства Infineon позволяет достаточно простым образом организовать измерения AC и DC тока с гальванической изоляцией 2,5 кВ от измеряемой цепи.

Построенный на основе эффекта Холла, TLI4970 измеряет ток до 25 A (50 A) c максимальной погрешностью не более 1,6% в течение всего срока жизни конечного изделия. Разрешающая способность датчика составляет 6,25 мА, измеренный 13-битный результат выдается по шине SPI.

Для простой оценки возможностей датчика можно использовать библиотеку для Arduino, где реализован полный протокол взаимодействия с датчиком. Библиотека для TLI4970 может быть свободно скачана с сайта GitHub.

image

Загрузка Ардуино-библиотеки TLI4970

Библиотека может работать с двумя отладочными платами – более простой S2GOCURSENSETLI4970TOBO1, где установлен только сам сенсор TLI4970 (потребуется внешняя плата Arduino 3.3 В) и с более сложной TLI49700502GOKITTOBO1, где дополнительно имеется контроллер XMC1100 и отладчик. Так как микросхема TLI4970-D050T4 имеет максимальное напряжение питания 3,6 В, ее нельзя подключать напрямую к тем платам Arduino, где рабочее напряжение равно 5 В.

Дополнительную информацию по датчикам и отладочным платам Infineon можно найти в статье «Отладочные наборы Sensor2Go. Простая разработка устройств с датчиками»

•••

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