Установка датчиков температуры

Проблемы/вопросы, связанные с запуском под различными платформами и конфигурациями.

Модератор: immortal

petr
Сообщения: 1
Зарегистрирован: Вт апр 17, 2012 6:14 pm
Благодарил (а): 0
Поблагодарили: 0

Установка датчиков температуры

Сообщение petr » Вт апр 17, 2012 6:16 pm

Здраствуйте.

Недавно достроили дом. Вот хотелось бы попробовать вашу систему в действии.

Для начала есть желание попробовать настроить датчики температур на двух этажах.

Нет ли инструкции по установке и подключение датчиков ? Какие датчики покупать и как их подключить к системе.

В программировании разбираюсь, но с железом - не очень. Был бы очень признателен за подобную инструкцию.
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: Установка датчиков температуры

Сообщение Vit » Ср апр 18, 2012 12:56 pm

petr писал(а):Здраствуйте.

Недавно достроили дом. Вот хотелось бы попробовать вашу систему в действии.

Для начала есть желание попробовать настроить датчики температур на двух этажах.

Нет ли инструкции по установке и подключение датчиков ? Какие датчики покупать и как их подключить к системе.

В программировании разбираюсь, но с железом - не очень. Был бы очень признателен за подобную инструкцию.
Петр здравствуйте....сначала укажите в каком варианте Вы хотите использовать датчики? т.е. выберете для себя:

1. C контроллером Arduino
2. используя 1-wire сеть.

Какой из вариантов выберете, с таким и будем разбираться по ходу действий....

в обоих вариантах возможно использование датчиков температур от фирмы Dallas DS18B20 в корпусе TO92.

Изображение

У меня используются оба варианта с системой...оба работают стабильно....выбирайте для себя какой Вам больше нравится
Sicness
Сообщения: 57
Зарегистрирован: Сб май 12, 2012 1:42 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Установка датчиков температуры

Сообщение Sicness » Вс май 13, 2012 8:59 am

Для выбора хорошо бы представлять оба варианта. Проекту не хватает этих двух статей или ссылки на них ;)
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: Установка датчиков температуры

Сообщение Vit » Вс май 13, 2012 10:59 am

Sicness писал(а):Для выбора хорошо бы представлять оба варианта. Проекту не хватает этих двух статей или ссылки на них ;)
На сайте расписаны оба варианта

http://smartliving.ru/Main/ScMonitorHeating - с использованием arduino
http://smartliving.ru/Main/ArduinoSchema - схема подключения датчика к arduino

http://smartliving.ru/Main/ModuleOnewire - использование 1-wire сети
http://smartliving.ru/Main/OnewireWindows - подключение адаптера к windows и его настройка

пробуйте, что больше нравится...начнете делать вопросы уже потом можете тут отписывать...
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Установка датчиков температуры

Сообщение Alex » Чт май 31, 2012 9:45 am

На схеме контроллера (http://smartliving.ru/Main/ArduinoSchema) датчики температуры DS18B20 подключены к 2 и 3 входам Arduino. Но датчиков может быть много, а входов контроллера мало и они практически "на вес золота". Нельзя ли несколько датчиков подключить на один вход? И как это сделать?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Установка датчиков температуры

Сообщение sergejey » Чт май 31, 2012 1:18 pm

Alex писал(а):На схеме контроллера (http://smartliving.ru/Main/ArduinoSchema) датчики температуры DS18B20 подключены к 2 и 3 входам Arduino. Но датчиков может быть много, а входов контроллера мало и они практически "на вес золота". Нельзя ли несколько датчиков подключить на один вход? И как это сделать?
Боюсь, что с помощью Arduino так не выйдет. Если датчиков действительно очень много, то лучше подключать их по 1-wire сети.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: Установка датчиков температуры

Сообщение Vit » Чт май 31, 2012 2:14 pm

Alex писал(а):На схеме контроллера (http://smartliving.ru/Main/ArduinoSchema) датчики температуры DS18B20 подключены к 2 и 3 входам Arduino. Но датчиков может быть много, а входов контроллера мало и они практически "на вес золота". Нельзя ли несколько датчиков подключить на один вход? И как это сделать?
Использовать 1-wire сеть, как написал уже Сергей, либо искать пример скетча для использования нескольких датчиков на одном канале arduino, кто то из пользователей реализовывал данный вариант, правда примера не выложили...полистайте форум...
shurlin
Сообщения: 39
Зарегистрирован: Вс апр 22, 2012 3:18 pm
Благодарил (а): 0
Поблагодарили: 4 раза

Re: Установка датчиков температуры

Сообщение shurlin » Чт май 31, 2012 6:34 pm

Можно повесить на 1 канал несколько датчиков температуры в паразитном режиме.

Вот тут пример как подключать - http://www.ogalik.ee/pics/DS18B20_parasite_mode_2.png

http://www.ogalik.ee/arduino-and-ds18b2 ... ermometer/

но код представленный на сайте работать с несколькими датчиками не будет, надо для ардуины его переписать, постараюсь позже выложить свой код для работы с несколькими датчиками.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Установка датчиков температуры

Сообщение sergejey » Чт май 31, 2012 6:35 pm

shurlin писал(а):Можно повесить на 1 канал несколько датчиков температуры в паразитном режиме.
Вот тут пример как подключать - http://www.ogalik.ee/pics/DS18B20_parasite_mode_2.png
http://www.ogalik.ee/arduino-and-ds18b2 ... ermometer/
но код представленный на сайте работать с несколькими датчиками не будет, надо для ардуины его переписать, постараюсь позже выложить свой код для работы с несколькими датчиками.
Было бы здорово :)

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
shurlin
Сообщения: 39
Зарегистрирован: Вс апр 22, 2012 3:18 pm
Благодарил (а): 0
Поблагодарили: 4 раза

Re: Установка датчиков температуры

Сообщение shurlin » Чт май 31, 2012 6:38 pm

вот мой рабочий код для Ардуины, но вы сможете найти тут часть для работы с датчиками.
Обратите внимание что надо скачать и посавить дополнительные библиотеки DallasTemperature и OneWire

Код: Выделить всё


// Библиотеки ниже нет в стандартной поставке среды разработки Arduino.
// придётся её скопировать.
#include <DallasTemperature.h>
#include <OneWire.h>
#include <math.h>

// Temp sensors history
int old_temperature1=0;
int old_temperature2=0;
int old_temp_an1=0;
// Key senosors history
int old_garage=0;
int old_entry=0;
int old_movement_1=0;
int old_movement_2=0;
//Light sensors history
int old_light=0;
int old_photolight=0;

int cold_water=0;

char buf[80];

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);
DeviceAddress tempSensor1, tempSensor2;


// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
  Serial.println(buf); 
}

void ColdWaterIncreased (){cold_water++;}

double Thermister(int RawADC) {
 double Temp;
 Temp = log(((10240000/RawADC) - 10000));
 Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
 Temp = Temp - 273.15;            // Convert Kelvin to Celcius
// Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
 return Temp;
}


void setup()
{
 sensors.begin(); 
 
 Serial.print("Parasite power is: "); 
 if (sensors.isParasitePowerMode()) Serial.println("ON");
 else Serial.println("OFF");
 oneWire.reset_search();
 
 // locate devices on the bus
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");
 
 sensors.getAddress(tempSensor1, 0);
 sensors.getAddress(tempSensor2, 1);
 
 pinMode(4, INPUT); // Датчик гаражной двери на 7-ый пин
 old_garage=digitalRead(4);

 pinMode(5, INPUT); // Датчик въездных ворот на 8-ый пин 
 old_entry=digitalRead(5);

 pinMode(6, INPUT); // Датчик движения 1
 old_movement_1=digitalRead(6);

 pinMode(7, INPUT); // Датчик движения 2
 old_movement_2=digitalRead(7);

 pinMode(8, INPUT); // Датчик включение кнопки
 old_light=digitalRead(8);




 Serial.begin(115200); 

 oneWire.reset_search();
 
 //pinMode(3, INPUT);      // Pin 3 to gauge contact
 //digitalWrite(3, HIGH);  
 //attachInterrupt(1, ColdWaterIncreased, FALLING);
   
 
}

void loop()
{

  int valid_sensor=0;
  int photolight=0;

  delay(1000); // задержка в 1 сек.  


//   oneWire.reset_search();
   sensors.requestTemperatures();
   
  // TEMP SENSOR 1
 /* float current_temp1=0;
  // Соединяемся
  // Обработчик ошибок датчика
  valid_sensor=1;
  switch(tempSensor1.isValid())
   {
     case 1:
       Serial.println("Err T1"); // ошибка контрольной суммы
       tempSensor1.reset(); // сбросить девайс
       valid_sensor=0;
     case 2:
       Serial.println("Err T1"); // какой-то "левый" датчик :)
       tempSensor1.reset(); // сбросить девайс
       valid_sensor=0;
   }
*/
/*
if (valid_sensor==1) {  
   Serial.println("T1");
   current_temp1=sensors.getTempC(tempSensor1); // получаем температуру
   current_temp1= random (10,30);
   Serial.println(current_temp1);

  if ((old_temperature1!=(int)current_temp1) && (current_temp1<79) && (current_temp1>5)) {

   int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
   sprintf(buf, "GET /objects/?object=sensorBedroom&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp1, abs(temp1));   
   sendHTTPRequest();

}
 old_temperature1=(int)current_temp1;

}

*/

  // TEMP SENSOR 1
float current_temp1=0;

  valid_sensor=1;
 if (valid_sensor==1) 
 {
 
   Serial.println("T1 Living");
   current_temp1=sensors.getTempC(tempSensor1); // получаем температуру
   Serial.println(current_temp1);

  if ((old_temperature1!=(int)current_temp1) && (current_temp1<50) && (current_temp1>5)) 
  {
   int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
   sprintf(buf, "GET /objects/?object=sensorLiving&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp1, abs(temp1));   
   sendHTTPRequest();
  }
 old_temperature1=(int)current_temp1;  
 }
  // TEMP SENSOR 2
float current_temp2=0;
  valid_sensor=1;
 if (valid_sensor==1) 
 {

   Serial.println("T2 Bedroom");
   current_temp2=sensors.getTempC(tempSensor2); // получаем температуру
   Serial.println(current_temp2);

  if ((old_temperature2!=(int)current_temp2) && (current_temp2<50) && (current_temp2>5)) {
   int temp1 = (current_temp2 - (int)current_temp2) * 100; // выделяем дробную часть
   sprintf(buf, "GET /objects/?object=sensorBedroom&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp2, abs(temp1));   
   sendHTTPRequest();

}
 old_temperature2=(int)current_temp2;  
 }

//GARAGE GATES SENSOR
  Serial.println("G");
  int current_garage=digitalRead(4);
  Serial.println(current_garage);
  if (current_garage!=(int)old_garage) {
    old_garage=(int)current_garage;
    sprintf(buf, "GET /objects/?object=sensorGarage&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_garage);
    sendHTTPRequest();
  }

//ENTRY GATES SENSOR
  Serial.println("E");
  int current_entry=digitalRead(5);
  Serial.println(current_entry);
  if (current_entry!=(int)old_entry) {
    old_entry=(int)current_entry;
    sprintf(buf, "GET /objects/?object=sensorEntry&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_entry);
    sendHTTPRequest();
  }

 //MOVEMENT 1 SENSOR
  Serial.println("M1");
  int current_movement_1=digitalRead(6);
  //Serial.println(current_movement_1);
  if (current_movement_1!=(int)old_movement_1) {
    old_movement_1=(int)current_movement_1;
    sprintf(buf, "GET /objects/?object=sensorMovement1&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_1);
    sendHTTPRequest();
  }

 //MOVEMENT 2 SENSOR
  Serial.println("M2");
  int current_movement_2=digitalRead(7);
  //Serial.println(current_movement_2);
  if (current_movement_2!=(int)old_movement_2) {
    old_movement_2=(int)current_movement_2;
    sprintf(buf, "GET /objects/?object=sensorMovement2&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_2);
    sendHTTPRequest();
  }


//LIGHT SENSOR
  Serial.println("L");
  int current_light=digitalRead(8);
  //Serial.println(current_light);
  if (current_light!=(int)old_light) {
    old_light=(int)current_light;
    sprintf(buf, "GET /objects/?object=sensorLight&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_light);
    sendHTTPRequest();
  }  

// Аналоговый сенсор
   
   int temp_an1=Thermister(analogRead(0));

   if (temp_an1!=old_temp_an1) 
    {
   Serial.println("Analog Thermistor Temperature changed"); 
   old_temp_an1=temp_an1;
   //Serial.println(int(Thermister(analogRead(0))));  // display Fahrenheit
   sprintf(buf, "GET /objects/?object=sensorA1&op=m&m=tempChanged&t=%0d HTTP/1.0",(int)temp_an1 );   
   sendHTTPRequest();
     }
   
// Фоторезистор
    photolight=analogRead(5);
    if (photolight>=(int)old_photolight+20 || photolight<=(int)old_photolight-20) 
    {
    old_photolight=(int)photolight;
    Serial.println("Photoresistor Light changed");
    Serial.println(photolight);
    sprintf(buf, "GET /objects/?object=sensorAnLight&op=m&m=tempChanged&t=%0d HTTP/1.0", (int)photolight);
    sendHTTPRequest();
    }

Serial.println("+++++++++++++++++++++cycle end+++++++++++++++++++++++++");
// Cold water gauge
 /* Serial.println("Water");
   Serial.println(cold_water);
  Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++");
*/
  //just for testing
  //  sprintf(buf, "GET /objects/?object=sensorMovement2&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_2);
  // sendHTTPRequest();
 delay(5000);

}



Ответить