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

تعيد درجة الحرارة المحيطة (أي درجة حرارة المستشعر) بالدرجات المئوية كعدد عشري.

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 من درجات الحرارة العشرية، وأدنى درجة حرارة تمت ملاحظتها، وأقصى درجة حرارة تمت ملاحظتها. جميع القيم بالدرجات المئوية.

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 هو تعداد لوحة ألوان (مثل 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 فإن الصورة الجديدة تُخصص على كومة MicroPython (المحدودة)؛ اضبط copy_to_fb على True لكتابة النتيجة في مخزن الإطارات بدلاً من ذلك.

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 هو تعداد لوحة ألوان أو صورة RGB565 بحجم 256 بكسل تُستخدم كجدول بحث على قيمة المصدر بتدرج الرمادي.

alpha_palette هي صورة GRAYSCALE بحجم 256 بكسل تُستخدم كجدول بحث ألفا.

hint هو OR منطقي لما يلي:

scale هي ثنائية (min, max) تتحكم في الحد الأدنى/الأقصى لدرجة الحرارة (بالدرجات المئوية) المستخدمة لتحجيم مصفوفة IR. الافتراضي هو القيمتان الفعليتان الدنيا والقصوى لـ IR.

pixformat يتحكم في تنسيق بكسل الإخراج. يجب أن يكون image.GRAYSCALE أو image.RGB565.

copy_to_fb إذا كانت True تكتب النتيجة في مخزن الإطارات بدلاً من التخصيص على الكومة.

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