POWER MONITOR на Arduino

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

Модератор: immortal

Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: POWER MONITOR на Arduino

Сообщение Vit » Вт ноя 20, 2012 4:32 pm

АЦП, это контроль аналоговых сигналов или нет?


не пинайте не силен в электронике...


думал может DS2438 тоже для этих целей может подойти
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 42 раза

Re: POWER MONITOR на Arduino

Сообщение ser009 » Вт ноя 20, 2012 5:58 pm

Vit писал(а):АЦП, это контроль аналоговых сигналов или нет?
А я думал что АналоговоЦиафовойПреобразователь :roll:
BATONS
Сообщения: 107
Зарегистрирован: Сб июн 30, 2012 7:54 am
Благодарил (а): 0
Поблагодарили: 13 раз

Re: POWER MONITOR на Arduino

Сообщение BATONS » Вт ноя 20, 2012 7:28 pm

DS2438 - тоже подойдет, он даже лучше будет, так как в отличие от DS2450 он может измерять входное напряжение 0-10 Вольт
тогда как DS2450 только 0-5 вольт.

Про АЦП тут понятней расписано http://ru.wikipedia.org/wiki/%C0%ED%E0% ... 2%E5%EB%FC
jack
Сообщения: 12
Зарегистрирован: Вс июл 29, 2012 7:02 pm
Благодарил (а): 0
Поблагодарили: 0

Re: POWER MONITOR на Arduino

Сообщение jack » Пт дек 14, 2012 8:57 pm

to BATONS
Подключаю этот датчик тока sct-013 по вашей схеме,но analogRead() выдаёт одно и тоже значение, и когда я закрепляю на проводе датчик, и когда он просто лежит.
На джеке датчика без разницы какой контакт куда? Там первый и последний, а средний не используется. На первый контакт я припаял верхушку вашей схемы, где 5 вольт, а на последний провод к ардуино, ну и всё остальное, как по схеме. Можно ли проверить работу датчика тестером, какие значения должны быть?
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 42 раза

Re: POWER MONITOR на Arduino

Сообщение ser009 » Сб дек 15, 2012 5:48 am

Я схему не подключал.
Но думаю можно проверить преобразователь и Arduino.
Преобразователь на выходе должен выдавать напряжение до 5v (при изменении тока значения должны меняться)
Можно взять мощный потребитель 1-2 кВт. на один из проводов одеть датчик (катушку sct-013) на выход вольтметр и смотреть изменения напряжения.

А Arduino можно проверить просто изменяя напряжение на той ножке куда планируете подключать преобразователь. При изменении напряжения до 5 вольт значения должны меняться до 1024.
Вроде так :roll:
jack
Сообщения: 12
Зарегистрирован: Вс июл 29, 2012 7:02 pm
Благодарил (а): 0
Поблагодарили: 0

Re: POWER MONITOR на Arduino

Сообщение jack » Ср дек 19, 2012 9:11 pm

Напряжение не изменяется при подкючении этой катушки к потребителю 1800 ватт. При измерении сопротивления на концах катушки, в отключённом от всего состоянии, получается 42 ом.
Ардуино работает исправно.
Даже не знаю что делать....
BATONS
Сообщения: 107
Зарегистрирован: Сб июн 30, 2012 7:54 am
Благодарил (а): 0
Поблагодарили: 13 раз

Re: POWER MONITOR на Arduino

Сообщение BATONS » Чт дек 20, 2012 4:10 pm

там без разницы какие контакты куда. Вы подключите все согласно схеме, (для датчика тока). резистор у меня вместо 66 ом стоит 100,
далее подключите вольтметр и источник питания 5 вольт.
Вольтметр должен показывать 2,5 вольт.
теперь если по проводу от силовой нагрузки будет идти ток, то пропорционально ему будет возрастать напряжение на выходе схемы....но не думайте, что оно будет несколько вольт, там все будет измерятся в миливольтах.
если все так и есть, то значит, что-то в ардуино
clark2
Сообщения: 10
Зарегистрирован: Пт янв 11, 2013 1:12 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: POWER MONITOR на Arduino

Сообщение clark2 » Пт янв 11, 2013 1:44 pm

BATONS писал(а):Код для Arduino

/*
Код мониторинга электропотребления и трансляции
данных на сервер majordomo
настроены коэфф под эту прошиву 5 июля 2012г
...
}
Здравствуйте.
А чем компилировали код?
Что-то ошибки при компиляции вылазят.
Пробовал IDE Arduino 1.0.1 и IDE Arduino 1.0.3
clark2
Сообщения: 10
Зарегистрирован: Пт янв 11, 2013 1:12 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: POWER MONITOR на Arduino

Сообщение clark2 » Вс янв 13, 2013 8:43 pm

Подправленый скетч
Arduino IDE 0023
Датчики к аналоговым А0, А1
Дисплей 20х4
Вот код:

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

/*
Код мониторинга электропотребления и трансляции
данных на сервер 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];
Client rclient(server, 80); // 80-порт

// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest()
{
//Serial.println(buf);
if (rclient.connect())
{
//Serial.println("OK");
rclient.println(buf);
rclient.println("Host: 192.168.8.3"); // IP компьютера на котором установлен сервер majordomo
rclient.println();
delay(2000);
rclient.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);
}
Последний раз редактировалось clark2 Вт янв 29, 2013 11:02 pm, всего редактировалось 1 раз.
BATONS
Сообщения: 107
Зарегистрирован: Сб июн 30, 2012 7:54 am
Благодарил (а): 0
Поблагодарили: 13 раз

Re: POWER MONITOR на Arduino

Сообщение BATONS » Сб янв 26, 2013 12:10 pm

Я заливал эту прошивку через IDE Arduino которое было до версии 1.0.0
не помню сейчас номер версии, но на сайте ардуино есть она.
скачайте ее и через нее залейте...она не ругается.
Ответить