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.
typegibt den Typ des Wärmesensors an:fir.FIR_SHIELD: 16x4 Pixel (MLX90621).fir.FIR_MLX90621: 16x4 Pixel.fir.FIR_MLX90640: 32x24 Pixel.fir.FIR_MLX90641: 16x12 Pixel.fir.FIR_AMG8833: 8x8 Pixel.
Standardmäßig ist
typegleich-1, wodurchfir.init()einen angeschlossenen Wärmesensor anhand seiner I2C-Adresse automatisch sucht und initialisiert. Beachten Sie, dassfir.FIR_MLX90640undfir.FIR_MLX90641dieselbe I2C-Adresse verwenden, sodass Siefir.FIR_MLX90641antypeübergeben müssen, um diesen Sensor gezielt zu initialisieren.refreshist die Aktualisierungsrate des Wärmesensors in Hz:fir.FIR_MLX90621: Standardmäßig 64 Hz. Möglich sind 1, 2, 4, 8, 16, 32, 64, 128, 256 oder 512 Hz.fir.FIR_MLX90640: Standardmäßig 32 Hz. Möglich sind 1, 2, 4, 8, 16, 32 oder 64 Hz.fir.FIR_MLX90641: Standardmäßig 32 Hz. Möglich sind 1, 2, 4, 8, 16, 32 oder 64 Hz.fir.FIR_AMG8833: Fest auf 10 Hz.
Eine höhere Aktualisierungsrate verringert die Genauigkeit und umgekehrt.
resolutionist die Messauflösung des Wärmesensors in Bit:fir.FIR_MLX90621: Standardmäßig 18. Möglich sind 15, 16, 17 oder 18.fir.FIR_MLX90640: Standardmäßig 19. Möglich sind 16, 17, 18 oder 19.fir.FIR_MLX90641: Standardmäßig 19. Möglich sind 16, 17, 18 oder 19.fir.FIR_AMG8833: Fest auf 12.
Eine höhere Auflösung verringert den maximalen Temperaturbereich und umgekehrt.
- fir.type() int¶
Gibt den Typ des verwendeten Wärmesensors zurück. Einer von
fir.FIR_MLX90621,fir.FIR_MLX90640,fir.FIR_MLX90641oderfir.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 auswidth * heightFloat-Temperaturen, die niedrigste gemessene Temperatur und die höchste gemessene Temperatur enthält. Alle Werte sind in Celsius.hmirrorspiegelt dasir-Array horizontal, wenn True.vflipspiegelt dasir-Array vertikal, wenn True.transposetransponiert dasir-Array (tauscht Breite und Höhe), wenn True.timeoutist, 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 aufimagemit seiner oberen linken Ecke bei(x, y).irist die flache Temperaturliste auswidth * height, die vonfir.read_ir()zurückgegeben wird.x_scalesteuert, wie stark das gerenderte Bild in x-Richtung skaliert wird. Ein negativer Wert spiegelt horizontal. Wenn nicht angegeben, wirdy_scaleübernommen, um das Seitenverhältnis beizubehalten.y_scalesteuert, wie stark das gerenderte Bild in y-Richtung skaliert wird. Ein negativer Wert spiegelt vertikal. Wenn nicht angegeben, wirdx_scaleübernommen, um das Seitenverhältnis beizubehalten.roiist das Interessensbereich-Rechteck(x, y, w, h)der zu zeichnenden Quell-IR-Daten.rgb_channelist 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.alphasteuert, wie viel des Quellbilds in das Ziel eingeblendet wird (0-255). 255 ist vollständig deckend; 0 führt zu keiner Änderung.color_paletteist 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_paletteist ein 256-Pixel-GRAYSCALE-Bild, das als Alpha-Nachschlagetabelle verwendet wird undalphapro Quellpixelwert moduliert.hintist eine logische ODER-Verknüpfung von:image.AREA: Verwendet Flächenskalierung beim Verkleinern.image.BILINEAR: Verwendet bilineare Skalierung.image.BICUBIC: Verwendet bikubische Skalierung.image.CENTER: Zentriert das Bild auf dem Ziel.image.HMIRROR: Spiegelt horizontal.image.VFLIP: Spiegelt vertikal.image.TRANSPOSE: Transponiert (tauscht x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Wendet die rgb_channel-Extraktion vor der Skalierung an.image.APPLY_COLOR_PALETTE_FIRST: Wendet die Farbpalette vor der Skalierung an.image.SCALE_ASPECT_KEEP: Passt in das Ziel ein und behält das Seitenverhältnis bei.image.SCALE_ASPECT_EXPAND: Füllt das Ziel unter Beibehaltung des Seitenverhältnisses (beschneidet).image.SCALE_ASPECT_IGNORE: Füllt das Ziel unter Missachtung des Seitenverhältnisses (verzerrt).image.ROTATE_90: Dreht um 90 Grad.image.ROTATE_180: Dreht um 180 Grad.image.ROTATE_270: Dreht um 270 Grad.
scaleist ein 2-Tupel(min, max), das die minimale/maximale Temperatur (in Celsius) steuert, mit der dasir-Array skaliert wird. Standardmäßig die tatsächlichen Minimal- und Maximalwerte vonir.
- 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.Imagezurück. Funktioniert ähnlich wiesensor.snapshot(). Wenncopy_to_fbFalse ist, wird das neue Bild auf dem MicroPython-Heap (der begrenzt ist) zugewiesen; setzen Siecopy_to_fbauf True, um das Ergebnis stattdessen in den Framebuffer zu schreiben.hmirrorspiegelt das neue Bild horizontal, wenn True.vflipspiegelt das neue Bild vertikal, wenn True.transposetransponiert das neue Bild, wenn True.x_scalesteuert, wie stark das neue Bild in x-Richtung skaliert wird. Ein negativer Wert spiegelt horizontal. Wenn nicht angegeben, wirdy_scaleübernommen, um das Seitenverhältnis beizubehalten.y_scalesteuert, wie stark das neue Bild in y-Richtung skaliert wird. Ein negativer Wert spiegelt vertikal. Wenn nicht angegeben, wirdx_scaleübernommen, um das Seitenverhältnis beizubehalten.roiist das Interessensbereich-Rechteck(x, y, w, h)der zu zeichnenden Quell-IR-Daten.rgb_channelist der RGB-Kanal (0=R, 1=G, 2=B), der gerendert wird.-1(Standard) rendert alle Kanäle.alphasteuert, wie viel des Quellbilds eingeblendet wird (0-255). 255 ist vollständig deckend.color_paletteist ein Farbpaletten-Enum oder ein 256-Pixel-RGB565-Bild, das als Nachschlagetabelle für den Graustufen-Quellwert verwendet wird.alpha_paletteist ein 256-Pixel-GRAYSCALE-Bild, das als Alpha-Nachschlagetabelle verwendet wird.hintist eine logische ODER-Verknüpfung von:image.AREA: Verwendet Flächenskalierung beim Verkleinern.image.BILINEAR: Verwendet bilineare Skalierung.image.BICUBIC: Verwendet bikubische Skalierung.image.CENTER: Zentriert das Bild auf dem Ziel.image.HMIRROR: Spiegelt horizontal.image.VFLIP: Spiegelt vertikal.image.TRANSPOSE: Transponiert (tauscht x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Wendet die rgb_channel-Extraktion vor der Skalierung an.image.APPLY_COLOR_PALETTE_FIRST: Wendet die Farbpalette vor der Skalierung an.image.SCALE_ASPECT_KEEP: Passt in das Ziel ein und behält das Seitenverhältnis bei.image.SCALE_ASPECT_EXPAND: Füllt das Ziel unter Beibehaltung des Seitenverhältnisses (beschneidet).image.SCALE_ASPECT_IGNORE: Füllt das Ziel unter Missachtung des Seitenverhältnisses (verzerrt).image.ROTATE_90: Dreht um 90 Grad.image.ROTATE_180: Dreht um 180 Grad.image.ROTATE_270: Dreht um 270 Grad.
scaleist 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.pixformatsteuert das Ausgabe-Pixelformat. Mussimage.GRAYSCALEoderimage.RGB565sein.copy_to_fbschreibt das Ergebnis in den Framebuffer, anstatt es auf dem Heap zuzuweisen, wenn True.timeoutist, 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.