Bonjour,
Je suis sur un projet d'enregistreur accélération sur un appareil de mesure. j'avais déja fait un topic sur le choix des composants et comment gérer une alimentation autonome.
J'ai donc toutes mes pieces, j'ai meme rajouté un capteur de pression atmosphérique et c'est avec lui que j'ai un soucis quand je cherche a écrire le code.
Je me retrouve avec un accéléromètre, et un capteur de pression dont je veux récupérer les données.
Pour l'accéléromètre, je veux le meilleur échantillonnage possible, stocker les vlauers dans une variable, et toutes les X échantillons (correspondant a une 10aine de seconde par exemple) prendre le max, effacer la variable, et recommencer.
C'est dans le but de limiter le nombre de lignes qui seront écrites sur la carte SD, et avoir quelque chose de plus lisible.
Le capteur de pression quant a lui demande un certain temps (au moins 2 secondes) pour avoir stabiliser la mesure.
voici les codes pour chacun des capteurs :
Accéléromètre (pour le moment je me limite au Z)
#include <Wire.h>
#include <LSM303.h>
float maxi=0;
int counter=0;
LSM303 compass;
char report[80];
void setup()
{
Serial.begin(9600);
Wire.begin();
compass.init();
compass.enableDefault();
}
void loop()
{
compass.read();
if (compass.a.z*0.122/1000.0>maxi)
{ maxi=compass.a.z*0.122/1000.0;}
counter++;
if (counter==200)
{Serial.println(maxi);
counter=0;
maxi=0;
}
}
Capteur de pression atmosphérique
(code de l'exemple de la bibliothèque que j'ai allégé)
#include <SFE_BMP180.h>
#include <Wire.h>
// You will need to create an SFE_BMP180 object, here called "pressure":
SFE_BMP180 pressure;
void setup()
{
Serial.begin(9600);
Serial.println("REBOOT");
// Initialize the sensor (it is important to get calibration values stored on the device).
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.
Serial.println("BMP180 init fail\n\n");
while(1); // Pause forever.
}
}
void loop()
{
char status;
double T,P,p0,a;
// You must first get a temperature measurement to perform a pressure reading.
// Start a temperature measurement:
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable T.
// Function returns 1 if successful, 0 if failure.
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
Serial.println("temperature: ");
Serial.print(T,2);
Serial.print(" deg C, ");
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature measurement (T).
// (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.
status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
Serial.println("absolute pressure: ");
Serial.print(P,2);
Serial.print(" mb, ");
// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
// Result: p0 = sea-level compensated pressure in mb
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
delay(2000); // Pause for 2 seconds.
}
Je ne comprends pas trop la variable status et les valeurs qu'elle peut prendre, mais si je fais sauter les lignes "delay(status)" ça fout le bazar dans les résultats... donc y a réellement besoin d'un certain temps tout au long du process pour que les mesures soient correctes.
Comment concilier les 2 ?
J'ai bien penser a un "while" basé sur "counter" pour remplacer delay de 2000 mais je ne sais pas trop où le mettre dans le code du capteur de pression...