Място за идеи и желания за проектиране и изработка на готови проекти.
naughty - специалист
оптрона ще мига с 50 херца, но не е проблем в софта да провериш примерно 3 пъти в рамките на 0.5 секунди и ще си наясно дали работи или не.
naughty - специалист
за kuuuul специално, днес ми звъня да пита как се свързват температурните датчици, ето още малко разяснителни картинки:

Изображение
Изображение

трябва ти двупроводен кабел.

съпротивлението е 4К7, но не го слагай още, ще го сложа аз.
2v6 - майстор
Започнах да правя и нещо като стаен термостат.
Пак се ползва Ардуино, има и елементарен webserver - може през някъкъв интернет браузер да се проверява температурата и статуса включено/изключено.
Засега има един сензор DS18B20. Кода е упростен - използват се минимално количество библиотеки. Свързал съм само един датчик на един вход и не ползвам адреса му за четене - ще работи с всеки датчик DS18ххх.
Има запис на температурата в Cosm (бившия Pachube):

Изображение

Първоначално заданието на температурата е твърдо 22 градуса и изход 5V ще включва термопомпата.

Това е кода за Arduino 0022:

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

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>

// assign a MAC address for the ethernet controller.
// fill in your address here:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x31, 0x9E };
byte ip[] = { 192,168,0, 85 };
byte gateway[] = {192,168,0,1};	
byte subnet[] = { 255, 255, 255, 0 };

//  The address of the server you want to connect to (pachube.com):
byte server[] = { 
  173,203,98,29 }; 

// initialize the library instance:
Client client(server, 80);
Server webserver(80);

long loopTime, readSensors_time, th_on_time, th_off_time, sendTime = 40000;   
int thermostat,i,T0_int;
byte data[12];
float T0;

void setup() {
  pinMode(9,OUTPUT);
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  startConversion(3);
  delay(1000);
  T0=readSensor(3);
  webserver.begin();
}

void loop() 
{
  loopTime=millis();
  if (readSensors_time<loopTime)
  {
    readSensors_time=loopTime+6000;
    T0=readSensor(3);
    T0_int=T0*100;
    startConversion(3);
  }
  webServer();
  Thermostat();
  if(loopTime > sendTime) 
  {
    client.stop();
      // convert the data to a String to send it:
    sendTime=loopTime + 59999;
    char thisData[30];
    sendData(thisData);
  }
}

void Thermostat()
{
  if (th_off_time<loopTime && T0<22)
    {
      th_on_time=loopTime+300000;
      digitalWrite(9, HIGH);
      thermostat=1;
    }
  if (th_on_time<loopTime && T0>22)
    {
      th_off_time=loopTime+300000;
      digitalWrite(9, LOW);
      thermostat=0;
    }
}

// this method makes a HTTP connection to the server:
void sendData(String thisData) 
{
  // if there's a successful connection:
  if (client.connect()) 
  {
    Serial.println("connecting...");
    // send the HTTP PUT request. 
    // fill in your feed address here:
    client.print("PUT /api/555.csv HTTP/1.1\n");
    client.print("Host: www.pachube.com\n");
    // fill in your Pachube API key here:
    client.print("X-PachubeApiKey: яаожээи434шэ-еиоэуеэиу2323525ъее\n");
    client.print("Content-Length: ");
    client.println(thisData.length(), DEC);

    // last pieces of the HTTP PUT request:
    client.print("Content-Type: text/csv\n");
    client.println("Connection: close\n");

    // here's the actual content of the PUT request:
    client.println(T0);
  } 
  else 
  {
    // if you couldn't make a connection:
    Serial.println("connection failed");
  }
}

void startConversion(byte pin) // Start temperature conversion
{
  OneWire ds(pin);
  ds.reset();
  ds.write(0xCC);         // Skip ROM command.
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
}

float readSensor(byte pin) // Read 13 bit resolution temperature sensor DS18B20
{
  OneWire ds(pin);
  int16_t raw;
  ds.reset();
  ds.write(0xCC);         // Skip ROM command.
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) 
  {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print( OneWire::crc8( data, 8), HEX);
  Serial.println();

  Serial.print(" CRC from device=");
  Serial.print( data[8], HEX);
  Serial.println();

  if (OneWire::crc8( data, 8)!=data[8])
  {
    Serial.println("CRC error");
  }
  else
  {
    raw = (((int16_t) data[1]) << 8) | data[0];
    Serial.println((float)raw/16);  
  }
  return (float)raw/16;
}

void webServer()
{
  // listen for incoming clients
  Client webclient = webserver.available();

  if (webclient) 
  {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (webclient.connected()) 
    {
      if (webclient.available()) 
      {
        char c = webclient.read();
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) 
        {
          // send a standard http response header
          webclient.println("HTTP/1.1 200 OK");
          webclient.println("Content-Type: text/html");
          webclient.println();

          webclient.print("loop time: ");
          webclient.print(loopTime/1000);
          webclient.print(" <br>");

          webclient.print("Room temperature: ");
          webclient.print(T0);
          webclient.print(" <sup>o</sup>C<br>");
    
          webclient.print("Thermostat: ");
          webclient.print(thermostat);
          webclient.print(" <br>");

          webclient.print("th_on_time: ");
          webclient.print(th_on_time/1000);
          webclient.print(" <br>");

          webclient.print("th_off_time: ");
          webclient.print(th_off_time/1000);
          webclient.print(" <br>");
        
        break;
      }
      if (c == '\n') 
      {
        // you're starting a new line
        currentLineIsBlank = true;
      } 
      else if (c != '\r')   
      {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
      }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    webclient.stop();
  }  
}
2v6 - майстор
След последните промени вече са добавени и могат да се наблюдават на едно място всички температури на топлообменника на термопомпата, консумацията на електроенергия и температурата в стаята:

https://cosm.com/feeds/25242

Основното е, че термопомпата се включва и изключва от Ардуиното. Засега температурата е зададена твърдо в програмата на 22 градуса, но по-нататък имам идея да я променям през интернет.

Приложил съм програмата, а това е новата схема:

Изображение

Прикачен файл

_192_168_0_82_2012_11_28_public.zip
(1.89 KиБ) Свален 144 пъти
kuuuuuul - майстор
Много добре е станало :prayer: :prayer: :prayer: :prayer:
При мен обаче нещата се закучиха :cry: Добавих още датчици за ТП но като ги разпръснах по местата им почнаха проблемите,не иска да ги разпознае.До три датчика Ардуиното няма проблем ,a с до 6бр. работи но губи връзката с COSM,(пазпознава ги но в COSM не излизат) от 6бр на горе. пък дава грешка 400 и пак няма връзка,като добавя още изобщо не ги разпознава.Вече почти месец се мъча,изгорих едно Ардуино сега с ново но проблема остава.От начало вързах всички нови датчици на едно място и разпозна 12бр а 13-тия не искаше и реших че това са възможностите :? гледам и при тебе са 12бр.Първия път програмирането направи naughty но сега нямаше време и отидох при момчето от Роботев,той го програмира но за сега не може да открие от къде идва проблема.Имаш ли някаква идея?

Тоvа е със 6бр
HTTP/1.1 200 OK

Date: Sat, 01 Dec 2012 20:38:10 GMT

Content-Type: text/plain; charset=utf-8

Connection: close

X-PachubeRequestId: c2b25f0430dc8e890871d135852d55f069893ba7

Content-Length: 1

Cache-Control: max-age=0

Set-Cookie: _pachcore_app_session=BAh7BjoPc2Vzc2lvbl9pZCIlMTUyODNkYWI1MTdjMTQxMDE1MjJhZjZjYmYwNTBkYzc%3D--85a65650495910e2308afdc443e7f3e43ed7f435; domain=.cosm.com; path=/; expires=Sat, 15-Dec-2012 20:38:10 GMT; HttpOnly

X-Pachube-Logging-Key: logging.Gowi54B4QMmMnD0vkjVG

X-Runtime: 169

X-PachubePurgeCache: t:feeds/86384,web:feed:86384

Vary: Accept-Encoding





disconnecting.

Sensor #0 13.75C

Sensor #1 23.12C

Sensor #2 13.50C

Това е грешката
Normal 0 21 false false false BG X-NONE X-NONE MicrosoftInternetExplorer4

HTTP/1.1 400 Bad Request

Date: Sat, 01 Dec 2012 19:47:13 GMT

Content-Type: text/plain; charset=utf-8

Connection: close

X-PachubeRequestId: 36714e3ac476db09e1a738904c2e2ce96401b668

Cache-Control: no-cache

Set-Cookie: _pachcore_app_session=BAh7BjoPc2Vzc2lvbl9pZCIlZGE0OThiZmQ4NzYzZTM3MjBjMTk0NTRiOGNhZWM0MjA%3D--319f85467e0c42941eba54b18a21b548288cd3f8; domain=.cosm.com; path=/; expires=Sat, 15-Dec-2012 19:47:13 GMT; HttpOnly

X-Pachube-Logging-Key: logging.Gowi54B4QMmMnD0vkjVG

Content-Length: 60



CSV Parser Error: CSV is invalid. Incorrect number of fields

disconnecting.

Sensor #0 13.19C

Sensor #1 16.87C

Sensor #2 13.50C

Sensor #3 13.13C

Sensor #4 13.31C

Sensor #5 13.13C

Sensor #6 13.88C

Sensor #7 13.44C
2v6 - майстор
kuuuuuul написа:
Много добре е станало :prayer: :prayer: :prayer: :prayer:
При мен обаче нещата се закучиха :cry: Добавих още датчици за ТП но като ги разпръснах по местата им почнаха проблемите,не иска да ги разпознае.До три датчика Ардуиното няма проблем ,a с до 6бр. работи но губи връзката с COSM,(пазпознава ги но в COSM не излизат) от 6бр на горе. пък дава грешка 400 и пак няма връзка,като добавя още изобщо не ги разпознава.Вече почти месец се мъча,изгорих едно Ардуино сега с ново но проблема остава.От начало вързах всички нови датчици на едно място и разпозна 12бр а 13-тия не искаше и реших че това са възможностите :? гледам и при тебе са 12бр...
С какво Ардуино си и какъв Етернет?
Можеш ли да сложиш pde файла? (изтрий ключа ако е в него :!: )
kuuuuuul - майстор
Това е Ардуиното
http://www.robotev.com/product_info.php ... cts_id=294
Pde файл от къде да го взема :?
2v6 - майстор
kuuuuuul написа:
Това е Ардуиното
http://www.robotev.com/product_info.php ... cts_id=294
Pde файл от къде да го взема :?
Сега разбрах тежеста при теб на "изгорих едно Ардуино " :?
Този модел не е подходящ за такива експерименти. Хубавото може би му е само ниската консумация...
Едно китайско UNO с хубав Ethernet струва под 50 лв :idea: Освен това чипа му е на цокъл и при "изгаряне" ремонта струва 10-ина лв.

Файловете с програмите за Ардуино са с разширение ".pde" (до версия 23, от 1.0 вече са ".ino").
Имаш ли файла с твоята програма?
2v6 - майстор
Прикачил съм примерен файл за показване на 4 графики COSM (pachube) едновременно.

Данните са от kuuuuuul (https://cosm.com/feeds/86384).

Прикачен файл

86384_multi1.zip
(439 Байта) Свален 145 пъти
kuuuuuul - майстор
А как се качват данните в ексел :? мога ли и аз да направя такава графика?

Тема "Интернет наблюдение на температури, топломер и др." | Включи се в дискусията:


Сподели форума:

Бъди информиран. Следвай "Направи сам" във Facebook:

Намери изпълнител и вдъхновения за дома. Следвай MaistorPlus във Facebook: