Zum Inhalt springen
Thermalkamera

Anwendungen & Branchen Redaktion Thermalkamera · Stand

Wärmebildkamera Raspberry Pi: DIY-Projekte für Technikliebhaber

Inhalt 10 Abschnitte

Wärmebildkamera mit Raspberry Pi und MLX90640 selbst bauen

Mit einem Raspberry Pi und dem Infrarot-Sensor MLX90640 baust du eine einfache Wärmebildkamera. Der Sensor liefert 32 × 24 Pixel, also 768 Temperaturwerte pro Bild. Dein Pi liest diese Werte über den I2C-Bus aus und zeichnet daraus ein Falschfarbenbild.

Plane realistisch: 32 × 24 Pixel sind grob. Du erkennst, wo es warm oder kalt ist und wie sich Wärme verteilt. Feine Details, Beschriftungen oder kleine Bauteile löst der Sensor nicht auf. Für Wärmequellen, Temperaturverläufe und einfache Erkennung reicht er aus.

Das Wichtigste zum Sensor in Kürze

Diese Angaben stammen aus dem Datenblatt des Herstellers Melexis (Revision 12, Dezember 2019).

EigenschaftWert laut Hersteller
Auflösung32 × 24 Pixel (768 Infrarot-Pixel)
Sichtfeldzwei Varianten: 55° × 35° oder 110° × 75°
Zieltemperatur-40 °C bis 300 °C
Betriebstemperatur des Sensors-40 °C bis 85 °C
Bildrateeinstellbar von 0,5 Hz bis 64 Hz
Versorgung3,3 V (zulässig 3 V bis 3,6 V)
SchnittstelleI2C, bis 1 MHz, Standardadresse 0x33
Rauschen (NETD)0,1 K RMS bei 1 Hz

Welche Sichtfeld-Variante dein Board trägt, steht in dessen Beschreibung. Das weite Feld von 110° zeigt viel Umgebung, aber jeder Pixel deckt einen großen Bereich ab. Das enge Feld von 55° eignet sich besser für einzelne Objekte.

Materialliste

  • Raspberry Pi mit 40-poliger Stiftleiste und Netzteil
  • microSD-Karte mit Raspberry Pi OS
  • Breakout-Board mit MLX90640 (achte auf die Sichtfeld-Variante)
  • vier Jumper-Kabel, passend zu den Anschlüssen von Pi und Board
  • optional: Gehäuse oder Halterung, damit der Sensor ruhig und geschützt sitzt

Verkabelung

Der Sensor hat vier Anschlüsse: SDA, VDD (Versorgung), GND und SCL. Auf Breakout-Boards heißt die Versorgung oft VIN oder VCC. Schalte den Pi vor dem Verkabeln aus.

SensorRaspberry PiPin an der Stiftleiste
VDD / VIN / VCC3V3Pin 1
GNDGNDPin 6
SDAGPIO2 (SDA1)Pin 3
SCLGPIO3 (SCL1)Pin 5

Die Pinbelegung folgt dem Datenblatt des Raspberry Pi 4 (Modell B). Die 40-polige Leiste ist laut Hersteller zu allen früheren Boards mit 40 Pins kompatibel. Pin 6 ist einer von mehreren GND-Pins, du kannst auch einen anderen verwenden.

Die Signalpegel des Pi liegen bei 3,3 V. Versorge den Sensor deshalb mit 3,3 V, nicht mit 5 V. Prüfe in der Beschreibung deines Boards, welche Spannung es erwartet. Auf GPIO2 und GPIO3 sitzen auf dem Pi bereits Pull-up-Widerstände (1,8 kΩ), zusätzliche brauchst du für diesen Bus in der Regel nicht.

Software einrichten

I2C aktivieren

Öffne auf dem Desktop das Control Centre, wähle links „Interfaces“ und schalte I2C ein. Das trägt dtparam=i2c_arm=on in die Datei /boot/firmware/config.txt ein. Auf der Kommandozeile geht es auch so:

sudo raspi-config nonint do_i2c 0

Prüfe danach, ob das Gerät /dev/i2c-1 existiert:

ls /dev/i2c*
sudo i2cdetect -y 1

Der zweite Befehl scannt den Bus. Bei richtiger Verkabelung erscheint die Adresse 33. Erscheint sie nicht, prüfe die Verkabelung von SDA und SCL.

Python-Umgebung und Bibliothek

Auf aktuellem Raspberry Pi OS legst du eine virtuelle Umgebung an. Danach installierst du die Bibliothek adafruit_mlx90640 aus dem Paket adafruit-circuitpython-mlx90640:

python3 -m venv env --system-site-packages
source env/bin/activate
pip3 install --upgrade adafruit-blinka adafruit-platformdetect
pip3 install adafruit-circuitpython-mlx90640

Die Umgebung aktivierst du in jeder neuen Sitzung mit source env/bin/activate.

Erstes Skript: Temperaturen auslesen

Speichere dieses Skript als messen.py. Es entspricht dem Beispiel aus der Bibliotheksdokumentation, ist aber gekürzt. Statt aller 768 Werte gibt es Minimum, Maximum und den Wert in der Bildmitte aus.

import board
import busio
import adafruit_mlx90640

i2c = busio.I2C(board.SCL, board.SDA, frequency=800000)
mlx = adafruit_mlx90640.MLX90640(i2c)
print("Sensor gefunden:", [hex(i) for i in mlx.serial_number])

mlx.refresh_rate = adafruit_mlx90640.RefreshRate.REFRESH_2_HZ

frame = [0] * 768
while True:
    try:
        mlx.getFrame(frame)
    except ValueError:
        continue
    mitte = frame[12 * 32 + 16]
    print("min %.1f  max %.1f  Mitte %.1f (Grad Celsius)" % (min(frame), max(frame), mitte))

Starte es mit python3 messen.py und beende es mit Strg+C. Wenn du die Hand vor den Sensor hältst, steigt der Maximalwert.

Wichtig: Die Methode heißt getFrame. Sie liefert beide Teilbilder des Sensors zusammengeführt und trägt die Temperaturen in Grad Celsius in eine Liste mit 768 Einträgen ein. Der Block try/except ValueError fängt gelegentliche Lesefehler ab und liest dann einfach neu.

Die Bildrate stellst du über refresh_rate ein. Die Bibliotheksdokumentation empfiehlt, mit der niedrigsten Rate zu beginnen und Takt und Rate langsam zu steigern. Meldet das Skript bei höheren Raten „too many retries“, senke den Wert für frequency. Eine höhere Rate verlangt einen schnelleren I2C-Takt. Den Takt des Pi-Busses stellst du über die Raspberry-Pi-Konfiguration ein, die genaue Zeile liest du in der aktuellen Raspberry-Pi-Dokumentation zur Datei config.txt nach.

Falschfarbenbild anzeigen und speichern

Für ein Bild nutzt du matplotlib. Installiere es in derselben Umgebung mit pip3 install matplotlib. Das Skript liest ein Bild, formt die 768 Werte in 24 Zeilen mit 32 Spalten um und speichert eine PNG-Datei:

import board
import busio
import adafruit_mlx90640
import numpy as np
import matplotlib.pyplot as plt

i2c = busio.I2C(board.SCL, board.SDA, frequency=800000)
mlx = adafruit_mlx90640.MLX90640(i2c)
mlx.refresh_rate = adafruit_mlx90640.RefreshRate.REFRESH_2_HZ

frame = [0] * 768
while True:
    try:
        mlx.getFrame(frame)
        break
    except ValueError:
        continue

daten = np.array(frame).reshape((24, 32))
plt.imshow(daten, cmap="inferno", interpolation="nearest")
plt.colorbar(label="Temperatur in °C")
plt.savefig("waermebild.png", dpi=150)

Mit interpolation="nearest" siehst du die echten Pixel als Blöcke, ohne geglättete Übergänge. savefig bestimmt das Format aus der Dateiendung. Auf einem Pi mit Desktop kannst du das Bild statt zu speichern auch mit plt.show() öffnen. Für eine Live-Ansicht liest du in einer Schleife immer wieder ein Bild und zeichnest es neu.

Grenzen gegenüber fertigen Wärmebildkameras

  • Auflösung: 768 Pixel zeigen Verteilungen, keine Konturen. Viele fertige Wärmebildkameras lösen deutlich feiner auf.
  • Genauigkeit: Melexis nennt je nach Variante und Umgebungstemperatur eine Genauigkeit von etwa ±1 °C bis ±2 °C. Das gilt nur unter ausgeglichenen Temperaturbedingungen und nur, wenn das Objekt das ganze Sichtfeld ausfüllt. Dazu kann langfristig eine Drift von bis zu ±3 °C um Raumtemperatur kommen. Bei kleinen Objekten, die nur wenige Pixel füllen, liegt die Anzeige deshalb möglicherweise daneben.
  • Emissionsgrad: Der Sensor empfängt die Strahlung, die ein Objekt aussendet, und die Strahlung, die es aus der Umgebung reflektiert. Für einen korrekten Wert braucht die Rechnung den Emissionsgrad des Materials und die Umgebungstemperatur. Das Datenblatt rechnet im Beispiel mit einem Emissionsgrad von 1. Bei glänzenden Flächen kann die angezeigte Temperatur daher von der echten abweichen.
  • Nur die Oberfläche: Der Sensor misst berührungslos, was von der Oberfläche kommt. Er sieht nicht durch Wände, Gehäuse oder Glas hindurch und sagt nichts über die Temperatur im Inneren eines Objekts.
  • Eigene Wärme: Der Sensor ist für Umgebungstemperaturen von -40 °C bis 85 °C ausgelegt. Halte ihn von heißen Quellen fern, auch wenn er Ziele bis 300 °C messen kann.

Behandle die Werte deshalb als Richtwerte. Für Vergleiche (links wärmer als rechts, heute wärmer als gestern) taugt der Aufbau gut. Für Gutachten oder Abnahmen nicht.

Projektideen

  • Heizkörper und Fenster: Richte die Kamera auf die Wand mit Heizkörper oder auf ein Fenster. Du siehst, wie gleichmäßig der Heizkörper warm wird und ob die Fensterränder deutlich kälter sind als die Mitte. Vergleiche Aufnahmen bei gleicher Entfernung.
  • Elektronik auf Überhitzung prüfen: Prüfe Netzteile, Spannungsregler oder deinen Pi im Betrieb. Ein Hotspot fällt im Bild sofort auf. Lass den Wert nur als Hinweis gelten, der echte Wert hängt vom Emissionsgrad ab.
  • Anwesenheit erkennen: Das Datenblatt nennt Anwesenheitserkennung, Personenlokalisierung und Bewegungserkennung als Einsatzgebiete. Zähle dafür die Pixel über einer Schwelle oder vergleiche ein Bild mit dem vorherigen. Steigt die Zahl der warmen Pixel, ist etwas Warmes im Bild.

Sicherheit

  • Miss nie an offenen Netzspannungsteilen. Öffne keine Geräte an der Steckdose, um hineinzusehen. Der Sensor misst zwar berührungslos, aber du hantierst dabei in Reichweite lebensgefährlicher Spannung.
  • Schalte den Pi beim Verkabeln aus und versorge den Sensor nur mit 3,3 V.
  • Halte den Sensor von Flammen, Heizplatten und anderen sehr heißen Quellen fern.
  • Lass Arbeiten an der Haus- und Gerätespannung von einer Elektrofachkraft machen.

Häufige Fragen zur Raspberry-Pi-Wärmebildkamera

Welche Auflösung hat eine Wärmebildkamera mit dem MLX90640?

Der MLX90640 liefert 32 × 24 Pixel, also 768 Temperaturwerte pro Bild. Das reicht, um Temperaturverteilung und Wärmequellen zu erkennen, nicht für Detailbilder. Es gibt zwei Sichtfeld-Varianten: 55° × 35° und 110° × 75°.

Wie schließe ich den MLX90640 an den Raspberry Pi an?

Der Sensor nutzt den I2C-Bus. Verbinde die Versorgung mit 3V3 (Pin 1), GND mit einem Masse-Pin (z. B. Pin 6), SDA mit GPIO2 (Pin 3) und SCL mit GPIO3 (Pin 5). Der Sensor braucht laut Hersteller 3,3 V, der Pi arbeitet mit 3,3-V-Signalpegeln.

Welche Software brauche ich für die Wärmebildkamera?

Du aktivierst I2C auf dem Raspberry Pi und installierst die Python-Bibliothek adafruit-circuitpython-mlx90640 in einer virtuellen Umgebung. Für ein Falschfarbenbild kommt matplotlib dazu. Die Schritte stehen im Artikel.

Wie prüfe ich, ob der Sensor am Raspberry Pi erkannt wird?

Aktiviere I2C und führe sudo i2cdetect -y 1 aus. Der Sensor meldet sich standardmäßig unter der Adresse 0x33, im Scan erscheint also 33. Ein Python-Skript mit der Bibliothek kann außerdem die Seriennummer des Sensors ausgeben.

Wie genau misst der MLX90640 die Temperatur?

Melexis nennt je nach Variante und Umgebungstemperatur eine Frame-Genauigkeit von etwa ±1 °C bis ±2 °C. Das gilt nur unter ausgeglichenen Temperaturbedingungen und wenn das Objekt das ganze Sichtfeld ausfüllt. Der Emissionsgrad der Oberfläche beeinflusst den Wert zusätzlich.

Dieser Beitrag wurde mit Unterstützung von KI erstellt. Mehr dazu

Mehr aus Anwendungen & Branchen