Forum: Mikrocontroller und Digitale Elektronik MLX90640 IR-Array 32x24 pixel


von Marc (Gast)


Angehängte Dateien:

Lesenswert?

Im Moment versuche ich gerade den MLX90640 in Betrieb zu nehmen.
Das Datenblatt ist leider sehr unübersichtlich.
Hat sich jemand schon mal mit dem Sensor befasst?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Es gab einen Artikel von Klaus Sander im Funkamateur:
"Wärmebildsensor MLX90621 – präzise und preiswert" FA 11/2016, S. 1046
Der MLX90621 hat nur 16x4 IR Sensoren.
Bei Sparkfun gibt es ein Arduino-Projekt mit dem MLX90640.

von STK500-Besitzer (Gast)


Lesenswert?

Marc schrieb:
> Das Datenblatt ist leider sehr unübersichtlich.

Finde ich jetzt nicht so.
Womit hast du denn Probleme?
In Kapitel 10.5 ist sogar der Messablauf beschrieben.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marc schrieb:
> Im Moment versuche ich gerade den MLX90640 in Betrieb zu nehmen.
Und woran klemmt es?

> Das Datenblatt ist leider sehr unübersichtlich.
Der Baustein und seine Funktion ist eben sehr komplex. Du wirst während 
der Inbetriebnahme einiges lernen.

> Hat sich jemand schon mal mit dem Sensor befasst?
Mit Sicherheit. Hast du schon mal andere (ähnlich komplexe) Sensoren 
in Betrieb genommen?

: Bearbeitet durch Moderator
von Marc (Gast)


Lesenswert?

>Mit Sicherheit. Hast du schon mal andere (ähnlich komplexe) Sensoren
>in Betrieb genommen?

Ja, ich habe in den letzten paar Jahrzehnten schon einige Sensoren 
selbst entwickelt.

Mittlerweile wir der Sensor für den M5Stack verkauft:
https://de.aliexpress.com/item/M5Stack-Offizielle-Neue-Thermische-Kamera-MLX90640-mit-HAIN-I2C-Kompatibel-M5GO-FEUER-ESP32-Kit-Mini-Entwicklung/32918177644.html

Allerdings hat die vorgeschlagene Software bei mir nicht funktioniert. 
Es wurden keine Daten vom Sensor übertragen und ich habe ein paar 
Stunden gebraucht, den Fehler im Treiber zu finden. Jetzt werden 
zumindest grundsätzlich Daten übertragen, aber ein Bild habe ich immer 
noch nicht.


Hier habe ich den Sensor am billigsten gefunden:
https://as-electronic.net/

Auf GitHub gibt es eine Treiberlibrary von Melexis:
https://github.com/melexis/mlx90640-library

von Johannes S. (Gast)


Lesenswert?

hattest du das nicht auch mit dem Nucleo F411 probiert? Ok, kann 
natürlich mehrere Marc hier geben.
Es gibt noch eine Lib für mbed, für ein Nucleo kompiliert die schonmal 
fehlerfrei. Habe aber diesen Sensor nicht um das testen zu können.
Dein Gituhb Link sieht dem mbed Treiber sehr sehr ähnlich.

von Marc (Gast)


Lesenswert?

Jetzt habe ich noch mal gesucht und einen anderen Treiber gefunden:
https://github.com/hkoffer/M5Stack-MLX90640-Thermal-Camera/blob/master/MLX90640_I2C_Driver.cpp

Der hat genau den Fehler behoben, den der M5Stack-Treiber hat

[/c] if (Wire.endTransmission(false) != 0) //Do not release bus[c]

Jetzt habe ich auch ein Bild auf meinem ESP32 Aufbau mit 2.4'' ILI9341.

Nur das Rauschen erscheint mir etwas hoch.

von Marc (Gast)


Lesenswert?

>hattest du das nicht auch mit dem Nucleo F411 probiert? Ok, kann
>natürlich mehrere Marc hier geben.

Ich kenne den Thread mit dem NucleoF411.
Aber ich finden den ESP32 praktischer. Mal sehen, ob ich das Wäremebild 
per Webserver darstellen kann ..

von Marc (Gast)


Lesenswert?

Ich habe zwei Sensoren: einer von Sparkfun auf einem Breakout-Board und 
einen zweiten Sensor von AS-Elektronics ohne alles.

Mit dem Sensor von Sparkfun konnte ich ein Bild erzeugen, mit dem 
anderen scheinen keine vernünftigen Daten zu kommen.

hat jemand eine Idee, woran es liegen könnte?

Laut Datenblatt gibt es ab 0x8000 einige Register die man ansprechen 
kann.

Hier habe ich zwei Dumps erstellt:

// Sparkfun sensor
// geht
Device found @ 0x33
0: 9
1: AB
2: 499B
3: 0
4: 2061
5: 5
6: 320
7: 3E0
8: 1A26
9: A228
10: 185
11: 499
12: 0
13: 1901
14: 0
15: 0

// AS-Electronic MLX90640
// geht nicht
Device found @ 0x33
0: 0
1: A5
2: 799F
3: 0
4: 2061
5: 4
6: 320
7: 3E0
8: 713
9: 2C48
10: 1186
11: 499
12: 0
13: FFFF
14: 0
15: 0


Für den Dump verwende ich folgenden Code:
1
    int len = 16;
2
    uint16_t adr = 0x8000;
3
    
4
    MLX90640_I2CRead(0x33, adr, adr + len, Buffer);
5
    for (int n = 0; n < len; n++)
6
    {
7
      Serial.print(n); Serial.print(": "); Serial.println(Buffer[n], HEX);
8
    }

von Thomas Malwinter (Gast)


Lesenswert?

Hier gibt es auch ein Problem mit dem Auslesen:

Beitrag "Wer nutzt das Nucleo-64 und kann mir"

Allerding liegt das wohl an einer I2C-Lib. Der wo helfen könnte, wollte 
anscheinend nicht...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.