POWER MONITOR на Arduino
Модератор: immortal
-
- Сообщения: 867
- Зарегистрирован: Вт янв 17, 2012 12:31 pm
- Благодарил (а): 121 раз
- Поблагодарили: 78 раз
Re: POWER MONITOR на Arduino
АЦП, это контроль аналоговых сигналов или нет?
не пинайте не силен в электронике...
думал может DS2438 тоже для этих целей может подойти
не пинайте не силен в электронике...
думал может DS2438 тоже для этих целей может подойти
- ser009
- Сообщения: 595
- Зарегистрирован: Сб окт 13, 2012 9:55 am
- Благодарил (а): 4 раза
- Поблагодарили: 43 раза
Re: POWER MONITOR на Arduino
А я думал что АналоговоЦиафовойПреобразовательVit писал(а):АЦП, это контроль аналоговых сигналов или нет?

-
- Сообщения: 107
- Зарегистрирован: Сб июн 30, 2012 7:54 am
- Благодарил (а): 0
- Поблагодарили: 14 раз
Re: POWER MONITOR на Arduino
DS2438 - тоже подойдет, он даже лучше будет, так как в отличие от DS2450 он может измерять входное напряжение 0-10 Вольт
тогда как DS2450 только 0-5 вольт.
Про АЦП тут понятней расписано http://ru.wikipedia.org/wiki/%C0%ED%E0% ... 2%E5%EB%FC
тогда как DS2450 только 0-5 вольт.
Про АЦП тут понятней расписано http://ru.wikipedia.org/wiki/%C0%ED%E0% ... 2%E5%EB%FC
Re: POWER MONITOR на Arduino
to BATONS
Подключаю этот датчик тока sct-013 по вашей схеме,но analogRead() выдаёт одно и тоже значение, и когда я закрепляю на проводе датчик, и когда он просто лежит.
На джеке датчика без разницы какой контакт куда? Там первый и последний, а средний не используется. На первый контакт я припаял верхушку вашей схемы, где 5 вольт, а на последний провод к ардуино, ну и всё остальное, как по схеме. Можно ли проверить работу датчика тестером, какие значения должны быть?
Подключаю этот датчик тока sct-013 по вашей схеме,но analogRead() выдаёт одно и тоже значение, и когда я закрепляю на проводе датчик, и когда он просто лежит.
На джеке датчика без разницы какой контакт куда? Там первый и последний, а средний не используется. На первый контакт я припаял верхушку вашей схемы, где 5 вольт, а на последний провод к ардуино, ну и всё остальное, как по схеме. Можно ли проверить работу датчика тестером, какие значения должны быть?
- ser009
- Сообщения: 595
- Зарегистрирован: Сб окт 13, 2012 9:55 am
- Благодарил (а): 4 раза
- Поблагодарили: 43 раза
Re: POWER MONITOR на Arduino
Я схему не подключал.
Но думаю можно проверить преобразователь и Arduino.
Преобразователь на выходе должен выдавать напряжение до 5v (при изменении тока значения должны меняться)
Можно взять мощный потребитель 1-2 кВт. на один из проводов одеть датчик (катушку sct-013) на выход вольтметр и смотреть изменения напряжения.
А Arduino можно проверить просто изменяя напряжение на той ножке куда планируете подключать преобразователь. При изменении напряжения до 5 вольт значения должны меняться до 1024.
Вроде так
Но думаю можно проверить преобразователь и Arduino.
Преобразователь на выходе должен выдавать напряжение до 5v (при изменении тока значения должны меняться)
Можно взять мощный потребитель 1-2 кВт. на один из проводов одеть датчик (катушку sct-013) на выход вольтметр и смотреть изменения напряжения.
А Arduino можно проверить просто изменяя напряжение на той ножке куда планируете подключать преобразователь. При изменении напряжения до 5 вольт значения должны меняться до 1024.
Вроде так

Re: POWER MONITOR на Arduino
Напряжение не изменяется при подкючении этой катушки к потребителю 1800 ватт. При измерении сопротивления на концах катушки, в отключённом от всего состоянии, получается 42 ом.
Ардуино работает исправно.
Даже не знаю что делать....
Ардуино работает исправно.
Даже не знаю что делать....
-
- Сообщения: 107
- Зарегистрирован: Сб июн 30, 2012 7:54 am
- Благодарил (а): 0
- Поблагодарили: 14 раз
Re: POWER MONITOR на Arduino
там без разницы какие контакты куда. Вы подключите все согласно схеме, (для датчика тока). резистор у меня вместо 66 ом стоит 100,
далее подключите вольтметр и источник питания 5 вольт.
Вольтметр должен показывать 2,5 вольт.
теперь если по проводу от силовой нагрузки будет идти ток, то пропорционально ему будет возрастать напряжение на выходе схемы....но не думайте, что оно будет несколько вольт, там все будет измерятся в миливольтах.
если все так и есть, то значит, что-то в ардуино
далее подключите вольтметр и источник питания 5 вольт.
Вольтметр должен показывать 2,5 вольт.
теперь если по проводу от силовой нагрузки будет идти ток, то пропорционально ему будет возрастать напряжение на выходе схемы....но не думайте, что оно будет несколько вольт, там все будет измерятся в миливольтах.
если все так и есть, то значит, что-то в ардуино
-
- Сообщения: 10
- Зарегистрирован: Пт янв 11, 2013 1:12 pm
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: POWER MONITOR на Arduino
Здравствуйте.BATONS писал(а):Код для Arduino
/*
Код мониторинга электропотребления и трансляции
данных на сервер majordomo
настроены коэфф под эту прошиву 5 июля 2012г
...
}
А чем компилировали код?
Что-то ошибки при компиляции вылазят.
Пробовал IDE Arduino 1.0.1 и IDE Arduino 1.0.3
-
- Сообщения: 10
- Зарегистрирован: Пт янв 11, 2013 1:12 pm
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: POWER MONITOR на Arduino
Подправленый скетч
Arduino IDE 0023
Датчики к аналоговым А0, А1
Дисплей 20х4
Вот код:
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 раз.
-
- Сообщения: 107
- Зарегистрирован: Сб июн 30, 2012 7:54 am
- Благодарил (а): 0
- Поблагодарили: 14 раз
Re: POWER MONITOR на Arduino
Я заливал эту прошивку через IDE Arduino которое было до версии 1.0.0
не помню сейчас номер версии, но на сайте ардуино есть она.
скачайте ее и через нее залейте...она не ругается.
не помню сейчас номер версии, но на сайте ардуино есть она.
скачайте ее и через нее залейте...она не ругается.