Счетчик импульсов.

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Приветствую участников форума!

Спасибо, что обратили внимание на мой пост. Буду благодарен за помощь и советы. Сейчас продумываю проект домашней системы раздельного учета электроэнергии. То есть от плиты отдельно, от холодильника отдельно и так далее. Теория пока такая. Поставить несколько (на каждую линию потребления, которую буду учитывать) самых дешевых электросчетчиков типа "нева 102 или 105". У каждого из них имеется светодиод, который моргает 1000 раз на один киловаттчас. Вот эти импульсы я и хочу считать и собирать раз в сутки или час (тут пока неважно) их количество. Почитав форум узнал, что такой счетчик проще всего сделать на прерываниях. Но у меня планируется несколько таких счетчиков. Точное количество не могу пока сказать, но допустим пусть их будет 10 (десять). То есть мне нужно считать импульсы от 10 источников. Существует способ с дополнительными внешними прерываниями, который возможно подойдет для моей задачи, но понимание прерываний пока мне дается с очень большим трудом. И я пытаюсь придумать алгоритм подсчета, который позволил бы обойтись без прерываний.

Хотел узнать смогу ли я обойтись простым опросом пинов функцией DigitalRead()? Из инструкции к счетчику известно, что "минимальная длительность импульса, формируемого устройством не менее 30 мс". Время выполнения функции DigitalRead() около 110 мкс, если я не ошибаюсь. Так вот, если я в цикле буду постоянно опрашивать состояние 10 пинов, смогу ли я "поймать" эти импульсы?

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

Алексей Н
Offline
Зарегистрирован: 02.01.2016

dimax пишет:

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

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

Готовое решение, конечно, всегда самый правильный выбор. А если его установкой будут заниматься профессионалы, то вообще нужда в ардуине и в данном форуме (да и вообще в интернете) отпадает :) Только цена вопроса начинается от 75 000 руб. Так что "лучше помучиться".

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Алексей Н, для связи с внешними устройствами специально выпускаются счётчики с шиной ModBUS/RS485. Это точно не колхоз :-)

vitalikost
Offline
Зарегистрирован: 28.11.2014

А не проще купить что-то подобное

http://mysku.ru/blog/aliexpress/39864.html

JasKo
Offline
Зарегистрирован: 21.11.2015

Алексей Н пишет:

 Так вот, если я в цикле буду постоянно опрашивать состояние 10 пинов, смогу ли я "поймать" эти импульсы?

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

По моему мнению, с десяти пинов корректно собрать и посчитать импульсы не выйдет. Надо ли бо городить отдельные счетчики на логике, а ардуина по графику будет снимать с них показания или на каждый электро счетчик вешать по ардуине pro mini с фотодатчиком, блоком питания и модулем rs485 (в сумме 500-600 р на один электросчетчик). На каждом счетчике своя ардуина,  считает импульсы и по запросу от главной полученную сумму отсылает.
 

Алексей Н
Offline
Зарегистрирован: 02.01.2016

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

В общем, пока не отказываюсь от "колхоза" на ардуино. Буду думать как его реализовать. И все еще надеюсь на советы.

JasKo, там не нужен фотодатчик. Есть специально выведенные контакты, с которых можно снимать импульсы параллельно с миганием светодиода. И это как раз меня и подталкивает к мыслям об их использовании.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Алексей Н пишет:

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

С чего такие выводы? Чем отличается сбор моргания светодиода от сбора информации по rs485 ? И в том и другом случае можно исплользовать ардуино, и в том и другом случае нужно писать программу. Только в первом случае вы соберте все возможные глюки и помехи, а во втором нет.

JasKo
Offline
Зарегистрирован: 21.11.2015

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

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

Алексей Н
Offline
Зарегистрирован: 02.01.2016

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

dimax, если Вы уже отвечаете на мои вопросы, то не согласитесь ли ответить еще на пару? :) Про rs485 я знаю. И, в принципе, можно найти относительно недорогие китайские электросчетчики с rs485. Но вот как подключить десяток таких счетчиков к ардуино и собирать с них данные я не могу понять. Не могли бы вы дать ссылку на какой-нибудь похожий проект? Первичный поиск в интернете выдал только про подключение ардуин между собой. Опять же при посчете импульсов каждый день/час можно просто сбрасывать счетчик, а при считывании данных по rs485 придется как-то запоминать последнее значение и из него вычитать новое каждый день?

 

JasKo
Offline
Зарегистрирован: 21.11.2015

dimax, посмотри что представляют собой счетчики neva 102 и сразу станет ясно от куда соблазн считать с них импульсы одной ардуиной. Все счетчики легко смонтируются в одном ящике и тамже поместятся ардуинки. В принципе там и 485 не нужен будет, можно все по I2C соеденить, в одном корпусе то. Это ж не раскиданные в пространстве.

JasKo
Offline
Зарегистрирован: 21.11.2015
Алексей Н, счетчики на логике, я так обозвал устройство на обычных логических микросхемах. Но эту тему можно забыть, так как проектирование их выйдет дороже ардуино про мини с обвязкой. Проще на каждый счетчик прилепить по ардуине.
JasKo
Offline
Зарегистрирован: 21.11.2015

Алексей Н пишет:

Но вот как подключить десяток таких счетчиков к ардуино и собирать с них данные я не могу понять. Не могли бы вы дать ссылку на какой-нибудь похожий проект? Первичный поиск в интернете выдал только про подключение ардуин между собой. Опять же при посчете импульсов каждый день/час можно просто сбрасывать счетчик, а при считывании данных по rs485 придется как-то запоминать последнее значение и из него вычитать новое каждый день?

 

rs485 это физическая реализация последовательного интерфейса для больших расстояний и плохих условий.

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

Алексей Н
Offline
Зарегистрирован: 02.01.2016

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей Н пишет:

Использовать эектросчетчик, специально для этого разработанный, это колхоз? 

Специально разработанного - нет, но Вы же планируете использовать счётчики специально разработанные для того, чтобы с них можно было автоматически снимать показания, правда? Вы хотите мигание считать - это даже не колхоз, это значительно более бардачно - скорее на армию похоже.

А в профессиональном решении ничего особо дорого нет. Счётчики не такие уж и дорогие, а связать их с компьютером по RS-485 много ума не надо. Вот, для начала почитайте -  http://electrik.info/main/master/103-pro-yelektronnye-schetchiki-i-askuye-dlya.html

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Честно говоря, не понимаю, зачем нужно 10 ардуин, если все счетчики собраны в одной коробке, у каждого есть контакт, на который подается импульс и длительность импульса не менее 30 мс.

Кстати, более 100 мкс - это analogRead, а digitalRead выполняется во много раз быстрее.

Алексей Н
Offline
Зарегистрирован: 02.01.2016

ЕвгенийП, почему Вы считаете это бардаком, если даже в статье по Вашей ссылке (кстати, спасибо, интересно, хотя и довольно общие сведения) написано про телеметрический выход (импульсный датчик), обеспечивающий передачу по двухпроводной линии связи информации о проходящей через счетчик активной (реактивной) энергии в систему дистанционного сбора и обработки данных?

andriano, счетчики все будут собраны в одной коробке. И я тоже не уверен, что мне необходимо 10 ардуин. Но я пока так и не узнал ответ на свой первый вопрос. Можно ли считывать импульсы электросчетчика функцией DigitalRead? Это же все равно что посчитать количество нажатий на кнопку. Или я ошибаюсь?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей Н пишет:

Но я пока так и не узнал ответ на свой первый вопрос. Можно ли считывать импульсы электросчетчика функцией DigitalRead? Это же все равно что посчитать количество нажатий на кнопку. Или я ошибаюсь?

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

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Так в том то и дело, что никто не объснил почему половина импульсов окажется пропущенной. И в общем-то Вы первый кто это написал.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

Ну, как почему, Вам же уже объясняли, что измерять импульсы digitalRead'ом - это половину пропутить, а другую учесть дважды.

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

Вывод: результат во всех случаях будет точный.

Цитата:

...либо брать (делать) счётчики, которые умеют передавать свои показания в нормальном цифровом виде.

И делать эти счетчики нужно на Ардуине!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей Н пишет:

Так в том то и дело, что никто не объснил почему половина импульсов окажется пропущенной. И в общем-то Вы первый кто это написал.

Лично я здесь вижу только одну потенциальную причину - Вашу недостаточную квалификацию. То есть, когда Вы будете писать скетч, Вам придется заботиться о том, чтобы импульсы не были пропущены и не были посчитаны дважды (а то и тысячи раз). digitalRead это за Вас не сделает.

JasKo
Offline
Зарегистрирован: 21.11.2015

andriano пишет:

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

Вот вам и ответ (правильно заданный вопрос это 99% ответа). У вас есть уверенность что при равной длинне импульса, не будет одновременно импульсов на 1, 5, 7, и еще каком входе, в то время как вы будете проверять первый вход?

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

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А взять Due и не париться? Там на каждую цифровую ногу, емнип, можно прерывание повесить.

JasKo
Offline
Зарегистрирован: 21.11.2015

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

Ведь в большинстве электросчетчиков с АСКУЭ как раз атмеловские процы и стоят. По одному в каждом.

 

Алексей Н
Offline
Зарегистрирован: 02.01.2016

JasKo пишет:

Вот вам и ответ (правильно заданный вопрос это 99% ответа). У вас есть уверенность что при равной длинне импульса, не будет одновременно импульсов на 1, 5, 7, и еще каком входе, в то время как вы будете проверять первый вход?

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

У меня есть такая уверенность. Время импульса не менее 30 мс. Скорость выполнения digitalRead во много раз меньше. То есть совпадение по времени digitalRead и импульса получится в любом случае. Ну в 99,9% так точно. Пока только я не продумал алгоритм фиксации и учета импульсов. А вот как раз с прерываниями может и не получиться именно по этой причине

JasKo
Offline
Зарегистрирован: 21.11.2015

Ну что ж, раз уверены, не буду разубеждать, реализуйте.

Алексей Н
Offline
Зарегистрирован: 02.01.2016

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

JasKo
Offline
Зарегистрирован: 21.11.2015

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

А быстртечность здесь вообще никая - максимум 2,5 импульса в секунду на одной ноге(это соответсвует 8,8 квтч при токе 40А -максимальном для счетчика, 8800 импульсов в час).

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

Тестовый пример на скорую руку

unsigned long time1;
byte b1, b2, b3;
unsigned int count[8];


void setup() {
  Serial.begin(9600);
  // put your setup code here, to run once:
  for (int i=0; i < 8; ++i){
    count[i] = 0;
  }
  b2 = 0;
}

void loop() {
  b1 = random(0,255) % 256; //Генерим псевдослучайный байт , здесь должно быть чтение регистра ввода
 // Serial.println(b2,BIN);
  SerialPrintBin( b2 );
  SerialPrintBin( b1 );
//  Serial.println(b1,BIN);
  time1 = micros(); // Засекаем время
  b3 = (b1 ^ b2) & b1;  // Определяем биты ставшие 1
  for (int i = 0; i < 8; i++){ // Инкрементируем счетчики
    if ( b3 & (1 << i)) count[i] = count[i]+1;
  }
  b2 = b1); // Сохраняем измененное состояние
  time1 = micros()-time1; // Потраченное время
  SerialPrintBin( b3 );
//  Serial.println(b3,BIN);
//  Serial.println(b2,BIN);
  Serial.println(time1);
  delay(5000); // Задержка что бы успеть рассмотреть на экране результаты

}

void SerialPrintBin( byte b){ // Вывод в BIN формате с ведущими нулями
  for (int i = 7; i >= 0; i--){
    Serial.print((b >> i) & 1);
  }
  Serial.println(" ");
  return;
}

 

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Спасибо всем отвечавшим. Я даже не ожидал такого.

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Алексей Н, вы не обольщайтесь выводами JasKo, скетч то писать Вам, и сколько процессорного времени у вас уйдёт на побочные расходы - никому сейчас не известно. Информацию нужно читать,хранить, выводить  на дисплей, и всё это складывается в единицы и десятки миллисекунд. Может в какой нибудь библе запросто стоять скрытый delay и мешать алгоритму,  а то ещё и сами влепите delay, и всей конструкции крышка.  А главное когда вы через месяц пользования подобъёте сумму всех счётчикв и она сильно не сойдётся с основным -то искать где у вас идут потери будет просто нереально. А если вы будете читать специализированный счётчик через RS485 то всего этого гарантированно можно избежать :)

Алексей Н
Offline
Зарегистрирован: 02.01.2016

dimax, я совершенно не питаю иллюзий. Проблемы могут быть и в скетче и в подключении и вообще где угодно. Но теперь у меня есть еще несколько предложенных вариантов, которые я буду рассматривать подробнее. А это уже лучше чем мусолить одну единственную идею, заранее неверную. Да и я не собираюсь прямо сейчас бросаться это делать. У меня есть достаточно времени, чтобы все хорошо обдумать, создать еще пару тем :) с вопросами и только потом все это начать.

JasKo
Offline
Зарегистрирован: 21.11.2015

Для передачи на другую ардуино, где может быть развернут сервер с аналитикой рекомендую посмотреть вот этоинтересное решение http://lesson.iarduino.ru/page/urok-26-3-soedinyaem-dve-arduino-po-shine-i2c/

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

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

Вывод: результат во всех случаях будет точный.

:---))))))

Это если пропустить ровно половину и учесть ровно дважды :) Боюсь, что ТС собирается пропускать и учитывать "как получится" :-) Но в среднем, всё равно всё будет замечательно - Вы правы! ТС развлечётся, поковыряется, удовольствие получит :)))

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Вот давайте только без этих ехидных комментариев. Я не собираюсь делать "как получится". Именно для этого я и задаю здесь вопросы. Сейчас, кстати, нашел достаточно много информации на англоязычных ресурсах, посвященных АСКУЭ. На всякий случай оставляю здесь ссылки openenergymonitor.org   http://www.airsensor.co.uk/component/zoo/item/energy-monitor.html  Там не все так просто, как я думал с начала, но результат стоит того, чтобы разобраться.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей Н пишет:

Я не собираюсь делать "как получится"

"Оно т, конечно, ничего, ежели бы кабы то. Но так как оно не токмо то, а прямо почём зря, постольку поскольку оно, дескать, так сказать, а потому так шож! Но ежели коснуться относительно безусловно, то кудыж там. И тем не менее, однако, случись, так вот тебе и пожалуйста!!! "

Ну а если серьёзно, то если хотите "не как попало", то попробуйте для разминки сделать 1 (один) счётчик, чтобы он спокойно работал и отдавал свои результаты персоналке или там ещё кому. Запустите и добейтесь чтобы он работал нормально, отладьте, дополируйте. И только потом, когда один образец уже есть, начинайте думать о 10-ти.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

JasKo пишет:

Вот вам и ответ (правильно заданный вопрос это 99% ответа). У вас есть уверенность что при равной длинне импульса, не будет одновременно импульсов на 1, 5, 7, и еще каком входе, в то время как вы будете проверять первый вход?

Время проверки одного входа - менее 10 мкс.

Длительность импульса - не менее 30000 мкс.

Входов всего 10 штук.

Вы всерьез считаете, что я не успею зафиксировать несколько импульсов с разных входов?

JasKo
Offline
Зарегистрирован: 21.11.2015

andriano пишет:

Вы всерьез считаете, что я не успею зафиксировать несколько импульсов с разных входов?

Нет, уже так не считаю, и уже написал об этом в посте http://arduino.ru/forum/obshchii/schetchik-impulsov#comment-208079

 

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

Алексей Н пишет:
 Поставить несколько (на каждую линию потребления, которую буду учитывать) самых дешевых электросчетчиков типа "нева 102 или 105". 

Насколько помню, у Невы 123 есть вариант исполнения с выходм по RS-485 интерфейсу. В общем-то у меня такой и стоит. Программа учета качается из сети ,она строит почасовые графики потребления.  По этим графикам прекрасно видно, где включатеся стиральная машина, где посудойка, а где постоянно потребляет холодильник.

тут подробности http://shyza.ru/forum/viewtopic.php?f=12&t=102

Алексей Н
Offline
Зарегистрирован: 02.01.2016

ВН, не совсем то что я хочу сделать. Я и так знаю когда включена стиралка, чайник или токарный станок. Цель в том, чтобы подсчитать на что именно расходуется электроэнергия и в конечном итоге деньги. По Вашему графику Вы можете сказать что больше потребляет энергии (и тратит денег): стиральная машина, мощная, но редко включаемая, или холодильник, экономичный, но работающий постоянно? В посте ЕвгенийП выше есть ссылка про основы АКСУЭ.

Сейчас курю материал по ссылке https://openenergymonitor.org/emon/buildingblocks/12-input-pulse-counting Вроде именно то, что мне нужно. Но опять же не факт, что я остановлюсь на этом варианте.

 

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

Вы же сами писали "Поставить несколько (на каждую линию потребления, которую буду учитывать) ...электросчетчиков типа "нева..."

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

dab
Offline
Зарегистрирован: 22.04.2016

Доброго времени суток!

Подобная задача решена много раз. Один из примеров решения: http://www.sysmc.ru/documentation/sensor_network/SysMC%20Sub1G%20Sensor%20Network.pdf

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

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

Joiner
Offline
Зарегистрирован: 04.09.2014

Я не программист...может что-то глупое скажу. Но мне кажется, что если 10 счетчиков представить как десятибитный регистр и считывать его (т.е. одновременно состояние каждой линии каждого счетчика) по быстренькому много-много раз в секунду одной ардуинкой, а по состоянию битов (т.е. по изменению состояния включился выключился) плюсовать, в соответствующую каждому счетчику переменную, одну единичку.

Такое возможно программно реализовать?

JasKo
Offline
Зарегистрирован: 21.11.2015

Для электро счетчиков с их небольшой частотой импульсов можно. Уже обсудили тут всё.

Joiner
Offline
Зарегистрирован: 04.09.2014

JasKo пишет:

Для электро счетчиков с их небольшой частотой импульсов можно. Уже обсудили тут всё.

Извините...невнимательно прочитал.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Joiner, можно конечно. Но вы видите только "фасад", за которым скрывается серьёзная рутина. Начиная с того, что алгоритм должен четко различать когда идёт повторное считывание лог. уровня сигнала, а когда это уже новое состояние. Значит как минимум нужен ещё один 10 битный "регистр" с флагами, которые так же в цикле нужно проверять и обновлять.  Далее  обрабатывать полученную информацию тоже нужно,  сохранять периодически всё на флэшкарту или куда-то в еепром, выводить на дисплей,  и прочее прочее.  Хватит ли скорости на всё это, особенно если писать "размашисто" ардуиновскими командами, - вот в чём вопрос.

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, можно конечно..................

Понял. Спасибо.

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

nik182
Offline
Зарегистрирован: 04.05.2015

А зачем счетчики? Давно уже делал измеритель мощности ещё на msp430. Повторить на ардуине не проблема. Маленькая плата с вилкой и розеткой. Включаешь любое устройство и имеешь активную реактивную и полную мощность. Легко объединяются с помощью RS485. Можно опрашивать по ModBus. Иметь полную статистику по мощности и энергии. Учитывая разброс потребителей по пространству мне кажется такое решение и гибче и проще в коммуникации. 

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Joiner пишет:

Я не программист...может что-то глупое скажу. Но мне кажется, что если 10 счетчиков представить как десятибитный регистр и считывать его (т.е. одновременно состояние каждой линии каждого счетчика) по быстренькому много-много раз в секунду одной ардуинкой, а по состоянию битов (т.е. по изменению состояния включился выключился) плюсовать, в соответствующую каждому счетчику переменную, одну единичку.

Такое возможно программно реализовать?

 

Можно. По последней ссылке, кторую я приводил имеено так и сделано. И я буду начинать пробовать именно так.

Вывод: по ссылкам никто никогда не ходит :)

 

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

diakin
diakin аватар
Offline
Зарегистрирован: 04.06.2016

А зачем считать импульсы со счетчиков? Счетчики и так сами все считают и хранят результат. То есть достаточно считать (от слова считывать) готовые данные в любое удобное для нас время.  Можно и на ардуину (их кстати много всяких). Какой там в счетчиках интерфейс?