POWER MONITOR на Arduino

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

karlismoto
Сообщения: 39
Зарегистрирован: Чт окт 16, 2014 11:12 pm
Благодарил (а): 5 раз
Поблагодарили: 0
Контактная информация:

Re: POWER MONITOR на Arduino

Сообщение karlismoto » Пн мар 07, 2016 9:47 pm

Добрый день!
Я купил и установил Счетчик электроэнергии и я добавил к megad контроллер.
импульсы успешно подсчитаны на входной порт megad. (100 imp. - 1kw/h)
Изображение

Можете ли вы помочь с с интеграцией MD? Как мне начать?
если есть какие-либо варианты, примеры?
Windows7 + MajorDoMo.
HP laptop, MegaD modules, Arduino Megas, DS18B20, DHT-11 and other sensors.
DSC Alarm + envisalink 3
Connect
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: POWER MONITOR на Arduino

Сообщение nick7zmail » Пн мар 14, 2016 7:27 pm

Господа...кто нибудь считывал данные с IRDA порта счетчика?

Очень интересует этот вопрос. Что для этого надо? Какое железо? Какое ПО?

Имеется счетчик НЕВА 123 МТ - вот инструкция. В моей модели к сожалению отсутствует RS-485(( Очень расстроился, когда это узнал. Уже даже переходник для ардуинки заказан был((. Для данных остается только IRDA. В счетчике, как я понял, трансформатор тока, трансформатор напряжения есть. Через порт можно получить все эти данные без доп. подключений. Гораздо интереснее, чем импульсный выход мощности. Кто-нибудь подключал оптопорт?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 183 раза

Re: POWER MONITOR на Arduino

Сообщение Jager » Пн мар 14, 2016 8:57 pm

karlismoto писал(а):Добрый день!
Я купил и установил Счетчик электроэнергии и я добавил к megad контроллер.
импульсы успешно подсчитаны на входной порт megad. (100 imp. - 1kw/h)
Можете ли вы помочь с с интеграцией MD? Как мне начать?
если есть какие-либо варианты, примеры?
У меня вот так реализован контроль суточного потребления скважинного насоса, железо аналогичное за исключением того что у меня 1000 импульсов на кВт.
Сценарий запускается раз в сутки в полночь

Код: Выделить всё

$state = file_get_contents('http://192.168.2.93/sec/?pt=2&cmd=get');
$value = explode('/',$state);
sg('countPowerPump.status',substr($value[0],0));
sg('countPowerPump.24h',substr($value[1],0)/1000);
sg("countPowerPump.updatedTime",date("H:i",time()));
getUrl('http://192.168.2.93/sec/?pt=2&cnt=0');
masster_alex
Сообщения: 31
Зарегистрирован: Пн апр 18, 2016 6:01 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: POWER MONITOR на Arduino

Сообщение masster_alex » Пн апр 18, 2016 6:07 pm

Не могу залить скетч из данной темы. Подскажите в чем может быть проблема?
Вложения
Clip2net_160418180535.png
Clip2net_160418180535.png (117.79 КБ) 13505 просмотров
masster_alex
Сообщения: 31
Зарегистрирован: Пн апр 18, 2016 6:01 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: POWER MONITOR на Arduino

Сообщение masster_alex » Пн апр 18, 2016 6:43 pm

Вот поправленный код для IDE 1.6.8
СпойлерПоказать
/*
Код мониторинга электропотребления и трансляции
данных на сервер majordomo
Arduino IDE 0023

Подключение датчиков:
Тока - аналоговый вход A1
Напр.- аналоговый вход A0
Схема подключения дисплея J204A (4 ряда, 20символов):
* LCD RS пин к цифр. выходу 8
* LCD Enable пин к цифр. выходу 7
* LCD R/W к Общему
* LCD VO пин (пин 3) к ШИМ-выходу 9
* LCD D4 пин к цифр. выходу 6
* LCD D5 пин к цифр. выходу 5
* LCD D6 пин к цифр. выходу 3
* LCD D7 пин к цифр. выходу 2

* LCD VSS к Общему
* LCD VDD к +5V
* LCD A к +3,3 или +5V (подсветка)
* LCD K к Общему (подсветка)
*/
#include <Ethernet.h>
#include <SPI.h>


byte mac[] = { 0x00, 0x2A, 0xF6, 0x12, 0x69, 0xDU }; // MAC-адрес устройства
byte ip[] = { 192, 168, 8, 10 }; // ip-адрес устройства
byte server[] = { 192, 168, 8, 3 }; // IP компьютера на котором установлен сервер majordomo
byte gateway[] = { 192, 168, 8, 1 };
byte subnet[] = { 255, 255, 255, 0 };
char buf[80];
EthernetClient client;

// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest()
{
//Serial.println(buf);
if (client.connect(server, 80))
{
//Serial.println("OK");
client.println(buf);
client.println("Host: 192.168.8.3"); // IP компьютера на котором установлен сервер majordomo
client.println();
delay(2000);
client.stop();
}

}

int numberOfSamples = 3000;

//Установка датчиков тока и напряжения
int inPinV = 0;
int inPinI = 1;

//*************************************************************************


// Коэффициенты для калибровки выводимых значений
// Подбираются опытным путем сверяясь с эталонным прибором
double VCAL = 27.00; // для напряжения
double ICAL = 2.21; // для тока
double PHASECAL = 2.3; // для мощности

//*************************************************************************

double V_RATIO = 50.5 / 1024 * VCAL;
double I_RATIO = (long double) 15.15 * 5 / 1024 * ICAL;

//Образцы переменных
int lastSampleV,lastSampleI,sampleV,sampleI;

//Переменные для фильтров
double lastFilteredV, lastFilteredI, filteredV, filteredI;
double filterTemp;

//Сюда сохраняем калибровочное значение фазы мгновенного напряжения
double shiftedV;

//Расчет переменной для мощности
double sqI,sqV,instP,sumI,sumV,sumP;

//Полезные значения переменных
double realPower,
apparentPower,
apparentPower1,
powerFactor,
Vrms,
Irms;


// подключаем библиотеку дисплея:
#include <LiquidCrystal.h>

// инициализация библиотеки с перечнем задействованных выводов
LiquidCrystal lcd (8, 7, 6, 5, 3, 2);

void setup ()
{
Ethernet.begin(mac, ip, gateway, subnet); // Инициализируем Ethernet Shield

// устанавливаем ШИМ выход (регулируем контрастность дисплея):
pinMode (9, OUTPUT);
analogWrite (9, 70);
// устанавливаем кол-во столбцов и строк:
lcd.begin (20, 4);
lcd.print(" POWER MONITOR");
}
void loop ()
{

//Serial.println(temp);
for (int n=0; n<numberOfSamples; n++) // цикл крутится 3000 раз
{

//Используется для удаления смещения 2,5в
lastSampleV=sampleV;
lastSampleI=sampleI;

//Читаем с пинов текущее значение U и I
sampleV = analogRead(inPinV);
sampleI = analogRead(inPinI);

// Используется для удаления смещения 2,5в
lastFilteredV = filteredV;
lastFilteredI = filteredI;

//Цифровой фильтр для удаления постоянного смещения 2,5 в

filteredV = 0.996*(lastFilteredV+sampleV-lastSampleV);
filteredI = 0.996*(lastFilteredI+sampleI-lastSampleI);

//Тут калибруем фазу
shiftedV = lastFilteredV + PHASECAL * (filteredV - lastFilteredV);

//Среднеквадратический метод расчета напряжения
//1) square voltage values
sqV= filteredV * filteredV;
//2) Суммируем
sumV += sqV;

// Среднеквадратический метод расчета тока
//1) square current values
sqI = filteredI * filteredI;
//2) Суммируем
sumI += sqI;

//Мгновенная мощность
instP = shiftedV * filteredI;
//Суммируем
sumP +=instP;
}

//Расчет корня из среднего напряжения и тока (rms)
Vrms = V_RATIO*sqrt(sumV / numberOfSamples);
Irms = I_RATIO*sqrt(sumI / numberOfSamples);

//Расчет величины мощности
//realPower = V_RATIO*I_RATIO*sumP / numberOfSamples;
apparentPower = (Vrms * Irms)/1000; // значение в Киловатах
apparentPower1 = (Vrms * Irms); // значение в Ваттах
powerFactor = realPower / apparentPower;


//Сброс накопленных значений
sumV = 0;
sumI = 0;
sumP = 0;



// устанавливаем курсор в 1-ом столбце, 1 строка (начинается с 0):
lcd.setCursor (1, 1);
lcd.print ("U=");
lcd.setCursor (3, 1);
lcd.print (Vrms);
lcd.setCursor (10, 1);
lcd.print ("I=");
lcd.setCursor (12, 1);
lcd.print (Irms);
//lcd.print(sampleI);
lcd.setCursor (1, 2);
lcd.print ("P=");
lcd.setCursor (3, 2);
lcd.print(apparentPower);
lcd.setCursor (7, 2);
lcd.print ("kW");
delay(333);

// отправляем значения на сервер majordomo

//значение напряжения
sprintf(buf, "GET /objects/?object=sensorVolt&op=m&m=eleChanged&t=%0d.%d HTTP/1.0", (int)Vrms, abs(Vrms));
//sprintf(buf, "GET /objects/?object=sensorVolt&op=m&m=eleChanged&t=%d HTTP/1.0", Vrms);
sendHTTPRequest();

//значение тока
sprintf(buf, "GET /objects/?object=sensorAmper&op=m&m=eleChanged&t=%0d.%d HTTP/1.0", (int)Irms, abs(Irms));
sendHTTPRequest();

//значение мощности
sprintf(buf, "GET /objects/?object=sensorVatt&op=m&m=eleChanged&t=%0d.%d HTTP/1.0", (int)apparentPower1, abs(apparentPower1));
sendHTTPRequest();
//delay(3000);
}
Allar
Сообщения: 35
Зарегистрирован: Пн авг 22, 2016 9:22 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: POWER MONITOR на Arduino

Сообщение Allar » Пн авг 22, 2016 9:28 am

Подскажите, а прямо с трансформатора, параллельно можно запитать arduino?
В показания не будут вноситься помехи?
Имею ТС-4-2 на 9В.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: POWER MONITOR на Arduino

Сообщение serghei » Пн авг 22, 2016 9:50 am

Как говорят в американских фильмах - Вы это о чем?
Практически надо иметь как минимум две независимые обмотки.От одной питать стабилизатор для ардуины , а вторую обмотку использовать для контроля напряжения. Надо только подобрать коэффициент преобразования. Такой подход не совсем рационален - надо иметь независимое питание для сервера и контроля напряжения . Когда пропадает 220 вольт которое мы контролируем - сервер должен работать. Иначе теряется смысл контроля напряжения.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: POWER MONITOR на Arduino

Сообщение Kod.Begemot » Пн авг 22, 2016 10:10 am

Согласен с предыдущим оратором, за исключением одного "Но" - если сделать питание от того-же транса, но не напрямую, а, скажем, с ионистором небольшим, или конденсатором большим :)
Тогда у контроллера будет достаточно времени, чтобы сказать "усё, света нету, я что смог - рассказал, отключаюсь до появления оного..."
Но это "размышления на тему", у себя предпочитаю всю автоматику/все сенсоры питать бесперебойно, и долго после того, как отключили электропитание...
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: POWER MONITOR на Arduino

Сообщение serghei » Пн авг 22, 2016 11:58 am

Так вот про это и разговор. + ещё не мало важный момент - общая электро безопастность . 220 вольт не шутка. При использовании импульсных блоков питания надо следить за абсолютной развязкой от сети. Иначе потенциал сети может попасть в контроллер , а это оочень больно!!
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
AndrewS
Сообщения: 123
Зарегистрирован: Пт апр 15, 2016 10:18 am
Откуда: 21RU
Благодарил (а): 5 раз
Поблагодарили: 20 раз
Контактная информация:

Re: POWER MONITOR на Arduino

Сообщение AndrewS » Чт авг 25, 2016 8:17 pm

Вот еще нашел очень удачную схему ваттметра Изображение

Интересное решение, напряжение снимается через АЦП MC3202, а ток через микросхему ACS712, есть 20-30А, но по развязке как то странно там, надо проверять, мне лениво потому что, покупать не охота, а этих мс у меня нет. Да и покупка обойдется в единичном экземпляре дороговато.
А вот из старого ИБП с RS232 или USB выходом может получиться, есть у меня 2 таких, правда на запчасти. Так вот, там есть трансформатор небольшой с Ш-образными пластинами, там первичная обмотка 3 витка, включена последовательно с ИБП, а вторичная, должно быть 3000 (1:1000) по сервис мануалу, и с него заводится на контроллер 0-5В на АЦП. + примитивная схема детектора перехода через ноль, ну и делитель напряжения входного на аналоговый вход. Вот и вся схема измерения.
Просто хотелось бы и заряжать батарею, и питать контроллер в случае потери напряжения и скидывать данные в жкх. А так можно и счетчик наверно поменять ради этого дела, но это не наш метод...
Изображение
И самое интересное здесь то, что по профилю потребления можно сказать, что тот или иной прибор включен или наоборот -сломан.
Слабость - велика, а сила - ничтожна.
ARMBIAN 5.38 stable Debian GNU/Linux 9 (stretch) 4.14.18-sunxi
System load: 2.03 1.85 1.78 Up time: 23 days
Memory usage: 65 % of 2014MB CPU temp: 37°C
Orange Pi Plus 2 H3 Quad Core 1.6GHZ 2GB
Ответить