SCP1000 (Besoin d'aide)

Bonjour et Bonne fête à tous,

Je viens d’essayer de mettre en fonction un capteur de pression SCP1000.
Je suis parti de l’exemple suivant:
http://arduino.cc/en/Tutorial/BarometricPressureSensor

Mais je ne reçois pas les bonnes valeurs
Je reçois 42°C et 3580 hPa au lieu de 20°C et 1000 hPa

Une idée ?

Merci
Olivier

Bonjour,

As tu appliqué les coeffs de conversion comme c'est indiqué dans la datasheet : http://www.sparkfun.com/datasheets/Components/SCP1000-D01.pdf ? Voir chapitre 2.2.3 ?

A+

Bonjour Bidouille,

Oui c’est fait:
Pour la temp:

    // convert the temperature to celsius and display it:
    float realTemp = (float)tempData / 20.0;

et pour la pression

    //combine the two parts into one 19-bit number:
    long pressure = ((pressure_data_high << 16) | pressure_data_low)/4;

Olivier

C'est peut-être un hors-sujet mais :

float realTemp = (float)tempData / 20.0;

C'est quoi ce (float) ?? Ne faut-il pas plutôt float(tempData) ?

Bonjour,

Je pense que c'est pour prendre le float du résultat de la division et non, le float de tempData divisé par 20

Sinon, toujours pas d'idée pour mon problème ?

Olivier

Pour le float du résultat de la division, ce serait plutôt :

float realTemp = float(tempData / 20.0);

ce qui ne sera pas pareille que :

float realTemp = float(tempData) / 20.0;

la première risque de te donner une résultat éronné, car tu divises un int par un float et tu convertis le résultat final en float, tu risques de perdre quelques choses en route. Il vaut mieux convertir le int en float et faire la division ensuite (cas 2)

float()

La synthaxe (float) tempData est correcte, car dans l'exemple, TempData est déclaré en int.

(float) tempData permet de récupérer la valeur au format float. Un exemple ici, dans la rubrique 'exemple code'

Dans la syntaxe de l'exemple, c'est le résultat ou le x qui est convertit en float ?

D'après l'exemple et ce que j'en conclus, c'est que : (float)x fait la même chose que float(x). Ou alors y'a une subtilité qui m'échappe ...

Ce pourrait également être tout ce qui se trouve après le signe “=”, ce qui correspondrait au résultat :-?

Bonjour,

La conversion se fait bien. J'ai à peu près 800 comme valeur dans tempData une fois divisé j'ai bien mes 40°C.

J'ai vérifié mes câblages: DRDY:Pin 6 CSB: Pin 7 MISO: Pin12 MOSI: Pin 11 SCK: Pin 13 3.3V: J'ai pris le 3.3V de l'Arduino GND: GND

J'ai aussi mis à la masse PD et TRIG

J'ai toujours de degrés et des Pascal en plus....

Olivier

Bonjour et bonne année à tous !

J'ai toujours le probleme avec mon capteur .... j'avance pas. Pour mes derniers essais, j'ai suivi la doc chez sparkfun pour les signaux en 3,3 http://www.sparkfun.com/tutorials/65

C'est mieux mais pas encore ça, j'ai environ 20° et la pression 2000hPa....

Une question, est ce que j'ai pu griller le capteur en le branchant directement sur l'Arduino ?

Sinon, une autre idée ?

Encore merci, Je ne sais plus dans quel direction chercher....

Olivier

Tu l'avais branché sur le 5V de l'Arduino ?

Bonjour Jean-Francois,

Voici mes branchements:

Les pins: DRDY:Pin 6 en direct sur l'Arduino CSB: Pin 7 en direct sur l'Arduino MISO: Pin12 en direct sur l'Arduino MOSI: Pin 11 en direct sur l'Arduino SCK: Pin 13 en direct sur l'Arduino 3.3V: J'ai pris le 3.3V de l'Arduino GND: GND

L'alimentation du capteur sur le 3,3V de l'Arduino.

Olivier

Normalement il ne devrait pas avoir grillé.

Je pense plus à un problème de conversion :

[edit]bin '00 0010 0010 1110' [ch8594] dec '558' [ch8594] conversion to [°C]: 558/20 = 27,9 °C [/edit]

Est ce que tu converti bien ta valeur en décimal avant de l'utiliser ?

Normalement c'est fait ici:

    //Read the temperature data
    int tempData = readRegister(0x21, 2);

    // convert the temperature to celsius and display it:
    float realTemp = (float)tempData / 20.0;
    Serial.print("Temp[C]=");
    Serial.print(realTemp);

J'ai vérifié à la calculatrice la valeur de tempData et du registre.

Olivier