fir --- ไดรเวอร์เซนเซอร์ความร้อน (fir == far infrared)

โมดูล fir ขับเคลื่อนอาร์เรย์ thermopile อินฟราเรดไกล (FIR) ที่เชื่อมต่อกับ OpenMV Cam ผ่าน I2C -- รองรับเซนเซอร์ขนาด 8x8, 16x4, 16x12 และ 32x24 (ดูค่าคงที่ที่ด้านล่างของหน้านี้) แต่ละเฟรมจะคืนค่าอุณหภูมิต่อพิกเซลเป็นองศาเซลเซียส ซึ่งสามารถแสดงผลเป็นภาพความร้อนแบบสแตนด์อโลนด้วย snapshot() หรือรวมเข้ากับเฟรมแสงที่มองเห็นได้จากเซนเซอร์ CSI ด้วย draw_ir() โดยปกติผ่านพาเลตต์สีเช่น image.PALETTE_RAINBOW หรือ image.PALETTE_IRONBOW

ตัวอย่างการใช้งาน:

import csi
import fir

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

fir.init()

while True:
    img = csi0.snapshot()
    ta, ir, to_min, to_max = fir.read_ir()
    fir.draw_ir(img, ir)
    print("====================")
    print("Ambient temperature: %0.2f" % ta)
    print("Min temperature seen: %0.2f" % to_min)
    print("Max temperature seen: %0.2f" % to_max)

ฟังก์ชัน

fir.init(type: int = -1, refresh: int | None = None, resolution: int | None = None) None

เริ่มต้นใช้งานเซนเซอร์ความร้อนที่เชื่อมต่ออยู่

type ระบุประเภทของเซนเซอร์ความร้อน:

ค่าเริ่มต้นของ type คือ -1 ซึ่งทำให้ fir.init() สแกนและเริ่มต้นเซนเซอร์ความร้อนที่เชื่อมต่ออยู่โดยอัตโนมัติตามที่อยู่ I2C โปรดทราบว่า fir.FIR_MLX90640 และ fir.FIR_MLX90641 ใช้ที่อยู่ I2C เดียวกัน ดังนั้นคุณต้องส่ง fir.FIR_MLX90641 ไปยัง type เพื่อเริ่มต้นโดยเฉพาะ

refresh คืออัตราการรีเฟรชของเซนเซอร์ความร้อนเป็น Hz:

  • fir.FIR_MLX90621: ค่าเริ่มต้น 64 Hz สามารถเป็น 1, 2, 4, 8, 16, 32, 64, 128, 256 หรือ 512 Hz

  • fir.FIR_MLX90640: ค่าเริ่มต้น 32 Hz สามารถเป็น 1, 2, 4, 8, 16, 32 หรือ 64 Hz

  • fir.FIR_MLX90641: ค่าเริ่มต้น 32 Hz สามารถเป็น 1, 2, 4, 8, 16, 32 หรือ 64 Hz

  • fir.FIR_AMG8833: คงที่ที่ 10 Hz

อัตราการรีเฟรชที่สูงขึ้นจะลดความแม่นยำ และในทางกลับกัน

resolution คือความละเอียดการวัดของเซนเซอร์ความร้อนเป็นบิต:

  • fir.FIR_MLX90621: ค่าเริ่มต้น 18 สามารถเป็น 15, 16, 17 หรือ 18

  • fir.FIR_MLX90640: ค่าเริ่มต้น 19 สามารถเป็น 16, 17, 18 หรือ 19

  • fir.FIR_MLX90641: ค่าเริ่มต้น 19 สามารถเป็น 16, 17, 18 หรือ 19

  • fir.FIR_AMG8833: คงที่ที่ 12

ความละเอียดที่สูงขึ้นจะลดช่วงอุณหภูมิสูงสุด และในทางกลับกัน

fir.deinit() None

ยกเลิกการเริ่มต้นเซนเซอร์ความร้อนและคืนทรัพยากร

fir.width() int

คืนค่าความละเอียดแนวนอน (เป็นพิกเซล) ของเซนเซอร์ความร้อนที่ใช้งานอยู่

fir.height() int

คืนค่าความละเอียดแนวตั้ง (เป็นพิกเซล) ของเซนเซอร์ความร้อนที่ใช้งานอยู่

fir.type() int

คืนค่าประเภทของเซนเซอร์ความร้อนที่ใช้งานอยู่ เป็นหนึ่งใน fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 หรือ fir.FIR_AMG8833

fir.refresh() int

คืนค่าอัตราการรีเฟรชปัจจุบัน (Hz) ที่ตั้งค่าระหว่างการเรียก fir.init()

fir.resolution() int

คืนค่าความละเอียดปัจจุบัน (บิต) ที่ตั้งค่าระหว่างการเรียก fir.init()

fir.read_ta() float

คืนค่าอุณหภูมิแวดล้อม (เช่น อุณหภูมิเซนเซอร์) เป็นเซลเซียสในรูปแบบ float

fir.read_ir(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = -1) Tuple[float, List[float], float, float]

คืนค่า 4-tuple (ta, ir, to_min, to_max) ที่มีอุณหภูมิแวดล้อม รายการ float ของอุณหภูมิแบบแบน width * height อุณหภูมิต่ำสุดที่พบ และอุณหภูมิสูงสุดที่พบ ค่าทั้งหมดอยู่ในหน่วยเซลเซียส

hmirror ถ้าเป็น True จะกระจกแนวนอนอาร์เรย์ ir

vflip ถ้าเป็น True จะพลิกแนวตั้งอาร์เรย์ ir

transpose ถ้าเป็น True จะสลับตำแหน่งอาร์เรย์ ir (สลับความกว้างและความสูง)

timeout ถ้าไม่ใช่ -1 คือจำนวนมิลลิวินาทีที่รอเฟรมใหม่

fir.draw_ir(image: image.Image, ir: List[float], x: int = 0, y: int = 0, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None) None

วาดอาร์เรย์ ir ลงบน image โดยมีมุมซ้ายบนที่ (x, y)

ir คือรายการอุณหภูมิแบบแบน width * height ที่คืนโดย fir.read_ir()

x_scale ควบคุมว่าภาพที่แสดงจะถูกปรับขนาดในทิศทาง x มากเพียงใด ค่าลบจะพลิกแนวนอน หากไม่ระบุ จะจับคู่กับ y_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมว่าภาพที่แสดงจะถูกปรับขนาดในทิศทาง y มากเพียงใด ค่าลบจะพลิกแนวตั้ง หากไม่ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi คือสี่เหลี่ยมบริเวณที่สนใจ (ROI) (x, y, w, h) ของข้อมูล IR ต้นทางที่จะวาด

rgb_channel คือช่อง RGB (0=R, 1=G, 2=B) ที่จะแสดงผลลงในภาพปลายทางเมื่อปลายทางเป็น RGB565 -1 (ค่าเริ่มต้น) จะแสดงผลทุกช่อง

alpha ควบคุมปริมาณของภาพต้นทางที่จะผสมเข้ากับปลายทาง (0-255) 255 คือทึบแสงสมบูรณ์ 0 ไม่มีการแก้ไข

color_palette คือ enum พาเลตต์สี (เช่น image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) หรือภาพ RGB565 ขนาด 256 พิกเซลที่ใช้เป็นตารางค้นหาบนค่าต้นทางระดับสีเทา

alpha_palette คือภาพ GRAYSCALE ขนาด 256 พิกเซลที่ใช้เป็นตารางค้นหา alpha ที่ปรับ alpha ต่อค่าพิกเซลต้นทาง

hint คือ OR เชิงตรรกะของ:

scale คือ 2-tuple (min, max) ที่ควบคุมอุณหภูมิต่ำสุด/สูงสุด (เป็นเซลเซียส) ที่ใช้ในการปรับขนาดอาร์เรย์ ir ค่าเริ่มต้นเป็นค่าต่ำสุดและสูงสุดจริงของ ir

fir.snapshot(hmirror: bool = False, vflip: bool = False, transpose: bool = False, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None, pixformat: int = image.RGB565, copy_to_fb: bool = False, timeout: int = -1) image.Image

จับภาพเฟรมจากเซนเซอร์ความร้อนและคืนเป็น image.Image ทำงานคล้ายกับ sensor.snapshot() ถ้า copy_to_fb เป็น False ภาพใหม่จะถูกจัดสรรบน MicroPython heap (ซึ่งมีจำกัด) ตั้งค่า copy_to_fb เป็น True เพื่อเขียนผลลัพธ์ลงในบัฟเฟอร์เฟรมแทน

hmirror ถ้าเป็น True จะกระจกแนวนอนภาพใหม่

vflip ถ้าเป็น True จะพลิกแนวตั้งภาพใหม่

transpose ถ้าเป็น True จะสลับตำแหน่งภาพใหม่

x_scale ควบคุมว่าภาพใหม่จะถูกปรับขนาดในทิศทาง x มากเพียงใด ค่าลบจะพลิกแนวนอน หากไม่ระบุ จะจับคู่กับ y_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมว่าภาพใหม่จะถูกปรับขนาดในทิศทาง y มากเพียงใด ค่าลบจะพลิกแนวตั้ง หากไม่ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi คือสี่เหลี่ยมบริเวณที่สนใจ (ROI) (x, y, w, h) ของข้อมูล IR ต้นทางที่จะวาด

rgb_channel คือช่อง RGB (0=R, 1=G, 2=B) ที่จะแสดงผล -1 (ค่าเริ่มต้น) จะแสดงผลทุกช่อง

alpha ควบคุมปริมาณของภาพต้นทางที่จะผสม (0-255) 255 คือทึบแสงสมบูรณ์

color_palette คือ enum พาเลตต์สีหรือภาพ RGB565 ขนาด 256 พิกเซลที่ใช้เป็นตารางค้นหาบนค่าต้นทางระดับสีเทา

alpha_palette คือภาพ GRAYSCALE ขนาด 256 พิกเซลที่ใช้เป็นตารางค้นหา alpha

hint คือ OR เชิงตรรกะของ:

scale คือ 2-tuple (min, max) ที่ควบคุมอุณหภูมิต่ำสุด/สูงสุด (เป็นเซลเซียส) ที่ใช้ในการปรับขนาดอาร์เรย์ IR ค่าเริ่มต้นเป็นค่าต่ำสุดและสูงสุดจริงของ IR

pixformat ควบคุมรูปแบบพิกเซลเอาต์พุต ต้องเป็น image.GRAYSCALE หรือ image.RGB565

copy_to_fb ถ้าเป็น True จะเขียนผลลัพธ์ลงในบัฟเฟอร์เฟรมแทนการจัดสรรบน heap

timeout ถ้าไม่ใช่ -1 คือจำนวนมิลลิวินาทีที่รอเฟรมใหม่

ค่าคงที่

fir.FIR_SHIELD: int

OpenMV Cam Thermopile Shield (MLX90621) นามแฝงสำหรับ fir.FIR_MLX90621

fir.FIR_MLX90621: int

เซนเซอร์ความร้อน MLX90621 (16x4)

fir.FIR_MLX90640: int

เซนเซอร์ความร้อน MLX90640 (32x24)

fir.FIR_MLX90641: int

เซนเซอร์ความร้อน MLX90641 (16x12)

fir.FIR_AMG8833: int

เซนเซอร์ความร้อน AMG8833 (8x8)