LSM9DSO sensor an Arduino

Hi habe den LSM9DSO sensor von adafruit und will diesen an einem Arduino betreiben, sodass ich Temperatur, Gyroscope, Accelerometer und Magnetometerwerte auslesen kann.

Habe alles soweit via I2C angeschlossen und die verkabelung ist auch richtig.
Mein Problem ist folgender: Benutze folgenden Testcode von Adafruit und bekomme bei einem Arduino Fio 70 grad celsius aus und bei einem Anderen Arduino Fio(gleiches Modell) bekomme ich 24 grad.
Kann das sein, dass der Arduino(Microcontroller intern in Fahrenheit rechnet- und wenn ja kann man das iwie einstellen vom Microcontroller aus? Oder was könnte das Problem sein?

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM9DS0.h>

/* This driver uses the Adafruit unified sensor library (Adafruit_Sensor),
   which provides a common 'type' for sensor data and some helper functions.
   
   To use this driver you will also need to download the Adafruit_Sensor
   library and include it in your libraries folder.

   You should also assign a unique ID to this sensor for use with
   the Adafruit Sensor API so that you can identify this particular
   sensor in any data logs, etc.  To assign a unique ID, simply
   provide an appropriate value in the constructor below (12345
   is used by default in this example).
   
   Connections (For default I2C)
   ===========
   Connect SCL to analog 5
   Connect SDA to analog 4
   Connect VDD to 5V DC
   Connect GROUND to common ground

   History
   =======
   2014/JULY/25  - First version (KTOWN)
*/
   
/* Assign a unique base ID for this sensor */   
Adafruit_LSM9DS0 lsm = Adafruit_LSM9DS0(1000);  // Use I2C, ID #1000


/* Or, use Hardware SPI:
  SCK -> SPI CLK
  SDA -> SPI MOSI
  G_SDO + XM_SDO -> tied together to SPI MISO
  then select any two pins for the two CS lines:
*/

#define LSM9DS0_XM_CS 10
#define LSM9DS0_GYRO_CS 9
//Adafruit_LSM9DS0 lsm = Adafruit_LSM9DS0(LSM9DS0_XM_CS, LSM9DS0_GYRO_CS, 1000);

/* Or, use Software SPI:
  G_SDO + XM_SDO -> tied together to the MISO pin!
  then select any pins for the SPI lines, and the two CS pins above
*/

#define LSM9DS0_SCLK 13
#define LSM9DS0_MISO 12
#define LSM9DS0_MOSI 11

//Adafruit_LSM9DS0 lsm = Adafruit_LSM9DS0(LSM9DS0_SCLK, LSM9DS0_MISO, LSM9DS0_MOSI, LSM9DS0_XM_CS, LSM9DS0_GYRO_CS, 1000);


/**************************************************************************/
/*
    Displays some basic information on this sensor from the unified
    sensor API sensor_t type (see Adafruit_Sensor for more information)
*/
/**************************************************************************/
void displaySensorDetails(void)
{
  sensor_t accel, mag, gyro, temp;
  
  lsm.getSensor(&accel, &mag, &gyro, &temp);
  
  Serial.println(F("------------------------------------"));
  Serial.print  (F("Sensor:       ")); Serial.println(accel.name);
  Serial.print  (F("Driver Ver:   ")); Serial.println(accel.version);
  Serial.print  (F("Unique ID:    ")); Serial.println(accel.sensor_id);
  Serial.print  (F("Max Value:    ")); Serial.print(accel.max_value); Serial.println(F(" m/s^2"));
  Serial.print  (F("Min Value:    ")); Serial.print(accel.min_value); Serial.println(F(" m/s^2"));
  Serial.print  (F("Resolution:   ")); Serial.print(accel.resolution); Serial.println(F(" m/s^2"));  
  Serial.println(F("------------------------------------"));
  Serial.println(F(""));

  Serial.println(F("------------------------------------"));
  Serial.print  (F("Sensor:       ")); Serial.println(mag.name);
  Serial.print  (F("Driver Ver:   ")); Serial.println(mag.version);
  Serial.print  (F("Unique ID:    ")); Serial.println(mag.sensor_id);
  Serial.print  (F("Max Value:    ")); Serial.print(mag.max_value); Serial.println(F(" uT"));
  Serial.print  (F("Min Value:    ")); Serial.print(mag.min_value); Serial.println(F(" uT"));
  Serial.print  (F("Resolution:   ")); Serial.print(mag.resolution); Serial.println(F(" uT"));  
  Serial.println(F("------------------------------------"));
  Serial.println(F(""));

  Serial.println(F("------------------------------------"));
  Serial.print  (F("Sensor:       ")); Serial.println(gyro.name);
  Serial.print  (F("Driver Ver:   ")); Serial.println(gyro.version);
  Serial.print  (F("Unique ID:    ")); Serial.println(gyro.sensor_id);
  Serial.print  (F("Max Value:    ")); Serial.print(gyro.max_value); Serial.println(F(" rad/s"));
  Serial.print  (F("Min Value:    ")); Serial.print(gyro.min_value); Serial.println(F(" rad/s"));
  Serial.print  (F("Resolution:   ")); Serial.print(gyro.resolution); Serial.println(F(" rad/s"));  
  Serial.println(F("------------------------------------"));
  Serial.println(F(""));

  Serial.println(F("------------------------------------"));
  Serial.print  (F("Sensor:       ")); Serial.println(temp.name);
  Serial.print  (F("Driver Ver:   ")); Serial.println(temp.version);
  Serial.print  (F("Unique ID:    ")); Serial.println(temp.sensor_id);
  Serial.print  (F("Max Value:    ")); Serial.print(temp.max_value); Serial.println(F(" C"));
  Serial.print  (F("Min Value:    ")); Serial.print(temp.min_value); Serial.println(F(" C"));
  Serial.print  (F("Resolution:   ")); Serial.print(temp.resolution); Serial.println(F(" C"));  
  Serial.println(F("------------------------------------"));
  Serial.println(F(""));
  
  delay(500);
}

/**************************************************************************/
/*
    Configures the gain and integration time for the TSL2561
*/
/**************************************************************************/
void configureSensor(void)
{
  // 1.) Set the accelerometer range
  lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_2G);
  //lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_4G);
  //lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_6G);
  //lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_8G);
  //lsm.setupAccel(lsm.LSM9DS0_ACCELRANGE_16G);
  
  // 2.) Set the magnetometer sensitivity
  lsm.setupMag(lsm.LSM9DS0_MAGGAIN_2GAUSS);
  //lsm.setupMag(lsm.LSM9DS0_MAGGAIN_4GAUSS);
  //lsm.setupMag(lsm.LSM9DS0_MAGGAIN_8GAUSS);
  //lsm.setupMag(lsm.LSM9DS0_MAGGAIN_12GAUSS);

  // 3.) Setup the gyroscope
  lsm.setupGyro(lsm.LSM9DS0_GYROSCALE_245DPS);
  //lsm.setupGyro(lsm.LSM9DS0_GYROSCALE_500DPS);
  //lsm.setupGyro(lsm.LSM9DS0_GYROSCALE_2000DPS);
}

/**************************************************************************/
/*
    Arduino setup function (automatically called at startup)
*/
/**************************************************************************/
void setup(void) 
{
  while (!Serial);  // wait for flora/leonardo
  
  Serial.begin(9600);
  Serial.println(F("LSM9DS0 9DOF Sensor Test")); Serial.println("");
  
  /* Initialise the sensor */
  if(!lsm.begin())
  {
    /* There was a problem detecting the LSM9DS0 ... check your connections */
    Serial.print(F("Ooops, no LSM9DS0 detected ... Check your wiring or I2C ADDR!"));
    while(1);
  }
  Serial.println(F("Found LSM9DS0 9DOF"));
  
  /* Display some basic information on this sensor */
  displaySensorDetails();
  
  /* Setup the sensor gain and integration time */
  configureSensor();
  
  /* We're ready to go! */
  Serial.println("");
}

/**************************************************************************/
/*
    Arduino loop function, called once 'setup' is complete (your own code
    should go here)
*/
/**************************************************************************/
void loop(void) 
{  
  /* Get a new sensor event */ 
  sensors_event_t accel, mag, gyro, temp;

  lsm.getEvent(&accel, &mag, &gyro, &temp); 

  // print out accelleration data
  Serial.print("Accel X: "); Serial.print(accel.acceleration.x); Serial.print(" ");
  Serial.print("  \tY: "); Serial.print(accel.acceleration.y);       Serial.print(" ");
  Serial.print("  \tZ: "); Serial.print(accel.acceleration.z);     Serial.println("  \tm/s^2");

  // print out magnetometer data
  Serial.print("Magn. X: "); Serial.print(mag.magnetic.x); Serial.print(" ");
  Serial.print("  \tY: "); Serial.print(mag.magnetic.y);       Serial.print(" ");
  Serial.print("  \tZ: "); Serial.print(mag.magnetic.z);     Serial.println("  \tgauss");
  
  // print out gyroscopic data
  Serial.print("Gyro  X: "); Serial.print(gyro.gyro.x); Serial.print(" ");
  Serial.print("  \tY: "); Serial.print(gyro.gyro.y);       Serial.print(" ");
  Serial.print("  \tZ: "); Serial.print(gyro.gyro.z);     Serial.println("  \tdps");

  // print out temperature data
  Serial.print("Temp: "); Serial.print(temp.temperature); Serial.println(" *C");

  Serial.println("**********************\n");

  delay(5000);
}

Nein, Arduino rechent intern weder in °C noch in °F. Arduino rechent so wie Du es im Sketch / Bibliotheken schreibst.
Der gleiche Sketch und der gleiche Sensor an 2 verschiedenen Arduinos muß das gleiche Ergebnis bringen.

Hast Du mal den Sensor angegriffen und geschaut ob er heiß wird?

Grüße Uwe

HI,

ja also genau der gleiche sensor a zwei verschiedenen Arduino fios ausprobiert und wie gesagt beim einen 24 grad bei dem anderen temp ab 70.

Ja hab den sensor angegriffen, doch er wird nicht heiß auch bei dem 70 grad ergebnissen.

Ich weiß echt nicht mehr weiter :(.

Mir fällt auch nichts ein was diesen Unterschied erklähren würde.

Uwe

Danke dir trotzdem sehr. Ich hab sowas noch nie geahbt und kann mir den Fehler auch nicht erklären.
Den bootloader neu zu installieren würde auch nicht helfen?

Weil der sensor kann es nicht sein.
Jemand noch eine Idee?

Nein, der Bootlaoder hat keine Einfluß auf den Sketch. Er startet nur vor dem sketch um das Uploaden zu ermöglichen und startet dann den Sketch. Also bringt es nichts den Bootloader neu zu installieren. Einige Fuse könnten verschieden gsetzt sein aber auch das erklährt mir nicht den Unterschied.

Die anderen Paramenter des Sensors werden richtig angezeigt oder sind hier auch Unterschiede?

Grüße Uwe

Hi uwe,

also die anderen PArameter also die x,y und z-Achsenparameter da fiel es mir auf anheib nicht auf, dazu müsste ich genauere Tests machen, um dies festzustellen.
Oder hättest du eine Idee wie man auf anhieb das festellen kann?

Falls es der Fall wäre, dass auch die anderen Parameter unterschiedlich sind ?- Wäre dies ein Hinweis auf einen bestimmten Fehler?

Danke sehr uwe

Falls es der Fall wäre, dass auch die anderen Parameter unterschiedlich sind ?- Wäre dies ein Hinweis auf einen bestimmten Fehler?

Nein, ich weiß noch nichts, Ich sammle mal erst Fakten. Außerdem muß ich nicht alles wissen. Die anderen User sind ja auch noch da.

Grüeß Uwe

Welche Arduinos verwendest du?
Bei welchem tuts, bei welchem versagts?

Vielleicht fehlen Pullups...
Vielleicht falsche Versorgungsspannung...
Vielleicht an den falschen Pins angeschlossen...

Er verwendet 2 Arduino FIO

Hi also pullups sind schon auf dem Adafruit Board vom LSM9DSO.

Habe die Library erneut direkt bei Adafruit runtergeladen und das testprogramm erneut draufgespielt, jetzt scheint es zu gehen bekomme jetzt immerhin temperatur so um die 28 grad raus.
Ist aber recht ungenau, isst ihr vllt. wie man dies justieren kann es sind keine 28 grad.
Weiß jemand vllt wie das gehen könnte oder woran es liegt?

Wichtig hatte ich vergessem, also ich habe 2 testprogramme sensorapi und lsm9doftest da bekomme ich bei dem sensorapi um die 28 grad und bei dem anderen 60 grad.

teste ich den anderen LSM9DOF mit ddem anderen arduino fio bekjomme ich mit dem gleichen Programm 22.75 grad also eher realistische werte. woran kann das liegen?
Danke sehr

HI so habe weiteres tests gemacht und habe festegestellt, dass das nicht an den Arduino liegt, sondern an den Adafruit LSM9DSO baord. Habe vier exemplare davon und beim genauen Schauen habe ich gemerkt, dass die boards drei verschiedene Chipausführungen haben nämlich folgende:
950 2450 SPMCJ
950 2450 SPCMI

950 2450 SPCMK

kann es daran liegen, dass sie intern anders rechnen?

Kann mir jemand einen Tip geben, hab alles gesucht , irgednwie komt ich nicht mehr weiter.

hi habe erneut getestet doch iwie kein erfolg, habe im adafruit forum gesucht und die können mir auch nicht weiterhelfen.

NAch 2 wochen recherche kein eroflg, wisst ihr vllt. weiter?

hat dieses Problem niemand?