I have a question about load cell and pressure sensors. I have modified a brake pedal from AliExpress, the Sim Jack Pro pedals to be exact. The issue is when I press and hold the pedal the analog reading drops approximately between 5-10% before it settles. I have done everything I can to fix this issue, strengthen the pedal plate, change load cell, change from load cell to pressure sensor.
The original brake pedal used elastomers, I changed from those to die springs, from springs to now a compact air cylinder.
With the air cylinder I changed to a pressure sensor, this still hasn't relieved the issue. As a last effort I have now used a Arduino pro micro and a ads1115 to read the analog signal and convert it to a joystick. Although it's a bit better I still have a "relaxing" issue...
Main question is, do I have a misunderstanding of how pressure sensor and load cells work?
Do pressure sensors and load cells overshoot before they settle on an accurate reading?
The current rating of the pressure sensor states a 2%FS accuracy. More expensive ones state a .2%FS accuracy and a 0.03% linearity. Would a more expensive and accurate sensor fix this issue?
I'm stuck and really just want to figure this out. Dropping another 50$ on a higher accuracy sensor is worth it only if I know that's what's going to fix this.
Arduino code w/ filtering
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
#include <Joystick.h>
Adafruit_ADS1115 ads1115;
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID);
int Brake = 0;
const int numReadingsBrake = 1 ;
int readingsBrake[numReadingsBrake];
int readIndexBrake= 0;
int totalBrake = 0;
void setup()
/*
* GAIN_TWOTHIRDS (for an input range of +/- 6.144V)
* GAIN_ONE (for an input range of +/-4.096V)
* GAIN_TWO (for an input range of +/-2.048V)
* GAIN_FOUR (for an input range of +/-1.024V)
* GAIN_EIGHT (for an input range of +/-0.512V)
* GAIN_SIXTEEN (for an input range of +/-0.256V)
*/
{
ads1115.setGain(GAIN_TWOTHIRDS);
ads1115.begin();
Joystick.begin();
for (int thisReading = 0; thisReading < numReadingsBrake; thisReading++){
readingsBrake[thisReading]= 0;
}
}
void loop()
{
int32_t adc0;
adc0 = ads1115.readADC_SingleEnded(0);
Joystick.setXAxisRange(0, 32767);
Joystick.setXAxis(Brake);
totalBrake = totalBrake-readingsBrake[readIndexBrake];
readingsBrake[readIndexBrake] = adc0;
totalBrake = totalBrake+readingsBrake[readIndexBrake];
readIndexBrake = readIndexBrake+1;
if(readIndexBrake >= numReadingsBrake)
{
readIndexBrake =0;
}
Brake = totalBrake/numReadingsBrake;
}
Arduino Code no filtering
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
#include <Joystick.h>
Adafruit_ADS1115 ads1115;
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID);
int Brake = 0;
void setup()
/*
GAIN_TWOTHIRDS (for an input range of +/- 6.144V)
GAIN_ONE (for an input range of +/-4.096V)
GAIN_TWO (for an input range of +/-2.048V)
GAIN_FOUR (for an input range of +/-1.024V)
GAIN_EIGHT (for an input range of +/-0.512V)
GAIN_SIXTEEN (for an input range of +/-0.256V)
*/
{
ads1115.setGain(GAIN_TWOTHIRDS);
ads1115.begin();
Joystick.begin();
}
void loop()
{
int32_t adc0;
adc0 = ads1115.readADC_SingleEnded(0);
Joystick.setXAxisRange(0, 32767);
Joystick.setXAxis(Brake);
Brake = adc0;
}