MLX90640 : เซนเซอร์ตรวจจับความร้อนแบบอินฟราเรด
MLX90640 คืออะไร?
MLX90640 เป็นเซนเซอร์ตรวจจับความร้อนแบบอินฟราเรดที่ทำงานโดยอาศัยหลักการของการตรวจจับรังสีอินฟราเรด (Infrared Radiation) ที่ปล่อยออกมาจากร่างกายหรือวัตถุ โดยไม่ต้องสัมผัสกับวัตถุนั้นๆ เซนเซอร์นี้สามารถสร้างภาพความร้อน (Thermal Image) ได้ในรูปแบบของข้อมูลเมทริกซ์ 32x24 พิกเซล ซึ่งแม้ว่าความละเอียดจะไม่สูงเท่ากล้องตรวจจับความร้อนระดับไฮเอนด์ แต่ MLX90640 ก็โดดเด่นด้วยขนาดที่เล็ก ราคาที่เหมาะสม และประสิทธิภาพที่ยอดเยี่ยม
คุณสมบัติเด่นของ MLX90640
-
ความละเอียด 32x24 พิกเซล
- MLX90640 มีความละเอียด 768 พิกเซล (32x24) ซึ่งเพียงพอสำหรับการสร้างภาพความร้อนเบื้องต้นและการวิเคราะห์อุณหภูมิในพื้นที่ขนาดเล็ก
- เหมาะสำหรับงานที่ไม่ต้องการความละเอียดสูง เช่น การตรวจสอบอุณหภูมิในอาคาร การตรวจสอบอุปกรณ์ไฟฟ้า หรือการประยุกต์ใช้งานในหุ่นยนต์
-
ช่วงการตรวจจับอุณหภูมิ
- MLX90640 สามารถตรวจจับอุณหภูมิได้ในช่วง -40°C ถึง 300°C (ขึ้นอยู่กับรุ่น)
- มีความแม่นยำสูง ±1°C ในช่วงอุณหภูมิที่กำหนด
-
ขนาดกะทัดรัด
- เซนเซอร์ MLX90640 มีขนาดเล็กและน้ำหนักเบา ทำให้สามารถนำไปติดตั้งในอุปกรณ์ขนาดเล็กหรือระบบ IoT ได้อย่างสะดวก
-
รองรับการเชื่อมต่อ I2C
- MLX90640 ใช้โปรโตคอล I2C ในการสื่อสารกับไมโครคอนโทรลเลอร์หรือคอมพิวเตอร์ ทำให้การติดตั้งและการใช้งานง่ายขึ้น
-
Field of View (FOV)
- MLX90640 มี FOV สองรุ่นให้เลือกใช้งาน คือ 55°x35° และ 110°x75° ซึ่งเหมาะสำหรับการใช้งานที่ต้องการมุมมองกว้างหรือแคบ
การประยุกต์ใช้งาน MLX90640
MLX90640 สามารถนำมาใช้งานได้หลากหลายในหลายอุตสาหกรรม ดังนี้:
-
การตรวจสอบอุณหภูมิในอาคาร
- ใช้สำหรับตรวจสอบการรั่วไหลของความร้อนในอาคารหรือโรงงาน เพื่อปรับปรุงประสิทธิภาพการใช้พลังงาน
-
การตรวจสอบอุปกรณ์ไฟฟ้า
- ช่วยตรวจจับจุดร้อน (Hot Spot) ในอุปกรณ์ไฟฟ้าหรือแผงวงจร เพื่อป้องกันการเกิดไฟไหม้หรือความเสียหาย
-
การแพทย์
- ใช้ในการตรวจจับอุณหภูมิร่างกายของมนุษย์ เช่น การตรวจวัดไข้ในสถานการณ์โรคระบาด
-
หุ่นยนต์และโดรน
- ติดตั้งบนหุ่นยนต์หรือโดรนเพื่อสร้างภาพความร้อนสำหรับการนำทางหรือการตรวจสอบสภาพแวดล้อม
-
การเกษตร
- ใช้ในการตรวจสอบอุณหภูมิของพืชผลหรือสัตว์ เพื่อควบคุมสภาวะแวดล้อมให้เหมาะสม
ข้อจำกัดของ MLX90640
แม้ว่า MLX90640 จะมีคุณสมบัติที่น่าสนใจ แต่ก็ยังมีข้อจำกัดบางประการที่ควรพิจารณา:
- ความละเอียดต่ำ : ความละเอียด 32x24 พิกเซลอาจไม่เพียงพอสำหรับงานที่ต้องการรายละเอียดสูง
- ความเร็วในการอ่านค่า : อัตราการอ่านค่าอุณหภูมิของ MLX90640 อยู่ที่ประมาณ 1-64 Hz ซึ่งอาจช้าเกินไปสำหรับงานที่ต้องการความเร็วสูง
- ความซับซ้อนในการประมวลผล : การแปลงข้อมูลจากเซนเซอร์เป็นภาพความร้อนจำเป็นต้องใช้การประมวลผลที่ซับซ้อน
สรุป
MLX90640 เป็นเซนเซอร์ตรวจจับความร้อนที่มีประสิทธิภาพสูงในราคาที่เหมาะสม เหมาะสำหรับการใช้งานที่ต้องการการตรวจจับอุณหภูมิแบบไม่สัมผัสในพื้นที่ขนาดเล็ก ด้วยขนาดที่กะทัดรัดและการเชื่อมต่อที่ง่าย MLX90640 จึงเป็นตัวเลือกที่ดีสำหรับนักพัฒนาและวิศวกรที่ต้องการนำเทคโนโลยีตรวจจับความร้อนมาใช้งานในโครงการต่างๆ
หากคุณกำลังมองหาเซนเซอร์ที่ตอบโจทย์การใช้งานในระดับกลาง MLX90640 อาจเป็นคำตอบที่คุณตามหา
การใช้งานเซนเซอร์ MLX90640 กับ Arduino จำเป็นต้องใช้ไลบรารีเฉพาะที่รองรับการทำงานของเซนเซอร์นี้ เนื่องจาก MLX90640 ส่งข้อมูลผ่านโปรโตคอล I2C และข้อมูลที่ได้มาจะต้องถูกประมวลผลเพื่อแปลงเป็นค่าอุณหภูมิและสร้างภาพความร้อน (Thermal Image)
ขั้นตอนการติดตั้งไลบรารี
- เปิด Arduino IDE
- ไปที่เมนู Sketch > Include Library > Manage Libraries
- ค้นหาคำว่า
Adafruit MLX90640
และ ติดตั้งไลบรารี - ตรวจสอบว่าไลบรารี
Adafruit BusIO
และWire
(สำหรับ I2C) ถูกติดตั้งแล้ว หากยังไม่มี ให้ติดตั้งด้วยเช่นกัน
การต่อวงจร
- VCC -> 5V หรือ 3.3V (ขึ้นอยู่กับโมดูล)
- GND -> GND
- SDA -> SDA (บน Arduino: A4 สำหรับ Uno, 20 สำหรับ Mega)
- SCL -> SCL (บน Arduino: A5 สำหรับ Uno, 21 สำหรับ Mega)
โค้ดตัวอย่าง
ตัวอย่างโค้ดนี้จะแสดงค่าอุณหภูมิของแต่ละพิกเซลใน Serial Monitor และสามารถนำไปประยุกต์ใช้เพื่อสร้างภาพความร้อนได้
#include <Wire.h>
#include <Adafruit_MLX90640.h>
// สร้างออบเจ็กต์ MLX90640
Adafruit_MLX90640 mlx;
// ขนาดของเมทริกซ์พิกเซล
#define PIXELS 768 // 32x24 = 768 พิกเซล
// อาเรย์สำหรับเก็บค่าอุณหภูมิ
float temperatures[PIXELS];
void setup() {
// เริ่มต้น Serial Monitor
Serial.begin(115200);
// เริ่มต้น I2C
Wire.begin();
// ตรวจสอบการเชื่อมต่อ MLX90640
if (!mlx.begin(MLX90640_I2CADDR_DEFAULT, &Wire)) {
Serial.println("MLX90640 ไม่พบเซนเซอร์!");
while (1) delay(10);
}
// กำหนดค่า Refresh Rate (Hz)
mlx.setMode(MLX90640_INTERLEAVED);
mlx.setResolution(MLX90640_ADC_18BIT); // ความละเอียด ADC
mlx.setRefreshRate(MLX90640_4_HZ); // อัตราการรีเฟรช 4 Hz
Serial.println("MLX90640 เริ่มทำงานแล้ว!");
}
void loop() {
// อ่านค่าอุณหภูมิจากเซนเซอร์
if (mlx.getFrame(temperatures) != 0) {
Serial.println("เกิดข้อผิดพลาดในการอ่านค่า!");
return;
}
// แสดงค่าอุณหภูมิใน Serial Monitor
for (int i = 0; i < PIXELS; i++) {
Serial.print(temperatures[i]);
Serial.print("\t");
// เริ่มบรรทัดใหม่ทุกๆ 32 พิกเซล (32x24)
if ((i + 1) % 32 == 0) {
Serial.println();
}
}
Serial.println(); // ขึ้นบรรทัดใหม่หลังแสดงข้อมูลทั้งหมด
delay(500); // รอ 500 มิลลิวินาทีก่อนอ่านค่าครั้งถัดไป
}
คำอธิบายโค้ด
-
การเริ่มต้นเซนเซอร์
- ใช้ฟังก์ชัน
mlx.begin()
เพื่อตรวจสอบการเชื่อมต่อเซนเซอร์ - กำหนดโหมดการทำงาน เช่น
setMode
,setResolution
, และsetRefreshRate
เพื่อปรับแต่งการทำงานของเซนเซอร์
- ใช้ฟังก์ชัน
-
การอ่านค่าอุณหภูมิ
- ใช้ฟังก์ชัน
mlx.getFrame()
เพื่ออ่านค่าอุณหภูมิจากเซนเซอร์และเก็บไว้ในอาเรย์temperatures
- ค่าที่ได้จะเป็นค่าอุณหภูมิในหน่วยองศาเซลเซียส (°C)
- ใช้ฟังก์ชัน
-
การแสดงผล
- ค่าอุณหภูมิจะถูกแสดงใน Serial Monitor โดยจัดเรียงเป็นตาราง 32x24 พิกเซล
การปรับแต่งเพิ่มเติม
-
การแสดงภาพความร้อน
- คุณสามารถนำค่าอุณหภูมิไปประมวลผลเพื่อสร้างภาพความร้อน โดยใช้ไลบรารีเช่น
Adafruit GFX
หรือTFT_eSPI
สำหรับจอแสดงผล
- คุณสามารถนำค่าอุณหภูมิไปประมวลผลเพื่อสร้างภาพความร้อน โดยใช้ไลบรารีเช่น
-
การปรับอัตราการรีเฟรช
- ลองเปลี่ยนค่า
setRefreshRate
เป็นMLX90640_8_HZ
หรือMLX90640_16_HZ
เพื่อเพิ่มความเร็วในการอ่านค่า
- ลองเปลี่ยนค่า
-
การใช้งานร่วมกับจอ LCD
- หากต้องการแสดงผลภาพความร้อนแบบเรียลไทม์ คุณสามารถต่อจอ LCD เช่น TFT หรือ OLED และใช้ไลบรารีกราฟิกเพื่อสร้างภาพความร้อน
ข้อควรระวัง
- MLX90640 มีความละเอียดต่ำ (32x24 พิกเซล) การแสดงผลอาจไม่คมชัดเท่ากล้องตรวจจับความร้อนระดับไฮเอนด์
- ตรวจสอบแรงดันไฟเลี้ยงของเซนเซอร์ (3.3V หรือ 5V) เพื่อป้องกันความเสียหาย
- หากใช้งานร่วมกับจอแสดงผล ให้แน่ใจว่า Arduino มีประสิทธิภาพเพียงพอในการประมวลผลข้อมูล
คุณสามารถใช้งาน MLX90640 กับ ESP32 โดยใช้ MicroPython ได้เช่นกัน แม้ว่า MicroPython จะไม่มีไลบรารีสำเร็จรูปอย่าง Adafruit MLX90640
ที่มีใน Arduino แต่คุณยังสามารถเขียนโค้ดเพื่ออ่านข้อมูลจากเซนเซอร์ผ่านโปรโตคอล I2C ได้โดยตรง
Adafruit MLX90640
ที่มีใน Arduino แต่คุณยังสามารถเขียนโค้ดเพื่ออ่านข้อมูลจากเซนเซอร์ผ่านโปรโตคอล I2C ได้โดยตรงขั้นตอนการติดตั้งและเตรียมใช้งาน
-
ติดตั้ง MicroPython บน ESP32
- ดาวน์โหลดเฟิร์มแวร์ MicroPython สำหรับ ESP32 จาก MicroPython Official Website
- ใช้เครื่องมือเช่น
esptool.py
เพื่อแฟลชเฟิร์มแวร์ลงใน ESP32
-
ต่อวงจร
- เชื่อมต่อ MLX90640 กับ ESP32 ตามแผนผังด้านล่าง:
- VCC -> 3.3V (ESP32)
- GND -> GND
- SDA -> GPIO21 (หรือกำหนดเอง)
- SCL -> GPIO22 (หรือกำหนดเอง)
- เชื่อมต่อ MLX90640 กับ ESP32 ตามแผนผังด้านล่าง:
-
ติดตั้งไลบรารี I2C
- MicroPython มีโมดูล
machine.I2C
สำหรับการทำงานกับ I2C ซึ่งจะใช้ในการสื่อสารกับ MLX90640
- MicroPython มีโมดูล
โค้ดตัวอย่างสำหรับ MLX90640 บน ESP32 (MicroPython)
ตัวอย่างโค้ดนี้จะอ่านค่าอุณหภูมิจาก MLX90640 และ แสดงผลผ่าน Terminal
from machine import Pin, I2C
import time
import struct
# กำหนดพิน I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
# ที่อยู่ I2C ของ MLX90640
MLX90640_I2C_ADDR = 0x33
# ขนาดของเมทริกซ์พิกเซล
PIXELS = 768 # 32x24 = 768 พิกเซล
def read_mlx90640_temperatures():
# ส่งคำสั่งอ่านข้อมูลจาก MLX90640
i2c.writeto(MLX90640_I2C_ADDR, b'\x02') # เลือก RAM เริ่มต้น
raw_data = i2c.readfrom(MLX90640_I2C_ADDR, PIXELS * 2) # อ่านข้อมูล 16-bit สำหรับแต่ละพิกเซล
# แปลงข้อมูลเป็นค่าอุณหภูมิ
temperatures = []
for i in range(0, len(raw_data), 2):
# รวมข้อมูล 2 ไบต์เป็นค่า 16-bit
raw_temp = struct.unpack('>H', raw_data[i:i+2])[0]
# แปลงค่าเป็นอุณหภูมิ (ปรับค่าตามเอกสาร MLX90640)
temp_c = (raw_temp - 32768) * 0.02 - 273.15
temperatures.append(temp_c)
return temperatures
def main():
while True:
try:
# อ่านค่าอุณหภูมิ
temperatures = read_mlx90640_temperatures()
# แสดงผลค่าอุณหภูมิ
for i, temp in enumerate(temperatures):
print(f"{temp:.2f}", end="\t")
if (i + 1) % 32 == 0: # เริ่มบรรทัดใหม่ทุกๆ 32 พิกเซล
print()
print("\n---\n")
except Exception as e:
print("เกิดข้อผิดพลาด:", e)
# รอ 1 วินาทีก่อนอ่านค่าครั้งถัดไป
time.sleep(1)
if __name__ == "__main__":
main()
คำอธิบายโค้ด
-
การตั้งค่า I2C
- ใช้โมดูล
machine.I2C
เพื่อสร้างออบเจ็กต์ I2C และกำหนดพิน SDA และ SCL - ความถี่ I2C ถูกตั้งไว้ที่ 400kHz ซึ่งเหมาะสมสำหรับ MLX90640
- ใช้โมดูล
-
การอ่านข้อมูล
- ส่งคำสั่ง I2C เพื่ออ่านข้อมูลจาก RAM ของ MLX90640
- ข้อมูลที่อ่านมาจะเป็นค่า 16-bit สำหรับแต่ละพิกเซล (768 พิกเซล)
-
การแปลงข้อมูล
- ใช้ฟังก์ชัน
struct.unpack
เพื่อรวมข้อมูล 2 ไบต์เป็นค่า 16-bit - แปลงค่าดิบเป็นอุณหภูมิโดยใช้สมการที่ระบุในเอกสาร MLX90640 (Datasheet)
- ใช้ฟังก์ชัน
-
การแสดงผล
- ค่าอุณหภูมิจะถูกแสดงในรูปแบบตาราง 32x24 พิกเซลผ่าน Serial Monitor
ข้อควรระวัง
-
ประสิทธิภาพของ ESP32
- การประมวลผลข้อมูลจาก MLX90640 อาจใช้ทรัพยากรมาก เนื่องจากต้องอ่านและแปลงข้อมูล 768 พิกเซล หากต้องการแสดงผลภาพความร้อนแบบเรียลไทม์ อาจต้องใช้จอแสดงผลที่รองรับ MicroPython เช่น SSD1306 หรือ ILI9341
-
การจัดการหน่วยความจำ
- MicroPython มีข้อจำกัดด้านหน่วยความจำ ดังนั้นควรทดสอบโค้ดบน ESP32 ที่มีหน่วยความจำเพียงพอ (เช่น ESP32-WROOM-32)
-
การปรับค่า Offset
- ค่า Offset และ Gain ของ MLX90640 อาจต้องปรับตามสภาพแวดล้อมหรือการตั้งค่าเฉพาะของเซนเซอร์ โปรดตรวจสอบเอกสาร MLX90640 สำหรับรายละเอียดเพิ่มเติม
การประยุกต์ใช้งาน
- การตรวจสอบอุณหภูมิในอาคาร : ใช้ MLX90640 เพื่อตรวจสอบจุดร้อนหรือการรั่วไหลของความร้อน
- การตรวจสอบอุปกรณ์ไฟฟ้า : ตรวจจับจุดร้อนในแผงวงจรหรืออุปกรณ์ไฟฟ้า
- การควบคุมระบบ IoT : นำข้อมูลอุณหภูมิไปใช้ในการควบคุมอุปกรณ์อัตโนมัติ