Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Измерване на температура чрез Arduino и TMP102

TMP102 е сензор за измерване на температура от -40 до 125 градуса.Сензорът е с много ниска консумация и има много малки размери. Продава се запоен върху брейкаут борд, съдържащ всички необходими компоненти за оптималната му работа. Комуникацията с микроконтролер се осъществява по I2C и може се да използва наличната в Arduino библиотека Wire.

На една линия могат да бъдат свързани до 4 сензора с различни адреси. Адресът се определя от нивото на пин ADD0.

Например, ако ADD0 се свърже към GND, адресът на сензорът ще бъде 1001000.

Сензорът дава достъп до 4 регистъра с адреси:

  • 00 - Регистър за температурата
  • 01 - Регистър за конфигуриране
  • 10 - Регистър за долната граница
  • 11 - Регистър за горната граница

Регистърът за температурата е активен по подразбиране т.е сензорът връща данни от този регистър докато микроконтролерът не изпрати указател към друг регистър. В зависимост от режима на работа, указан в регистъра за конфигуриране, данните за температурата са от 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 сек
}