Страница 4 из 32

Re: POWER MONITOR на Arduino

Добавлено: Вт ноя 20, 2012 4:32 pm
Vit
АЦП, это контроль аналоговых сигналов или нет?


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


думал может DS2438 тоже для этих целей может подойти

Re: POWER MONITOR на Arduino

Добавлено: Вт ноя 20, 2012 5:58 pm
ser009
Vit писал(а):АЦП, это контроль аналоговых сигналов или нет?
А я думал что АналоговоЦиафовойПреобразователь :roll:

Re: POWER MONITOR на Arduino

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

Про АЦП тут понятней расписано http://ru.wikipedia.org/wiki/%C0%ED%E0% ... 2%E5%EB%FC

Re: POWER MONITOR на Arduino

Добавлено: Пт дек 14, 2012 8:57 pm
jack
to BATONS
Подключаю этот датчик тока sct-013 по вашей схеме,но analogRead() выдаёт одно и тоже значение, и когда я закрепляю на проводе датчик, и когда он просто лежит.
На джеке датчика без разницы какой контакт куда? Там первый и последний, а средний не используется. На первый контакт я припаял верхушку вашей схемы, где 5 вольт, а на последний провод к ардуино, ну и всё остальное, как по схеме. Можно ли проверить работу датчика тестером, какие значения должны быть?

Re: POWER MONITOR на Arduino

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

А Arduino можно проверить просто изменяя напряжение на той ножке куда планируете подключать преобразователь. При изменении напряжения до 5 вольт значения должны меняться до 1024.
Вроде так :roll:

Re: POWER MONITOR на Arduino

Добавлено: Ср дек 19, 2012 9:11 pm
jack
Напряжение не изменяется при подкючении этой катушки к потребителю 1800 ватт. При измерении сопротивления на концах катушки, в отключённом от всего состоянии, получается 42 ом.
Ардуино работает исправно.
Даже не знаю что делать....

Re: POWER MONITOR на Arduino

Добавлено: Чт дек 20, 2012 4:10 pm
BATONS
там без разницы какие контакты куда. Вы подключите все согласно схеме, (для датчика тока). резистор у меня вместо 66 ом стоит 100,
далее подключите вольтметр и источник питания 5 вольт.
Вольтметр должен показывать 2,5 вольт.
теперь если по проводу от силовой нагрузки будет идти ток, то пропорционально ему будет возрастать напряжение на выходе схемы....но не думайте, что оно будет несколько вольт, там все будет измерятся в миливольтах.
если все так и есть, то значит, что-то в ардуино

Re: POWER MONITOR на Arduino

Добавлено: Пт янв 11, 2013 1:44 pm
clark2
BATONS писал(а):Код для Arduino

/*
Код мониторинга электропотребления и трансляции
данных на сервер majordomo
настроены коэфф под эту прошиву 5 июля 2012г
...
}
Здравствуйте.
А чем компилировали код?
Что-то ошибки при компиляции вылазят.
Пробовал IDE Arduino 1.0.1 и IDE Arduino 1.0.3

Re: POWER MONITOR на Arduino

Добавлено: Вс янв 13, 2013 8:43 pm
clark2
Подправленый скетч
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);
}

Re: POWER MONITOR на Arduino

Добавлено: Сб янв 26, 2013 12:10 pm
BATONS
Я заливал эту прошивку через IDE Arduino которое было до версии 1.0.0
не помню сейчас номер версии, но на сайте ардуино есть она.
скачайте ее и через нее залейте...она не ругается.