Capteur de force linéaire

Bonjour,
Je voulais savoir si quelqu’un avait déjà utilisé un capteur de force linéaire et pouvait m’aider pour une programmation ou en me donnant des exemples?
Merci d’avance
Guillaume

bonjour qu'est ce que tu entend exactement par "capteur de force lineaireé ?

force maxi applicable ? course applicable ? precision et resolution souhaitée ? dynamique souhaitée ?

explique plus précisément ce que tu souhaite capter

Je souhaite capter la force d'appui sur un capteur de force linéaire (le produit est le force sensing linear potentiometer). Je souhaite faire comme si le capteur avait un bouton en haut et en bas de la "tige du capteur". La personne garde son doigt appuyé et l'avance ou le recule sur le capteur si vous voulez. Puis la personne doit appuyer une fois en bas ou une fois en haut.

Je mettrais bien une photo mais je sais pas comment on fait!!

guipru: Je souhaite capter la force d'appui sur un capteur de force linéaire (le produit est le force sensing linear potentiometer). Je souhaite faire comme si le capteur avait un bouton en haut et en bas de la "tige du capteur". La personne garde son doigt appuyé et l'avance ou le recule sur le capteur si vous voulez. Puis la personne doit appuyer une fois en bas ou une fois en haut.

Je mettrais bien une photo mais je sais pas comment on fait!!

déjà mets un lien vers ton "capteur" ou au moins donne sa référence exacte

https://www.pololu.com/product/2730

Dans les resources vous avez un lien vers du code https://github.com/pololu/fslp-led-strip-arduino-demo

Yes mais ce code est complexe... et donc je voulais savoir si d'autres avaient fait leur propre code pour le partager.

En effet mon code c'est 0 au milieu et qd appui en haut ou en bas = clic (fonction souris USB avec arduino leonardo). Après il faut juste que je puisse mesurer les pressions en permanence.

merci

Partagez votre code de base pour tester la fonction, on vous aidera

j’ai pas ce genre de capteur sous la main

mettez la console Série Arduino à 115200 pour la vitesse de communication et essayez le code ci dessous avec ce genre de connection

/* Vous aurez besoin d'une résistance supplémentaire et quatre connexions entre
   * le FSLP et l'Arduino.
   * sortie du FSLP comme sur https://a.pololu-files.com/picture/0J5351.450.jpg
   * - broche SL à la pin A2
   * - broche D1 à la pin 8
   * - broche D2 à la pin A3
   * - Résistance R0 à la broche 9
   cf https://a.pololu-files.com/picture/0J5359.450.jpg
*/


const int fslpSenseLine = A2;
const int fslpDriveLine1 = 8;
const int fslpDriveLine2 = A3;
const int fslpBotR0 = 9;

unsigned long tempsPrecedent;
const unsigned long periodeAffichage = 500;

int pression, position;

void setup() {
  Serial.begin(115200);
  while (!Serial); // on attend que la ligne série soit bien établie
  tempsPrecedent = millis();
}

void loop() {

  if (millis() - tempsPrecedent > periodeAffichage) {
    // on affiche l'info

    pression = fslpGetPressure();

    if (pression == 0) position = 0;
    else position = fslpGetPosition();  // on obtient une valeur relative entre 0 et 1023.

    Serial.print("Pression = ");  Serial.print(pression);
    Serial.print("  - Position = ");  Serial.println(position);
    tempsPrecedent = millis();
  }
}

/* ******************************************************** */
// pris dans les exemples
/* ******************************************************** */


// This function follows the steps described in the FSLP
// integration guide to measure the position of a force on the
// sensor.  The return value of this function is proportional to
// the physical distance from drive line 2, and it is between
// 0 and 1023.  This function does not give meaningful results
// if fslpGetPressure is returning 0.

int fslpGetPosition()
{
  // Step 1 - Clear the charge on the sensor.
  pinMode(fslpSenseLine, OUTPUT);
  digitalWrite(fslpSenseLine, LOW);

  pinMode(fslpDriveLine1, OUTPUT);
  digitalWrite(fslpDriveLine1, LOW);

  pinMode(fslpDriveLine2, OUTPUT);
  digitalWrite(fslpDriveLine2, LOW);

  pinMode(fslpBotR0, OUTPUT);
  digitalWrite(fslpBotR0, LOW);

  // Step 2 - Set up appropriate drive line voltages.
  digitalWrite(fslpDriveLine1, HIGH);
  pinMode(fslpBotR0, INPUT);
  pinMode(fslpSenseLine, INPUT);

  // Step 3 - Wait for the voltage to stabilize.
  delayMicroseconds(10);

  // Step 4 - Take the measurement.
  analogReset();
  return analogRead(fslpSenseLine);
}

// This function follows the steps described in the FSLP
// integration guide to measure the pressure on the sensor.
// The value returned is usually between 0 (no pressure)
// and 500 (very high pressure), but could be as high as
// 32736.

int fslpGetPressure()
{
  // Step 1 - Set up the appropriate drive line voltages.
  pinMode(fslpDriveLine1, OUTPUT);
  digitalWrite(fslpDriveLine1, HIGH);

  pinMode(fslpBotR0, OUTPUT);
  digitalWrite(fslpBotR0, LOW);

  pinMode(fslpSenseLine, INPUT);

  pinMode(fslpDriveLine2, INPUT);

  // Step 2 - Wait for the voltage to stabilize.
  delayMicroseconds(10);

  // Step 3 - Take two measurements.
  analogReset();
  int v1 = analogRead(fslpDriveLine2);
  analogReset();
  int v2 = analogRead(fslpSenseLine);

  // Step 4 - Calculate the pressure.
  // Detailed information about this formula can be found in the
  // FSLP Integration Guide.
  if (v1 == v2)
  {
    // Avoid dividing by zero, and return maximum reading.
    return 32 * 1023;
  }
  return 32 * v2 / (v1 - v2);
}

// Performs an ADC reading on the internal GND channel in order
// to clear any voltage that might be leftover on the ADC.
// Only works on AVR boards and silently fails on others.
void analogReset()
{
#if defined(ADMUX)
#if defined(ADCSRB) && defined(MUX5)
  // Code for the ATmega2560 and ATmega32U4
  ADCSRB |= (1 << MUX5);
#endif
  ADMUX = 0x1F;

  // Start the conversion and wait for it to finish.
  ADCSRA |= (1 << ADSC);
  loop_until_bit_is_clear(ADCSRA, ADSC);
#endif
}

l’affichage devrait se faire deux fois par secondes (réglable en changeant 500 dans const unsigned long periodeAffichage = 500; qui est la durée entre deux affichages en ms, donc ici 500ms = 1/2s)

les valeurs du capteurs sont dans les variables globales pression et position

Merci c'est cool. Je vais essayer et je vous dis! mais là : :sleeping: :sleeping: