В тази статия ще обсъдим различните видове температурни сензори и как те могат да се използват във всеки конкретен случай. Температурата е физически параметър, който се измерва в градуси. Това е съществена част от всеки процес на измерване. Областите, изискващи точни измервания на температурата, включват медицина, биологични изследвания, електроника, изследвания на материали и топлинни характеристики на електрическите продукти. Устройство, използвано за измерване на количеството топлинна енергия, което ни позволява да откриваме физически промени в температурата, е известно като температурен сензор. Те са цифрови и аналогови.
Основни видове сензори
Като цяло има два метода за получаване на данни:
1. Контакт... Сензорите за контактна температура са във физически контакт с предмет или вещество. Те могат да се използват за измерване на температурата на твърди вещества, течности или газове.
2. Безконтактни... Безконтактните температурни сензори откриват температурата, като пресичат част от инфрачервената енергия, излъчвана от обект или вещество, и усещат нейната интензивност. Те могат да се използват само за измерване на температура в твърди вещества и течности. Те не могат да измерват температурата на газовете поради тяхната безцветност (прозрачност).
Правила за избор на сензор
Температурният датчик за подово отопление е избран, като се вземат предвид такива характеристики като мощност, тип покритие, метод на монтаж и оборудване с допълнителна функционалност.
Мощност
Стойността със сигурност трябва да отговаря на изискванията и натоварването на топъл под. В противен случай сензорът няма да работи правилно. Когато мощността на нагревателния елемент е по-голяма от тази на самия регулатор, става необходимо допълнително да се инсталира магнитен стартер между тях - за да се предотврати повреда на устройството поради увеличено натоварване.
Набор от функции
Топлият под се контролира от електрически блок, който ви позволява да регулирате работата на нагревателните елементи. Съвременните контролери имат такава функционалност като стартиране и деактивиране на системата, регулиране на температурните условия, както и задаване на честотата на свързване и изключване на нагревателния елемент.
Лесно използване
Ако смятате, че няма да разберете програмирането, не трябва да купувате сложно устройство. Дори като се вземе предвид цялата му функционалност. Например за възрастните хора е доста проблематично да се справят с програмируеми устройства. По-добре да изберат механичния вариант.
Лесно за свързване
Придружаващата документация за термостата винаги посочва как да свържете сензора за подово отопление. Клемите са разположени на ръба от едната страна на блока за управление. След като свържете електрическите проводници съгласно схемата, ще е необходимо да проверите работата на отоплителната система. За да направите това, измерете съпротивлението на клемите на температурния датчик и нагревателния електрически кабел или свържете топъл под и увеличете температурните стойности от нула до показателя, препоръчан от SNIP, т.е. до 30 ° C.
Външен вид
Термичният сензор трябва да бъде не само функционално разбираем, но и привлекателен в дизайна. Модерните копчета се предлагат в най-различни цветове и форми. Можете да изберете вариант, който е в хармония с интериора на стаята.
Видове температурни сензори
Има много различни видове температурни сензори.От просто включване / изключване на термостатично устройство до сложни системи за управление на водоснабдяването, с функция за нагряване, използвани в процесите на отглеждане на растения. Двата основни типа сензори, контактни и безконтактни, се подразделят допълнително на резистивни, напреженови и електромеханични сензори. Трите най-често използвани температурни сензора са:
- Термистори
- Термодвойки за съпротивление
- Термодвойка
Тези температурни сензори се различават един от друг по отношение на оперативните параметри.
Устройство
Това е термодвойка (плоча или пръчка), изградена от проводници, които се свързват към клемите на чувствителния елемент.
В зависимост от информацията за температурата, съпротивлението на чувствителната част се променя, съответно се променя електрическият сигнал, подаван към термостата. По този начин се определя абсолютната стойност на температурата на средата.
Външен (външен температурен сензор за подово отопление), като правило, се намира под довършителното подово покритие и измерва неговите температурни показатели. Вътрешен (вграден), разположен вътре в регулатора и определящ нивото на отопление на въздуха.
Дизайнът на температурните сензори се избира в зависимост от характеристиките на системата:
Термистор
Термисторът е чувствителен резистор, който променя физическото си съпротивление с температура. Обикновено термисторите са направени от керамичен полупроводников материал като кобалт, манган или никелов оксид и са покрити със стъкло. Те са малки плоски запечатани дискове, които реагират относително бързо на всякакви температурни промени.
Поради полупроводниковите свойства на материала, термисторите имат отрицателен температурен коефициент (NTC), т.е. съпротивлението намалява с повишаване на температурата. Съществуват обаче и PTC термистори, чието съпротивление се увеличава с повишаване на температурата.
График на термистора
Предимства на термисторите
- Висока скорост на реакция на температурни промени, точност.
- Ниска цена.
- По-високо съпротивление в диапазона от 2000 до 10 000 ома.
- Много по-висока чувствителност (~ 200 ома / ° C) в ограничен температурен диапазон до 300 ° C.
Температурни зависимости на съпротивлението
Зависимостта на съпротивлението от температурата се изразява чрез следното уравнение:
Където A, B, C - това са константи (осигурени от условията за изчисление), R - съпротивление в ома, т - температура в Келвин. Можете лесно да изчислите промяната в температурата от промяна в съпротивлението или обратно.
Как да използвам термистор?
Термисторите са оценени като резистивни при стайна температура (25 ° C). Термисторът е пасивно резистивно устройство, така че изисква производството на мониторинг на текущото изходно напрежение. Като правило те са свързани последователно с подходящи стабилизатори, образуващи мрежов делител на напрежението.
Пример: Помислете за термистор със стойност на съпротивление 2.2K при 25 ° C и 50 ома при 80 ° C. Термисторът е свързан последователно с резистор 1 kΩ чрез 5 V захранване.
Следователно неговото изходно напрежение може да се изчисли, както следва:
При 25 ° C, RNTC = 2200 ома;
При 80 ° C, RNTC = 50 ома;
Важно е обаче да се отбележи, че при стайна температура стандартните стойности на съпротивлението са различни за различните термистори, тъй като те са нелинейни. Термисторът има експоненциална промяна на температурата и следователно бета константа, която се използва за изчисляване на неговото съпротивление за дадена температура. Изходното напрежение и температурата на резистора са линейно свързани.
Характеристики на двужилния токов интерфейс в температурни сензори LMT01
Фиг. 4. Организация на текущия интерфейс с LMT01
Както бе споменато по-горе, за да предаде резултата от измерването, LMT01 генерира битова последователност под формата на импулси за отчитане на ток. За това сензорът изисква само два проводника (Фигура 4). За да преобразувате токови импулси във форма, позната на цифровите микросхеми, в някои случаи можете да използвате единичен резистор (но не винаги - повече за това по-долу).
След включване LMT01 започва цикъл на измерване, който отнема до 54 ms (Фигура 5). През това време на изхода на сензора се образува ток с ниско ниво от 28 ... 39 μA. Това е последвано от цикъл на предаване на резултата от измерването под формата на токови импулси с амплитуда 112 ... 143 μA. Приемащият микроконтролер трябва да брои тези импулси, например с помощта на вградения брояч / таймер. Тъй като честотата на сигналите е около 82 ... 94 kHz, тогава с максималния брой импулси (4095), продължителността на предаване може да достигне 50 ms.
Фиг. 5. Времеви диаграми на работа на сензора LMT01
Чрез броя на преброените импулси (PC), температурната стойност може да се определи съгласно формула 1:
, (1)
По този начин, при 0 ° C, сензорът ще генерира около 800 импулса.
За съжаление, използването на един външен резистор не винаги е възможно поради ограничението на минималния спад на напрежението в сензора LMT01. По време на цикъла на измерване спадът на сензора трябва да бъде най-малко 2,15 V. По време на цикъла на предаване на данни спадът на напрежението може да бъде намален до 2 V. Не е трудно да се направят груби изчисления.
Помислете за устройство с захранващо напрежение Vdd = 3,3 V. Ако вземем минимално допустимия спад през сензора, равен на 2,15 V по време на цикъла на измерване, тогава през резистора ще се наблюдава сигнал от не повече от 1,15 V. За повечето цифрови контролери, логическата единица е 0, 7 ∙ Vdd, което за нашия случай ще бъде 2,31 V. В резултат на това използването на обикновен резистор се оказва невъзможно, тъй като микроконтролерът просто няма да „види“ сигнала на логическа единица. Изходът от тази ситуация може да бъде използването на микроконтролер с вграден компаратор или схеми за преобразуване на ниво.
Резистивни температурни сензори
Сензорите за устойчивост на температура (RTD) са изработени от редки метали, като платина, чието електрическо съпротивление варира в зависимост от температурата.
Резистивните температурни детектори имат положителен температурен коефициент и за разлика от термисторите осигуряват висока точност на измерване на температурата. Те обаче имат слаба чувствителност. Pt100 е най-широко достъпният сензор със стандартна стойност на съпротивление от 100 ома при 0 ° C. Основният недостатък е високата цена.
Предимствата на такива сензори
- Широк температурен диапазон от -200 до 650 ° C
- Осигурете изходен ток с голям спад
- По-линейни в сравнение с термодвойките и RTD
Допълнителни компоненти и верига на сензора
В допълнение към основните диодни устройства схемата на температурния сензор включва редица допълнителни елементи. На първо място, това е кондензатор, който предпазва устройството от странични влияния. Факт е, че операционният усилвател е силно чувствителен към ефектите от променливи електромагнитни полета. Кондензаторът премахва тази зависимост, като предизвиква отрицателна обратна връзка.
С участието на транзистор и ценеров диод се формира стабилизирано еталонно напрежение. Тук се използват резистори с по-висок клас на точност с ниска стойност на температурния коефициент на съпротивление. По този начин цялата схема получава допълнителна стабилност. В случай на възможни значителни промени в температурните условия, прецизните резистори могат да бъдат пропуснати. Те се използват само за контрол на малки прегряване.
Термодвойка
Термодвойките за температура се използват най-често, защото са точни, работят в широк температурен диапазон от -200 ° C до 2000 ° C и са относително евтини. Термодвойка с проводник и щепсел на снимката по-долу:
Работа на термодвойка
Термодвойка е направена от два разнородни метала, заварени заедно, за да се получи потенциална разлика над температурата. От температурната разлика между двата кръстовища се генерира напрежение, което се използва за измерване на температурата. Разликата в напрежението между двата кръстовища се нарича ефект на Зеебек.
Ако и двете съединения са с една и съща температура, потенциалът за разлика в различните съединения е нула, т.е. V1 = V2. Ако обаче кръстовищата са с различни температури, изходното напрежение спрямо температурната разлика между двата кръстовища ще бъде равно на тяхната разлика V1 - V2.
Видове температурни сензори
Електронно-механични
Най-простият и най-евтиният тип регулатор. Основната му работна част е специална метална плоча, която реагира на повишаване или намаляване на температурата. Системата се включва и изключва чрез промяна на кривината на плочата по време на нагряване и охлаждане. Задаването на точната стойност на температурата на такъв регулатор няма да работи.
Електронна
Устройството има специален елемент, който генерира специален сигнал. Мощността зависи пряко от стойностите на околната температура. На такива устройства можете да зададете точни показания на температурата на нагряване до част от градуса. Системата се управлява от бутони и малък екран.
Програмируем
Най-скъпият от термоелементите. На него можете да зададете определени стойности, при достигане на които цялата система се включва или изключва от регулатора. Благодарение на устройството в помещението се създава микроклимат, който подхожда на определен човек. Възможно е да конфигурирате термостата така, че системата да се включва в точно определено време. Тоест подовете се отопляват преди собственикът да се прибере у дома и в същото време електричеството не се консумира, когато собственикът не е.
Много модели се отличават с ярки и стилни дизайни и LCD екрани, които предоставят информация и улесняват фината настройка.
Работа с готови библиотеки
Така че, за да работите с температурни сензори DS18B20 в мрежата, можете да намерите огромен брой библиотеки, но като правило се използват две от най-популярните. Това е библиотека и библиотека. Освен това втората библиотека е по-удобна добавка спрямо първата и не може да се използва без нея. С други думи, преди да свържете библиотеката DallasTemperature.h, трябва да свържете и OneWire.h. Възможно е да инсталирате определени библиотеки в IDE на Arduino.
Библиотека OneWire.h
Нека първо обмислим работата с библиотеката OneWire.h. По-долу е даден списък на неговите функции с кратко описание.
- Сензор за температура на OneWire (uint8_t pinNumber)
Тази функция е конструктор на класа OneWire и създава обект temperatureSensor, т.е. отваря комуникационен канал със сензор или група сензори на щифта pinNumber. В нашите примери (Фигури 3-5) това е щифтът „D2“ на Arduino Nano. Към него свързахме DQ DS18B20 шината за данни.
Пример:
Сензор за температура на OneWire
(
D2
);
// Сензор или група сензори е свързан към щифт D2
- uint8_t търсене (addrArray)
Функцията търси следващото устройство на 1-Wire шина и когато бъде намерена, въвежда стойността на адреса в масива addrArray, връщайки true. Тъй като уникалният адрес на всеки сензор е 64-битов, addrArray трябва да бъде с размер 8 байта. Ако търсенето не успее, функцията връща false. Трябва да се отбележи, че когато няколко сензора за температура са свързани към една шина, всяко повикване към функцията за търсене ще бъде адресирано до следващия сензор, след това към следващия и т.н., докато бъдат изброени всички устройства в шината. Особеността на тази функция е да запомни вече обработени адреси. За да нулирате опашката, трябва да извикате функцията reset_search (), която ще бъде разгледана по-долу.
Пример:
байт addrArray
[
8
];
// Масив за съхраняване на 64-битов адрес // Ако устройството изобщо отсъства в шината или всички устройства са изброени // покажете съответната информация в монитора на порта
ако(!
температурен сензор
.
Търсене
(
addrArray
))
Сериен
.
println
(
„Няма повече адреси.“
);
// В противен случай, ако следващото устройство отговори на заявката за присъствие, // покажете своя 64-битов адрес в монитора на порта
друго{за(
i
=
0
;
i
<
8
;
i
++)
Сериен
.
печат
(
addrArray
[
i
],
HEX
);
}
- нищоженreset_search ()
Както бе споменато по-горе, тази функция нулира опашката за анкета от устройства в 1-Wire шината до самото начало. Винаги трябва да се използва заедно с функцията за търсене, когато последната връща false. Например, в нашия случай с 5 сензора в шината, като извикаме функцията за търсене 5 пъти, можем да получим 5 адреса. За шести път функцията за търсене ще ни върне false и ще прави това при всяка следваща анкета, докато опашката не се изчисти. Трябва да обърнете внимание на това, за да избегнете неразбираеми ситуации.
Пример:
байт addrArray
[
8
];
// Масив за съхраняване на 64-битов адрес // Ако устройството изобщо отсъства в шината или всички устройства са изброени // нулиране на опашката за избиране, за да повтори цикъла на търсене
ако(!
температурен сензор
.
Търсене
(
addrArray
))
температурен сензор
.
reset_search
();
- uint8_tнулиране ()
Функцията за нулиране на 1 проводник инициира процеса на комуникация. Той се извиква всеки път, когато искаме да комуникираме с температурния сензор. Връщаните стойности могат да бъдат true или false. Ще получим истинската стойност, ако поне един сензор в шината реагира на нулиране с импулс за присъствие. В противен случай получаваме невярно;
Пример:
ако(!
температурен сензор
.
нулиране
())
Сериен
.
println
(
„Няма сензори в шината“
);друго
Сериен
.
println
(
„Сензорът е открит“
);
- нищоженизберете (addrArray)
Функцията ви позволява да изберете конкретно устройство, с което искаме да работим в момента. Изборът се прави чрез изрично посочване на 64-битовия адрес, въведен в масива addrArray. Адресът може да бъде зададен изрично, като го запишете в масива или използвате предварително прочетената от функцията за търсене. Обърнете внимание, че функцията за нулиране трябва да бъде извикана преди извикване на select. При следващото нулиране връзката с избрания сензор се прекъсва до следващото повикване за избор.
Пример:
байт addrArray
[
8
];
// Масив за съхраняване на 64-битов адрес // Ако устройството изобщо отсъства в шината или всички устройства са изброени // изведете съответната информация на монитора на порта
ако(!
температурен сензор
.
Търсене
(
addrArray
))
Сериен
.
println
(
„Няма повече адреси.“
);
// В противен случай, ако следващото устройство е отговорило на заявката за присъствие, // изберете го за последваща работа
друго{
температурен сензор
.
нулиране ()
;
// Не забравяйте да подадете командата за нулиране на temperatureSensor
.
изберете (addrArray)
;
// Посочете масив с прочетения адрес
}
- нищоженпропуснете ()
Функцията е подходяща само при работа с един сензор в шината и просто пропуска избора на устройството. С други думи, не можете да използвате функцията за търсене и следователно бърз достъп с единствения си сензор.
Пример:
температурен сензор.
нулиране
();
// Нулиране на температурата Sensor гума
.
пропуснете
();
// Изберете единствения сензор за по-нататъшна работа с него
- нищоженпиши (uint8_tбайт, uint8_t powerType = 0)
Функцията изпраща байт данни към избраното устройство на шината. Аргументът powerType посочва вида на захранването на сензорите (0 - сензорите се захранват директно от външен източник; 1 - използва се паразитно захранвана връзка). Вторият параметър може да бъде пропуснат, ако се използва външно захранване, тъй като по подразбиране е 0.
Пример:
температурен сензор
.
нулиране
();
// Нулиране на температурата Sensor гума
.
пропуснете
();
// Избиране на единствения сензор за по-нататъшна работа с него // Изпращане на команда за преобразуване на температурата, // използване на връзка с паразитна мощност от шината за данни temperatureSensor
.
пиши
(
0x44
,
1
);
- uint8_tПрочети ()
Тази функция чете един байт данни, изпратени от подчиненото устройство (сензор) към 1-Wire шината.
Пример:
// Прочетете 9 байта данни от 1-Wire шината и поставете резултата в масив от байтове на масив
[
9
];за(
uint8_t i
=
0
;
i
<
9
;
i
++){
масив
[
i
]=
температурен сензор
.
Прочети
();}
- статичен uint8_t crc8 (const uint8_t * addr, uint8_t len);
Функцията е предназначена за изчисляване на контролната сума. Проектиран да проверява правилната комуникация с температурния сензор. Тук addr е указател към масива от данни, а len е броят на байтовете.
Пример:
байт addrArray
[
8
];
// Масив за съхраняване на 64-битов адрес // Ако устройството изобщо отсъства в шината или всички устройства са изброени // изведете съответната информация на монитора на порта
ако(!
температурен сензор
.
Търсене
(
addrArray
))
Сериен
.
println
(
„Няма повече адреси.“
);
// В противен случай, ако следващото устройство отговори на заявката за присъствие, // проверете контролната сума на неговия адрес
друго{
// Ако контролната сума не съвпада, покажете съобщение за грешка
ако(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Сериен
.
println
(
„CRC не е валиден!“
);}}
Разгледахме всяка функция на библиотеката OneWire.h поотделно и за да поправим материала, по-долу ще дам скица за отчитане на температурата от група температурни сензори DS18B20, които ще бъдат свързани към щифт D2 с помощта на паразитна верига на захранване. Скицата ще съдържа подробни коментари по всички необходими точки.
#include // Свързваме библиотеката за работа с термодатчици DS18B20OneWire ds
(
2
);
// Сензор или група сензори са свързани към D2 щифта на Arduino // PRESET FUNCTION void setup
(
нищожен
){
Сериен
.
започнете
(
9600
);
// Инициализация на работа със Serial-port} // Главен цикъл void цикъл
(
нищожен
){
байт i
;
// Допълнителна променлива за присъстващи байтове
=
0
;
// Променлива за определяне на готовността на сензора за комуникационни байтове type_s
;
// Променлива за дефиниране на типа термодатчик на байтовата шина за данни
[
12
];
// Масив за съхраняване на информация, получена от байтовия сензор на сензора
[
8
];
// Масив за съхраняване на 64-битовия адрес на плаващия сензор за Целзий
,
Фаренхайт
;
// Променливи за изчисляване на температурата // Ако устройствата в шината не са намерени или всички устройства в шината са изброени // покажете съответната информация в монитора на порта, нулирайте опашката // и извършете търсене отново, изчаквайки 250ms
ако(!
ds
.
Търсене
(
адрес
)){
Сериен
.
println
(
„Няма повече адреси.“
);
Сериен
.
println
();
ds
.
reset_search
();
забавяне
(
250
);връщане;}
// Ако бъде намерено следващото устройство в шината, покажете неговия уникален адрес // в монитора на порта в шестнадесетичен сериен
.
печат
(
"ROM ="
);за(
i
=
0
;
i
<
8
;
i
++){
Сериен
.
пиши
(
‘ ‘
);
Сериен
.
печат
(
адрес
[
i
],
HEX
);}
// Проверете контролната сума на адреса на намереното устройство // и ако не съвпада, покажете съответната информация
ако(
OneWire
::
crc8
(
адрес
,
7
)!=
адрес
[
7
]){
Сериен
.
println
(
„CRC не е валиден!“
);връщане;}
Сериен
.
println
();
// Проверяваме нулевия байт на адреса, който съдържа информация // за определен тип температурен сензор. В зависимост от стойността на нулевия // байт, ние показваме поредицата от чипове в монитора на порта. Ако нулевият байт съдържа неизвестна // стойност, показваме съобщение за неизвестното семейство на температурния сензор.
превключвател(
адрес
[
0
]){случай
0x10
:
Сериен
.
println
(
"Чип = DS18S20"
);
type_s
=
1
;почивка;случай
0x28
:
Сериен
.
println
(
"Чип = DS18B20"
);
type_s
=
0
;почивка;случай
0x22
:
Сериен
.
println
(
"Чип = DS1822"
);
type_s
=
0
;почивка;по подразбиране:
Сериен
.
println
(
„Устройството не е устройство от семейство DS18x20.“
);връщане;}
ds
.
нулиране
();
// Нулиране на шината за инициализиране на ds за обмен на данни
.
изберете
(
адрес
);
// Изберете сензора с текущия адрес, за да работите с него // Изпратете командата за преобразуване на температурата (съгласно документацията 0x44) // Не забравяйте за втория параметър "1", тъй като предаваме данни чрез / линия с паразитно захранване. ds
.
пиши
(
0x44
,
1
);
// Сензорът започва преобразуване, което според документацията отнема макс. 750ms // За да бъдем на сигурно място, ще организираме пауза от second второ закъснение
(
1000
);
// Нулирайте шината отново, за да прочетете информация от сензора // запазете отговора на функцията reset () на настоящата променлива за по-нататъшна работа с нея
=
ds
.
нулиране
();
ds
.
изберете
(
адрес
);
// Повторно изберете сензора по неговия адрес, тъй като е имало импулс за нулиране // Командата 0xBE, съгласно техническата документация, позволява четене на вътрешната памет // на температурния сензор (Scratchpad), която се състои от 9 байта. ds
.
пиши
(
0xBE
);
// Четене и показване на 9 байта от вътрешната памет на температурния сензор Сериен към монитора на порта
.
печат
(
"Данни ="
);
Сериен
.
печат
(
присъства
,
HEX
);
Сериен
.
печат
(
» «
);за(
i
=
0
;
i
<
9
;
i
++){
данни
[
i
]=
ds
.
Прочети
();
Сериен
.
печат
(
данни
[
i
],
HEX
);
Сериен
.
печат
(
» «
);}
// Проверка и извеждане към порта наблюдава контролната сума на получените данни Serial
.
печат
(
"CRC ="
);
Сериен
.
печат
(
OneWire
::
crc8
(
данни
,
8
),
HEX
);
Сериен
.
println
();
// Стартирайте процеса на преобразуване на получените данни в действителната температура, // която се съхранява в 0 и 1 байта четена памет. За целта комбинираме тези два // байта в едно 16-битово число int16_t raw
=(
данни
[
1
]<<
8
)|
данни
[
0
];
// Преди по-нататъшно преобразуване трябва да дефинирате семейството, към което // принадлежи този сензор (по-рано записахме резултата в променливата type_s). // В зависимост от семейството температурата ще бъде изчислена по различен начин, // тъй като DS18B20 и DS1822 връщат 12-битова стойност, докато DS18S20 връща 9-битова стойност
ако(
type_s
){
// Ако сензорът принадлежи към суровото семейство DS18S20
=
суров
<<
3
;
// разделителната способност по подразбиране е 9 бита
ако(
данни
[
7
]==
0x10
){
суров
=(
суров
&
0xFFF0
)+
12
—
данни
[
6
];}}друго{
// Определете до каква точност на измерване е конфигуриран байт cfg
=(
данни
[
4
]&
0x60
);
// При по-ниски резолюции можете да занулите най-малко значимите битове, // тъй като те не са дефинирани по-рано
ако(
cfg
==
0x00
)
суров
=
суров
&~
7
;
// 9 бита (преобразуването отнема 93,75 ms)
другоако(
cfg
==
0x20
)
суров
=
суров
&~
3
;
// 10 бита (преобразуването отнема 187,5 ms)
другоако(
cfg
==
0x40
)
суров
=
суров
&~
1
;
// 11 бита (преобразуването отнема 375 ms) // Точността по подразбиране е 12 бита (преобразуването отнема 750 ms)
}
// Изчисляване и извеждане на стойностите на температурата към монитора на портове Целзий
=(
плувка
)
суров
/
16.0
;
Фаренхайт
=
Целзий
*
1.8
+
32.0
;
Сериен
.
печат
(
"Температура ="
);
Сериен
.
печат
(
Целзий
);
Сериен
.
печат
(
"Целзий"
);
Сериен
.
печат
(
Фаренхайт
);
Сериен
.
println
(
"Фаренхайт"
);}
Ако всичко е направено правилно, тогава в прозореца на монитора на порта трябва да видим нещо като следното (Фигура 6):
Фигура 6 - резултатът от работата с библиотеката OneWire.h
Библиотека DallasTemperature.h
Тази библиотека се основава на предишната и малко опростява процеса на програмиране поради по-разбираеми функции. След инсталацията ще имате достъп до 14 примера за добре документиран код за всички случаи. В рамките на тази статия ще бъде разгледан пример за работа с един сензор.
Резултатът от програмата е показан на фигура 7
Фигура №7 - резултат от отчитане на температурата с помощта на библиотеката DallasTemperature.h
// Свързваме необходимите библиотеки # include #include // Свързваме шината за данни към пин # 2 на Arduino # define ONE_WIRE_BUS 2 // Създаване на екземпляр на класа за нашата шина и връзка към него OneWire oneWire
(
ONE_WIRE_BUS
);
Далас Температурни сензори
(&
oneWire
);
// PRESET FUNCTION void setup
(
нищожен
){
Сериен
.
започнете
(
9600
);
// Инициализираме сензорите за сериен порт
.
започнете
();
// Инициализиране на шината
}
// ОСНОВЕН ЦИКЛ
(
нищожен
){
Сериен
.
печат
(
„Температура на четене ...“
);
// Изпратете командата за четене на сензори
.
requestTemperatures
();
Сериен
.
println
(
"Прочети"
);
Сериен
.
печат
(
"Температура на сензора 1:"
);
// Показване на стойността на температурата Serial
.
печат
(
сензори
.
getTempCByIndex
(
0
));}
Температурен сензор KY-001 с 1-жичен интерфейс
Този сензор се използва за точно измерване на температурата. Комуникацията със сензора се осъществява чрез 1-Wire интерфейс [1-2], който ви позволява да свържете няколко подобни устройства към платката Arduino с помощта на един щифт на микроконтролера [3-4]. Модулът е базиран на микросхемата ds18b20 [5].
Размер на модула 24 х 15 х 10 мм, тегло 1,3 г. За свързване се използва трипинов конектор. Централен контакт - захранване + 5V, контакт "-" - общ, контакт "S" - информационен.
Платката има червен светодиод, който свети, когато се обменя информация.
Консумация на ток 0,6 mA по време на обмен на информация и 20 μA в режим на готовност.
Свързването на този тип сензори с Arduino е добре описано в много източници [6-8]. В този случай отново се проявяват основните предимства на Arduino - гъвкавостта и наличието на огромно количество справочна информация. За да работите със сензора, ще ви е необходима библиотеката OneWire [9]. След като заредите програмата от [8] (в първата версия на програмата има грешка - в заглавката на кода няма #include библиотечна връзка), следната информация може да се наблюдава в монитора на серийния порт.
Авторът също така тества кода от [7], всичко работи веднага, в монитора на серийния порт можете да прочетете информация за вида на свързания сензор и действителните данни за температурата.
Като цяло много полезен сензор, който дава възможност на практика да се запознаете с 1-Wire интерфейса. Сензорът незабавно дава правилните данни за температурата, потребителят не трябва да калибрира.