TMP102 µðÁöÅÐ ¿Âµµ¼¾¼­
       
 
ÀÌ ¸Å´º¾óÀº ÁÖ½Äȸ»ç Á¦ÀÌÄÉÀÌÀÌ¿¥¾¾(JK EMC) ¿¡ ÀÇÇؼ­ ¹ø¿ª, ¼öÁ¤, ÀÛ¼º µÇ¾ú°í ¼ÒÀ¯±Ç ¶ÇÇÑ
ÁÖ ½Äȸ»ç Á¦ÀÌÄÉÀÌÀÌ¿¥¾¾(JK EMC)ÀÇ °ÍÀÔ´Ï´Ù. ¼ÒÀ¯±ÇÀÚÀÇ Çã°¡¸¦ ¹ÞÁö ¾Ê°í ¹«´ÜÀ¸·Î ¼öÁ¤, »èÁ¦Çϰųª ¹èÆ÷ ÇÒ ¼ö ¾ø½À´Ï´Ù.

 

 

TMP102 Digital Temperature Sensor 3.3/5V °ø¿ë ( µðÁöÅÐ ¿Âµµ ¼¾¼­ ¸ðµâ )


 
 




  1. TMP102 ¼¾¼­ ¼Ò°³
2. ¾Æ µÎÀ̳ë¿Í °°ÀÌ »ç¿ëÇϱâ
    2.1 ¼¾¼­ ȸ·Îµµ¹× ¿Ü°û Ä¡¼ö
    2.2 ¾ÆµÎÀ̳ë UNO R3 ¹è¼±µµ
    2.3 ¾ÆµÎÀÌ³ë ½ºÄÉÄ¡ ÄÚµå
    2.4 ¾ÆµÎÀÌ³ë ½ºÄÉÄ¡ ÄÚµå ½ÇÇà °á°ú

 
 TMP102 ¼¾¼­ ¼Ò°³

TMP102 ¿Âµµ ¼¾¼­´Â Á¤È®ÇÑ ¿Âµµ¸¦ ÃøÁ¤ÇÒ ¼ö ÀÖ´Â ¼¾¼­ ÀÔ´Ï´Ù.
¸¹Àº ¼Â¾÷ÀÌ ÇÊ¿äÇÏÁö¾Ê¾Æ ¿©·¯ °÷¿¡ ½±°Ô ¾²ÀÏ ¼ö ÀÖ´Â °£´ÜÇÑ ¼¾¼­ÀÔ´Ï´Ù.
3.3VÀÇ Àü¾ÐÀ» »ç¿ëÇÏ´Â ¼¾¼­Áö¸¸ ·¹º§ ½¬ÇÁÆ®¸¦ ÀåÂøÇØ 5V¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Â ¼¾¼­ÀÔ´Ï´Ù.
À̼¾¼­´Â ¿ÀÂ÷À² ¼·¾¾0.5µµ±îÁö ¿Ïº®ÇÏ°Ô ÃøÁ¤ÀÌ °¡´ÉÇÕ´Ï´Ù.
I2CÅë½ÅÀ¸·Î 4°³ÀÇ TMP102¼¾¼­±îÁö Áö¿øÀÌ °¡´ÉÇÕ´Ï´Ù.
¶ÇÇÑ 12ºñÆ®¸¦ »ç¿ëÇÏ¸ç ¼·¾¾0.0625µµÀÇ Çػ󵵸¦ º¸¿©ÁÝ´Ï´Ù.




Characteristic Value Unit
Supply Voltage 3.6 V
Operating Temperature -48~65 ¡É
Storage Temperature -51~65 ¡É
Junction Temperature 65 ¡É




 
TMP102 ȸ·Îµµ¹× ¿Ü°ûÄ¡¼ö

TMP102¼¾¼­ ȸ·Îµµ

     - TMP102 PDF ȸ·Îµµ ´Ù¿î·Îµå
     - TMP102 µ¥ÀÌÅͽÃÆ® ´Ù¿î·Îµå(http://www.jkelec.co.kr)
     - TMP102 DXF ijµå ÆÄÀÏ ´Ù¿î·Îµå
TMP102


TMP102 ¼¾¼­ ¿Ü°û(mm´ÜÀ§) Ä¡¼ö

      TMP102

 
 TMP102 ¾ÆµÎÀ̳ë UNO R3 ¹è¼±µµ

TMP102<---> ¾ÆµÎÀ̳ë
VCC <---> 5V, 3.3V
GND <---> GND
SDA <---> A4
SCL <---> A5
ALERT <---> A3


- Fritzing ÆÄÀÏ ´Ù¿î·Îµå


TMP102

 


 
TMP102 ¾ÆµÎÀÌ³ë ½ºÄÉÄ¡ ÄÚµå

TMP102¼¾¼­¸¦ ÀÌ¿ëÇÏ¿© ¿Âµµ¸¦ ÃøÁ¤ÇÏ¿© ½Ã¸®¾ó µ¥ÀÌÅÍ·Î Ãâ·ÂÇÏ´Â ¿¹Á¦ ÀÌ´Ù.

¾ÆµÎÀÌ³ë ½ºÄÉÄ¡ ÄÚµå
     - TMP102 ¿Âµµ µ¥ÀÌÅÍ Ç¥½Ã ½ºÄ³Ä¡ ÆÄÀÏ ´Ù¿î·Îµå


#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire.h>

#define TMP102_h
#define TEMPERATURE_REGISTER 0x00
#define CONFIG_REGISTER 0x01
#define T_LOW_REGISTER 0x02
#define T_HIGH_REGISTER 0x03

const int ALERT_PIN = A3;


class TMP102
{
public:
TMP102(byte address);
void begin(void);
float readTempC(void);
float readTempF(void);
void sleep(void);
void wakeup(void);
bool alert(void);
void setLowTempC(float temperature);
void setHighTempC(float temperature);
void setLowTempF(float temperature);
void setHighTempF(float temperature);
float readLowTempC(void);
float readHighTempC(void);
float readLowTempF(void);
float readHighTempF(void);


void setConversionRate(byte rate);

void setExtendedMode(bool mode);

void setAlertPolarity(bool polarity);

void setFault(byte faultSetting);

void setAlertMode(bool mode);

private:
int _address;
void openPointerRegister(byte pointerReg);
byte readRegister(bool registerNumber);
};

TMP102 sensor0(0x48);

TMP102::TMP102(uint8_t address)
{
_address = address;
}

void TMP102::begin(void)
{
Wire.begin();
}


void TMP102::openPointerRegister(uint8_t pointerReg)
{
Wire.beginTransmission(_address);
Wire.write(pointerReg);
Wire.endTransmission();
}


uint8_t TMP102::readRegister(bool registerNumber){
uint8_t registerByte[2];

Wire.requestFrom(_address, 2);
Wire.endTransmission();
registerByte[0] = (Wire.read());
registerByte[1] = (Wire.read());

return registerByte[registerNumber];
}


float TMP102::readTempC(void)
{
uint8_t registerByte[2];
int16_t digitalTemp;

openPointerRegister(TEMPERATURE_REGISTER);
registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);

if(registerByte[1]&0x01)
{
digitalTemp = ((registerByte[0]) << 5) | (registerByte[1] >> 3);
if(digitalTemp > 0xFFF)
{
digitalTemp |= 0xE000;
}
}
else // 12 bit mode
{
digitalTemp = ((registerByte[0]) << 4) | (registerByte[1] >> 4);
if(digitalTemp > 0x7FF)
{
digitalTemp |= 0xF000;
}
}
return digitalTemp*0.0625;
}


float TMP102::readTempF(void)
{
return readTempC()*9.0/5.0 + 32.0;
}


void TMP102::setConversionRate(uint8_t rate)
{
uint8_t registerByte[2];
rate = rate&0x03;

openPointerRegister(CONFIG_REGISTER);

registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);

registerByte[1] &= 0x3F;
registerByte[1] |= rate<<6;

Wire.beginTransmission(_address);
Wire.write(CONFIG_REGISTER);
Wire.write(registerByte[0]);
Wire.write(registerByte[1]);
Wire.endTransmission();
}


void TMP102::setExtendedMode(bool mode)
{
uint8_t registerByte[2];

openPointerRegister(CONFIG_REGISTER);

registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);

registerByte[1] &= 0xEF;
registerByte[1] |= mode<<4;

Wire.beginTransmission(_address);
Wire.write(CONFIG_REGISTER);
Wire.write(registerByte[0]);
Wire.write(registerByte[1]);
Wire.endTransmission();
}


void TMP102::sleep(void)
{
uint8_t registerByte;

openPointerRegister(CONFIG_REGISTER);

registerByte = readRegister(0);

registerByte |= 0x01;

Wire.beginTransmission(_address);
Wire.write(CONFIG_REGISTER);
Wire.write(registerByte);
Wire.endTransmission();
}


void TMP102::wakeup(void)
{
uint8_t registerByte;

openPointerRegister(CONFIG_REGISTER);

registerByte = readRegister(0);

registerByte &= 0xFE;

Wire.beginTransmission(_address);
Wire.write(CONFIG_REGISTER);
Wire.write(registerByte);
Wire.endTransmission();
}


void TMP102::setAlertPolarity(bool polarity)
{
uint8_t registerByte;

openPointerRegister(CONFIG_REGISTER);

registerByte = readRegister(0);

registerByte &= 0xFB;
registerByte |= polarity<<2;

Wire.beginTransmission(_address);
Wire.write(CONFIG_REGISTER);
Wire.write(registerByte);
Wire.endTransmission();
}


bool TMP102::alert(void)
{
uint8_t registerByte;

openPointerRegister(CONFIG_REGISTER);

registerByte = readRegister(1);

registerByte &= 0x20;
return registerByte>>5;
}


void TMP102::setLowTempC(float temperature)
{
uint8_t registerByte[2];
bool extendedMode;

if(temperature > 150.0f)
{
temperature = 150.0f;
}
if(temperature < -55.0)
{
temperature = -55.0f;
}

//Check if temperature should be 12 or 13 bits
openPointerRegister(CONFIG_REGISTER);

// Read current configuration register value
registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);
extendedMode = (registerByte[1]&0x10)>>4;


temperature = temperature/0.0625;

if(extendedMode)
{
registerByte[0] = int(temperature)>>5;
registerByte[1] = (int(temperature)<<3);
}
else // 12-bit mode
{
registerByte[0] = int(temperature)>>4;
registerByte[1] = int(temperature)<<4;
}

Wire.beginTransmission(_address);
Wire.write(T_LOW_REGISTER);
Wire.write(registerByte[0]);
Wire.write(registerByte[1]);
Wire.endTransmission();
}


void TMP102::setHighTempC(float temperature)
{
uint8_t registerByte[2];
bool extendedMode;

if(temperature > 150.0f)
{
temperature = 150.0f;
}
if(temperature < -55.0)
{
temperature = -55.0f;
}

openPointerRegister(CONFIG_REGISTER);

registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);
extendedMode = (registerByte[1]&0x10)>>4;

temperature = temperature/0.0625;

if(extendedMode)
{
registerByte[0] = int(temperature)>>5;
registerByte[1] = (int(temperature)<<3);
}
else // 12-bit mode
{
registerByte[0] = int(temperature)>>4;
registerByte[1] = int(temperature)<<4;
}

// Write to T_HIGH Register
Wire.beginTransmission(_address);
Wire.write(T_HIGH_REGISTER);
Wire.write(registerByte[0]);
Wire.write(registerByte[1]);
Wire.endTransmission();
}


void TMP102::setLowTempF(float temperature)
{
temperature = (temperature - 32)*5/9;
setLowTempC(temperature);
}


void TMP102::setHighTempF(float temperature)
{
temperature = (temperature - 32)*5/9;
setHighTempC(temperature);
}


float TMP102::readLowTempC(void)
{
uint8_t registerByte[2];
bool extendedMode;
int16_t digitalTemp;
float temperature;

openPointerRegister(CONFIG_REGISTER);
registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);
extendedMode = (registerByte[1]&0x10)>>4;
openPointerRegister(T_LOW_REGISTER);
registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);

if(extendedMode) // 13 bit mode
{
digitalTemp = ((registerByte[0]) << 5) | (registerByte[1] >> 3);
if(digitalTemp > 0xFFF)
{
digitalTemp |= 0xE000;
}
}
else // 12 bit mode
{
digitalTemp = ((registerByte[0]) << 4) | (registerByte[1] >> 4);
if(digitalTemp > 0x7FF)
{
digitalTemp |= 0xF000;
}
}
return digitalTemp*0.0625;
}


float TMP102::readHighTempC(void)
{
uint8_t registerByte[2];
bool extendedMode;
int16_t digitalTemp;
float temperature;

openPointerRegister(CONFIG_REGISTER);
registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);
extendedMode = (registerByte[1]&0x10)>>4;
openPointerRegister(T_HIGH_REGISTER);
registerByte[0] = readRegister(0);
registerByte[1] = readRegister(1);

if(extendedMode)
{
digitalTemp = ((registerByte[0]) << 5) | (registerByte[1] >> 3);
if(digitalTemp > 0xFFF)
{
digitalTemp |= 0xE000;
}
}
else
{
digitalTemp = ((registerByte[0]) << 4) | (registerByte[1] >> 4);
if(digitalTemp > 0x7FF)
{
digitalTemp |= 0xF000;
}
}
return digitalTemp*0.0625;
}


float TMP102::readLowTempF(void)
{
return readLowTempC()*9.0/5.0 + 32.0;
}


float TMP102::readHighTempF(void)
{
return readHighTempC()*9.0/5.0 + 32.0;
}


void TMP102::setFault(uint8_t faultSetting)
{
uint8_t registerByte;

faultSetting = faultSetting&3;
openPointerRegister(CONFIG_REGISTER);

registerByte = readRegister(0);
registerByte &= 0xE7;
registerByte |= faultSetting<<3;

Wire.beginTransmission(_address);
Wire.write(CONFIG_REGISTER);
Wire.write(registerByte);
Wire.endTransmission();
}


void TMP102::setAlertMode(bool mode)
{
uint8_t registerByte;
openPointerRegister(CONFIG_REGISTER);

registerByte = readRegister(0);
registerByte &= 0xFD;
registerByte |= mode<<1;
Wire.beginTransmission(_address);
Wire.write(CONFIG_REGISTER);
Wire.write(registerByte);
Wire.endTransmission();
}

void setup() {
Serial.begin(9600);
pinMode(ALERT_PIN,INPUT);
sensor0.begin();
sensor0.setFault(0);
sensor0.setAlertPolarity(1);
sensor0.setAlertMode(0);
sensor0.setConversionRate(2);
sensor0.setExtendedMode(0);
sensor0.setHighTempC(31.0);
sensor0.setLowTempC(20.0);
}

void loop()
{
float temperature;
boolean alertPinState, alertRegisterState;

sensor0.wakeup();

temperature = sensor0.readTempC();
alertPinState = digitalRead(ALERT_PIN);
alertRegisterState = sensor0.alert();

sensor0.sleep();

Serial.print("Temperature: ");
Serial.print(temperature);

Serial.print("\tAlert Pin: ");
Serial.print(alertPinState);

Serial.print("\tAlert Register: ");
Serial.println(alertRegisterState);

delay(1000); // Wait 1000ms
}



 
TMP102 ¾ÆµÎÀÌ³ë ½ºÄÉÄ¡ ÄÚµå ½ÇÇà °á°ú

½Ã¸®¾ó¸ð´ÏÅÍ

TMP102