Приоретизатор нагрузок

iliarr
Offline
Зарегистрирован: 08.02.2020

Logik пишет:

Трансформатор тока (ТТ) всегда работает в режиме близком к КЗ вторички. Поэтому должен быть нагружен сопротивлением не более чем приведено в даташите. При КЗ в первичке ток во вторичке поднимается не так радикально, ТТ просто мощности не хватит.  Выпрямитель в вторичку ТТ надо осторожно рассматривать, как правило напряжения с ТТ снимаются маленькие, падение напряжения  на диодах сильно портить будет. Просто делитель на номиналах в десяток КОм решит согласование с АЦП МК. Отрицательные полуволны и броски тока при КЗ ограничатся за счет тока в пин.

Для трансформатора тока, в варианте измерения тока , входящего в дом, первичной обмоткой является сам провод фазы. На него одевается вторичная обмотка в виде катушки. Сейчас рассматриваю именно катушку , а не магнитопровод с обмоткой и датчиком Холла в разрые магнитопровода, вроде WCS1800 ( есть готовые сборки на этом модуле , но не нашёл их тестов/описаний).
Напряжение/ток во вторичной обмотке зависит от количества витков и сечения провода. Допустимое напряжение от изоляции проводов. 
Изначально , я взял SCT-013-000 YHDC 30A  , на корпусе написано 30А/1В т.е. на встроенном резисторе ( там внутри резистор и диод ), при токе проводника, на который повешен датчик, выход будет 1В (наверное , считается от нуля и амплитуда может быть 2В). Для выпрямления, такое напряжение мало.Т.е. число витков катушки мало. 
У ZMCT103C витков , как понимаю, больше и на 5А проходящей через отверстие датчика, уже идёт 5В на выходе, нагруженном на резистор. Я снял резистор с выходов катушки, подключил диодный мост с конденсатором и уже к нему подключил нагрузочный резистор.  Этим теряется возможность измерения малых проходящих токов, когда диоды выпрямителя ещё не могут открыться , что для моих задач допустимо.  Грубо говоря, получился сетевой блок питания на малый ток.  Более того, постоянное напряжение легко передать на 10м по проводу, от возможных помех поставить на том конце дроссель и резистивный делитель. В теории, всё должно нормально работать.
Что на практике, пока не знаю т.к. лишний раз переделывать щиток не хочется ,да и нагрузки 25А у меня пока нет. 
 
Почему может выйти из строя катушка, намотанная вокруг провода фазы.
1. Без нагрузки ( для этого ставят резистор ) , напряжение холостого хода может сильно вырасти и пробить изоляцию провода катушки. 
2. Если число  витков катушки велико и с неё снимается ток больше допустимого, катушка может перегреться. 
 
Какие ошибки в моих рассуждениях? 
ВН
Offline
Зарегистрирован: 25.02.2016

iliarr пишет:

Мне понравился вариант ZMCT103C / DL-CT08CL5-20A/10mA с последующим выпрямлением и нагрузкой на резистивный делитель. Это позволит передать по витой паре 15-25В на нужные мне 10м, на том конце разделить и подать на АЦП. 

 

откуда вы там собрались найти 15-25В, переведя ТТ в режим ТН?

зачем в витой паре 15-25В? витая пара это согласованная линия на 110 Ом   

для выпрямителя желательны такие диоды https://aliexpress.ru/item/32854110199.html

https://static.chipdip.ru/lib/204/DOC000204821.pdf

ВН
Offline
Зарегистрирован: 25.02.2016

iliarr пишет:
Какие ошибки в моих рассуждениях? 

про трансформатор тока все сплошная ошибка, ТТ на ток выдает ТОК, а не напряжение, и потому так и называется.

iliarr
Offline
Зарегистрирован: 08.02.2020

ВН пишет:

откуда вы там собрались найти 15-25В, переведя ТТ в режим ТН?

зачем в витой паре 15-25В? витая пара это согласованная линия на 110 Ом   

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

25В получилось из эксперимента с ZMCT103C , нагруженной на выпрямитель из обычных выпрямительных диодов, конденсатор и резистор. Экспериментально получилось 1В напряжения на 1А измеряемого тока. На 25А будет 25В на этой катушке.  DL-CT08CL5-20A/10mA пока нет, с ней может меньше получиться.

Витая пара - это 8 медных жил в общем кабеле, попарно сплетённые, что снижает восприимчивость к наводками. Удобно  и не дорого. В одном из вариантов схемы умного дома, собираюсь пускать по ней 9В питания от перепаянного коммутатора к Ардуинам по 2м свободным парам. 

iliarr
Offline
Зарегистрирован: 08.02.2020

ВН пишет:

 про трансформатор тока все сплошная ошибка, ТТ на ток выдает ТОК, а не напряжение, и потому так и называется.

Хорошо. Пусть называется. Что мне мешает, с катушки снять ток и преобразовать его в напряжение? АЦП по-любому напряжение измеряет и оцифровывает. С катушки трансформатора тока это преобразование идёт так или иначе. 

ВН
Offline
Зарегистрирован: 25.02.2016

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

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

ваши 10к отличаются от 50 Ом в ДВЕСТИ раз, машину так заправлять не пробовали? хоть в + хоть в -  шикарный результат гарантирован.

 

 

iliarr
Offline
Зарегистрирован: 08.02.2020

ВН пишет:

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

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

ваши 10к отличаются от 50 Ом в ДВЕСТИ раз, машину так заправлять не пробовали? хоть в + хоть в -  шикарный результат гарантирован.

Почему нельзя? Точность снизится - мне это допустимо. 

Расскажите физический смысл отличия катушки вторичной обмотки на магнитопроводе трансформатора напряжения от катушки вокруг силового провода в трансформаторе тока. Может быть, я действительно не понимаю. И там и там катушка, которая воспринимает электромагнитное поле. И там и там нагружена. Только одна силовая, другая измерительная. На маломощных ТН провод мотают тот-же т.к. выпускается он серийно. Снимаемая мощность задаётся резистором нагрузки, ещё от выпрямительных диодов зависит. Напряжение на катушке не растёт бесконечно и не приводит к пробою. Снимаемая мощность, с той катушкой что экспериментировал, на 5А была 25мВт, на 25А будет 125мВт , перегреваться не должна. Выходное напряжение имеет хорошую зависимость от тока, проходящего по измеряемому проводу. 

iliarr
Offline
Зарегистрирован: 08.02.2020

Вот такое ещё измеритель тока есть  WCS1800 модуль датчика тока холла DC AC Модуль обнаружения 30A серийный выход защита от перегрузки по току , пороговое реле и цифровой выход. Вот не нашёл только описания к нему с тестами. 

ВН
Offline
Зарегистрирован: 25.02.2016

iliarr пишет:
Расскажите физический смысл отличия катушки вторичной обмотки на магнитопроводе трансформатора напряжения от катушки вокруг силового провода в трансформаторе тока. Может быть, я действительно не понимаю.

самыми простыми словами смысл отличия в том, что постоянная времени L/R у ТТ много больше периода частоты,а у ТН много меньше. где L - это индуктивность обмотки. а R - сопротивление нагрузки.

Про высокое на ненагруженном ТТ вам уже дважды писали, толку - ноль. 

Не желаете ни учиться, ни даже просто слушать. но Ваши тараканы - сугубо ваши проблемы.

 

iliarr
Offline
Зарегистрирован: 08.02.2020

Читаю про время и ток отключения автомата серии С . При 2х кратном превышении номинала, он сработает через 10 секунд. 

Т.е. доли секунды мне могут быть не критичны для отключения нагрузки. Можно поставить SCT-013-000 YHDC 30A с библиотекой производителя и не переживать. Более стандартно , хоть и не так красиво, в сравнении с катушкой ТТ , применяемоей как ТН. Посмотрим на чём остановлюсь. 

Спасибо за подсказки. 

iliarr
Offline
Зарегистрирован: 08.02.2020

ВН пишет:

iliarr пишет:
Расскажите физический смысл отличия катушки вторичной обмотки на магнитопроводе трансформатора напряжения от катушки вокруг силового провода в трансформаторе тока. Может быть, я действительно не понимаю.

самыми простыми словами смысл отличия в том, что постоянная времени L/R у ТТ много больше периода частоты,а у ТН много меньше. где L - это индуктивность обмотки. а R - сопротивление нагрузки.

Про высокое на ненагруженном ТТ вам уже дважды писали, толку - ноль. 

Не желаете ни учиться, ни даже просто слушать. но Ваши тараканы - сугубо ваши проблемы.

 

Спасибо. Этого я действительно не понял. 

iliarr
Offline
Зарегистрирован: 08.02.2020

Нашёл Измерение времени выполнения функций и команд Ардуино.

На базе кода из статьи и примера из библиотеки EmonLib 

#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance
// определение времени выполнения программного блока Ардуино

unsigned int  timerValue; // значение таймера

void setup()
{  
  Serial.begin(9600);  // инициализируем последовательный порт, скорость 9600
  // установки таймера 1
  TCCR1A = 0;
  TCCR1B = 0;  
  
  emon1.current(0, 111.1);             // Current: input pin, calibration.
}

void loop()
{
    noInterrupts(); // запрет прерываний
  TCNT1H = 0; // сброс таймера
  TCNT1L = 0;
  TCCR1B = 1; // разрешение работы таймера

  // ---------- исследуемый программный блок ---------

  double Irms = emon1.calcIrms(1480);  // Calculate Irms only
    // -------------------------------------------------
    
TCCR1B = 0; // остановка таймера
  timerValue = (unsigned int)TCNT1L | ((unsigned int)TCNT1H << 8); // чтение таймера
  interrupts(); // разрешение прерываний
      
  // вывод на компьютер
  Serial.print( (float)(timerValue - 2) * 0.0625);
  Serial.print(" mks   ");
  Serial.println(Irms);
  delay(500);
}

Результаты с момента запуска:

1673.38 mks   143.01
3923.00 mks   33.91
3658.50 mks   8.35
2758.50 mks   3.27
956.56 mks   2.72
1065.50 mks   2.70
889.19 mks   2.64
835.56 mks   2.67
944.69 mks   2.71
953.81 mks   2.69
845.25 mks   2.67
742.25 mks   2.69
1015.94 mks   2.70
881.19 mks   2.65
888.19 mks   2.67
1040.63 mks   2.68
767.75 mks   2.70
865.19 mks   2.63
913.75 mks   2.63
899.75 mks   2.61
874.44 mks   2.59
725.50 mks   2.63
1018.06 mks   2.59
785.94 mks   2.63
1148.88 mks   2.61
868.94 mks   2.62
689.38 mks   2.60
945.06 mks   2.66
938.25 mks   2.65
1076.44 mks   2.68
980.06 mks   2.68
794.13 mks   2.66
845.81 mks   2.69
1029.44 mks   2.69
680.88 mks   2.65
936.56 mks   2.66
1073.88 mks   2.67
715.56 mks   2.68
1027.63 mks   2.66
799.38 mks   2.67
941.31 mks   2.69
837.75 mks   2.66
1148.75 mks   2.66
561.25 mks   2.68

Т.е. справляется за 0.5-1мс , а период 50Гц = 20мс

b707
Offline
Зарегистрирован: 26.05.2017

цифры времени однозначно говорят, что в коде ошибка.

Это компьютер, тут не может быть разброса от 750 до 1150 мкс при выполнении однотипных операций.

У вас период времени примерно 1 мс - это означает что никакие пляски с таймером не нужны, воспользуйтесь функцией микрос.

b707
Offline
Зарегистрирован: 26.05.2017

Добавка.

Думаю, эти цифры вовсе не имеют ничего общего с реальностью.

Во первых - вы не настроили частоту таймера. Вы вычисляете время из расчета, что таймер считает на 16 МГц - но так ли это? В стандартных настройках ардуино частота Таймера1 - 128 или 256 Кгц

В-вторых - и это важнее - вы не проверяете счетчик на переполнение. Например, для 16 Мгц это означает, что счетчик отсчитает примерно 4 мс и обнулится, таким образом у вас нималейшей возможности узнать, занимает ли ваш код 1 мс или 5 мс. или 9мс... во всех случаях вы будете получать только остаток от деления на 4 - то есть 1 мс

Кстати - обратите внимание, про это написано и по той ссылке, откуда вы взяли этот код. И еще там есть информация, что analogRead() занимает примерно 100мкс. Вы в своем коде выполняете сотни считываний, из чело следует что этот код никак не может занимать 700 мкс

iliarr
Offline
Зарегистрирован: 08.02.2020

b707 пишет:

Добавка.

Думаю, эти цифры вовсе не имеют ничего общего с реальностью.

Во первых - вы не настроили частоту таймера. Вы вычисляете время из расчета, что таймер считает на 16 МГц - но так ли это? В стандартных настройках ардуино частота Таймера1 - 128 или 256 Кгц

В-вторых - и это важнее - вы не проверяете счетчик на переполнение. Например, для 16 Мгц это означает, что счетчик отсчитает примерно 4 мс и обнулится, таким образом у вас нималейшей возможности узнать, занимает ли ваш код 1 мс или 5 мс. или 9мс... во всех случаях вы будете получать только остаток от деления на 4 - то есть 1 мс

Кстати - обратите внимание, про это написано и по той ссылке, откуда вы взяли этот код. И еще там есть информация, что analogRead() занимает примерно 100мкс. Вы в своем коде выполняете сотни считываний, из чело следует что этот код никак не может занимать 700 мкс

Спасибо. 

b707
Offline
Зарегистрирован: 26.05.2017

попробуйте вот этот код:

#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance
// определение времени выполнения программного блока Ардуино

void setup()
{  
  Serial.begin(9600);  // инициализируем последовательный порт, скорость 9600
  emon1.current(0, 111.1);             // Current: input pin, calibration.
}

void loop()
{
  unsigned long irms_time = micros();
  // ---------- исследуемый программный блок ---------

  double Irms = emon1.calcIrms(1480);  // Calculate Irms only
    // -------------------------------------------------
    
irms_time = micros() - irms_time;
      
  // вывод на компьютер
  Serial.print( irms_time);
  Serial.print(" mks   ");
  Serial.println(Irms);
  delay(500);
}

 

SLKH
Offline
Зарегистрирован: 17.08.2015

iliarr пишет:

Нашёл Измерение времени выполнения функций и команд Ардуино.

На базе кода из статьи и примера из библиотеки EmonLib 


Т.е. справляется за 0.5-1мс , а период 50Гц = 20мс

ну так она справляется с единичным измерением мгновенного значения (достоверность программы сейчас не рассматриваем). ну измерили, что в какой-то произвольный момент ток около 0 - что это нам дает? возможно, через 5 ms там 50А будет.

нужно знать эффективное значение тока, как минимум, за 1 период, а лучше (для исключения ложных срабатываний), за несколько. Так что время будет n*20 ms при самой быстродействующем процессоре.

 

b707
Offline
Зарегистрирован: 26.05.2017

SLKH пишет:

нужно знать эффективное значение тока, как минимум, за 1 период, а лучше (для исключения ложных срабатываний), за несколько. Так что время будет n*20 ms при самой быстродействующем процессоре.

ну да, из этого следует, что расчет Irms менее чем за 20мс вообще смысла не имеет и поэтому все прикидки ТС полностью неверные

iliarr
Offline
Зарегистрирован: 08.02.2020
#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance
// определение времени выполнения программного блока Ардуино

unsigned int  timerValue; // значение таймера

void setup()
{  
  Serial.begin(9600);  // инициализируем последовательный порт, скорость 9600
  // установки таймера 1
  TCCR1A = 0;
  TCCR1B = 0;  
  
  emon1.current(0, 111.1);             // Current: input pin, calibration.
}

void loop()
{
    noInterrupts(); // запрет прерываний
  TCNT1H = 0; // сброс таймера
  TCNT1L = 0;
  TCCR1B = 1; // разрешение работы таймера

  // ---------- исследуемый программный блок ---------

  double Irms = emon1.calcIrms(80);  // Calculate Irms only
    // -------------------------------------------------
    
TCCR1B = 0; // остановка таймера
  timerValue = (unsigned int)TCNT1L | ((unsigned int)TCNT1H << 8); // чтение таймера
  interrupts(); // разрешение прерываний
      
  // вывод на компьютер
  Serial.print( (float)(timerValue - 2) * 0.0625);
  Serial.print(" mks   ");
  Serial.println(Irms);
  delay(500);
}

Выдаёт : 

2912.19 mks   1.40
2897.69 mks   1.31
2916.81 mks   1.24
2932.69 mks   1.13
2898.81 mks   1.05
2927.50 mks   0.95
2912.12 mks   0.96
2924.94 mks   0.87
2913.94 mks   0.74
2932.44 mks   0.71
2903.37 mks   0.67

1480 ( параметр  в   emon1.calcIrms() из библиотеки ) / 80 ( то сколько поставил в измерения ) = 18.5 . 2.9мс *18.5 = 53.65 мс т.е. примерно 2.5-3 периода ( 1с/50= 20мс ) синусоиды в электрической сети. 

3 канала emon1.calcIrms(1480) будут работать примерно 180мс т.е. 8-9 периодов сети. Время реакции  контроллера может быть 200-250мс + время реакции реле ( не знаю сколько , но щёлкает быстро), в итоге можно уложиться в 0.5с , что сравнимо с временем пусковых токов. 

iliarr
Offline
Зарегистрирован: 08.02.2020

b707 пишет:

попробуйте вот этот код:

#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance
// определение времени выполнения программного блока Ардуино

void setup()
{  
  Serial.begin(9600);  // инициализируем последовательный порт, скорость 9600
  emon1.current(0, 111.1);             // Current: input pin, calibration.
}

void loop()
{
  unsigned long irms_time = micros();
  // ---------- исследуемый программный блок ---------

  double Irms = emon1.calcIrms(1480);  // Calculate Irms only
    // -------------------------------------------------
    
irms_time = micros() - irms_time;
      
  // вывод на компьютер
  Serial.print( irms_time);
  Serial.print(" mks   ");
  Serial.println(Irms);
  delay(500);
}

 

Спасибо. Выдаёт 250мс на 1 канале, 750мс на 3х каналах. И это точнее чем то что я примерно-приблизительно в посте выше. Получается, время реакции , когда 3 датчика на 1 ардуине + время срабатывания механического реле =  около 1с.  1 датчик на ардуино + реле , около 0.5с.

Нравится мне когда из домыслов в цифры переходит, чётче и яснее становится. 

b707
Offline
Зарегистрирован: 26.05.2017

iliarr пишет:

Спасибо. Выдаёт 250мс на 1 канале, 750мс на 3х каналах. И это точнее чем то что я примерно-приблизительно в посте выше.

Вот именно. А никакие не 700 мкс...

Но мне совершенно непонятно, как вы получаете настолько разные оценки - то у вас 60 мс на 1480 измерений, то 250... Ошибка в 4 раза - это не называется "стало точнее"... будьте аккуратнее с цифрами.

Если почитать документацию к библиотеке Emon - функция calcRms() делает примерно 100 - 110 измерений на один цикл переменного тока. Таким образом, 1480 измерений это примерно 14 -15 циклов, и соответвенно, они должны занимать 20 * 14 - порядка 280 мс.

Кроме того, обратите внимание, что если вы задаете число измерений - а) малое и б) не равное целому числу периодов - ток будет измерен с большой ошибкй. Так что ваше измерение 80 циклов - вообще ни о чем

iliarr
Offline
Зарегистрирован: 08.02.2020

b707 пишет:

iliarr пишет:

Спасибо. Выдаёт 250мс на 1 канале, 750мс на 3х каналах. И это точнее чем то что я примерно-приблизительно в посте выше.

Вот именно. А никакие не 700 мкс...

Но мне совершенно непонятно, как вы получаете настолько разные оценки - то у вас 60 мс на 1480 измерений, то 250... Ошибка в 4 раза - это не называется "стало точнее"... будьте аккуратнее с цифрами.

Если почитать документацию к библиотеке Emon - функция calcRms() делает примерно 100 - 110 измерений на один цикл переменного тока. Таким образом, 1480 измерений это примерно 14 -15 циклов, и соответвенно, они должны занимать 20 * 14 - порядка 280 мс.

Кроме того, обратите внимание, что если вы задаете число измерений - а) малое и б) не равное целому числу периодов - ток будет измерен с большой ошибкй. Так что ваше измерение 80 циклов - вообще ни о чем

80 циклов я взял из стабильности отображения времени, из-за переполнения таймера. Больше циклов уже значения времени разнятся. Просто чтобы оценить время выполнения имеющимся способом. 

iliarr
Offline
Зарегистрирован: 08.02.2020
У меня сейчас 3 концепции умного дома:
1. Распределённая . На каждой функциональной единице не зависимая Ардуино  с экраном, функционирующая самостоятельно. 
2. Гибридная, к ардуинам добавляются ethernet ( W5100 / W5500 ) web сервер , центральный сервер на NodeJS опрашивает ардуины , раздаёт команды и красиво отображает в HTML5 .
3. Централизованная. Raspberry pi с расширителями цифровых и аналоговых интерфейсов по i2c ( ардуины или расширители портов ) и 1-wire датчики, реле расположены вблии Raspberry pi , тот же NodeJS для управления/отображения. 
 
C++ почти не знаю, даже что-то простое вызывает трудности, хочется минимизировать и упростить код для Ардуино. Приоретизатор нагрузок сейчас - краеугольный камень в выборе варианта. 
b707
Offline
Зарегистрирован: 26.05.2017

iliarr пишет:

У меня сейчас 3 концепции умного дома:
1. Распределённая .
2. Гибридная,
3. Централизованная.
 
C++ почти не знаю, даже что-то простое вызывает трудности, хочется минимизировать и упростить код для Ардуино. Приоретизатор нагрузок сейчас - краеугольный камень в выборе варианта. 

не ясно, как от ПН зависит выбор варианта.

Но в целом пп 1, 2, 3 с последним абзацем не сочетается никак. Не зная С++ - как вы собрались осуществлять эти варианты? Минимизировать и упростить код может тот, кто в нем разбирается. У новичков, наоборот, обычно даже самые простые вещи выливаются в сотни и тысячи строк.

 

iliarr
Offline
Зарегистрирован: 08.02.2020

b707 пишет:

1, 2, 3 с последним абзацем не сочетается никак. Не зная С++ - как вы собрались осуществлять эти варианты? Минимизировать и упростить код может тот, кто в нем разбирается. У новичков, наоборот, обычно даже самые простые вещи выливаются в сотни и тысячи строк.

Предлагаю вариант 4 - покупная.

Поэтому Ардуино, а не ESP32. Здесь библиотеки просто работают и куча примеров. Поэтому ethernet, а не RS-485 или 1-wire slave . На ESP32 у меня , без особых усилий заработал web и webcsocket сервер, просто из примеров собрал чуть осмыслив, чтобы скомпоновать код. Но EmonLib выдавала не пойми что и i2c датчик ESP32 не увидела ( возможно я не так что-то сделал), а на Ардуине это заработало сразу.

b707 пишет:

не ясно, как от ПН зависит выбор варианта.

Очень просто. :-)

Если выход с датчика тока ( после выпрямления )идёт 1В на 1А измеряемого тока, я передаю на 10м постоянный ток 5-25В , который не боится помех ( можно и дроссель поставить будет ) , делю резисторами, измеряю на АЦП . Централизованный вариант очень хорошо реализуется, дальше Linux ( Raspberry pi ) и NodeJS + HTML5.  Если в щитке стоит Ардуина, мне надо делать web- сервер для отображения, и тогда уже гибридная схема предпочтительна ( в ней экраны надо ставить к ардуинам, а это красивые корпуса, хотя есть варианты и без корпусов ). 

b707
Offline
Зарегистрирован: 26.05.2017

iliarr пишет:

b707 пишет:

не ясно, как от ПН зависит выбор варианта.

Очень просто. :-)

Если выход с датчика тока ( после выпрямления )идёт 1В на 1А измеряемого тока, я передаю на 10м постоянный ток 5-25В , который не боится помех ( можно и дроссель поставить будет ) , делю резисторами, измеряю на АЦП . Централизованный вариант очень хорошо реализуется, дальше Linux ( Raspberry pi ) и NodeJS + HTML5.  Если в щитке стоит Ардуина, мне надо делать web- сервер для отображения, и тогда уже гибридная схема предпочтительна ( в ней экраны надо ставить к ардуинам, а это красивые корпуса, хотя есть варианты и без корпусов ). 

начал писать и потом все стер. Вы же все равно никого не слушаете. На общие темы с вами дискутировать бесполезно.

Только два конкретных замечания.

1. RS485 легче интернета. И для ардуины и для программиста. Вы даже не представляете, насколько.

2. Ардуина Уно-Нано экран, интернет и монитор тока одновременно не потянет. Если выберете этот вариант - берите как минимум Мегу на каждый выносной датчик

 

Вообще, когда вы года через четыре... соберете более-менее рабочий прототип - вы поймете, почему в фирмах за это берут такие деньги.

iliarr
Offline
Зарегистрирован: 08.02.2020

b707 пишет:

начал писать и потом все стер. Вы же все равно никого не слушаете. На общие темы с вами дискутировать бесполезно.

Только два конкретных замечания.

1. RS485 легче интернета. И для ардуины и для программиста. Вы даже не представляете, насколько.

2. Ардуина Уно-Нано экран, интернет и монитор тока одновременно не потянет. Если выберете этот вариант - берите как минимум Мегу на каждый выносной датчик

 

Вообще, когда вы года через четыре... соберете более-менее рабочий прототип - вы поймете, почему в фирмах за это берут такие деньги.

Дом построил в 2 руки ( одноэтажный каркас 170м2 ) , 3 бака под ТА сварил ( тоже говорили что только профессионалы это могут сделать ), потому , уверенность в своих силах есть. А вот практического опыта нет, а без него на мелочах бывает спотыкаюсь. 

Вот например, 5 вольтовая сборка на G3MB-202P ( семисторная сборка на 5В питания и 2А тока ) на 3.3В работает нормально, а сборка на SRD-05VDC ( механическое реле с обвязкой ) от 3.3В не работает. Это вчера попробовал. 

Или экранчик 1602 , при работе RS-485 проседает яркость при питании ардуины от USB зарядки 2А . Т.е. такой экранчик уже не поставишь в комнаты со связью ардуин по RS-485 т.к. это незначительное мигание будет раздражать и вызывать впечатление некачественности. 

На  SCT-013-000 YHDC 30A и EmonLib , вариант с web следующий: по 1 ардуина на фазу ( SCT-013-000 , реле на ТЭНы , отдача показаний по i2c ), 4я ардуино ( приём показаний от 3х фазных ардуин , RTC для ночного тарифа , web-сервер или клиент, что проще будет). Ардуине через http надо отдать показания датчиков ( строка в http ), может быть, получить более точное время раз в сутки.  Так вот, сможет ли 1-2-5 раз в секунду делать это? По-идее, да, а что на практике? Подскажите из опыта?

В варианте с подключением Ардуин к серверу через ethernet , получаются стандартные технологии, готовые отлаженные библиотеки, недорогой роутер, топология звезда и всё это уже сделано и отработано, только применить. Только что посмотрел код примера web-клиента , всё не сложно совсем. 

RS-485 требует модуль интерфейса на стороне сервера, драйверы, программную реализацию. В компьютер, который будет сервером, надо будет включать USB переходник, который может зависнуть или потерять контакт , его надо будет не задеть, не оторвать провода и прочие сложности, которых нет ( или уже решены ) в ethernet. Получается, в итоге, RS-485 сложнее в моей реализации. 

 

SLKH
Offline
Зарегистрирован: 17.08.2015

iliarr пишет:

b707 пишет:

попробуйте вот этот код:

#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance
// определение времени выполнения программного блока Ардуино

void setup()
{  
  Serial.begin(9600);  // инициализируем последовательный порт, скорость 9600
  emon1.current(0, 111.1);             // Current: input pin, calibration.
}

void loop()
{
  unsigned long irms_time = micros();
  // ---------- исследуемый программный блок ---------

  double Irms = emon1.calcIrms(1480);  // Calculate Irms only
    // -------------------------------------------------
    
irms_time = micros() - irms_time;
      
  // вывод на компьютер
  Serial.print( irms_time);
  Serial.print(" mks   ");
  Serial.println(Irms);
  delay(500);
}

 

Спасибо. Выдаёт 250мс на 1 канале, 750мс на 3х каналах. 

1. Цитата из себя, любимого: "измерения в 3 фазах последовательно дают величину, близкую к секунде." (#27)

2. Если отказаться от чудесной библиотеки, то ардуина измерит токи в трёх фазах за то же самое время, что и в одной. (см. п.3 в том же #27). 

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

iliarr
Offline
Зарегистрирован: 08.02.2020

SLKH пишет:

1. Цитата из себя, любимого: "измерения в 3 фазах последовательно дают величину, близкую к секунде." (#27)

2. Если отказаться от чудесной библиотеки, то ардуина измерит токи в трёх фазах за то же самое время, что и в одной. (см. п.3 в том же #27). 

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

Думал сегодня над алгоритмом как это сделать. Если есть статься об этом, дайте ссылку пожалуйста. 

analogRead() работает около работает около 100мкс ( 110мкс из теста с кодом выше ). 180 чтений за 1/50 секунды =20мс , на 3 контакта , по 60 чтений на контакт. Читаем 50-60 раз последовательно 3 канала , результаты заносим в массив, либо сразу ищем максимум и минимум среди значений каждого канала. Вычитаем из максимума минимум, получаем амплитуду, делим на корень из 2 , получаем действенное значение , дальше подбираем поправочный коэффициент и получаем ток. Смотрим что получилось. возможно, берём среднее из нескольких одно-периодных опросов. Это первое что пришло в голову. 

Если на одной ардуине и датчики тока, и RTC и управление реле, и web ( клиент или сервер ), всё проще будет в реализации. Нет сейчас ethernet модуля проверить. 

ВН
Offline
Зарегистрирован: 25.02.2016

iliarr пишет:

 ... я передаю на 10м постоянный ток 5-25В ...

это сущая глупость, ток в амперах напряжение в вольтах. 

Не надо стремиться передавать напряжение на 10м, помехи в линии зависят от сопротивления нагрузки и согласовании линии, а вовсе не от вольтов сигнала. Эта истерия прекратилась уже давным- давно, когда был похерен RS-232 c его +-15в и ударной дальностью в 10-15м. 

b707
Offline
Зарегистрирован: 26.05.2017

iliarr пишет:

Или экранчик 1602 , при работе RS-485 проседает яркость при питании ардуины от USB зарядки 2А . Т.е. такой экранчик уже не поставишь в комнаты со связью ардуин по RS-485

Я вижу Вы никогда не сомневаетесь, что все делаете правильно. И когда "экранчик 1602 , при работе RS-485 проседает яркость" - вы уверены, что это потому что RS485 плохой, а вовсе не потому. что у вас кривые руки. Хотя даю вам 100% , что это все-таки руки, потому для работы экрана 1602 и RS485 более чем достаточно БП в полампера.

Точно так же, когда ЕСП32 не заработал с датчиком тока - вы сразу решили, что проблема в ЕСП, а вовсе не в том, что вы полгный профан в микроконтроллерах и программировании.

И главное, даже когда у вас типа "получается" - нет никакой гарантии что результат хоть чем-то ценен. Как в случае с измерением длительности работы библиотеки Emon сегодня. Взяли код, в котором не понимаете ни буквы, намерили какие-то цифры и даже не подумали хоть как-то прикинуть, похожа ли она на правду?

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

Страшусь даже представить, что вы там наварили в своих баках ТА.

 

 

iliarr
Offline
Зарегистрирован: 08.02.2020

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

То что мне говорят что нельзя использовать катушку ТТ как катушку ТН , мотивируя тем что она разрабатывалась для другого, и ладно. L/R катушки... L определяет количество витков и сердечник , R - толщина провода. Если внутри катушки много витков тонкого провода и R = десятки Ом , и что с того? За счёт индуктивности катушка будет накапливать энергию, за счёт сопротивления провода , сбрасывая её, нагреваться? Пусть. Можно подобрать катушку и снимаемую мощность так, чтобы перегрева не происходило. 

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

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

 

Сейчас рабочий вариант : на каждую фазу по SCT-013-000 с библиотекой производителя , BTA41-600B через MOC3041 ( нет понимания о размере радиатора и компоновке в щитке для отвода тепла ), возможно, ещё трансформатор напряжения для измерения напряжения в сети. Включение только ночью, пока не знаю, ставить экранчики, кнопки и RTC на каждую, как-то не очень. Возможно будет просто 0/1 от внешнего управления. 

Передача показаний на сервер. Смотрю библиотеку OneWireHub   , там есть пример DS18B20_asInterface.ino , вроде не сложно, передают показания разных датчиков как температуру DS18B20 . DS18B20  очень распространён, везде есть простые примеры применения. 

 

Т.е. сейчас централизованный вариант - основной. Проблема в Raspberry pi , которая в базе работает с SSD ( сдыхает через год от исчерпания ресурса перезаписи ). Есть инструкции как перенести всё в RAM и перевести SSD в режим "только чтение" , но это усложнение. Было бы проще пустить всё с SSD через SATA , но пока не нашёл такой одноплатный компьютер , недорогой и с хорошими отзывами. 

Такой сайт нашёл: The Single Board Computer Database

b707
Offline
Зарегистрирован: 26.05.2017

iliarr пишет:

Проблема в Raspberry pi , которая в базе работает с SSD ( сдыхает через год от исчерпания ресурса перезаписи ). Есть инструкции как перенести всё в RAM и перевести SSD в режим "только чтение" , но это усложнение. Было бы проще пустить всё с SSD через SATA , но пока не нашёл такой одноплатный компьютер , недорогой и с хорошими отзывами.

опять сплошная каша в голове у вас. Процитированное выше - наполовину бред.

Вы, похоже, абсолютно все так в жизни делаете - "я профан и разбираться не собираюсь".

подключить три фазы к одной ардуине мозгов так и не хватило? смирились? А как же "у меня все получается, я бачки для ТА сам сварил"?

 

b707
Offline
Зарегистрирован: 26.05.2017

iliarr пишет:

То что мне говорят что нельзя использовать катушку ТТ как катушку ТН , мотивируя тем что она разрабатывалась для другого, и ладно. L/R катушки... L определяет количество витков и сердечник , R - толщина провода. Если внутри катушки много витков тонкого провода и R = десятки Ом , и что с того?

.....

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

имхо, после таких заявлений все, кто вам до того помогал - должны бы послать вас в Ж.

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

Коллеги, по-моему эта тема - троллинг чистой воды

iliarr
Offline
Зарегистрирован: 08.02.2020

b707 пишет:

iliarr пишет:

Проблема в Raspberry pi , которая в базе работает с SSD ( сдыхает через год от исчерпания ресурса перезаписи ). Есть инструкции как перенести всё в RAM и перевести SSD в режим "только чтение" , но это усложнение. Было бы проще пустить всё с SSD через SATA , но пока не нашёл такой одноплатный компьютер , недорогой и с хорошими отзывами.

опять сплошная каша в голове у вас. Процитированное выше - наполовину бред.

Вы, похоже, абсолютно все так в жизни делаете - "я профан и разбираться не собираюсь".

подключить три фазы к одной ардуине мозгов так и не хватило? смирились? А как же "у меня все получается, я бачки для ТА сам сварил"?

 

Это да. Абревиатуру названия не так написал. По-смыслу всё понятно, а с придирками и агрессией нет. 

Raspberry pi  в стандарте - SD карта с малым количеством перезаписи. 

iliarr
Offline
Зарегистрирован: 08.02.2020

b707 пишет:

iliarr пишет:

То что мне говорят что нельзя использовать катушку ТТ как катушку ТН , мотивируя тем что она разрабатывалась для другого, и ладно. L/R катушки... L определяет количество витков и сердечник , R - толщина провода. Если внутри катушки много витков тонкого провода и R = десятки Ом , и что с того?

.....

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

имхо, после таких заявлений все, кто вам до того помогал - должны бы послать вас в Ж.

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

Коллеги, по-моему эта тема - троллинг чистой воды

Слушайте, если у Вас в жизни что-то не удалось, я тут не при чём. И ругаться я ни с кем не хочу, не нужно оно мне. 

ВН
Offline
Зарегистрирован: 25.02.2016

b707 пишет:

Коллеги, по-моему эта тема - троллинг чистой воды

да тут все по классике

Правдин. Дверь, например, какое имя: существительное или прилагательное?

Митрофан. Дверь? Котора дверь?

Правдин. Котора дверь! Вот эта.

Митрофан. Эта? Прилагательна.

Правдин. Почему ж?

Митрофан. Потому что она приложена к своему месту. Вон у чулана шеста неделя дверь стоит еще не навешена: так та покамест существительна.

Удачных ваяний ТС! Электроника сама все расставит по местам.

iliarr
Offline
Зарегистрирован: 08.02.2020

На базе статьи : Амперметр на ардуино для умного дома  сделал: 


//Michael Klements
//The DIY Life
//27 October 2014
#include "EmonLib.h"                   // Include Emon Library
//EnergyMonitor emon0;                   // Create an instance

const int circle = 60;


void setup() 
{ 
  Serial.begin(115200);
 // emon0.current(0, 111.1);             // Current: input pin, calibration.

}
 
void loop() 
{ 

int Iread0 = 0;
int Iread1 = 0;
int Iread2 = 0;
int Imin0=1000;
int Imin1=1000;
int Imin2=1000;
int Imax0=0; 
int Imax1=0; 
int Imax2=0; 
  unsigned long irms_time = micros();

  for (int i=0 ; i<circle; i++)  //Monitors and logs the current input for 200 cycles to determine max and min current
  {
    Iread0 = analogRead(A0);    //Reads current input and records maximum and minimum current
    Iread1 = analogRead(A1);    //Reads current input and records maximum and minimum current
    Iread2 = analogRead(A2);    //Reads current input and records maximum and minimum current

    if (Iread0 > Imax0 ) { Imax0 = Iread0; }
    if (Iread0 < Imin0 ) { Imin0 = Iread0; }
    
    if (Iread1 > Imax1 ) { Imax1 = Iread1; }
    if (Iread1 < Imin1 ) { Imin1 = Iread1; }
    
    if (Iread2 > Imax2 ) { Imax2 = Iread2; }
    if (Iread2 < Imin2 ) { Imin2 = Iread2; }
  }
irms_time = micros() - irms_time;
//double Iemon0 = emon0.calcIrms(1480);

 double Irms0 = ((Imax0 - Imin0)*0.707)*0.2743;
 double Prms0 = Irms0 * 230;
 double Irms1 = ((Imax1 - Imin1)*0.707)*0.2743;
 double Prms1 = Irms1 * 230;
 double Irms2 = ((Imax2 - Imin2)*0.707)*0.2743;
 double Prms2 = Irms2 * 230;

  // Serial.print("Imin0 = "); Serial.print(Imin0);Serial.print("  ");
  // Serial.print("Imax0 = "); Serial.print(Imax0);Serial.print(" ; ");
 /// Serial.print("Imin1 = "); Serial.print(Imin1);Serial.print("  ");
  //Serial.print("Imax1 = "); Serial.print(Imax1);Serial.print(" ; ");
  // Serial.print("Imin2 = "); Serial.print(Imin2);Serial.print("  ");
  // Serial.print("Imax2 = "); Serial.print(Imax2);   Serial.print(" ; ");
  
  Serial.print("Irms0 = ");  Serial.print( Irms0 );   Serial.print("   ");  Serial.print(" ; ");
  Serial.print("Prms0 = ");  Serial.print( Prms0 );   Serial.print("   ");  Serial.print(" ; ");
    Serial.print("Irms1 = ");  Serial.print( Irms1 );   Serial.print("   ");  Serial.print(" ; ");
  Serial.print("Prms1 = ");  Serial.print( Prms1 );   Serial.print("   ");  Serial.print(" ; ");
    Serial.print("Irms2 = ");  Serial.print( Irms2 );   Serial.print("   ");  Serial.print(" ; ");
  Serial.print("Prms2 = ");  Serial.print( Prms2 );   Serial.print("   ");  Serial.print(" ; ");
  
  //Serial.print("Iemon0 = ");  Serial.print( Iemon0 );   Serial.print("   ");  Serial.print(" ; ");
  Serial.print( irms_time);   Serial.print(" mks   ");  
Serial.println("");



  delay (1000);

}

Выдаёт на разной мощности обогревателя: 


Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.76    ; Prms1 = 1784.16    ; Irms2 = 6.21    ; Prms2 = 1427.33    ; 20164 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.01    ; Prms2 = 1382.72    ; 20168 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.01    ; Prms2 = 1382.72    ; 20168 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.01    ; Prms2 = 1382.72    ; 20168 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.01    ; Prms2 = 1382.72    ; 20168 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.21    ; Prms2 = 1427.33    ; 20172 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.01    ; Prms2 = 1382.72    ; 20176 mks   
Irms0 = 3.49    ; Prms0 = 802.87    ; Irms1 = 3.68    ; Prms1 = 847.47    ; Irms2 = 2.91    ; Prms2 = 669.06    ; 20172 mks   
Irms0 = 3.68    ; Prms0 = 847.47    ; Irms1 = 3.49    ; Prms1 = 802.87    ; Irms2 = 2.91    ; Prms2 = 669.06    ; 20180 mks   
Irms0 = 3.49    ; Prms0 = 802.87    ; Irms1 = 3.68    ; Prms1 = 847.47    ; Irms2 = 2.91    ; Prms2 = 669.06    ; 20168 mks   
Irms0 = 3.68    ; Prms0 = 847.47    ; Irms1 = 3.49    ; Prms1 = 802.87    ; Irms2 = 2.91    ; Prms2 = 669.06    ; 20164 mks   
Irms0 = 3.68    ; Prms0 = 847.47    ; Irms1 = 3.49    ; Prms1 = 802.87    ; Irms2 = 2.91    ; Prms2 = 669.06    ; 20164 mks   
Irms0 = 3.49    ; Prms0 = 802.87    ; Irms1 = 3.49    ; Prms1 = 802.87    ; Irms2 = 2.91    ; Prms2 = 669.06    ; 20168 mks   
Irms0 = 3.68    ; Prms0 = 847.47    ; Irms1 = 3.49    ; Prms1 = 802.87    ; Irms2 = 2.91    ; Prms2 = 669.06    ; 20164 mks   
Irms0 = 3.49    ; Prms0 = 802.87    ; Irms1 = 3.49    ; Prms1 = 802.87    ; Irms2 = 2.91    ; Prms2 = 669.06    ; 20168 mks   
Irms0 = 7.76    ; Prms0 = 1784.16    ; Irms1 = 7.76    ; Prms1 = 1784.16    ; Irms2 = 6.21    ; Prms2 = 1427.33    ; 20168 mks   
Irms0 = 7.76    ; Prms0 = 1784.16    ; Irms1 = 7.76    ; Prms1 = 1784.16    ; Irms2 = 6.01    ; Prms2 = 1382.72    ; 20168 mks   
Irms0 = 7.76    ; Prms0 = 1784.16    ; Irms1 = 7.76    ; Prms1 = 1784.16    ; Irms2 = 6.21    ; Prms2 = 1427.33    ; 20172 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.21    ; Prms2 = 1427.33    ; 20180 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.21    ; Prms2 = 1427.33    ; 20172 mks   
Irms0 = 7.56    ; Prms0 = 1739.55    ; Irms1 = 7.56    ; Prms1 = 1739.55    ; Irms2 = 6.01    ; Prms2 = 1382.72    ; 20172 mks   
Irms0 = 6.01    ; Prms0 = 1382.72    ; Irms1 = 6.01    ; Prms1 = 1382.72    ; Irms2 = 4.46    ; Prms2 = 1025.89    ; 20160 mks   
Irms0 = 6.01    ; Prms0 = 1382.72    ; Irms1 = 6.01    ; Prms1 = 1382.72    ; Irms2 = 4.46    ; Prms2 = 1025.89    ; 20168 mks   
Irms0 = 5.82    ; Prms0 = 1338.12    ; Irms1 = 6.01    ; Prms1 = 1382.72    ; Irms2 = 4.46    ; Prms2 = 1025.89    ; 20168 mks   
Irms0 = 6.01    ; Prms0 = 1382.72    ; Irms1 = 6.01    ; Prms1 = 1382.72    ; Irms2 = 4.46    ; Prms2 = 1025.89    ; 20164 mks   
Irms0 = 6.01    ; Prms0 = 1382.72    ; Irms1 = 6.01    ; Prms1 = 1382.72    ; Irms2 = 4.46    ; Prms2 = 1025.89    ; 20172 mks   
Irms0 = 6.01    ; Prms0 = 1382.72    ; Irms1 = 6.01    ; Prms1 = 1382.72    ; Irms2 = 4.46    ; Prms2 = 1025.89    ; 20168 mks   
Irms0 = 6.01    ; Prms0 = 1382.72    ; Irms1 = 6.01    ; Prms1 = 1382.72    ; Irms2 = 4.46    ; Prms2 = 1025.89    ; 20172 mks   
Irms0 = 6.01    ; Prms0 = 1382.72    ; Irms1 = 6.01    ; Prms1 = 1382.72    ; Irms2 = 4.65    ; Prms2 = 1070.49    ; 20164 mks   
Irms0 = 0.58    ; Prms0 = 133.81    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20172 mks   
Irms0 = 0.58    ; Prms0 = 133.81    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20176 mks   
Irms0 = 0.58    ; Prms0 = 133.81    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.58    ; Prms2 = 133.81    ; 20176 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20172 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20180 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.58    ; Prms2 = 133.81    ; 20176 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.58    ; Prms1 = 133.81    ; Irms2 = 0.58    ; Prms2 = 133.81    ; 20164 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20168 mks   
Irms0 = 0.58    ; Prms0 = 133.81    ; Irms1 = 0.58    ; Prms1 = 133.81    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20160 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20164 mks   
Irms0 = 0.58    ; Prms0 = 133.81    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.58    ; Prms2 = 133.81    ; 20168 mks   
Irms0 = 0.58    ; Prms0 = 133.81    ; Irms1 = 0.58    ; Prms1 = 133.81    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20172 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.58    ; Prms2 = 133.81    ; 20168 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20176 mks   
Irms0 = 0.39    ; Prms0 = 89.21    ; Irms1 = 0.39    ; Prms1 = 89.21    ; Irms2 = 0.58    ; Prms2 = 133.81    ; 20176 mks   
Irms0 = 0.58    ; Prms0 = 133.81    ; Irms1 = 0.58    ; Prms1 = 133.81    ; Irms2 = 0.39    ; Prms2 = 89.21    ; 20176 mks   
Irms0 = 0.97    ; Prms0 = 223.02    ; Irms1 = 0.97    ; Prms1 = 223.02    ; Irms2 = 0.58    ; Prms2 = 133.81    ; 20164 mks   
Irms0 = 0.58    ; Prms0 = 133.81    ; Irms1 = 0.58    ; Prms1 = 133.81    ; Irms2 = 0.58    ; Prms2 = 133.81    ; 20180 mks   

 

Подключены 2 датчика SCT-013-000 30А , входы А0 и А1 соединены.

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

iliarr
Offline
Зарегистрирован: 08.02.2020

ВН пишет:

Удачных ваяний ТС! Электроника сама все расставит по местам.

Спасибо. Иногда, найти то о чём не знаешь, очень сложно. Удача, как и подсказки тех кто знает, очень помогают. 

iliarr
Offline
Зарегистрирован: 08.02.2020

В Ардуины записал не то, через USB не пишутся, а ещё одной нет. 

Сейчас с ESP32 экспериментирую. HTU21D заработал, наверное, квалификацию набрал ( не хотел делать этого) и сделал как надо. 

Код ESP32 : 

/**
 * BasicHTTPClient.ino
 *
 *  Created on: 24.05.2015
 *
 */

#include <Arduino.h>

#include <WiFi.h>
#include <WiFiMulti.h>

#include <HTTPClient.h>
#include <Wire.h>
#include "Adafruit_HTU21DF.h"

#define USE_SERIAL Serial

WiFiMulti wifiMulti;
const String ServerAdress = "http://192.168.3.4:8082/";
/*
const char* ca = \ 
"-----BEGIN CERTIFICATE-----\n" \  
"MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" \  
"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" \  
"DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" \  
"SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" \  
"GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" \  
"AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" \  
"q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" \  
"SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" \  
"Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" \  
"a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" \  
"/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" \  
"AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" \  
"CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" \  
"bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" \  
"c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" \  
"VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" \  
"ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" \  
"MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" \  
"Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" \  
"AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" \  
"uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" \  
"wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" \  
"X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" \  
"PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" \  
"KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" \  
"-----END CERTIFICATE-----\n";
*/
Adafruit_HTU21DF htu = Adafruit_HTU21DF();

void setup() {

    USE_SERIAL.begin(115200);

    USE_SERIAL.println();
    USE_SERIAL.println();
    USE_SERIAL.println();

    for(uint8_t t = 4; t > 0; t--) {
        USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
        USE_SERIAL.flush();
        delay(1000);
    }

    wifiMulti.addAP("My2", "PccdfJ4jpopbpharman");
    
    Serial.println("HTU21D-F test");

    if (!htu.begin()) {
      Serial.println("Couldn't find sensor!");
      while (1);
    }

}

void loop() {
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
    Serial.print("Temp: "); Serial.print(temp); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");

    unsigned long irms_time = micros();
    // wait for WiFi connection
    if((wifiMulti.run() == WL_CONNECTED)) {

        HTTPClient http;

        USE_SERIAL.print("[HTTP] begin...\n");
        // configure traged server and url
        //http.begin("https://www.howsmyssl.com/a/check", ca); //HTTPS
        String strRequest = ServerAdress + "getdata?" + "temp=" + String(temp) + "&" + "hum=" + String(rel_hum);
        http.begin(strRequest); //HTTP

        USE_SERIAL.print("[HTTP] GET...\n");
        // start connection and send HTTP header
        int httpCode = http.GET();

        // httpCode will be negative on error
        if(httpCode > 0) {
            // HTTP header has been send and Server response header has been handled
            USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);

            // file found at server
            if(httpCode == HTTP_CODE_OK) {
                String payload = http.getString();
                USE_SERIAL.println(payload);
            }
        } else {
            USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
        }

        http.end();
    }
irms_time = micros() - irms_time;
  Serial.print( irms_time);   Serial.print(" mks   ");  
Serial.println("");
    delay(5000);
}

NodeJS ( на компьютере запущен ) компьютер и NodeJS по одному wifi , метров 20 до роутера: 

var http = require('http');
var url  = require('url');

var port = 8082;

var s = http.createServer();
s.on('request', function(request, response) {
    response.writeHead(200);
    console.log(request.method);
    console.log(request.headers);
    console.log(request.url);

    var url_parts = url.parse(request.url, true);
    var qdata = url_parts.query;
    console.log(qdata.temp);
    console.log(qdata.hum);
    let str = "hi , temp+hum:  " + qdata.temp + "+" + qdata.hum;
    var data = '';
    request.on('data', function(chunk) {
        data += chunk.toString();
    });

    request.on('end', function() {
        console.log(data);
        response.write(str);
        response.end();
    });

});

s.listen(port);
console.log('Browse to http://127.0.0.1:' + port);

Выдача в консоли ESP32:

Temp: 21.35 C		Humidity: 42.37 %
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: 200
hi , temp+hum:  21.35+42.37
37564 mks   
Temp: 21.33 C		Humidity: 42.32 %
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: 200
hi , temp+hum:  21.33+42.32
40656 mks   
Temp: 21.35 C		Humidity: 42.33 %
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: 200
hi , temp+hum:  21.35+42.33
29864 mks   
Temp: 21.33 C		Humidity: 42.35 %
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: 200
hi , temp+hum:  21.33+42.35
25512 mks   
Temp: 21.34 C		Humidity: 42.42 %
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: 200
hi , temp+hum:  21.34+42.42
35763 mks   

 Иногда 80мс бывает. 

Вяло экспериментирую и думаю как проще и лучше сделать, пока тёплые полы растягиваю. Если отправлять на сервер данные между измерениями тока на фазах ( измерения->реакция -> отправка ), 80мс вполне нормально. 

Р.S. Ещё раз повторюсь, что не являюсь специалистом в микроконтроллерах и не хочу им становиться, так-же не хочу здесь ни с кем ругаться. Нет цели сделать оптимальную систему, надо чтобы работало и было просто для моего понимания. Если кому-то нравится самоутверждаться, мне и ладно, мелко это всё. 

iliarr
Offline
Зарегистрирован: 08.02.2020
Датчик тока SCT-013-000 30А , разобрал,  внутри плата с диодом и резистором, отпаял их, получился прямой выход катушки датчика на провод. К проводу датчика подключил резистор R1 = 2.2кОм , дальше диодный мост ( входной выпрямитель блока питания телефона ) , к выходу диодного моста электролитический конденсатор C1 = 1мкФх50В ( какой был ) и резистор R2 =  1кОм. 
Подключаю нагрузку ( обогреватель , его мощность не ровно, а примерно 500-1000-1500Вт ):
- 500Вт : На R2 постоянное напряжение 0.37В , на R1 переменное напряжение 1.47В  , ( Получается, диодный мост съедает 1.1В )
- 1000Вт : На R2 постоянное напряжение 1.05В
- 1500Вт : На R2 постоянное напряжение 1.75В 
Получается 0.7В увеличивается напряжение на 500Вт увеличения мощности нагрузки. Подбираем поправочный коэффициент и получаем измеряемый ток. 
Дальше взял моток витой пары 20-30м ( какой был ) , подключил 2 жилы к R2 и измерял напряжение на другом конце: 
- 500Вт : На R2 постоянное напряжение 0.36В 
- 1000Вт : На R2 постоянное напряжение 1.04В
- 1500Вт : На R2 постоянное напряжение 1.75В 
 
Собственно, те мысли, которые здесь называли бредом, подтверждены на практике. 
 
Дальше вопрос: Зачем некоторые "знатоки" писали такое и в такой фореме мне здесь? 
Я вижу 2 варианта: 1. Эти люди искренне заблуждаются. 2. Эти люди всё понимают и пытаются превысить себя за счёт новичка ( очень не красиво ). 
-NMi-
Offline
Зарегистрирован: 20.08.2018

Похоже на хождение по кругу, как обмотка в трансформаторе)))  ТС, не надоело ещё воду фступе перемалывать?  До полупроводниковых ДТ , видимо, ваш прогресс ещё не дошёл?

iliarr
Offline
Зарегистрирован: 08.02.2020

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

В теме Очередной "Умный дом", на этот раз модульная система... читал про реализацию Умного дома на CAN . Завершилось это написанием своего протокола поверх CAN и проблемами и работами CAN  в схеме "звезда".

Узнал о существовании удлинителя I2C  P82B715 , который на моих расстояниях будет работать. 

Сейчас думаю на сколько мне нужно измерять влажность и CO2 по комнатам. Как альтернатива, сделать одну коробочку с экраном и CJMCU-8128 ( CCS811 + SI7021 + BMP280 ) и по ней откалибровать свои ощущения влажности и духоты. Если решу что достаточно только температуру изменять для управления отоплением, думаю отказаться от ds18b20 ( сложности с разводкой 1-wire звездой или пускать петлю, в случае замены датчика, придётся узнавать его адрес, снова вникать и т.д.  ) в пользу терморезисторов ( всё очень просто и надёжно ). 

Остаётся вопрос в аппаратной части.

- 2 или 3 Ардуино Мега  с ethernet ( функциональные ядра ), обмен по http и NodeJS ( html5 с websjcket ) на постоянно включенном компьютере для удобного отображения и настройки.

- Raspberry pi с расширителями цифровых портов и АЦП по i2c . На JavaScript писать гораздо проще чем на C++, выдачу получилось обработать и отобразить через websocket с помощью NodeJS без особых усилий. 

iliarr
Offline
Зарегистрирован: 08.02.2020

-NMi- пишет:

Похоже на хождение по кругу, как обмотка в трансформаторе)))  ТС, не надоело ещё воду фступе перемалывать?  До полупроводниковых ДТ , видимо, ваш прогресс ещё не дошёл?

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

Хождение по кругу - поиск оптимального варианта. Познаю - пробую - осмысливаю - познаю и т.д. 

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

-NMi-
Offline
Зарегистрирован: 20.08.2018

https://habr.com/ru/post/397641/

Мои самые "любимые" ДТ.

iliarr
Offline
Зарегистрирован: 08.02.2020

-NMi- пишет:

https://habr.com/ru/post/397641/

Мои самые "любимые" ДТ.

Спасибо. Не знал о таком. Вариант хороший. Буду думать. 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Реализовывал отслеживание нагрузки на приводах (50гц).
Все элементарно. Трансформатор тока 1:1000 с нагрузочным резистором, через делитель сигнал заводим на аналоговый вход.
Замеры достаточно делать 50раз/сек.
Подстроечный резистором регулируем порог срабатывания.

iliarr
Offline
Зарегистрирован: 08.02.2020
Добрый день.
Снова вернулся к приоретизатору. 
На настоящий момент, схема такая:
В электрическом щитке 4 Arduino Nano c CJMCU-758 ( ток ) и ZMPT101B ( напряжение ), 3 фазы и резервный генератор. Экран 2004 i2c . 
Управление реле - Arduino Mega. 
Датчики температуры DS18B20 через DS2482-800  , управление, алгоритмы работы и web-интерфейс - Raspberry Pi 4 8G . 
Для упрощения, связь между ардуинами и распбери идёт по i2c через повторитель P82B715 , расстояние у меня максимум 15м, на 5В должно работать, судя по отзывам. 
 
Принцип работы приоретизатора нагрузок: 
Arduino Nano измеряет напряжения с CJMCU-758 и ZMPT101B за 1 период  , ищет максимум и минимум , вычисляет ток/напряжение и помещает в переменную. Один из цифровых выходов Nano идёт к Mega, к которой подключены исполнительные реле . Если ток превышен, Nano ( в щитке) устанавливает 0 и Mega ( с исполнительными реле ) , отключает один из 3х ТЭНов на фазе. 
Nano ( в щитке ) отвечает на запрос Raspberry током и напряжением своей фазы по i2c . Raspberry анализирует и отдаёт команду Mega как включать или отключать ТЭНы.  Т.е. есть быстрая и умная реакции. 
 
Сейчас собрал стенд из 2х SCT-013-000 30A подключенных по стандартной схеме, рекомендованной произовдителем , Arduino Mega , LCD2004 i2c и Raspberry Pi 4 . Жду когда приедет остальное .
 
Вопрос в том, как передавать данные между Arduino и Raspberry Pi по i2c и обрабатывать их Node JS.  Байты одиночные и группами передаются. Но у меня пока не получилось правильно интерпретировать их в Node JS.  Задача стандартная, но решения я пока не нашёл. Как это сделать?
 
Хочу поблагодарить форумчан за подказки по интегрированному датчику тока и за разъяснения по применению трансформатора тока. В трансформаторе тока, при коротком замыкании, 1 период синусоиды ( 1/50 секунды, пока не сработает автомат ), будет большой ток ( по моим оценкам, сопротивление провода от трансформатора до моего щитка около 1Ом, ток около 200А ). Есть катушки на 200/5А , можно как-то сделать и рабочую схему с трансформатором тока в виде трансформатора напряжения, но проще поставить по ардуине на фазу и обойтись стандартными решениями.
 
iliarr
Offline
Зарегистрирован: 08.02.2020

Вот решение. С double или float не разобрался, но int вполне хватает для моих нужд. 

Ардуино:

#include "EmonLib.h"                   // Include Emon Library
#include <Wire.h>
EnergyMonitor emon0;                   // Create an instance
EnergyMonitor emon1;                   // Create an instance
EnergyMonitor emon2;                   // Create an instance


int I0 ;  // Calculate Irms only , I*100
int I1; // I*100
int I2 ;  // Calculate Irms only  , I*100
int V0 = 2200; // V*10 
int V1 = 2200;//V*10
int V2 = 2200; //V*10
uint8_t buffer[12];// buffer to send/recieve




void setup()
{  
  Serial.begin(9600);
  emon0.current(0, 111.1);             // Current: input pin, calibration.
  emon1.current(1, 111.1);             // Current: input pin, calibration.
  emon2.current(2, 111.1);             // Current: input pin, calibration.
  Wire.begin(4);                // join i2c bus with address #4
  Wire.onRequest(receiveEvent); // register event
}

void loop()
{
  I0 = int(emon0.calcIrms(1480)*100);  // Calculate Irms only
  I1 = int(emon1.calcIrms(1480)*100);  // Calculate Irms only
  I2 = int(emon2.calcIrms(1480)*100);  // Calculate Irms only

  Serial.print(I0);            // Apparent power
  Serial.print(" ; ");
  Serial.print(I1);         // Apparent power
  Serial.print(" ; ");
  Serial.print(I2);         // Apparent power
  Serial.print(" ; ");
}

void receiveEvent() {
  buffer[0] = I0 >> 8;
  buffer[1] = I0 & 0xff; 
  buffer[2] = V0 >> 8;
  buffer[3] = V0 & 0xff; 

  buffer[4] = I1 >> 8;
  buffer[5] = I1 & 0xff; 
  buffer[6] = V1 >> 8;
  buffer[7] = V1 & 0xff;

  buffer[8] = I2 >> 8;
  buffer[9] = I2 & 0xff; 
  buffer[10] = V2 >> 8;
  buffer[11] = V2 & 0xff;

  Wire.write(buffer,12);

    
}

NodeJS:

const raspi = require('raspi');
const I2C = require('raspi-i2c').I2C;

raspi.init(() => {
  const i2c = new I2C();
  let bytes = i2c.readSync(0x4,12);
  console.log(bytes);
  var I0 = bytes.readUIntBE(0, 2);
  var V0 = bytes.readUIntBE(2, 2);
    var I1 = bytes.readUIntBE(4, 2);
  var V1 = bytes.readUIntBE(6, 2);
    var I2 = bytes.readUIntBE(8, 2);
  var V2 = bytes.readUIntBE(10, 2);
  console.log("I0 = "+ I0/100 + "  V0 = " + V0/10 + "  ; I1 = "+ I1/100 + "  V1 = " + V1/10 + "  ; I2 = "+ I2/100 + "  V2 = " + V2/10 );


}); 

 

iliarr
Offline
Зарегистрирован: 08.02.2020

Собрал вариант с 4мя ардуинами на зелёной макетной плате, не заработало. Решил что  где-то ошибся. Собрал 3   CJMCU-758  с одной ардуиной, тоже не идёт. Всё проверил, помыл ацетоном от флюса, работает какое-то время, потом  в значениях показаний неадекват идёт , ардуина мигать диодом начинает и прошиваться не хочет в плате, которую собрал. Что-то не так делаю и пока не понял что.