Go Down

Topic: MLX90621 - Arduino Uno (Read 147 times) previous topic - next topic

JoE1205

Hi,

ich bekomm einen MLX90621 Temperatur Array nicht zum laufen.

Quellbiblio: https://github.com/longjos/MLX90621_Arduino_Camera

Code:
Quote
/*
* This project creates a small thermal camera using the MELEXIS MLX90621
*
* Adapted by Josh Long (https://github.com/longjos) Oct 2015
* Based on a https://github.com/robinvanemden/MLX90621_Arduino_Processing
*
* Original work by:
* 2013 by Felix Bonowski
* Based on a forum post by maxbot: http://forum.arduino.cc/index.php/topic,126244.msg949212.html#msg949212
* This code is in the public domain.
*/
#include <SPI.h>
#include <Arduino.h>
#include <Wire.h>
#include "MLX90621.h"
MLX90621 sensor; // create an instance of the Sensor class

void setup(){
  sensor.initialise (4);
  Serial.begin(9600);
 }
void loop(){
  sensor.measure(true); //get new readings from the sensor
  Serial.print(sensor.getAmbient());
  for(int y=0;y<4;y++){ //go through all the rows

    for(int x=0;x<16;x++){ //go through all the columns
      int16_t valueAtXY= sensor.irData[y+x*4]; // extract the temperature at position x/y
      Serial.print(sensor.getTemperature(y+x*4));
       Serial.print("  ");
    }
  }
 delay(2000);
}
SCL und SDA sind mit 10k gegen VCC abgeblock.
VCC und GND haben einen 100uF Kondensator zwischengeschaltet.
Eine Diode reduziert 3.3V auf ca. 2.6V für den Sensor.

Ich bekomme immer nur Nan als Werte ausgeworfen. Ist der Sensor hinüber oder hab ich was kritisches übersehen?

gregorss

... Ist der Sensor hinüber oder hab ich was kritisches übersehen?
Der Sketch, den Du zeigst, ist ja mal nicht so irre kompliziert. Ich gehe daher davon aus, dass es an der Schaltung oder dem Bauteil liegt. Mit was für einem Mikrocontroller spielst Du da eigentlich?

Deinen Sketch hast Du übrigens versehentlich als Zitat eingefügt.

Gruß

Gregor
DU MUSST DEIN ÄNDERN LEBEN!

nix_mehr_frei

Hm, ich habe nur mal was mit dem MLX90614 gemacht. Der lief absolut problemlos.
Ich glaube, bei dir liegt der Hund in der "sehr hemdsärmligen" I2C Anbindung begraben.
Du betreibst sicherlich den Uno mit 5V und den Sensor mit irgendwas um die 2,6V.
Das kann so nicht funktionieren, denn die I2C Eingänge sehen sicherlich nur Low Pegel. Wenn das was werden soll, dann würde ich 1. die 2,6V mit einem richtigen Spannungsregler erzeugen. Wenn du nichts mit 2,6V Festspannung findest, dann meinetwegen auch mit dem LM317, einem einstellbaren Spannungsregler. Beachte aber dessen Drop, ich glaube, dem sind 2,4V, wenn man ihm vorne 5V vorsetzt, noch zu wenig.
Es gibt aber einen ganzen Haufen sollcher 3-Beiner. Die parametrische Suche eines Distributors, wie TME, Digikey oder Mouser bringen da Klarheit.
Man kann auch eine gelbe oder grüne LED als Spannungsstabilisator, ähnlich einer Zenerdiode missbrauchen. Da sollte die Flusspannung auch in dem Bereich sich bewegen. 20 mA über die LED, da fallen die paar mA für den MLX mit ab. Aber vorher nachmessen, ob die Spannung so passt.
Und verpasse dem Sensor auch noch mindestens einen 100nF Kerko. Wenn du besonders fürsorglich bist auch noch einen 10µF Elko zwischen Masse und Betriebsspannung.
Zweitens sollte der Arduino dann nur mit 3,3V betrieben werden, damit er überhaupt die Chance hat, auch ein High auf dem Bus zu erkennen. Vermutlich ist ein 3,3V Micro oder Nano da besser geeignet, von der Hardware her. Oder du brauchst halt bidirektionale Levelshifter, die in beiden Richtungen den Pegel anpassen.
Woher hast du 10K PullUp für den I2C Bus?
Das finde ich etwas hoch. Selbst bei 5V Busteilnehmern wird 4,7K angegeben, gelegentlich muß man auch schon mal auf 3,3 oder 2,2K runtergehen, bis die Kommunikation sauber läuft.
Bei halber Spannung und doppeltem Widerstand fließt nur 1/4 Strom. Das gibt mir zu denken.
Wie gesagt, ich habe das Datenblatt nur überflogen und nichts diesbezügliches gesehen. Das ist lediglich mein Bauchgefühl aus Praxiserfahrung heraus  ;)
Das Fiese ist ja, wenn die Hardware nicht passt, kannst du an der Software bis zum Sanktnimmerleinstag herumdoktern.
rot ist blau und Plus ist Minus

Tommy56

SCL und SDA sind Open Drain Ausgänge, können also durchaus die 5V I2C-Leitungen treiben. Wobei ich auch eher in Richtung 4k7 tendieren würde.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

JoE1205

Also 4.7k hat auch nicht geholfen.
Ich kann morgen auf einen pro mini zurückgreifen um mal nen 3.3v MC auszuprobieren. Einen level shifter hab ich momentan leider nicht. Vielen dank schon mal an alle für die anregungen:)

postmaster-ino

Hi

Die Lösung ist NICHT, irgend einen µC einzusetzen, Der 'irgendwie' trotzdem funktioniert.
Beim ersten Husten bist Du wieder 'am Arsch' und kommst angerannt.
Das Problem lässt sich ERST lösen, wenn D die Problematik erkennst UND verstehst - nur SO kannst Du Deinen Code debuggen.
Was macht dieser 4K7?
Warum hat Dieser NICHT geholfen? (möchte WETTEN, daß sich Das erklären lässt)

Es geht hier NICHT darum, einen Arduno irgendwie s lange zu Benutzen, bis irgend was irgendwie funktioniert ... typisches C&P Problem.

MfG

JoE1205

Ich möchte den Pro Mini sowieso verwenden. Der Uno wurde nur eingesetzt, weil ich gerade keinen Pro Mini zur Hand hatte.

Jedenfalls liegts an der Problematik, die nix_mehr_frei erläutert hat. Der Uno kann kein 2,6 V I²C ohne Level Shifter. Steht auch auf der Arduino seite: HIER

Mit dem Pro Mini läufts jetzt ohne Probleme! Vielen Dank für die Hilfe :))

Go Up