
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 сек
}
|
