Установка датчиков температуры
Модератор: immortal
Установка датчиков температуры
Здраствуйте.
Недавно достроили дом. Вот хотелось бы попробовать вашу систему в действии.
Для начала есть желание попробовать настроить датчики температур на двух этажах.
Нет ли инструкции по установке и подключение датчиков ? Какие датчики покупать и как их подключить к системе.
В программировании разбираюсь, но с железом - не очень. Был бы очень признателен за подобную инструкцию.
Недавно достроили дом. Вот хотелось бы попробовать вашу систему в действии.
Для начала есть желание попробовать настроить датчики температур на двух этажах.
Нет ли инструкции по установке и подключение датчиков ? Какие датчики покупать и как их подключить к системе.
В программировании разбираюсь, но с железом - не очень. Был бы очень признателен за подобную инструкцию.
-
- Сообщения: 867
- Зарегистрирован: Вт янв 17, 2012 12:31 pm
- Благодарил (а): 121 раз
- Поблагодарили: 78 раз
Re: Установка датчиков температуры
Петр здравствуйте....сначала укажите в каком варианте Вы хотите использовать датчики? т.е. выберете для себя:petr писал(а):Здраствуйте.
Недавно достроили дом. Вот хотелось бы попробовать вашу систему в действии.
Для начала есть желание попробовать настроить датчики температур на двух этажах.
Нет ли инструкции по установке и подключение датчиков ? Какие датчики покупать и как их подключить к системе.
В программировании разбираюсь, но с железом - не очень. Был бы очень признателен за подобную инструкцию.
1. C контроллером Arduino
2. используя 1-wire сеть.
Какой из вариантов выберете, с таким и будем разбираться по ходу действий....
в обоих вариантах возможно использование датчиков температур от фирмы Dallas DS18B20 в корпусе TO92.
У меня используются оба варианта с системой...оба работают стабильно....выбирайте для себя какой Вам больше нравится
-
- Сообщения: 57
- Зарегистрирован: Сб май 12, 2012 1:42 pm
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Установка датчиков температуры
Для выбора хорошо бы представлять оба варианта. Проекту не хватает этих двух статей или ссылки на них
-
- Сообщения: 867
- Зарегистрирован: Вт янв 17, 2012 12:31 pm
- Благодарил (а): 121 раз
- Поблагодарили: 78 раз
Re: Установка датчиков температуры
На сайте расписаны оба варианта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 и его настройка
пробуйте, что больше нравится...начнете делать вопросы уже потом можете тут отписывать...
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Установка датчиков температуры
На схеме контроллера (http://smartliving.ru/Main/ArduinoSchema) датчики температуры DS18B20 подключены к 2 и 3 входам Arduino. Но датчиков может быть много, а входов контроллера мало и они практически "на вес золота". Нельзя ли несколько датчиков подключить на один вход? И как это сделать?
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Установка датчиков температуры
Боюсь, что с помощью Arduino так не выйдет. Если датчиков действительно очень много, то лучше подключать их по 1-wire сети.Alex писал(а):На схеме контроллера (http://smartliving.ru/Main/ArduinoSchema) датчики температуры DS18B20 подключены к 2 и 3 входам Arduino. Но датчиков может быть много, а входов контроллера мало и они практически "на вес золота". Нельзя ли несколько датчиков подключить на один вход? И как это сделать?
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 867
- Зарегистрирован: Вт янв 17, 2012 12:31 pm
- Благодарил (а): 121 раз
- Поблагодарили: 78 раз
Re: Установка датчиков температуры
Использовать 1-wire сеть, как написал уже Сергей, либо искать пример скетча для использования нескольких датчиков на одном канале arduino, кто то из пользователей реализовывал данный вариант, правда примера не выложили...полистайте форум...Alex писал(а):На схеме контроллера (http://smartliving.ru/Main/ArduinoSchema) датчики температуры DS18B20 подключены к 2 и 3 входам Arduino. Но датчиков может быть много, а входов контроллера мало и они практически "на вес золота". Нельзя ли несколько датчиков подключить на один вход? И как это сделать?
-
- Сообщения: 39
- Зарегистрирован: Вс апр 22, 2012 3:18 pm
- Благодарил (а): 0
- Поблагодарили: 4 раза
Re: Установка датчиков температуры
Можно повесить на 1 канал несколько датчиков температуры в паразитном режиме.
Вот тут пример как подключать - http://www.ogalik.ee/pics/DS18B20_parasite_mode_2.png
http://www.ogalik.ee/arduino-and-ds18b2 ... ermometer/
но код представленный на сайте работать с несколькими датчиками не будет, надо для ардуины его переписать, постараюсь позже выложить свой код для работы с несколькими датчиками.
Вот тут пример как подключать - 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: Установка датчиков температуры
Было бы здоровоshurlin писал(а):Можно повесить на 1 канал несколько датчиков температуры в паразитном режиме.
Вот тут пример как подключать - http://www.ogalik.ee/pics/DS18B20_parasite_mode_2.png
http://www.ogalik.ee/arduino-and-ds18b2 ... ermometer/
но код представленный на сайте работать с несколькими датчиками не будет, надо для ардуины его переписать, постараюсь позже выложить свой код для работы с несколькими датчиками.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 39
- Зарегистрирован: Вс апр 22, 2012 3:18 pm
- Благодарил (а): 0
- Поблагодарили: 4 раза
Re: Установка датчиков температуры
вот мой рабочий код для Ардуины, но вы сможете найти тут часть для работы с датчиками.
Обратите внимание что надо скачать и посавить дополнительные библиотеки DallasTemperature и OneWire
Обратите внимание что надо скачать и посавить дополнительные библиотеки 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);
}