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).