TCN75A е цифров сензор за измерване на температура от – 40 до 125ºC. Сензорът е разпространен върху брейкаут борд на Microbot.it, който включва всички допълнителни компоненти, необходими за оптималната работа на сензора.
Комуникацията със сензора се ощестява по TWI шина, съвместима с протокола I2C. Това позволява по една линия да бъдат управлявани до 8 сензора. По подразбиране адреса на сензора е 1001000, като най-младшите 3 бита могат да се задават чрез джъмпери върху брейкаут борда.

Сензорът дава достъп до четири регистъра с адреси 00, 01, 10, 11.

Всеки регистър се избира чрез указател към съответния му адрес. Веднъж посочен регистърът остава активен и няма нужда да бъде избиран отново.
Пример
В даденият пример микроконтролерът на Arduiro комуникира със сензора посредством протокола I2C. Сензорът измерва температурата с резолюция 0.0625 и съхранява данните в регистъра за температурата. Микроконтролерът прочита данните от него, изчислява стойността и я извежда в Serial Monitor.

Vcc се свързва към 5V захранващо напрежение, а GND е към пин GND на Аrduino. SDA и SCL пиновете се свързват съответно към входовете А4 и А5.

Кода който трябва да се зареди на Arduino е следният:
/*
Описание:
* Осъществява комуникация с TCN75A по TWI шина
* Задава резолюцията на измерване
* Прочита данните за температурата и ги преобразува
в градуси
* Извежда информацията в Serial Monitor
Свързване:
* SDA -> А4
* SCL -> А5
* Vcc -> 5V
* GND -> GND
* Tihomir Trifonov (08-2011)
* email:tisho@inbox.oco
* с подкрепата на Robotev.com
*/
#include <Wire.h> // библиотека за използване
// на протокола I2C
int reading = 0; // съхранява данните от сензора
float temperature = 0; // съхранява изчислената температура
void setup(){ // начални инициализации
Serial.begin(9600); // започва серийна комуникация с PC
Wire.begin(); // започва комуникация по TWI шината
///// задава резолюция на измерването
Wire.beginTransmission(B1001000); // обръща се към сенозра
Wire.send(0x01); // посочва регистър 01
Wire.send(0x60); // задава резолюция 0.0625
Wire.endTransmission(); // прекъсва връзката
///// избира регистъра за измерената температура
Wire.beginTransmission(B1001000); // обръща се към сензора
Wire.send(0x00); // посочва регистър 00
Wire.endTransmission(); // прекъсва връзката
}
void loop(){ // програмен цикъл
////// получава данни от регистъра за температура и ги обработва
Wire.requestFrom(B1001000, 2); // изисква 2 байта от сензора
reading = Wire.receive(); // записва първият получен байт
// в целочислена променлива и го
reading = reading << 8; // измества 8 позиции наляво
reading |= Wire.receive(); // записва следващия байт върху
// освободените позиции и измества
reading = reading >> 4; // всички битове 4 позиции надясно
///// от получените данни изчислява температурата
temperature = (float)reading/16; // разделя на 16 получената след
// манипулацията стойност
///// извежда температурата в Serial Monitor-а
Serial.println(temperature,3); // всяка стойност е на нов ред
// с 3 цифри след запетаята
delay(500); // изчаква 500ms преди да повтори цикъла
}
