fir — Wärmesensortreiber (fir == far infrared)

Das Modul fir steuert Fern-Infrarot-Thermosäulenarrays (FIR), die über I2C an eine OpenMV Cam angeschlossen sind – unterstützt werden Sensoren mit 8x8, 16x4, 16x12 und 32x24 (siehe die Konstanten am Ende dieser Seite). Jedes Einzelbild liefert eine Temperatur pro Pixel in Grad Celsius, die mit snapshot() als eigenständiges Wärmebild dargestellt oder mit draw_ir() auf ein Einzelbild des sichtbaren Lichts vom CSI-Sensor übergeblendet werden kann – normalerweise über eine Farbpalette wie image.PALETTE_RAINBOW oder image.PALETTE_IRONBOW.

Anwendungsbeispiel:

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)

Funktionen

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

Initialisiert einen angeschlossenen Wärmesensor.

type gibt den Typ des Wärmesensors an:

Standardmäßig ist type gleich -1, wodurch fir.init() einen angeschlossenen Wärmesensor anhand seiner I2C-Adresse automatisch sucht und initialisiert. Beachten Sie, dass fir.FIR_MLX90640 und fir.FIR_MLX90641 dieselbe I2C-Adresse verwenden, sodass Sie fir.FIR_MLX90641 an type übergeben müssen, um diesen Sensor gezielt zu initialisieren.

refresh ist die Aktualisierungsrate des Wärmesensors in Hz:

Eine höhere Aktualisierungsrate verringert die Genauigkeit und umgekehrt.

resolution ist die Messauflösung des Wärmesensors in Bit:

Eine höhere Auflösung verringert den maximalen Temperaturbereich und umgekehrt.

fir.deinit() None

Deinitialisiert den Wärmesensor und gibt Ressourcen frei.

fir.width() int

Gibt die horizontale Auflösung (in Pixeln) des verwendeten Wärmesensors zurück.

fir.height() int

Gibt die vertikale Auflösung (in Pixeln) des verwendeten Wärmesensors zurück.

fir.type() int

Gibt den Typ des verwendeten Wärmesensors zurück. Einer von fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 oder fir.FIR_AMG8833.

fir.refresh() int

Gibt die aktuelle Aktualisierungsrate (Hz) zurück, die beim Aufruf von fir.init() gesetzt wurde.

fir.resolution() int

Gibt die aktuelle Auflösung (Bit) zurück, die beim Aufruf von fir.init() gesetzt wurde.

fir.read_ta() float

Gibt die Umgebungstemperatur (d. h. die Sensortemperatur) in Celsius als Float zurück.

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

Gibt ein 4-Tupel (ta, ir, to_min, to_max) zurück, das die Umgebungstemperatur, eine flache Liste aus width * height Float-Temperaturen, die niedrigste gemessene Temperatur und die höchste gemessene Temperatur enthält. Alle Werte sind in Celsius.

hmirror spiegelt das ir-Array horizontal, wenn True.

vflip spiegelt das ir-Array vertikal, wenn True.

transpose transponiert das ir-Array (tauscht Breite und Höhe), wenn True.

timeout ist, falls nicht -1, die Anzahl der Millisekunden, die auf ein neues Einzelbild gewartet wird.

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

Zeichnet das ir-Array auf image mit seiner oberen linken Ecke bei (x, y).

ir ist die flache Temperaturliste aus width * height, die von fir.read_ir() zurückgegeben wird.

x_scale steuert, wie stark das gerenderte Bild in x-Richtung skaliert wird. Ein negativer Wert spiegelt horizontal. Wenn nicht angegeben, wird y_scale übernommen, um das Seitenverhältnis beizubehalten.

y_scale steuert, wie stark das gerenderte Bild in y-Richtung skaliert wird. Ein negativer Wert spiegelt vertikal. Wenn nicht angegeben, wird x_scale übernommen, um das Seitenverhältnis beizubehalten.

roi ist das Interessensbereich-Rechteck (x, y, w, h) der zu zeichnenden Quell-IR-Daten.

rgb_channel ist der RGB-Kanal (0=R, 1=G, 2=B), der auf das Zielbild gerendert wird, wenn das Ziel RGB565 ist. -1 (Standard) rendert alle Kanäle.

alpha steuert, wie viel des Quellbilds in das Ziel eingeblendet wird (0-255). 255 ist vollständig deckend; 0 führt zu keiner Änderung.

color_palette ist ein Farbpaletten-Enum (z. B. image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) oder ein 256-Pixel-RGB565-Bild, das als Nachschlagetabelle für den Graustufen-Quellwert verwendet wird.

alpha_palette ist ein 256-Pixel-GRAYSCALE-Bild, das als Alpha-Nachschlagetabelle verwendet wird und alpha pro Quellpixelwert moduliert.

hint ist eine logische ODER-Verknüpfung von:

scale ist ein 2-Tupel (min, max), das die minimale/maximale Temperatur (in Celsius) steuert, mit der das ir-Array skaliert wird. Standardmäßig die tatsächlichen Minimal- und Maximalwerte von 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

Erfasst ein Einzelbild vom Wärmesensor und gibt es als image.Image zurück. Funktioniert ähnlich wie sensor.snapshot(). Wenn copy_to_fb False ist, wird das neue Bild auf dem MicroPython-Heap (der begrenzt ist) zugewiesen; setzen Sie copy_to_fb auf True, um das Ergebnis stattdessen in den Framebuffer zu schreiben.

hmirror spiegelt das neue Bild horizontal, wenn True.

vflip spiegelt das neue Bild vertikal, wenn True.

transpose transponiert das neue Bild, wenn True.

x_scale steuert, wie stark das neue Bild in x-Richtung skaliert wird. Ein negativer Wert spiegelt horizontal. Wenn nicht angegeben, wird y_scale übernommen, um das Seitenverhältnis beizubehalten.

y_scale steuert, wie stark das neue Bild in y-Richtung skaliert wird. Ein negativer Wert spiegelt vertikal. Wenn nicht angegeben, wird x_scale übernommen, um das Seitenverhältnis beizubehalten.

roi ist das Interessensbereich-Rechteck (x, y, w, h) der zu zeichnenden Quell-IR-Daten.

rgb_channel ist der RGB-Kanal (0=R, 1=G, 2=B), der gerendert wird. -1 (Standard) rendert alle Kanäle.

alpha steuert, wie viel des Quellbilds eingeblendet wird (0-255). 255 ist vollständig deckend.

color_palette ist ein Farbpaletten-Enum oder ein 256-Pixel-RGB565-Bild, das als Nachschlagetabelle für den Graustufen-Quellwert verwendet wird.

alpha_palette ist ein 256-Pixel-GRAYSCALE-Bild, das als Alpha-Nachschlagetabelle verwendet wird.

hint ist eine logische ODER-Verknüpfung von:

scale ist ein 2-Tupel (min, max), das die minimale/maximale Temperatur (in Celsius) steuert, mit der das IR-Array skaliert wird. Standardmäßig die tatsächlichen Minimal- und Maximalwerte des IR-Arrays.

pixformat steuert das Ausgabe-Pixelformat. Muss image.GRAYSCALE oder image.RGB565 sein.

copy_to_fb schreibt das Ergebnis in den Framebuffer, anstatt es auf dem Heap zuzuweisen, wenn True.

timeout ist, falls nicht -1, die Anzahl der Millisekunden, die auf ein neues Einzelbild gewartet wird.

Konstanten

fir.FIR_SHIELD: int

Das OpenMV Cam Thermopile Shield (MLX90621). Alias für fir.FIR_MLX90621.

fir.FIR_MLX90621: int

MLX90621-Wärmesensor (16x4).

fir.FIR_MLX90640: int

MLX90640-Wärmesensor (32x24).

fir.FIR_MLX90641: int

MLX90641-Wärmesensor (16x12).

fir.FIR_AMG8833: int

AMG8833-Wärmesensor (8x8).