Мониторинг на ел. консумация и други параметри като температура, дебит на течност, влажност, осветеност, присъствие и т.н, както и управление на електрически уреди посредством релета
Нека споделя малко опит в изграждането на система за любителски домашен енергиен мониторинг на термопомпа и следене на няколко основни температури. Концепцията може да се използва за мониторинг и последващ анализ на каквото и да е – например отоплителна система с котел/камина, дебит на течност, мониторинг на хладилни витрини, на климат (вятър, температура, влажност,налягане, осветеност) на фотоволатични системи, запис на GPS позиция , предаване данни по GPRS, акселометри, компаси, връткане на серво-та, управление на релета и каквото друго ви хрумне. В Интернет има примери за любителски мониторинг дори на сеизмични движения с отлична прецизност.
За изграждането на подобна система са необходими минимални познания по електроника и известни познания по програмиране. Не съм професионалист по хардуера и даже ме беше доста некомфортно да запоявам, но ето че се справих и сега ми изглежда смешно лесно. С една дума – не се шашкайте: не е толкова сложно, колкото се струва на пръв прочит.
За една такава системка дебнеща консумация и температури ще са необходими следните компоненти:
Хардуер:
NaNode – микроконтролер на базата нс Arduino с мрежови възможнсти
Захранване за Nanode
5V FTDI кабел за програмиране на Nanode
CT (current transformer) – не знам как се превежда на български - ампер клещи
Температурни сензори (цифрови или аналогови)
Софтуер:
Arduino Software IDE – за програмиране на Nanode, JeeNode
Програма за NaNode - пишете сами в зависимост от нуждите, примерни готови програми има безброй. По долу ще дам връзки към няколко основни примера.
Уеб базиран софт за съхранение и визуализация на данни, например pachube.com, emoncms, и др. Лично мен не ме кефи нито един от изброените и съм написал свой собствен. Детайли има по-нататък.
В зависимост от желанието, може да се направят и следните компоненти:
LCD екран за визуализация на някои параметри на живо
Отдалечени модули за събиране и препращане на данни от сензори към Nanode , на базата на JeeNode или EmonTx
Релейни платки към Nanode или JeeNode за управление на електроуреди
SD карта за събиране на данните при отсъствие на мрежова връзка
Системата работи по следният начин:
Nanode служи за събиране и изпращане на данните към външен сървър, сериен порт, LCD екран и т.н. според това каква програма му заредите. Nanode може да изпълнява функции на прост web-сървър и да визуализира текущи параметри и данни от сензорите на системата, да бъде конфигуриран и да управлява релета през HTTP странички
Nanode получава данните по прикачените към него сензори ИЛИ отдалечени сензори по радио-комуникация (чрез Hope RF RFM12B + JeeNode, emonTx и др варианти)
Събраните данни могат да бъдат визуализирани и анализирани през уеб-интерфейс.
Описание на модулите
Nanode

Net Applications Node (http://nanode.eu) – е Ардуино базирана платка с отворен код, която разполага с вградена уеб свързаност. Nanode разполага с шест аналогови канала и шест цифрови линии. Струва около 55лв с доставка до България. Идва в кит вариант и трябва да го сглобите сами.
Ако не ви се занимава с запояване и чакане, може да позвате и друга алтернатива:
http://www.robotev.com/product_info.php ... cts_id=294
Предимството на втория вариант е и наличието на SD card слот - ще може да записвате данни направо на карта и после да ги анализирате например в ексел.
Друго предимство е наличието на повече софт за чипсета W5100 , например NTP за мрежово време, SNMP за феновете на програмата на jacket и т.н.
Nanode може да се закупи от тук:
http://nanode.eu/buy
Инструкции за сглобяване тук:
http://wiki.london.hackspace.org.uk/vie ... g_a_Nanode
Ако ще използвате отдалечени радио сензори, внимавайте с инструкцията, има малки детайли, които са ясно описани.
Захранване за Nanode може да закупите от всеки магазин за електроника, USB тип B (квадратните, за принтер)
FTDI кабел
За програмирането на Nanode ще ви трябва FTDI кабел 5V. Купих моя от Ebay, струват около 20-тина лева. Ако някой има стар кабел за данни от Nokia, може да го преправи както е описано тук: http://www.arduino.cc/cgi-bin/yabb2/YaB ... 1261313468
CT (current transformer) – не знам как се превежда на български – сигурно ще е нещо като трансдюсер или сензор за ток. Може да си изберете съвместим сензор от тук:
http://openenergymonitor.org/emon/node/156
Сензори лично аз купувам от smartgreenshop.co.uk , но да знаете, че доставката е безобразно бавна.
Изберете сензор 30 или 100А в зависимост от нуждите ви, efergy сензорите са най-тествани с моята система но и SCT-013-030 или SCT-013-000 са съвместими.
Схемата за свързване на сензорите е следната:

Като избора стойностите на съпротивленията и кондензатора са съобразени със сензора на ток и максималните възможни отчитания. Четете тук
http://openenergymonitor.org/emon/node/59
и
Смятане резистор
http://tyler.anairo.com/?id=5.3.0
ако ще се вманиачавате и искате отчитане и на напрежението (вместо да го фиксирате на 220в) ще ви трябва и AC-AC трансформаторче, свързването към Nanode става така:

Температурни сензори (цифрови или аналогови)
За избор на температурни датчици съм се спрял на цифровите TCN75A от тук:
http://www.robotev.com/product_info.php ... cts_id=176
Тези сензори работят на I2C шина и мога да закача 8 сензора като използвам само два пина от Nanode. Към същата шина може да закачите и сензори за влажност пак на I2C протокола и така да не хабите излишно пинове.
Друг много популярен модел цифрови температурни сензори е D18B20, силно ги препоръчвам.
Ако все пак държите на старомодните аналогови термистори, закачат се така:

Как да четете стойности е описано тук:
http://www.arduino.cc/playground/Compon ... hermistor2
От софтуерната страна ще е необходимо:
Свалете си Arduino Software IDE – от http://arduino.cc
Програма за NaNode - пишете сами в зависимост от нуждите
Ето тук има около тон примерни програми, ще помагам и аз с каквото мога
http://openenergymonitor.org/emon/node/227
Примерче за отчитане температури и консумация към emoncmsL
http://dl.dropbox.com/u/18771283/HomeMonitorV4.zip
Ппример за отчитане на консумацията (при напрежение като параметър а не измервано)
Уеб базиран софт за съхранение и визуализация на данни, например pachube.com, emoncms, и др. Лично мен не ме кефи нито един от изброените и съм написал свой собствен с който визуализирам данните за произволен период с произволна резолюция. Мога да позволя на 4-5 от вас да го позват от моя сървър за тестове. За сега няма да споделям кода, трудно ми е да се разделя с него след 1 година кръпки 
Екран от моята система:

Моята система има закачен I2C LCD екран на който извеждам разни параметри, ккто и 8 релета за управление на термопомпата ми. В допълнение имам и отдалечен сензор за консумирантата енергия от цялата къща (не само термопомпата).
Основен модул

Отдалеченият модул (в ел таблото на къщата. предава показанията безжично до другия модул)


и малко теория като за последно:
http://openenergymonitor.org/emon/node/61
Нека споделя малко опит в изграждането на система за любителски домашен енергиен мониторинг на термопомпа и следене на няколко основни температури. Концепцията може да се използва за мониторинг и последващ анализ на каквото и да е – например отоплителна система с котел/камина, дебит на течност, мониторинг на хладилни витрини, на климат (вятър, температура, влажност,налягане, осветеност) на фотоволатични системи, запис на GPS позиция , предаване данни по GPRS, акселометри, компаси, връткане на серво-та, управление на релета и каквото друго ви хрумне. В Интернет има примери за любителски мониторинг дори на сеизмични движения с отлична прецизност.
За изграждането на подобна система са необходими минимални познания по електроника и известни познания по програмиране. Не съм професионалист по хардуера и даже ме беше доста некомфортно да запоявам, но ето че се справих и сега ми изглежда смешно лесно. С една дума – не се шашкайте: не е толкова сложно, колкото се струва на пръв прочит.
За една такава системка дебнеща консумация и температури ще са необходими следните компоненти:
Хардуер:
NaNode – микроконтролер на базата нс Arduino с мрежови възможнсти
Захранване за Nanode
5V FTDI кабел за програмиране на Nanode
CT (current transformer) – не знам как се превежда на български - ампер клещи
Температурни сензори (цифрови или аналогови)
Софтуер:
Arduino Software IDE – за програмиране на Nanode, JeeNode
Програма за NaNode - пишете сами в зависимост от нуждите, примерни готови програми има безброй. По долу ще дам връзки към няколко основни примера.
Уеб базиран софт за съхранение и визуализация на данни, например pachube.com, emoncms, и др. Лично мен не ме кефи нито един от изброените и съм написал свой собствен. Детайли има по-нататък.
В зависимост от желанието, може да се направят и следните компоненти:
LCD екран за визуализация на някои параметри на живо
Отдалечени модули за събиране и препращане на данни от сензори към Nanode , на базата на JeeNode или EmonTx
Релейни платки към Nanode или JeeNode за управление на електроуреди
SD карта за събиране на данните при отсъствие на мрежова връзка
Системата работи по следният начин:
Nanode служи за събиране и изпращане на данните към външен сървър, сериен порт, LCD екран и т.н. според това каква програма му заредите. Nanode може да изпълнява функции на прост web-сървър и да визуализира текущи параметри и данни от сензорите на системата, да бъде конфигуриран и да управлява релета през HTTP странички
Nanode получава данните по прикачените към него сензори ИЛИ отдалечени сензори по радио-комуникация (чрез Hope RF RFM12B + JeeNode, emonTx и др варианти)
Събраните данни могат да бъдат визуализирани и анализирани през уеб-интерфейс.
Описание на модулите
Nanode

Net Applications Node (http://nanode.eu) – е Ардуино базирана платка с отворен код, която разполага с вградена уеб свързаност. Nanode разполага с шест аналогови канала и шест цифрови линии. Струва около 55лв с доставка до България. Идва в кит вариант и трябва да го сглобите сами.
Ако не ви се занимава с запояване и чакане, може да позвате и друга алтернатива:
http://www.robotev.com/product_info.php ... cts_id=294
Предимството на втория вариант е и наличието на SD card слот - ще може да записвате данни направо на карта и после да ги анализирате например в ексел.
Друго предимство е наличието на повече софт за чипсета W5100 , например NTP за мрежово време, SNMP за феновете на програмата на jacket и т.н.
Nanode може да се закупи от тук:
http://nanode.eu/buy
Инструкции за сглобяване тук:
http://wiki.london.hackspace.org.uk/vie ... g_a_Nanode
Ако ще използвате отдалечени радио сензори, внимавайте с инструкцията, има малки детайли, които са ясно описани.
Захранване за Nanode може да закупите от всеки магазин за електроника, USB тип B (квадратните, за принтер)
FTDI кабел
За програмирането на Nanode ще ви трябва FTDI кабел 5V. Купих моя от Ebay, струват около 20-тина лева. Ако някой има стар кабел за данни от Nokia, може да го преправи както е описано тук: http://www.arduino.cc/cgi-bin/yabb2/YaB ... 1261313468
CT (current transformer) – не знам как се превежда на български – сигурно ще е нещо като трансдюсер или сензор за ток. Може да си изберете съвместим сензор от тук:
http://openenergymonitor.org/emon/node/156
Сензори лично аз купувам от smartgreenshop.co.uk , но да знаете, че доставката е безобразно бавна.
Изберете сензор 30 или 100А в зависимост от нуждите ви, efergy сензорите са най-тествани с моята система но и SCT-013-030 или SCT-013-000 са съвместими.
Схемата за свързване на сензорите е следната:

Като избора стойностите на съпротивленията и кондензатора са съобразени със сензора на ток и максималните възможни отчитания. Четете тук
http://openenergymonitor.org/emon/node/59
и
Смятане резистор
http://tyler.anairo.com/?id=5.3.0
ако ще се вманиачавате и искате отчитане и на напрежението (вместо да го фиксирате на 220в) ще ви трябва и AC-AC трансформаторче, свързването към Nanode става така:

Температурни сензори (цифрови или аналогови)
За избор на температурни датчици съм се спрял на цифровите TCN75A от тук:
http://www.robotev.com/product_info.php ... cts_id=176
Тези сензори работят на I2C шина и мога да закача 8 сензора като използвам само два пина от Nanode. Към същата шина може да закачите и сензори за влажност пак на I2C протокола и така да не хабите излишно пинове.
Друг много популярен модел цифрови температурни сензори е D18B20, силно ги препоръчвам.
Ако все пак държите на старомодните аналогови термистори, закачат се така:

Как да четете стойности е описано тук:
http://www.arduino.cc/playground/Compon ... hermistor2
От софтуерната страна ще е необходимо:
Свалете си Arduino Software IDE – от http://arduino.cc
Програма за NaNode - пишете сами в зависимост от нуждите
Ето тук има около тон примерни програми, ще помагам и аз с каквото мога
http://openenergymonitor.org/emon/node/227
Примерче за отчитане температури и консумация към emoncmsL
http://dl.dropbox.com/u/18771283/HomeMonitorV4.zip
Ппример за отчитане на консумацията (при напрежение като параметър а не измервано)
Код: Избери всички
/*
//--------------------------------------------------------------------------------------
//Single CT wireless node example
// By Glyn Hudson and Trystan Lea: 7/7/11
// openenergymonitor.org
// GNU GPL V3
//--------------------------------------------------------------------------------------
*/
#include <avr/eeprom.h>
#include <util/crc16.h> //cyclic redundancy check
//--------------------------------------------------------------------------------------------------
// CT energy monitor setup definitions
//--------------------------------------------------------------------------------------------------
int CT_INPUT_PIN = 1; //I/O analogue 3 = emonTx CT2 channel. Change to analogue 0 for emonTx CT1 chnnel
int NUMBER_OF_SAMPLES = 1480; //The period (one wavelength) of mains 50Hz is 20ms. Each samples was measured to take 0.188ms. This meas that 106.4 samples/wavelength are possible. 1480 samples takes 280.14ms which is 14 wavelengths.
int RMS_VOLTAGE = 220; //Assumed supply voltage (230V in UK). Tolerance: +10%-6%
int CT_BURDEN_RESISTOR = 24; //value in ohms of burden resistor R3 and R6
int CT_TURNS = 1500; //number of turns in CT sensor. 1500 is the vaue of the efergy CT
double CAL = 1.295/2; //*calibration coefficient* IMPORTANT - each monitor must be calibrated for maximum accuracy. See step 4 http://openenergymonitor.org/emon/node/58. Set to 1.295 for Seedstudio 100A current output CT (included in emonTx V2.0 kit)
//--------------------------------------------------------------------------------------------------
//########################################################################################################################
//Data Structure to be received
//########################################################################################################################
typedef struct {
int ct1; // current transformer 1
int supplyV; // emontx voltage
} Payload;
Payload emontx;
//########################################################################################################################
//********************************************************************
//SETUP
//********************************************************************
void setup() {
Serial.begin(9600);
}
//********************************************************************
//LOOP
//********************************************************************
void loop() {
//--------------------------------------------------------------------------------------------------
// 1. Read current supply voltage and get current CT energy monitoring reading
//--------------------------------------------------------------------------------------------------
emontx.supplyV = readVcc(); //read emontx supply voltage
emontx.ct1=int(emon( CT_INPUT_PIN, CAL, RMS_VOLTAGE, NUMBER_OF_SAMPLES, CT_BURDEN_RESISTOR, CT_TURNS, emontx.supplyV));
//--------------------------------------------------------------------------------------------------
//for debugging
Serial.println(emontx.ct1);
delay(10); // Needed to make sure print is finished before going to sleep
}
//********************************************************************
//--------------------------------------------------------------------------------------------------
// Read current emonTx battery voltage - not main supplyV!
//--------------------------------------------------------------------------------------------------
long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate AVcc in mV
return result;
}
//--------------------------------------------------------------------------------------------------
int lastSampleI,sampleI; // Sample variables
double lastFilteredI,filteredI; // Filter variables
double sqI,sumI; // Power calculation variables
double emon(int CT_INPUT_PIN,double ICAL,int RMS_VOLTAGE,int NUMBER_OF_SAMPLES,int CT_BURDEN_RESISTOR,int CT_TURNS,int SUPPLY_VOLTAGE)
{
for (int n = 0; n < NUMBER_OF_SAMPLES; n++)
{
lastSampleI = sampleI;
sampleI = analogRead( CT_INPUT_PIN );
lastFilteredI = filteredI;
filteredI = 0.996*(lastFilteredI+sampleI-lastSampleI);
// Root-mean-square method current
// 1) square current values
sqI = filteredI * filteredI;
// 2) sum
sumI += sqI;
}
double I_RATIO = (( CT_TURNS / CT_BURDEN_RESISTOR ) * (SUPPLY_VOLTAGE/1000.0)) / 1024.0; // Rough calibration by component values
I_RATIO = I_RATIO * ICAL; // Fine adjustment calibration for accuracy
double Irms = I_RATIO * sqrt(sumI / NUMBER_OF_SAMPLES); // Final step in calculation of RMS CURRENT
sumI = 0; // Reset sum ready for next run.
double apparentPower = RMS_VOLTAGE * Irms; // Apparent power calculation
return apparentPower;
}

Екран от моята система:

Моята система има закачен I2C LCD екран на който извеждам разни параметри, ккто и 8 релета за управление на термопомпата ми. В допълнение имам и отдалечен сензор за консумирантата енергия от цялата къща (не само термопомпата).
Основен модул

Отдалеченият модул (в ел таблото на къщата. предава показанията безжично до другия модул)


и малко теория като за последно:
http://openenergymonitor.org/emon/node/61