Страница 1 от 3

Интернет наблюдение на температури, топломер и др.

Публикувано: съб мар 17, 2012 7:30 pm
от 2v6
Направих показване на данните от термопомпата в интернет.
Използва се ардуино с етернет. Данните се изпращат през 1 минута на безплатния сървър
https://pachube.com/feeds/25242
Започнах да тествам и отчитане на получената топлинна енергия.
По-долу е текущия код за ардуиното.
Ако някой иска да го използва трябва да се заместят адресите на датчиците!
Също така трябва да си вкара и собствен ключ за pachube.

Код: Избери всички

#include <ERxPachube.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include "EEPROMAnything.h"


byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x42, 0x3B }; //да не се повтаря с друг в локалната мрежа
byte ip[] = { 192,168,0, 82 }; //адрес за ардуиното
byte gateway[] = {192,168,0,1};	//адрес на рутера, ако се ползва
byte subnet[] = { 255, 255, 255, 0 };

float T0,T1,T2,T3,T4,F,P, PulseTime,Q62,Q62f=0,temp_f;
int i;
volatile long lastFlowPulseTime;
long LastFeedTime, FlowPulseTime, loopTime, SensorsReadTime, Q62Time;

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(2);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
DeviceAddress DeviceAddress0 = { 0x28, 0xE0, 0xDD, 0xC2, 0x02, 0x00, 0x00, 0xF4 }; //28E0DDC2020000F4
DeviceAddress DeviceAddress1 = { 0x28, 0x26, 0xC4, 0xC2, 0x02, 0x00, 0x00, 0x56 }; //2826C4C202000056
DeviceAddress DeviceAddress2 = { 0x28, 0xB7, 0xD1, 0x11, 0x03, 0x00, 0x00, 0x5C }; //28B7D1110300005C
DeviceAddress DeviceAddress3 = { 0x28, 0x9B, 0xD7, 0x11, 0x03, 0x00, 0x00, 0x0B }; //289BD7110300000B
DeviceAddress DeviceAddress4 = { 0x28, 0x3D, 0xCA, 0x11, 0x03, 0x00, 0x00, 0x75 }; //283DCA1103000075

ERxPachubeDataOut dataout("ключ", 25242);
ERxPachubeDataOut dataout1("ключ", 52035);

void setup() {
  Ethernet.begin(mac, ip);
  delay(1000);
  // Start up the library
  	dataout.addData(0);
	dataout.addData(1);
	dataout.addData(2);
	dataout.addData(3);
	dataout.addData(4);
	dataout.addData(5);
	dataout.addData(6);
	dataout.addData(8);
	dataout.addData(9);
	dataout.addData(10);

	dataout1.addData(1);

  sensors.begin();
  attachInterrupt(1, FlowPulseSet, RISING);
  pinMode(4,OUTPUT);
  
  }

void loop()
{
  loopTime=millis();
  if (loopTime-LastFeedTime>59998)
  {
    LastFeedTime=loopTime;   
    feedPachube();
  }
  flowCalculation();
  if (loopTime-Q62Time>3600000 && Q62f>0)
  {
    EEPROM_readAnything(0,temp_f);
    Q62=temp_f+Q62f;
    EEPROM_writeAnything(0,Q62);    
    Q62f=0;
  }  

  if (loopTime-SensorsReadTime>9999)
  {
    SensorsReadTime=loopTime;
    sensorsRead();
  }
}

void feedPachube()
  {
  P=F*(T1-T2)*0.00115;
  dataout.updateData(0, T0);
  dataout.updateData(1, T1);
  dataout.updateData(2, T2);
  dataout.updateData(3, T3);
  dataout.updateData(4, F);
  dataout.updateData(5, P);
  dataout.updateData(6, (analogRead(0)<200)); //Fan feedback
  dataout.updateData(8, (analogRead(2)<200)); //4-way valve feedback
  dataout.updateData(9, (analogRead(3)<200)); //Defrosting
  dataout.updateData(10, T4);
  int status = dataout.updatePachube();
  EEPROM_readAnything(0,Q62); 
  temp_f=Q62f+Q62;
  dataout1.updateData(1, temp_f);
  status = dataout1.updatePachube();
}
  
void flowCalculation()
{
  if (lastFlowPulseTime>FlowPulseTime)
  {
    PulseTime=lastFlowPulseTime-FlowPulseTime; 
    F=3600000/PulseTime;    
    temp_f=Q62f;
    Q62f=(T1-T2)*0.00115+temp_f;
    if (F>2000 || F<0) F=0;
    FlowPulseTime=lastFlowPulseTime;
  }
  
  if (loopTime>lastFlowPulseTime+10000) F=0;
}

void FlowPulseSet()
{
  lastFlowPulseTime=millis();
}

void sensorsRead() 
{
  sensors.requestTemperatures(); // Send the command to get temperatures
  delay(1000);
  T0=sensors.getTempC(DeviceAddress0);
  T1=sensors.getTempC(DeviceAddress1);
  T2=sensors.getTempC(DeviceAddress2);
  T3=sensors.getTempC(DeviceAddress3);
  T4=sensors.getTempC(DeviceAddress4);
}

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: нед мар 18, 2012 8:07 am
от naughty
За опростяване на кода можеш да използваш и автоматично откриване на адресите на температурните датчици, ето пример:

Код: Избери всички

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 4
#define TEMPERATURE_PRECISION 12

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

void setup()
{
  Serial.begin(9600);

  sensors.begin();
  
  DeviceAddress tmp_address;
  int numberOfDevices = sensors.getDeviceCount();
  
  for(int i=0;i<numberOfDevices; i++)
  {
    sensors.getAddress(tmp_address, i);
    printAddress(tmp_address);
    Serial.println();
  }
}

void loop()
{ 
 
}

void printAddress(DeviceAddress deviceAddress)
{
  Serial.print("{ ");
  for (uint8_t i = 0; i < 8; i++)
  {
    // zero pad the address if necessary
    Serial.print("0x");
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
    if (i<7) Serial.print(", ");
    
  }
  Serial.print(" }");
}

Цялата тая патаклама мисля да я реализирам и като ардуино шиелд, виж и моята тема http://napravisam.bg/forum/viewtopic.ph ... 00#p407700

Дай конкретни модели на контактор и датчик поток?

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: нед мар 18, 2012 9:03 pm
от 2v6
naughty написа:
За опростяване на кода можеш да използваш и автоматично откриване на адресите на температурните датчици, ето пример:
...
Цялата тая патаклама мисля да я реализирам и като ардуино шиелд, виж и моята тема http://napravisam.bg/forum/viewtopic.ph ... 00#p407700

Дай конкретни модели на контактор и датчик поток?
За потока ползвам водомер Minomess с импулсен изход.
За кой контактор питаш?

Видях по твоите схеми мерене на напрежение 220VAC с трансформатор. Пробвал ли си го? На ардуиното входовете са му за право напрежение - чудя се как ще мери променливо :?

Автоматичното намиране на адресите го ползвам само да си обознача кой сензор коя температура ще мери. Иначе не знам как ще се получи.

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: пон мар 19, 2012 7:53 am
от naughty
2v6 написа:
За кой контактор питаш?
за контакт 1,2,3, грешка е че написак контактор, мислех си, че затваряш схемата с контактор
2v6 написа:
Видях по твоите схеми мерене на напрежение 220VAC с трансформатор. Пробвал ли си го? На ардуиното входовете са му за право напрежение - чудя се как ще мери променливо :?
Схемата "повдига" синусоидата над нулата и става DC играене от 0 до 5V, пропорционално на входящото напрежение. В моята система не меря напрежението а съм го забил на 220. 90% е вярно, за мен е достатъчно. Нацелил съм с проба-грешка и косинус фи за термопомпата ми и също съм го забил като параметър.

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: вт мар 20, 2012 9:06 pm
от 2v6
naughty написа:
за контакт 1,2,3, грешка е че написак контактор, мислех си, че затваряш схемата с контактор
В момента съм свързал успоредно на вентилатора и 4-пътния такива релета:
http://www.phoenixcontact.com/signal-le ... _31344.htm
Комплекта с цокъла е доста обемист и мисля да ги замествам с оптрони.
naughty написа:
Схемата "повдига" синусоидата над нулата и става DC играене от 0 до 5V, пропорционално на входящото напрежение. В моята система не меря напрежението а съм го забил на 220. 90% е вярно, за мен е достатъчно. Нацелил съм с проба-грешка и косинус фи за термопомпата ми и също съм го забил като параметър.
Някакъв примерен код за такова мерене на напрежение имаш ли? Не ми е ясно как точно да го пробвам :?

Между другото примерния код за автоматично откриване на адресите и броя на сензорите, който си дал по-горе (предполагам си го копирал директно от библиотеката за IDE 022) е леко неточен. В коментара е написан за ползване "рort 2", а в кода се ползва вход 4.

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: ср мар 21, 2012 9:26 am
от naughty
2v6 написа:
Някакъв примерен код за такова мерене на напрежение имаш ли? Не ми е ясно как точно да го пробвам :?
им си библиотека готова, ето:

https://github.com/openenergymonitor/EmonLib

има примерче с мерене на ток и напрежение

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: ср мар 21, 2012 9:46 am
от ArturDent
2v6 написа:

Код: Избери всички

#include <ERxPachube.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include "EEPROMAnything.h"
Поне да беше сложил един линк към SDK-то.

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: ср мар 21, 2012 10:28 am
от naughty
ArturDent написа:
2v6 написа:

Код: Избери всички

#include <ERxPachube.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include "EEPROMAnything.h"
Поне да беше сложил един линк към SDK-то.
дърпай от тук

http://arduino.cc/hu/Main/Software

Библиотеките ги има в нета, само потърси; за по-мързеливите може 2v6 да ZIP-не папката libraries и да я качи тук

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: ср мар 21, 2012 10:46 am
от naughty
2v6 написа:
В момента съм свързал успоредно на вентилатора и 4-пътния такива релета:
http://www.phoenixcontact.com/signal-le ... _31344.htm
Комплекта с цокъла е доста обемист и мисля да ги замествам с оптрони.
това с релетата и мен ме дразни, механика е все пак.
За оптроните имаш ли готова схема, аз мисля да ползвам това
Изображение

Re: Интернет наблюдение на температури, топломер и др.

Публикувано: пет мар 23, 2012 6:35 pm
от 2v6
naughty написа:
2v6 написа:
В момента съм свързал успоредно на вентилатора и 4-пътния такива релета:
http://www.phoenixcontact.com/signal-le ... _31344.htm
Комплекта с цокъла е доста обемист и мисля да ги замествам с оптрони.
това с релетата и мен ме дразни, механика е все пак.
За оптроните имаш ли готова схема, аз мисля да ползвам това
Изображение
Да, и аз минах на тази версия на средата за програмиране на Ардуиното:
http://arduino.cc/hu/Main/Software
В приложението съм компресирал цялата папка libraries (различават се от тези за предишните версии!).

За оптроните мисля че схемата ти е малко сложна.
На платката на моето външно тяло се подават сигналите с 220 VAC през оптрони, но дори няма обратните диоди. Не ми е ясно как не горят. Съпротивленията са 68k и са доста мощни, предполагам поне 2 W. Според мен е най-добре на входа да има грец. Така би трябвало да работи добре и с голямо съпротивление, примерно 120к, съответно с по-ниска мощност, защото и двете полувълни ще минават през диода на оптрона. Фототранзистора на оптрона ще пробвам как ще работи директно към вход на Ардуиното и евентуално с някакво съпротивление към маса...