กลับไปหน้ารวมไฟล์
arduino-and-tmp102-temperature-sensor-664f9c.md

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.

ข้อมูล Frontmatter ดั้งเดิม

title: "Arduino and tmp102 - temperature sensor"
description: "This is project with the arduino i2c module tmp102 for measuring temperature. The"
author: "yanvaf"
category: ""
tags:
  - "easy"
  - "temperature"
  - "i2c"
  - "arduino"
  - "tmp102"
  - "arduino sensor"
  - "noob"
views: 3451
likes: 1
price: 870
difficulty: "Easy"
components:
  - "1x SparkFun Digital Temperature Sensor Breakout - TMP102"
  - "1x Male/Female Jumper Wires"
  - "1x Arduino UNO"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "8bc070848b0f5bad8620bea32249d5ff8532f1165461511cacedc5ce81bdbff9"
encryptedPayload: "U2FsdGVkX18m9HAehAY6T4xKPrRK05wlfIwFye0EVS/XNaMkZHoE7ic5LBdmlNfVJvYEaHz1jhnb0EQOK4IMDZaMFmp61yFCRW37tVcamwc="
seoDescription: "Learn to interface Arduino with the tmp102 i2c module for precision temperature sensing."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-and-tmp102-temperature-sensor-664f9c_cover.jpg"
lang: "th"