Установка датчиков температуры
Модератор: immortal
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Установка датчиков температуры
Ну вот, отлично! Теперь есть от чего отталкиваться и с чем экспериментировать. Спасибо.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Установка датчиков температуры
Ок. Код работает и действительно показывает температуру с двух датчиков на одном входе Arduino. Очень здорово! Но есть небольшие проблемки. Вернее были.
Во-первых, если потерялась связь с датчиком, то код начинает выдавать одинаковые значения на обоих датчиках и никак не предупреждает, о том, что один датчик отвалился. 8(). В реальной жизни это ни в какие ворота.
Во-вторых, поскольку датчики сидят на одном входе, Arduino не различает разные датчики. И, если датчик один, то он для неё всегда первый. Т. е. датчик в подвале может вдруг начать показывать температуру в гараже. Что опять же 8().
Обе проблемы в новом коде устранены. Корректно отрабатывается вынимание датчиков во время работы и они жёстко привязаны к своему номеру. Т. е. физический датчик 1 всегда в системе виден, как Sensor 1.
В новом коде могут быть ошибки. Он писался "лишь бы заставить работать".Желательно, что бы его посмотрел кто-то, кто в этом понимает. Но у меня всё работает корректно.
Во-первых, если потерялась связь с датчиком, то код начинает выдавать одинаковые значения на обоих датчиках и никак не предупреждает, о том, что один датчик отвалился. 8(). В реальной жизни это ни в какие ворота.
Во-вторых, поскольку датчики сидят на одном входе, Arduino не различает разные датчики. И, если датчик один, то он для неё всегда первый. Т. е. датчик в подвале может вдруг начать показывать температуру в гараже. Что опять же 8().
Обе проблемы в новом коде устранены. Корректно отрабатывается вынимание датчиков во время работы и они жёстко привязаны к своему номеру. Т. е. физический датчик 1 всегда в системе виден, как Sensor 1.
В новом коде могут быть ошибки. Он писался "лишь бы заставить работать".Желательно, что бы его посмотрел кто-то, кто в этом понимает. Но у меня всё работает корректно.
Код: Выделить всё
#include <DallasTemperature.h>
#include <OneWire.h>
#include <math.h>
//Уникальные внутренние адреса имеющихся датчиков
byte mytempDat1 [] = {40, 240, 72, 81, 3, 0, 0};
byte mytempDat2 [] = {40, 221, 16, 81, 3, 0, 0};
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempSensor1, tempSensor2;
void setup() {
Serial.begin(9600);
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);
oneWire.reset_search();
delay(1000);
}
void loop() {
sensors.requestTemperatures();
// -------------------------------------------------- Temp Sensor 1
float current_temp1 = 0;
/*
//Если раскомментировать, то покажет внутренний номер датчика #1
for(byte i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(tempSensor1[i]); // в DEC
//Serial.print(tempSensor1[i], HEX); // или в HEX
}
*/
if (tempSensor1[1] == mytempDat1[1] && tempSensor1[2] == mytempDat1[2] && tempSensor1[3] == mytempDat1[3]) {
current_temp1 = sensors.getTempC(tempSensor1); // получаем температуру
if (current_temp1 != -127) {
Serial.println("Sensor 1:");
Serial.println(current_temp1);
} else {
Serial.println("Sensor 1:");
Serial.println("removed"); // вынули датчик
}
} else {
Serial.println("Sensor 1:");
Serial.println("not present"); // нет датчика
}
// -------------------------------------------------- Temp Sensor 2
float current_temp2 = 0;
if (tempSensor2[1] == mytempDat2[1] && tempSensor2[2] == mytempDat2[2] && tempSensor2[3] == mytempDat2[3]) {
current_temp2 = sensors.getTempC(tempSensor2); // получаем температуру
if (current_temp2 != -127) {
Serial.println("Sensor 2:");
Serial.println(current_temp2);
} else {
Serial.println("Sensor 2:");
Serial.println("removed"); // вынули датчик
}
} else {
Serial.println("Sensor 2:");
Serial.println("not present"); // нет датчика
}
Serial.println("------------------------- end of cycle");
delay(5000);
}
-
- Сообщения: 39
- Зарегистрирован: Вс апр 22, 2012 3:18 pm
- Благодарил (а): 0
- Поблагодарили: 4 раза
Re: Установка датчиков температуры
О, спасибо!
А то руки не доходили код почистить и проверить его на shockproof
На днях внесу его в полный код и посмотрю на предмет косяков.
А вообще я сколянюсь к мысли что термодатчики через Ардуину пользовать не особо интересно, тк есть возможность подключать их по сети OneWire. Правда для нее нужен адаптер и чуть более сложное подключение самих датчиков.
А то руки не доходили код почистить и проверить его на shockproof
На днях внесу его в полный код и посмотрю на предмет косяков.
А вообще я сколянюсь к мысли что термодатчики через Ардуину пользовать не особо интересно, тк есть возможность подключать их по сети OneWire. Правда для нее нужен адаптер и чуть более сложное подключение самих датчиков.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Установка датчиков температуры
Небольшое замечание. Тестировалось вынимание датчиков на ходу, но не тестировалось подключение во время работы. Датчики в макетной плате и я побоялся пожечь всё при подключении.
А датчики будем подключать везде, где это можно сделать . А если серьёзно, то можно подключать, можно не подключать, но иметь такую возможность (отлаженный код и практический опыт) не плохо.
А датчики будем подключать везде, где это можно сделать . А если серьёзно, то можно подключать, можно не подключать, но иметь такую возможность (отлаженный код и практический опыт) не плохо.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Установка датчиков температуры
Столкнулся со странной ситуацией. Было 2 датчика DS18B20, которые нормально работали в схеме с паразитным питанием. Купил ещё 3 датчика. Новые датчики нормально работают по одиночке. Но! При попытке включить 2 или больше датчиков из новой партии пишет "no parasite mode" или один из датчиков "not present". Всё бы ничего, но в том же месте старые датчики работают без проблем. Вата фак?! Все три новых датчика дохлые? Как-то маловероятно. Тем более, что по одиночке они работают. Или в чём может быть дело?
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Установка датчиков температуры
Разобрался. Почему-то важен порядок перечисления
byte mytempDat1 [] = {40...
byte mytempDat2 [] = {40...
byte mytempDat3 [] = {40...
byte mytempDat4 [] = {40...
byte mytempDat5 [] = {40...
какой s/n 1, какой 2 и т. д. Методом тыка расставил в правильном порядке... и всё заработало!
byte mytempDat1 [] = {40...
byte mytempDat2 [] = {40...
byte mytempDat3 [] = {40...
byte mytempDat4 [] = {40...
byte mytempDat5 [] = {40...
какой s/n 1, какой 2 и т. д. Методом тыка расставил в правильном порядке... и всё заработало!
Re: Установка датчиков температуры
При паразитном питании термометров погрешность около 1-1.5 градуса, лучше использовать нормальное питание.
С уважением
Александр.
Александр.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Установка датчиков температуры
Погрешность в один градус. Показывает он 27 или 28 градусов — для домашнего применения без разницы. По крайней мере для меня. А вот минусы у нормального питания существенные:
во-первых, каждый провод в кабельной системе на вес золота (особенно, если он уже проложен);
во-вторых, при нормальном питании каждый датчик занимает отдельную ногу Arduino. А так все датчики висят на одной ноге;
в третьих, при паразитном питании датчики можно вешать гирляндой в сочетании со звездой, что очень удобно, а при нормальном питании — только звездой.
Так что...
во-первых, каждый провод в кабельной системе на вес золота (особенно, если он уже проложен);
во-вторых, при нормальном питании каждый датчик занимает отдельную ногу Arduino. А так все датчики висят на одной ноге;
в третьих, при паразитном питании датчики можно вешать гирляндой в сочетании со звездой, что очень удобно, а при нормальном питании — только звездой.
Так что...
Re: Установка датчиков температуры
Если с Ардуиной, то согласен. У меня все датчики на 1-Wire сети, поэтому проблем с проводами нет.
С уважением
Александр.
Александр.
Re: Установка датчиков температуры
мне кажется Вы ошибаетесь. Вполне возможно использовать 1-wire на 1 ноге Arduino, используя при этом стандартную библиотеку OneWire.h (http://www.pjrc.com/teensy/td_libs_OneWire.html), а для получения данных температуры DallasTemperature.h (http://milesburton.com/index.php?title= ... ol_Library)во-вторых, при нормальном питании каждый датчик занимает отдельную ногу Arduino. А так все датчики висят на одной ноге;
Тут могу ошибаться я сам, но по информации, которую мне удалось насобирать, получается что при нормальном питании топология - шина. Если конечно не рассматривать подключение 2-3 датчиков на расстоянии в несколько метров. Очень рекомендую посмотреть статью http://mk90.blogspot.com/2011/04/1-wire.htmlв третьих, при паразитном питании датчики можно вешать гирляндой в сочетании со звездой, что очень удобно, а при нормальном питании — только звездой.
И вот у меня какой вопрос. Может я чего не понимаю, но почему нельзя использовать Arduino как шлюз между сетью 1-wire из датчиков DS18B(S)20 или других устройств и собственно управляющим компьютером? В данном случае получаем много преимуществ. Как одно из них - на 1 ногу ардуины можно повесить до 32 датчиков, что хорошо если нужно получить топологию звезда из шин ). И ведь код для Arduino, который занимается поиском всех датчиков на шине есть (в примерах к библиотеке), код для считывания нужных датчикой тоже есть. Для заполнения справочника датчиков (в базе) можно обратится по Ethernet например специально сформированным GET-ом к Arduino, он выдаст в ответ серийники и температуру датчиков, которые он нашел. А потом как вариант можно такими же вызовами получать как информацию с нужного датчика так и сразу со всех, в зависимости от того, что нужно.
И вот еще хорошая статья http://www.elin.ru/files/pdf/1-Wire/app148ru_p.pdf