Bonjour à tous,
Je travaille sur un projet dans lequel je dois réaliser une mesure du temps de cycle d'un piston. Ce tems correspond au delta t entre l'impultion électrique de commande (échelon 24 VDC) et l'arrivée du piston en butée mécanique.
Je mesure l'instant t d'arrivée en butée du piston à l'aide d'un accéléromètre captant les vibrations dûent au choc en butée.
J'ai dans un premier temps réalisé l'acquisition à l'aide d'un accéléromètre industriel KISTLER 8286A30 (cf. datasheet jointe) et d'un oscilloscope, ma mesure du temps de cycle vaut 10 ms.
Dans un second temps, j'ai passé la manipulation sur Arduino Uno et utilisé un accéléromètre ADXL345 (cf. datasheet jointe). Ma mesure du temps de cycle vaut 50 ms.
Voici une partie du code que j'utilise pour réaliser ma mesure :
#include <SparkFun_ADXL345.h> // SparkFun ADXL345 Library
ADXL345 adxl = ADXL345(); // USE FOR I2C COMMUNICATION
/******************** SETUP ********************/
/* Configure ADXL345 Settings */
void setup(){
Serial.begin(115200); // Start the serial terminal
pinMode(bouton, INPUT);
adxl.powerOn(); // Power on the ADXL345
adxl.set_bw(1111); // Banndwidth settings // Bandwidth = 1600 Hz
adxl.setRangeSetting(16); // Give the range settings
// Accepted values are 2g, 4g, 8g or 16g
adxl.setTapDetectionOnXYZ(0, 0, 1); // Detect taps in the directions turned ON "adxl.setTapDetectionOnX(X, Y, Z);" (1 == ON, 0 == OFF)
// Set values for what is considered a TAP (0-255)
adxl.setTapThreshold(16); // 62.5 mg per increment - Threshold
adxl.setTapDuration(3); // 625 μs per increment - Contains an unsigned Time Value representing the Max Time that an Event must be Above the THRESH_TAP Threshold to qualify as a Tap Event
attachInterrupt(2, Appel_Interruption, RISING);
}
/****************** MAIN CODE ******************/
/* Accelerometer Readings and Interrupt */
void loop(){
ADXL_ISR()
}
/***************INTERRUPTION********************/
void Appel_Interruption() {
unsigned long top;
top = millis();
}
/********************* ISR *********************/
/* Look for Interrupts and Triggered Action */
void ADXL_ISR() {
volatile long Cycle_time = 0;
unsigned long Shock;
byte interrupts = adxl.getInterruptSource();
// Tap Detection
if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP)){
Serial.println("*** SHOCK ***");
Shock = millis();
Cycle_time=Shock-top;
}
}
J'associe à "top" l'instant t où l'échelon de 24VDC est envoyé et à "Shock" l'instant t où le choc est capté par le capteur. Je réalise ensuite "Cycle_time = Shock-top".
Sachant qu'en réalité, la bonne valeur du temps de cycle vaut 10 ms, je ne comprend pas pourquoi je mesure 50 ms avec Arduino.
Pouvez-vous m'aider ?
Merci
KISTLER 8286A30.pdf (74.2 KB)
ADXL345.pdf (801 KB)