fir — מנהל התקן לחיישן תרמי (fir == far infrared)

המודול fir מפעיל מערכים תרמופיליים של אינפרא-אדום רחוק (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.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]

מחזיר רביעייה (ta, ir, to_min, to_max) המכילה את הטמפרטורה הסביבתית, רשימה שטוחה בגודל width * height של טמפרטורות float, הטמפרטורה המינימלית שנצפתה והטמפרטורה המרבית שנצפתה. כל הערכים בצלזיוס.

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 הוא מלבן אזור העניין (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 לכל ערך פיקסל מקור.

hint הוא OR לוגי של:

scale הוא זוג (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, התמונה החדשה מוקצית על ה-heap של MicroPython (שהוא מוגבל); קבעו את copy_to_fb ל-True כדי לכתוב את התוצאה לתוך חוצץ הפריימים (frame buffer) במקום זאת.

hmirror אם True משקף אופקית את התמונה החדשה.

vflip אם True הופך אנכית את התמונה החדשה.

transpose אם True משחלף את התמונה החדשה.

x_scale שולט בכמה התמונה החדשה מותאמת בכיוון ה-x. ערך שלילי הופך אופקית. אם לא צוין, מתאים את עצמו ל-y_scale כדי לשמור על יחס הממדים.

y_scale שולט בכמה התמונה החדשה מותאמת בכיוון ה-y. ערך שלילי הופך אנכית. אם לא צוין, מתאים את עצמו ל-x_scale כדי לשמור על יחס הממדים.

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 פיקסלים המשמשת כטבלת חיפוש לאלפא.

hint הוא OR לוגי של:

scale הוא זוג (min, max) השולט בטמפרטורה המינימלית/מרבית (בצלזיוס) המשמשת לקנה המידה של מערך ה-IR. ברירת המחדל היא ערכי המינימום והמקסימום הממשיים של ה-IR.

pixformat שולט בפורמט הפיקסלים של הפלט. חייב להיות image.GRAYSCALE או image.RGB565.

copy_to_fb אם True כותב את התוצאה לתוך חוצץ הפריימים (frame buffer) במקום להקצות על ה-heap.

timeout אם אינו -1, מספר המילישניות להמתנה לפריים חדש.

קבועים

fir.FIR_SHIELD: int

מגן התרמופיל של OpenMV Cam (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).