Arduino และ tmp102 - เซ็นเซอร์วัดอุณหภูมิ
The TMP102 เป็น digital temperature sensor ที่ใช้งานง่ายจาก Texas Instruments ในขณะที่ temperature sensor บางตัวใช้ analog voltage ในการแสดงค่าอุณหภูมิ, แต่ TMP102 ใช้ I2C bus ของ Arduino ในการสื่อสารข้อมูลอุณหภูมิ
ภาพรวมของ Board
มาดู TMP102 Breakout โดยละเอียดกัน

รายละเอียด TMP102:
- ใช้ I2C interface
- ความละเอียด 12-bit, 0.0625°C
- ความแม่นยำของอุณหภูมิโดยทั่วไป ±0.5°C
- รองรับ TMP102 sensor สูงสุดสี่ตัวบน I2C bus ในเวลาเดียวกัน
Pull-up Resistors
breakout board นี้มี pull-up resistors ขนาด 4.7 kΩ ในตัวสำหรับการสื่อสารแบบ I2C หากคุณกำลังเชื่อมต่อ I2C device หลายตัวเข้ากับ bus เดียวกัน คุณอาจต้องการปิด/เปิดการใช้งาน pull-up resistors สำหรับ board หนึ่งตัวหรือมากกว่านั้น บน TMP102, pull-ups จะถูกเปิดใช้งานโดยค่าเริ่มต้น หากต้องการปิดการใช้งาน ให้ใช้ hobby knife ตัด trace ที่เชื่อมต่อ pad ซ้ายและขวาของ jumper ที่มีป้ายกำกับว่า I2C PU ที่ด้านหลังของ board ซึ่งจะตัดการเชื่อมต่อ resistor ออกจาก VCC และจาก I2C bus
การเชื่อมต่อ Hardware
การเชื่อมต่อ TMP102 เข้ากับ Arduino
การต่อสาย TMP102 นั้นง่ายมาก! เราแนะนำให้ soldering male headers หกตัว เข้ากับ breakout board นอกจากนี้คุณยังสามารถ soldering wires เพื่อให้เหมาะกับความต้องการของ application ของคุณได้
แหล่งจ่ายไฟ
board นี้ทำงานที่แรงดันไฟ 1.4V ถึง 3.6V ตรวจสอบให้แน่ใจว่าได้จ่ายไฟให้กับ board จาก pin 3.3V! I2C ใช้ open drain signaling ดังนั้นจึงไม่จำเป็นต้องใช้ level shifting; สัญญาณ 3.3V จะสามารถสื่อสารกับ Arduino ได้ และจะไม่เกินอัตราแรงดันไฟฟ้าสูงสุดของ pin บน TMP102
การเชื่อมต่อกับ Arduino
TMP102 breakout board มีหก pin แต่ในตัวอย่างวันนี้เราจะใช้เพียงห้า pin เท่านั้น เราจะเชื่อมต่อ VCC และ GND เข้ากับ power pins ปกติ, data lines สองเส้นสำหรับการสื่อสารแบบ I2C, และ digital pin หนึ่ง pin เพื่อดูว่ามีการ alert หรือไม่ หากคุณใช้ board รุ่นใหม่ที่มี SDA และ SCL แยกออกมา คุณสามารถเชื่อมต่อ pin SDA และ SCL เข้ากับ pin เหล่านั้นได้โดยตรง หากคุณใช้ board รุ่นเก่า SDA และ SCL คือ pin A4 และ A5 ตามลำดับ
- VCC → 3.3V
- GND → GND
- SDA → SDA/A4
- SCL → SCL/A5
- ALT → A3
การเชื่อมต่อจะมีลักษณะดังนี้:

pin เดียวที่เราไม่ได้ใช้คือ ADD0 pin นี้ใช้สำหรับเปลี่ยน address ของ TMP102 หากคุณใช้ TMP102 หลายตัวหรืออุปกรณ์อื่นที่ใช้ address นั้น คุณจะต้องใช้ pin นี้เพื่อเปลี่ยน address default address คือ 0x48 คุณสามารถเปลี่ยน address ได้โดยการตัด ADD0 jumper ที่ด้านหลังของ board และเชื่อมต่อ external jumper wire เข้ากับ pin ต่อไปนี้:
- VCC → 0x49
- SDA → 0x4A
- SCL → 0x4B
TMP102 Library และ Example Code คุณสามารถดาวน์โหลด library นี้ได้ผ่าน Arduino Library Manager โดยค้นหาคำว่า TMP102 หากคุณต้องการดาวน์โหลด library ด้วยตนเอง คุณสามารถดาวน์โหลดได้จาก GitHub Repository
ภาพรวมของ TMP102 Library
ฟังก์ชันหลัก
ฟังก์ชันเหล่านี้ใช้สำหรับอ่านค่าการตั้งค่าและอุณหภูมิจาก sensor
bool begin( uint8_t deviceAddress, TwoWire &wirePort ) - รับ device address และ I2C bus เป็น input เสริม หากเว้นว่างไว้ ฟังก์ชันนี้จะใช้ default address 0x48 และใช้ Wire bus
float readTempC( void ) - ส่งคืนค่าอุณหภูมิปัจจุบันในหน่วย Celsius
float readTempF( void ) - ส่งคืนค่าอุณหภูมิปัจจุบันในหน่วย Fahrenheit
float readLowTempC( void ) - อ่าน T_LOW register ในหน่วย Celsius
float readHighTempC( void ) - อ่าน T_HIGH register ในหน่วย Celsius
float readLowTempF( void ) - อ่าน T_LOW register ในหน่วย Fahrenheit
float readHighTempC( void ) - อ่าน T_HIGH register ในหน่วย Fahrenheit
void sleep( void ) - ตั้งค่า TMP102 ให้อยู่ใน low power mode (<0.5 uA)
void wakeup( void ) - กลับสู่ normal power mode (~10 uA) เมื่อ sensor เปิดเครื่อง จะทำงานใน normal power mode โดยอัตโนมัติ และฟังก์ชันนี้จำเป็นต้องใช้หลังจาก sleep() ถูกเรียกใช้เท่านั้น
bool alert( void ) - ส่งคืนสถานะของ Alert register สถานะของ register เหมือนกับ alert pin.
void setLowTempC(float temperature) - ตั้งค่า T_LOW (ในหน่วย Celsius) alert threshold
void setHighTempC(float temperature) - ตั้งค่า T_HIGH (ในหน่วย Celsius) alert threshold
void setLowTempF(float temperature) - ตั้งค่า T_LOW (ในหน่วย Fahrenheit) alert threshold
void setHighTempF(float temperature) - ตั้งค่า T_HIGH (ในหน่วย Fahrenheit) alert threshold
void setConversionRate(uint8_t rate) - ตั้งค่า conversion rate สำหรับการอ่านค่าอุณหภูมิ 0: 0.25Hz, 1: 1Hz, 2: 4Hz (default), 3: 8Hz.
void setExtendedMode(bool mode) - เปิดหรือปิด extended mode 0: disabled (-55C ถึง +128C), 1: enabled (-55C ถึง +150C)
void setAlertPolarity(bool polarity) - ตั้งค่า polarity ของ alert 0: active LOW, 1: active HIGH
void setFault(uint8_t faultSetting) - ตั้งค่าจำนวน consecutive faults ก่อนที่จะมีการ alert 0: 1 fault, 1: 2 faults, 2: 4 faults, 3: 6 faults.
void setAlertMode(bool mode) - ตั้งค่าประเภทของ alert 0: Comparator Mode (ทำงานเมื่ออุณหภูมิ > T_HIGH จนกระทั่งอุณหภูมิ < T_LOW), 1: Thermostat mode (ทำงานเมื่ออุณหภูมิ > T_HIGH จนกระทั่งมีการดำเนินการอ่านค่าใดๆ เกิดขึ้น)
โค้ดตัวอย่าง
เมื่อติดตั้ง library แล้ว ให้เปิดโค้ดตัวอย่างเพื่อเริ่มต้น! ตรวจสอบให้แน่ใจว่าได้เลือก board และ COM port ของคุณก่อนที่จะกด upload เพื่อเริ่มต้นทดลองกับ temperature sensor
#include // ใช้เพื่อสร้างการสื่อสารแบบ serial บน I2C bus
#include // ใช้เพื่อส่งและรับข้อมูลเฉพาะจาก sensor ของเรา
// การเชื่อมต่อ
// VCC = 3.3V
// GND = GND
// SDA = A4
// SCL = A5
const int ALERT_PIN = A3;
TMP102 sensor0;
void setup() {
Serial.begin(115200);
Wire.begin(); // เข้าร่วม I2C Bus
pinMode(ALERT_PIN,INPUT); // กำหนด alertPin เป็น input
/* The TMP102 uses the default settings with the address 0x48 using Wire.