TMP102 е сензор за измерване на температура от -40 до 125 градуса.Сензорът е с много ниска консумация и има много малки размери. Продава се запоен върху брейкаут борд, съдържащ всички необходими компоненти за оптималната му работа. Комуникацията с микроконтролер се осъществява по I2C и може се да използва наличната в Arduino библиотека Wire.
На една линия могат да бъдат свързани до 4 сензора с различни адреси. Адресът се определя от нивото на пин ADD0.
Например, ако ADD0 се свърже към GND, адресът на сензорът ще бъде 1001000.
Сензорът дава достъп до 4 регистъра с адреси:
Регистърът за температурата е активен по подразбиране т.е сензорът връща данни от този регистър докато микроконтролерът не изпрати указател към друг регистър. В зависимост от режима на работа, указан в регистъра за конфигуриране, данните за температурата са от 12 или 13бита. За измерване на температура над 128 градуса се използва режима с 13бита. Температурата в градуси се изчислява като десетичната стойност на регистъра се умножи по 0.0625.
Например, ако за режим с 12бита първият прочетен байт е 0111 1111, а вторият е 1111 0000, стойността за температурата е 0111 1111 1111. Десетичната и стойност 2047 умножена по 0.0625 дава температура 127,93 градуса по Целзий.
Сензорът може да следи температурата в определен диапазон, зададен чрез регистрите 10 и 11. Ако температурата излезе извън зададения диапазон, сензорът променя състоянието на пин ALT, който служи като аларма. Регистърът за конфигурация предоставя разширени възможности за управлението на този пин. Повече информация е достъпна в дейташита на продукта.
Пример
Даденият по-долу код комуникира със сензора чрез вградената в Arduino библиотека Wire. Пинът ADD0 e свързан към GND и сензорът има адрес 1001000. По подразбиране температурата се представя с 12 бита. Arduino изчислява температурата по данни от сензора и извежда стойността и в Serial Monitor.
Сензорът се свързва към Arduino следният начин:
V+ -> 3.3V SDA -> A4 SCL -> A5 GND -> GND ADD0 -> GND
Кода, който трябва да се зареди на Arduino e следният:
/* Описание: * Осъществява комуникация с TMP102 по I2C * Изисква данни за температурата * Изчислява стойността и в градуси по Целзий и я извежда в Serial Monitor Свързване: * V+ -> 3.3V * SDA -> A4 * SCL -> A5 * GND -> GND * ADD0 -> GND * Tihomir Trifonov (09-2011) * email:tisho@inbox.com * с подкрепата на Robotev.com */ #include <Wire.h> // библиотека за комуникация по I2C int tmp102 = 0x48; // адрес на сензора 1001000 void setup(){ // начални инициализации Serial.begin(9600); // започва комуникация с PC Wire.begin(); // започва комуникация по I2C шината } void loop(){ // програмен цикъл // изисква 2 байта от адреса на сензора .. // сензорът по-подразбиране връща данни от регистър 00 Wire.requestFrom(tmp102,2); // получава първия байт byte MSB = Wire.receive(); // получава втория байт byte LSB = Wire.receive(); // присвоява на променлива първия байт и първите 4 бита от втория int TemperatureSum = ((MSB << 8) | LSB) >> 4; // изчислява температурата в градуси float celsius = TemperatureSum*0.0625; //// извежда в Serial Monitor стойността на температурата Serial.print("temperature = "); Serial.print(celsius); Serial.println("C"); // мерна единица delay(1000); // закъснение от 1 сек } |