Différences entre versions de « Senseur FSR »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(25 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{{tmbox | text = En cours de traduction}}
 
 
 
== Introduction ==
 
== Introduction ==
Les FSRs sont des senseurs qui permettent de détecter la pression physique, la torsion et le poids. Ils sont simple à utiliser et financièrement abordables. La photographie ci-dessous présente un FSR, le modèle Interlink 402 pour être préçis. La partie circulaire d'un 12mm de diamètre est la partie sensitive (le senseur).  
+
Les FSRs sont des senseurs qui permettent de détecter la pression physique, la torsion et le poids. Ils sont simple à utiliser et financièrement abordables. La photographie ci-dessous présente un FSR, le modèle Interlink 402 pour être précis. La partie circulaire d'un 12mm de diamètre est la partie sensitive (le senseur).  
  
[[Fichier:FSR-INTRO1.jpg]]
+
{{ADFImage|FSR-INTRO1.jpg}}
  
[[Fichier:FSR-INTRO2.jpg]]
+
{{ADFImage|FSR-INTRO2.jpg}}
  
 
== Tester un FSR ==
 
== Tester un FSR ==
 
La meilleure approche pour vérifier comment le FSR fonctionne est encore de le connecter les deux broches du senseur à un multimètre positionné sur "Mesure de résistance". Cela permet de vérifier comment la résistance varie. Etant donné que la résistance peut varier vraiment fort(c'est le cas de ce senseur), un multimètre à détection automatique est particulièrement approprié. Si vous ne disposez pas d'un tel multimètre, modifiez manuellement la sensisibilé de votre multimètre entre 1 MOhm et 100 ohm jusqu'a ce que ce dernier réagisse.  
 
La meilleure approche pour vérifier comment le FSR fonctionne est encore de le connecter les deux broches du senseur à un multimètre positionné sur "Mesure de résistance". Cela permet de vérifier comment la résistance varie. Etant donné que la résistance peut varier vraiment fort(c'est le cas de ce senseur), un multimètre à détection automatique est particulièrement approprié. Si vous ne disposez pas d'un tel multimètre, modifiez manuellement la sensisibilé de votre multimètre entre 1 MOhm et 100 ohm jusqu'a ce que ce dernier réagisse.  
  
[[Fichier:FSR-TESTER.jpg]]
+
{{ADFImage|FSR-TESTER.jpg}}
  
 
== Brancher un FSR ==
 
== Brancher un FSR ==
Ligne 21 : Ligne 19 :
 
La meilleure façon de connecter ces senseurs est encore de les enfoncer sur breadboard.
 
La meilleure façon de connecter ces senseurs est encore de les enfoncer sur breadboard.
  
[[Fichier:FSR-BRANCHER1.jpg]]
+
{{ADFImage|FSR-BRANCHER1.jpg}}
  
 
=== Un connecteur femelle ===
 
=== Un connecteur femelle ===
 
Il est également possible d'utiliser un connecteur femelle (heade) ou des pinces crocodiles.
 
Il est également possible d'utiliser un connecteur femelle (heade) ou des pinces crocodiles.
  
[[Fichier:FSR-BRANCHER2.jpg]]
+
{{ADFImage|FSR-BRANCHER2.jpg}}
  
 
=== Un bornier ===
 
=== Un bornier ===
 
Ou encore un simple bornier (qui lui sera soudable).
 
Ou encore un simple bornier (qui lui sera soudable).
  
[[Fichier:FSR-BRANCHER3.jpg]]
+
{{ADFImage|FSR-BRANCHER3.jpg}}
  
 
== Utiliser un FSR ==
 
== Utiliser un FSR ==
Ligne 39 : Ligne 37 :
 
Ensuite, le point situé entre la résustance pull-down et la résistance FSR est raccordée sur un entrée analogique du microcontrôleur (voir exemple ci-dessous mettant en oeuvre un Arduino).
 
Ensuite, le point situé entre la résustance pull-down et la résistance FSR est raccordée sur un entrée analogique du microcontrôleur (voir exemple ci-dessous mettant en oeuvre un Arduino).
  
[[FICHIER:FSR-ReadAnalog1.jpg]]
+
{{ADFImage|FSR-ReadAnalog1.jpg}}
  
[[FICHIER:FSR-ReadAnalog2.jpg]]
+
{{ADFImage|FSR-ReadAnalog2.jpg}}
  
For this example I'm showing it with a 5V supply but note that you can use this with a 3.3v supply just as easily. In this configuration the analog voltage reading ranges from 0V (ground) to about 5V (or about the same as the power supply voltage).
+
Sur cet exemple utilise une tension d'alimentation de 5 Volts mais vous pourriez utiliser une tension de 3.3 volts tout aussi facilement.  
  
The way this works is that as the resistance of the FSR decreases, the total resistance of the FSR and the pulldown resistor decreases from about 100Kohm to 10Kohm. That means that the current flowing through both resistors increases which in turn causes the voltage across the fixed 10K resistor to increase. Its quite a trick!
+
Dans cette configuration, la tension analogique lue varie entre 0V (la masse/GND) jusqu'a environ 5V (la même tension que la tension d'alimentation).
 +
 
 +
Voici comment cela fonctionne:
 +
 
 +
Lorsque l'on presse le FSR, la résistance du senseur FSR diminue. La résistance totale FSR + résistance pull-down diminue également (ordre de grandeur de 100Kohm à 10Kohm). Cela signifie que le courant circulant dans le circuit FSR + Résistance PullDown augmente. En conséquence, la chute de tension aux bornes de la résistance '''fixe''' Pull-Down (10KOhm) augmente. Voila l'astuce!
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Ligne 92 : Ligne 94 :
 
|}
 
|}
  
This table indicates the approximate analog voltage based on the sensor force/resistance w/a 5V supply and 10K pulldown resistor.
+
Cette table indique approximativement la tension analogique basé sur le montage FSR + Résistance Pull-Down de 10 Kohms et une source de tension de 5 Volts.
  
Note that our method takes the somewhat linear resistivity but does not provide linear voltage! That's because the voltage equasion is:
+
Notez que la méthode présente une évolution linéaire de la résistivité mais que cela ne produit pas de tension linéaire! C'est parce que l'équation de la tension est:
  
 
'''Vo = Vcc ( R / (R + FSR) )'''
 
'''Vo = Vcc ( R / (R + FSR) )'''
  
That is, the voltage is proportional to the '''inverse''' of the FSR resistance.
+
En fait, la tension est proportionnelle à l'inverse de la résistance FSR.
  
 
=== Exemple simple ===
 
=== Exemple simple ===
Wire the FSR as same as the above example, but this time lets add an LED to pin 11.
+
Raccordez le senseur FSR comme présenté dans l'exemple précédent. Ajoutons également une LED (et sa résistance) sur la Pin 11.
  
[[Fichier:FSR-SAMLE1.jpg]]
+
{{ADFImage|FSR-SAMLE1.jpg}}
  
[[Fichier:FSR-SAMLE2.jpg]]
+
{{ADFImage|FSR-SAMLE2.jpg}}
  
This sketch will take the analog voltage reading and use that to determine how bright the red LED is. The harder you press on the FSR, the brighter the LED will be! Remember that the LED has to be connected to a PWM pin for this to work, I use pin 11 in this example.
+
Ce sketch va lire la tension sur l'entrée analogique et utilise cette valeur pour déterminer la luminosité de la LED.
  
These examples assume you know some basic Arduino programming.
+
Plus vous pressez le senseur FSR et plus la LED sera lumineuse! Souvenez-vous que la LED doit être branchée sur une sortie PWM pour contrôler sa lunimosité, nous utilisons la pin 11 dans cet exemple.
 +
 
 +
Cet exemple par du principe que vous disposé déjà des notions de base de programmation avec Arduino.
  
 
  <nowiki>
 
  <nowiki>
   /* FSR testing sketch.
+
   /* sketch de test pour senseur FSR .
     Connect one end of FSR to 5V, the other end to Analog 0.
+
     Connectez une borne du FSR à +5V, l'autre sur la pin Analog 0.
     Then connect one end of a 10K resistor from Analog 0 to ground
+
     Connectez ensuite une résistance de 10 Ko entre la pin Analog 0 et la masse/GND.
     Connect LED from pin 11 through a resistor to ground
+
     Connectez une LED de la pin 11 à la massge/GND VIA une résistance.
     For more information see www.ladyada.net/learn/sensors/fsr.html */
+
 
 +
     Pour plus d'information, voir le wiki de MC Hobby (en Français)
 +
        http://mchobby.be/wiki/index.php?title=Senseur_FSR
 +
    Ou le site de Lady Ada (AdaFruit, en anglais)
 +
        http://www.ladyada.net/learn/sensors/fsr.html  
 +
  */
  
   int fsrAnalogPin = 0; // FSR is connected to analog 0
+
   int fsrAnalogPin = 0; // FSR branché sur pin Analog 0
   int LEDpin = 11; // connect Red LED to pin 11 (PWM pin)
+
   int LEDpin = 11; // connecter LED rouge sur pin 11 (pin PWM)
   int fsrReading; // the analog reading from the FSR resistor divider
+
   int fsrReading; // Lecture analogique de la tension du pont
 +
                  //   diviseur FSR + Resistance Pull-Down
 
   int LEDbrightness;
 
   int LEDbrightness;
  
 
   void setup(void) {
 
   void setup(void) {
     Serial.begin(9600); // We'll send debugging information via the Serial monitor
+
     Serial.begin(9600); // Envoi de message de déboggage sur connexion série
 +
                        // Visible dans le Moniteur Série d'Arduino IDE
 
     pinMode(LEDpin, OUTPUT);
 
     pinMode(LEDpin, OUTPUT);
 
   }
 
   }
Ligne 132 : Ligne 143 :
 
     Serial.print("Analog reading = ");
 
     Serial.print("Analog reading = ");
 
     Serial.println(fsrReading);
 
     Serial.println(fsrReading);
     // we'll need to change the range from the analog reading (0-1023) down to the range
+
     // Nous devons convertir la valeur analogique lue (0-1023)  
     // used by analogWrite (0-255) with map!
+
     // en une valeur utilisable par analogWrite (0-255).
 +
    // C'est ce que fait l'instruction map!
 
     LEDbrightness = map(fsrReading, 0, 1023, 0, 255);
 
     LEDbrightness = map(fsrReading, 0, 1023, 0, 255);
 
     // LED gets brighter the harder you press
 
     // LED gets brighter the harder you press
Ligne 142 : Ligne 154 :
  
 
=== Mesures FSR analogique (code simple) ===
 
=== Mesures FSR analogique (code simple) ===
Here is a code example for measuring the FSR on an analog pin.
+
Voici un code d'exemple qui mesure un senseur FSR avec un entrée analogique.
  
[[Fichier:FSR-SAMLE2-1.jpg]]
+
{{ADFImage|FSR-SAMLE2-1.jpg}}
  
[[Fichier:FSR-SAMLE2-2.jpg]]
+
{{ADFImage|FSR-SAMLE2-2.jpg}}
  
[[Fichier:FSR-SAMLE2-3.jpg]]
+
Ce code ne fait aucun calcul, il affiche juste ce qui est interprété comme la pression (information qualitative). Cela est suffisant dans la plupart des projets!
  
This code doesn't do any calculations, it just prints out what it interprets as the amount of pressure in a qualitative manner. For most projects, this is pretty much all thats needed!
+
<nowiki>
 +
  /* Simple test de FSR (sketch).
 +
    Connectez une broche du FSR sur l'alimentation et l'autre
 +
    broche sur la pin analogique Analog 0.
 +
    Connectez ensuite une résistance de 10K entre l'entrée
 +
    analogique Analog 0 et la masse (GND)
  
<nowiki>
+
    Pour plus d'information, voir le wiki de MC Hobby (en Français)
  /* FSR simple testing sketch.
+
        http://mchobby.be/wiki/index.php?title=Senseur_FSR
     Connect one end of FSR to power, the other end to Analog 0.
+
     Ou le site de Lady Ada (AdaFruit, en anglais)
    Then connect one end of a 10K resistor from Analog 0 to ground
+
        http://www.ladyada.net/learn/sensors/fsr.html  
    For more information see www.ladyada.net/learn/sensors/fsr.html */
+
  */
  
   int fsrPin = 0; // the FSR and 10K pulldown are connected to a0
+
   int fsrPin = 0; // Le senseur FSR et la résistance PullDown de 10K connectés sur A0
   int fsrReading; // the analog reading from the FSR resistor divider
+
   int fsrReading; // Lecture analogique du pont diviseur FSR+Résistance
 
    
 
    
 
   void setup(void) {
 
   void setup(void) {
     // We'll send debugging information via the Serial monitor
+
     // Envoyons des information de débogage sur le port série
 
     Serial.begin(9600);
 
     Serial.begin(9600);
 
   }
 
   }
Ligne 168 : Ligne 185 :
 
   void loop(void) {
 
   void loop(void) {
 
     fsrReading = analogRead(fsrPin);
 
     fsrReading = analogRead(fsrPin);
     Serial.print("Analog reading = ");
+
     Serial.print("Lecture Analogique = ");
     Serial.print(fsrReading); // the raw analog reading
+
     Serial.print(fsrReading); // La valeur brute (valeur analogique lue)
     // We'll have a few threshholds, qualitatively determined
+
     // Utilisons quelques seuils, pour faire une détermination qualitative
 
     if (fsrReading < 10) {
 
     if (fsrReading < 10) {
     Serial.println(" - No pressure");
+
     Serial.println(" - Pas de pression (No pressure)");  
 
     } else if (fsrReading < 200) {
 
     } else if (fsrReading < 200) {
     Serial.println(" - Light touch");
+
     Serial.println(" - Touché léger (Light touch)");
 
     } else if (fsrReading < 500) {
 
     } else if (fsrReading < 500) {
     Serial.println(" - Light squeeze");
+
     Serial.println(" - Pression légère (Light squeeze)");
 
     } else if (fsrReading < 800) {
 
     } else if (fsrReading < 800) {
     Serial.println(" - Medium squeeze");
+
     Serial.println(" - Pression moyenne (Medium squeeze)");
 
     } else {
 
     } else {
     Serial.println(" - Big squeeze");
+
     Serial.println(" - Forte pression (Big squeeze)");
 
     }
 
     }
 
     delay(1000);
 
     delay(1000);
 
   }  
 
   }  
 
</nowiki>
 
</nowiki>
 +
 +
Voici ce que le code produit.<br />
 +
(NB: cette capture d'écran ne contient pas encore la traduction des libellés en Français.
 +
 +
{{ADFImage|FSR-SAMLE2-3.jpg}}
  
 
=== Mesures FSR analogique (code avancé) ===
 
=== Mesures FSR analogique (code avancé) ===
  
This Arduino sketch that assumes you have the FSR wired up as above, with a 10K? pull down resistor and the sensor is read on Analog 0 pin. It is pretty advanced and will measure the approximate Newton force measured by the FSR. This can be pretty useful for calibrating what forces you think the FSR will experience.
+
Le sketch Arduino ci-dessous par du principe que le senseur est raccordé comme dans le montage ci-dessus (avec la résistance PullDown de 10K et lecture sur pin analogique A0.
  
[[Fichier:FSR-SAMLE3-1.jpg]]
+
Ce code est nettement plus avancé et essaye de faire une mesure approximative de la force mesurée par le senseur (en Newtow). Ce sckech peut-être particulièrement utile pour calibrer un FSR et déterminer quelles forces le FSR sera capable de détecter.
  
[[Fichier:FSR-SAMLE3-2.jpg]]
+
{{ADFImage|FSR-SAMLE3-1.jpg}}
  
[[Fichier:FSR-SAMLE3-3.jpg]]
+
{{ADFImage|FSR-SAMLE3-2.jpg}}
  
 
  <nowiki>
 
  <nowiki>
/* FSR testing sketch.
+
/* sketch de test pour senseur FSR .
  Connect one end of FSR to power, the other end to Analog 0.
 
  Then connect one end of a 10K resistor from Analog 0 to ground
 
  For more information see www.ladyada.net/learn/sensors/fsr.html */
 
  
int fsrPin = 0; // the FSR and 10K pulldown are connected to a0
+
  Connectez une borne du FSR à +5V, l'autre sur la pin Analog 0.
int fsrReading; // the analog reading from the FSR resistor divider
+
  Connectez ensuite une résistance de 10 Ko entre la pin Analog 0 et la masse/GND.
 +
  Connectez une LED de la pin 11 à la massge/GND VIA une résistance.
 +
 
 +
  Pour plus d'information, voir le wiki de MC Hobby (en Français)
 +
      http://mchobby.be/wiki/index.php?title=Senseur_FSR
 +
  Ou le site de Lady Ada (AdaFruit, en anglais)
 +
      http://www.ladyada.net/learn/sensors/fsr.html
 +
*/
 +
 
 +
int fsrPin = 0; // Le senseur FSR et résistance PullDown 10K sont connectés sur pin Analogique A0
 +
int fsrReading; // La lecture analogique depuis le pont diviseur FSR+Resistance.
 
int fsrVoltage; // the analog reading converted to voltage
 
int fsrVoltage; // the analog reading converted to voltage
 
unsigned long fsrResistance; // The voltage converted to resistance, can be very big so make "long"
 
unsigned long fsrResistance; // The voltage converted to resistance, can be very big so make "long"
Ligne 210 : Ligne 239 :
  
 
void setup(void) {
 
void setup(void) {
     Serial.begin(9600); // We'll send debugging information via the Serial monitor
+
     Serial.begin(9600); // Envoyons quelques information de débogage sur le moniteur série
 
}
 
}
  
Ligne 251 : Ligne 280 :
 
}
 
}
 
</nowiki>
 
</nowiki>
 +
 +
Voici le résultat du sketch.<br />
 +
NB: La capture d'écran suivante est présente le résultat avant traduction des libellés.<br />
 +
 +
{{ADFImage|FSR-SAMLE3-3.jpg}}
 +
<small>''Traduction MCHobby''</small>
  
 
=== BONUS!  Lecture d'un sans entrée Analogique ===
 
=== BONUS!  Lecture d'un sans entrée Analogique ===
Blabla
+
 
 +
Fondamentalement, un senseur FSR c'est une résistance. Et grâce à cela, il est possible de l'utiliser même sur vous ne disposez pas d'entrée analogique sur votre micro-controleur (ou s'il ne vous en reste plus de disponible).
 +
 
 +
Pour y arriver, nous utilisons à notre avantage une caractéristique fondamentale des circuits électronique Résistance + Capacité (le circuit RC).
 +
 
 +
En gros, si vous prenez une capacité qui ne stocke encore aucune tension, et si vous la connectez sur une alimentation par l'intermédiaire d'une résistance, alors cette capacité va se charger progressivement (et la tension au borne de la capacité va augmenter progressivement).
 +
 
 +
Plus la résistance est grande et plus la capacité charge lentement..
 +
 
 +
{{ADFImage|FSR-RCtimecapture.jpg}}
 +
 
 +
''Voici une capture d'un oscilloscope qui montre ce qui se produit sur une pin digitale (en jaune). La ligne bleue indique quand le programme (sketch) commence à compter et lorsqu'il à terminé de compter... environ1.2ms plus tard.''
 +
 
 +
C'est parce que la capacité agit comme un seau et la résistance comme une arrivée d'eau (un tuyau). Pour remplir un seau prend plus de temps si le tuyaux est plus étroit/fin. En mesurant le temps que prends un seau pour se remplir, vous pouvez devinez quel est la taille du tuyau :-) <br />Par corolaire, en comptant le temps que met la capacité pour se charger, il est possible de déterminer la résistance du senseur FSR :-))))<br />
 +
Dans la pratique, on mesure seulement le remplissage jusqu'a la moitié du seau... oups!, de la capacité.
 +
 
 +
{{ADFImage|FSR-RCTime-Schema.jpg}}
 +
 
 +
{{ADFImage|FSR-RCTime-Schema2.jpg}}
 +
 
 +
Dans ce cas, notre 'seau' est une capacité céramique de 0.1uF. Vous pouvez pratiquement utiliser n'importe quelle capacité mais cela affectera le temps de chargement.<br />
 +
0.1uF semble être une valeur de départ idéal pour les senseurs FSR.
 +
 
 +
<nowiki>
 +
  /* sketch de test pour senseur FSR .
 +
    Connectez une borne du FSR à +5V, l'autre sur la pin 2 Digital.
 +
    Connectez ensuite une broche d'une capacité de 0.1uF sur la pin 2 et l'autre à la masse/GND.
 +
   
 +
    Pour plus d'information, voir le wiki de MC Hobby (en Français)
 +
        http://mchobby.be/wiki/index.php?title=Senseur_FSR
 +
    Ou le site de Lady Ada (AdaFruit, en anglais)
 +
        http://www.ladyada.net/learn/sensors/fsr.html
 +
  */
 +
 +
    int fsrPin = 2; // Le senseur FSR et capacité connectés sur pin2
 +
    int fsrReading; // Lecture digitale
 +
    int ledPin = 13; // LED sur Pin 13 (vous pouvez utiliser la LED disponible sur la carte)
 +
    void setup(void) {
 +
      // Faisons également un peu de débogage sur le moniteur série 
 +
      Serial.begin(9600);
 +
     
 +
      pinMode(ledPin, OUTPUT); // Utiliser la LED comme sortie
 +
    }
 +
 
 +
    void loop(void) {
 +
      // Lire la résistance en utilisant la technique du temps de chargement RC
 +
      //  (technique "RCtime" en anglais)
 +
      fsrReading = RCtime(fsrPin);
 +
      if (fsrReading == 30000) {
 +
        // si nous avons atteint 30000 c'est un 'timed out'
 +
        Serial.println("Rien de connecté!");
 +
      } else {
 +
        Serial.print("Lecture temps RC = ");
 +
        Serial.println(fsrReading); // La lecture analogique brute
 +
     
 +
        // faire un peut de traitement pour faire
 +
        // clignoter la LED
 +
        fsrReading /= 10;
 +
 
 +
        // Plus vous pressez le senseur et plus la LED clignote vite!
 +
        digitalWrite(ledPin, HIGH);
 +
        delay(fsrReading);
 +
        digitalWrite(ledPin, LOW);
 +
        delay(fsrReading);
 +
      }
 +
      delay(100);
 +
    }
 +
   
 +
    // Utiliser une broche digitale pour mesurer la résistance (comme un senseur FSR ou
 +
    //  un photo-résistance!)
 +
    // Nous y arrivons grâce à la résistance du FSR qui permet à la capacité de se charger
 +
    // plus ou moins vite. C'est en comptant le temps qu'il faudra pour arriver à VCC/2
 +
    // (tension d'activation de l'entrée digitale des Arduino, soit 2.5V) que l'on détermine
 +
    // la valeur de la résistance du FSR
 +
    //
 +
    int RCtime(int RCpin) {
 +
      int reading = 0; // démarre à 0
 +
      // declaré la PIN comme sortie et la mettre au niveau bas... à la masse (LOW)
 +
      pinMode(RCpin, OUTPUT);
 +
      digitalWrite(RCpin, LOW);
 +
      // Maintenant, mette la pin en entrée et...
 +
      pinMode(RCpin, INPUT);
 +
      // compter le temps qu'il faudra pour qu'elle arrive à HIGH
 +
      while (digitalRead(RCpin) == LOW) {
 +
        reading++; // incrémenter pour 'compter' le temps qui passe.
 +
        if (reading == 30000) {
 +
          // Si nous arrivons si loin, c'est que la résistance est tellement grande
 +
          // que le temps de chargement tend vers l'infini (ou qu'il n'y a rien de
 +
          // connecté!)
 +
         
 +
          break; // quitter la boucle
 +
        }
 +
      }
 +
      // OK soit nous avons la valeur MAX, soit nous avons une lecture correcte.
 +
      // Simplement retourner la valeur du compteur.
 +
    return reading;
 +
    }
 +
 
 +
</nowiki>
 +
 
 +
Voici le résultat du sketch (texte en anglais... avant traduction)
 +
 
 +
{{ADFImage|FSR-RCtimeResult.jpg}}
 +
 
 +
Il est possible de calculer la résistance depuis la valeur lue, cependant des paramètres propres aux différentes valeurs d'Arduino IDE et des cartes Arduino peuvent rendre ces valeurs peu consistantes d'un environnement à l'autre.
 +
 
 +
Tenez en donc compte si vous changez de version d'Arduino IDE, d'OS, une Arduino 3.3v au lieu de 5.0v ou un Arduino 16mhz au lieu de 8Mhz (comme un "lilypad")... cela explique les différences qui peuvent exister sur la quantité de temps nécessaire pour lire la valeur sur la pin digitale!
 +
 
 +
Ce n'est généralement pas un gros problème en soit mais cela peut rendre le débogage du projet beaucoup plus difficile si vous n'êtes pas au courant de ces particularités!
  
 
== Source ==
 
== Source ==
Ligne 260 : Ligne 403 :
  
 
== Où Acheter ==
 
== Où Acheter ==
{{tmbox | text = Ajouter lien}}
 
  
* Le Senseur '''FSR''' est disponible chez MCHobby
+
* Le Senseur {{pl|110|'''FSR''' rond est disponible chez MCHobby}}
* Le senseur '''Flex''' est également disponible chez MCHobby.
+
* Le Senseur {{pl|727|'''FSR''' CARRE est disponible chez MCHobby}}
* MC Hobby vous propose également des '''borniers''' et '''breadboard''' visible sur cette page.
+
* Le senseur {{pl|111|'''Flex''' est également disponible chez MCHobby.}}
 +
* MC Hobby vous propose également des {{pl|92|'''borniers'''}} et {{pl|53|'''breadboard'''}} visible sur cette page.
  
 
{{MCH-Accord}}
 
{{MCH-Accord}}
  
 
{{ADF-Accord}}
 
{{ADF-Accord}}

Version actuelle datée du 12 octobre 2015 à 07:30

Introduction

Les FSRs sont des senseurs qui permettent de détecter la pression physique, la torsion et le poids. Ils sont simple à utiliser et financièrement abordables. La photographie ci-dessous présente un FSR, le modèle Interlink 402 pour être précis. La partie circulaire d'un 12mm de diamètre est la partie sensitive (le senseur).

 
Crédit: AdaFruit Industries www.adafruit.com

 
Crédit: AdaFruit Industries www.adafruit.com

Tester un FSR

La meilleure approche pour vérifier comment le FSR fonctionne est encore de le connecter les deux broches du senseur à un multimètre positionné sur "Mesure de résistance". Cela permet de vérifier comment la résistance varie. Etant donné que la résistance peut varier vraiment fort(c'est le cas de ce senseur), un multimètre à détection automatique est particulièrement approprié. Si vous ne disposez pas d'un tel multimètre, modifiez manuellement la sensisibilé de votre multimètre entre 1 MOhm et 100 ohm jusqu'a ce que ce dernier réagisse.

 
Crédit: AdaFruit Industries www.adafruit.com

Brancher un FSR

Puisque les FSRs sont des "résistances", ils ne sont pas polarisés. Cela signifie que vous pouvez les connecter indifféremment dans un sens ou dans l'autre, ils fonctionneront parfaitement!

Dans un breadboard

Les FSRs sont souvent constitués de polymère équipé d'une sérigraphie à base de matériaux conducteurs. Cela signifie qu'ils sont en plastique et que le connecteurs est serti sur cette matériaux délicat.

La meilleure façon de connecter ces senseurs est encore de les enfoncer sur breadboard.

 
Crédit: AdaFruit Industries www.adafruit.com

Un connecteur femelle

Il est également possible d'utiliser un connecteur femelle (heade) ou des pinces crocodiles.

 
Crédit: AdaFruit Industries www.adafruit.com

Un bornier

Ou encore un simple bornier (qui lui sera soudable).

 
Crédit: AdaFruit Industries www.adafruit.com

Utiliser un FSR

Méthode par lecture Analogique de la tension

Le procédé le plus simple pour mesurer un senseur résistif est de connecter une de ses bornes à l'alimentation et l'autre sur une résistance pull-down (elle même branchée sur la masse/GND).

Ensuite, le point situé entre la résustance pull-down et la résistance FSR est raccordée sur un entrée analogique du microcontrôleur (voir exemple ci-dessous mettant en oeuvre un Arduino).

 
Crédit: AdaFruit Industries www.adafruit.com

 
Crédit: AdaFruit Industries www.adafruit.com

Sur cet exemple utilise une tension d'alimentation de 5 Volts mais vous pourriez utiliser une tension de 3.3 volts tout aussi facilement.

Dans cette configuration, la tension analogique lue varie entre 0V (la masse/GND) jusqu'a environ 5V (la même tension que la tension d'alimentation).

Voici comment cela fonctionne:

Lorsque l'on presse le FSR, la résistance du senseur FSR diminue. La résistance totale FSR + résistance pull-down diminue également (ordre de grandeur de 100Kohm à 10Kohm). Cela signifie que le courant circulant dans le circuit FSR + Résistance PullDown augmente. En conséquence, la chute de tension aux bornes de la résistance fixe Pull-Down (10KOhm) augmente. Voila l'astuce!

Force (Kg) Force (N) Résistance FSR (FSR + R) Ohms Courant dans FSR+R Tension aux bornes de R
None None Infini Infini! 0 mA 0V
0.02 Kg 0.2 N 30 Kohm 40 Kohm 0.13 mA 1.3 V
0.11 Kg 1 N 6 Kohm 16 Kohm 0.31 mA 3.1 V
1.1 Kg 10 N 1 Kohm 11 Kohm 0.45 mA 4.5 V
11 Kg 100 N 250 ohm 10.25 Kohm 0.49 mA 4.9 V

Cette table indique approximativement la tension analogique basé sur le montage FSR + Résistance Pull-Down de 10 Kohms et une source de tension de 5 Volts.

Notez que la méthode présente une évolution linéaire de la résistivité mais que cela ne produit pas de tension linéaire! C'est parce que l'équation de la tension est:

Vo = Vcc ( R / (R + FSR) )

En fait, la tension est proportionnelle à l'inverse de la résistance FSR.

Exemple simple

Raccordez le senseur FSR comme présenté dans l'exemple précédent. Ajoutons également une LED (et sa résistance) sur la Pin 11.

 
Crédit: AdaFruit Industries www.adafruit.com

 
Crédit: AdaFruit Industries www.adafruit.com

Ce sketch va lire la tension sur l'entrée analogique et utilise cette valeur pour déterminer la luminosité de la LED.

Plus vous pressez le senseur FSR et plus la LED sera lumineuse! Souvenez-vous que la LED doit être branchée sur une sortie PWM pour contrôler sa lunimosité, nous utilisons la pin 11 dans cet exemple.

Cet exemple par du principe que vous disposé déjà des notions de base de programmation avec Arduino.

  /* sketch de test pour senseur FSR .
    Connectez une borne du FSR à +5V, l'autre sur la pin Analog 0.
    Connectez ensuite une résistance de 10 Ko entre la pin Analog 0 et la masse/GND.
    Connectez une LED de la pin 11 à la massge/GND VIA une résistance.

    Pour plus d'information, voir le wiki de MC Hobby (en Français)
        http://mchobby.be/wiki/index.php?title=Senseur_FSR
    Ou le site de Lady Ada (AdaFruit, en anglais)
        http://www.ladyada.net/learn/sensors/fsr.html 
  */

  int fsrAnalogPin = 0; // FSR branché sur pin Analog 0
  int LEDpin = 11; // connecter LED rouge sur pin 11 (pin PWM)
  int fsrReading;  // Lecture analogique de la tension du pont 
                   //    diviseur FSR + Resistance Pull-Down
  int LEDbrightness;

  void setup(void) {
    Serial.begin(9600); // Envoi de message de déboggage sur connexion série
                        // Visible dans le Moniteur Série d'Arduino IDE
    pinMode(LEDpin, OUTPUT);
  }

  void loop(void) {
    fsrReading = analogRead(fsrAnalogPin);
    Serial.print("Analog reading = ");
    Serial.println(fsrReading);
    // Nous devons convertir la valeur analogique lue (0-1023) 
    // en une valeur utilisable par analogWrite (0-255).
    // C'est ce que fait l'instruction map!
    LEDbrightness = map(fsrReading, 0, 1023, 0, 255);
    // LED gets brighter the harder you press
    analogWrite(LEDpin, LEDbrightness);
    delay(100);
  }

Mesures FSR analogique (code simple)

Voici un code d'exemple qui mesure un senseur FSR avec un entrée analogique.

 
Crédit: AdaFruit Industries www.adafruit.com

 
Crédit: AdaFruit Industries www.adafruit.com

Ce code ne fait aucun calcul, il affiche juste ce qui est interprété comme la pression (information qualitative). Cela est suffisant dans la plupart des projets!

  /* Simple test de FSR (sketch).
    Connectez une broche du FSR sur l'alimentation et l'autre
    broche sur la pin analogique Analog 0.
    Connectez ensuite une résistance de 10K entre l'entrée 
    analogique Analog 0 et la masse (GND)

    Pour plus d'information, voir le wiki de MC Hobby (en Français)
        http://mchobby.be/wiki/index.php?title=Senseur_FSR
    Ou le site de Lady Ada (AdaFruit, en anglais)
        http://www.ladyada.net/learn/sensors/fsr.html 
  */

  int fsrPin = 0; // Le senseur FSR et la résistance PullDown de 10K connectés sur A0
  int fsrReading; // Lecture analogique du pont diviseur FSR+Résistance
  
  void setup(void) {
    // Envoyons des information de débogage sur le port série
    Serial.begin(9600);
  }
  
  void loop(void) {
    fsrReading = analogRead(fsrPin);
    Serial.print("Lecture Analogique = ");
    Serial.print(fsrReading); // La valeur brute (valeur analogique lue)
    // Utilisons quelques seuils, pour faire une détermination qualitative
    if (fsrReading < 10) {
    Serial.println(" - Pas de pression (No pressure)"); 
    } else if (fsrReading < 200) {
    Serial.println(" - Touché léger (Light touch)");
    } else if (fsrReading < 500) {
    Serial.println(" - Pression légère (Light squeeze)");
    } else if (fsrReading < 800) {
    Serial.println(" - Pression moyenne (Medium squeeze)");
    } else {
    Serial.println(" - Forte pression (Big squeeze)");
    }
    delay(1000);
  } 

Voici ce que le code produit.
(NB: cette capture d'écran ne contient pas encore la traduction des libellés en Français.

 
Crédit: AdaFruit Industries www.adafruit.com

Mesures FSR analogique (code avancé)

Le sketch Arduino ci-dessous par du principe que le senseur est raccordé comme dans le montage ci-dessus (avec la résistance PullDown de 10K et lecture sur pin analogique A0.

Ce code est nettement plus avancé et essaye de faire une mesure approximative de la force mesurée par le senseur (en Newtow). Ce sckech peut-être particulièrement utile pour calibrer un FSR et déterminer quelles forces le FSR sera capable de détecter.

 
Crédit: AdaFruit Industries www.adafruit.com

 
Crédit: AdaFruit Industries www.adafruit.com

/* sketch de test pour senseur FSR .

  Connectez une borne du FSR à +5V, l'autre sur la pin Analog 0.
  Connectez ensuite une résistance de 10 Ko entre la pin Analog 0 et la masse/GND.
  Connectez une LED de la pin 11 à la massge/GND VIA une résistance.

  Pour plus d'information, voir le wiki de MC Hobby (en Français)
      http://mchobby.be/wiki/index.php?title=Senseur_FSR
  Ou le site de Lady Ada (AdaFruit, en anglais)
      http://www.ladyada.net/learn/sensors/fsr.html 
*/

int fsrPin = 0; // Le senseur FSR et résistance PullDown 10K sont connectés sur pin Analogique A0
int fsrReading; // La lecture analogique depuis le pont diviseur FSR+Resistance.
int fsrVoltage; // the analog reading converted to voltage
unsigned long fsrResistance; // The voltage converted to resistance, can be very big so make "long"
unsigned long fsrConductance;
long fsrForce; // Finally, the resistance converted to force

void setup(void) {
    Serial.begin(9600); // Envoyons quelques information de débogage sur le moniteur série
}

void loop(void) {
    fsrReading = analogRead(fsrPin);
    Serial.print("Analog reading = ");
    Serial.println(fsrReading);
    // analog voltage reading ranges from about 0 to 1023 which maps to 0V to 5V (= 5000mV)
    fsrVoltage = map(fsrReading, 0, 1023, 0, 5000);
    Serial.print("Voltage reading in mV = ");
    Serial.println(fsrVoltage);
    if (fsrVoltage == 0) {
    Serial.println("No pressure");
    } else {
    // The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
    // so FSR = ((Vcc - V) * R) / V yay math!
    fsrResistance = 5000 - fsrVoltage; // fsrVoltage is in millivolts so 5V = 5000mV
    fsrResistance *= 10000; // 10K resistor
    fsrResistance /= fsrVoltage;
    Serial.print("FSR resistance in ohms = ");
    Serial.println(fsrResistance);
    fsrConductance = 1000000; // we measure in micromhos so
    fsrConductance /= fsrResistance;
    Serial.print("Conductance in microMhos: ");
    Serial.println(fsrConductance);
    // Use the two FSR guide graphs to approximate the force
    if (fsrConductance <= 1000) {
    fsrForce = fsrConductance / 80;
    Serial.print("Force in Newtons: ");
    Serial.println(fsrForce);
    } else {
    fsrForce = fsrConductance - 1000;
    fsrForce /= 30;
    Serial.print("Force in Newtons: ");
    Serial.println(fsrForce);
    }
    }
    Serial.println("--------------------");
    delay(1000);
}

Voici le résultat du sketch.
NB: La capture d'écran suivante est présente le résultat avant traduction des libellés.

 
Crédit: AdaFruit Industries www.adafruit.com Traduction MCHobby

BONUS! Lecture d'un sans entrée Analogique

Fondamentalement, un senseur FSR c'est une résistance. Et grâce à cela, il est possible de l'utiliser même sur vous ne disposez pas d'entrée analogique sur votre micro-controleur (ou s'il ne vous en reste plus de disponible).

Pour y arriver, nous utilisons à notre avantage une caractéristique fondamentale des circuits électronique Résistance + Capacité (le circuit RC).

En gros, si vous prenez une capacité qui ne stocke encore aucune tension, et si vous la connectez sur une alimentation par l'intermédiaire d'une résistance, alors cette capacité va se charger progressivement (et la tension au borne de la capacité va augmenter progressivement).

Plus la résistance est grande et plus la capacité charge lentement..

 
Crédit: AdaFruit Industries www.adafruit.com

Voici une capture d'un oscilloscope qui montre ce qui se produit sur une pin digitale (en jaune). La ligne bleue indique quand le programme (sketch) commence à compter et lorsqu'il à terminé de compter... environ1.2ms plus tard.

C'est parce que la capacité agit comme un seau et la résistance comme une arrivée d'eau (un tuyau). Pour remplir un seau prend plus de temps si le tuyaux est plus étroit/fin. En mesurant le temps que prends un seau pour se remplir, vous pouvez devinez quel est la taille du tuyau :-)
Par corolaire, en comptant le temps que met la capacité pour se charger, il est possible de déterminer la résistance du senseur FSR :-))))
Dans la pratique, on mesure seulement le remplissage jusqu'a la moitié du seau... oups!, de la capacité.

 
Crédit: AdaFruit Industries www.adafruit.com

 
Crédit: AdaFruit Industries www.adafruit.com

Dans ce cas, notre 'seau' est une capacité céramique de 0.1uF. Vous pouvez pratiquement utiliser n'importe quelle capacité mais cela affectera le temps de chargement.
0.1uF semble être une valeur de départ idéal pour les senseurs FSR.

  /* sketch de test pour senseur FSR .
    Connectez une borne du FSR à +5V, l'autre sur la pin 2 Digital.
    Connectez ensuite une broche d'une capacité de 0.1uF sur la pin 2 et l'autre à la masse/GND.
    
    Pour plus d'information, voir le wiki de MC Hobby (en Français)
        http://mchobby.be/wiki/index.php?title=Senseur_FSR
    Ou le site de Lady Ada (AdaFruit, en anglais)
        http://www.ladyada.net/learn/sensors/fsr.html 
  */
 
    int fsrPin = 2; // Le senseur FSR et capacité connectés sur pin2
    int fsrReading; // Lecture digitale
    int ledPin = 13; // LED sur Pin 13 (vous pouvez utiliser la LED disponible sur la carte)
    void setup(void) {
      // Faisons également un peu de débogage sur le moniteur série  
      Serial.begin(9600);
      
      pinMode(ledPin, OUTPUT); // Utiliser la LED comme sortie
    }

    void loop(void) {
      // Lire la résistance en utilisant la technique du temps de chargement RC
      //  (technique "RCtime" en anglais)
      fsrReading = RCtime(fsrPin);
      if (fsrReading == 30000) {
        // si nous avons atteint 30000 c'est un 'timed out'
        Serial.println("Rien de connecté!");
      } else {
        Serial.print("Lecture temps RC = ");
        Serial.println(fsrReading); // La lecture analogique brute
      
        // faire un peut de traitement pour faire
        // clignoter la LED
        fsrReading /= 10;

        // Plus vous pressez le senseur et plus la LED clignote vite!
        digitalWrite(ledPin, HIGH);
        delay(fsrReading);
        digitalWrite(ledPin, LOW);
        delay(fsrReading);
      }
      delay(100);
    }
    
    // Utiliser une broche digitale pour mesurer la résistance (comme un senseur FSR ou
    //   un photo-résistance!)
    // Nous y arrivons grâce à la résistance du FSR qui permet à la capacité de se charger
    // plus ou moins vite. C'est en comptant le temps qu'il faudra pour arriver à VCC/2
    // (tension d'activation de l'entrée digitale des Arduino, soit 2.5V) que l'on détermine
    // la valeur de la résistance du FSR
    //
    int RCtime(int RCpin) {
      int reading = 0; // démarre à 0
      // declaré la PIN comme sortie et la mettre au niveau bas... à la masse (LOW)
      pinMode(RCpin, OUTPUT);
      digitalWrite(RCpin, LOW);
      // Maintenant, mette la pin en entrée et...
      pinMode(RCpin, INPUT);
      // compter le temps qu'il faudra pour qu'elle arrive à HIGH
      while (digitalRead(RCpin) == LOW) {
        reading++; // incrémenter pour 'compter' le temps qui passe.
        if (reading == 30000) {
          // Si nous arrivons si loin, c'est que la résistance est tellement grande
          // que le temps de chargement tend vers l'infini (ou qu'il n'y a rien de 
          // connecté!) 
          
          break; // quitter la boucle
        }
      }
      // OK soit nous avons la valeur MAX, soit nous avons une lecture correcte.
      // Simplement retourner la valeur du compteur.
    return reading;
    }


Voici le résultat du sketch (texte en anglais... avant traduction)

 
Crédit: AdaFruit Industries www.adafruit.com

Il est possible de calculer la résistance depuis la valeur lue, cependant des paramètres propres aux différentes valeurs d'Arduino IDE et des cartes Arduino peuvent rendre ces valeurs peu consistantes d'un environnement à l'autre.

Tenez en donc compte si vous changez de version d'Arduino IDE, d'OS, une Arduino 3.3v au lieu de 5.0v ou un Arduino 16mhz au lieu de 8Mhz (comme un "lilypad")... cela explique les différences qui peuvent exister sur la quantité de temps nécessaire pour lire la valeur sur la pin digitale!

Ce n'est généralement pas un gros problème en soit mais cela peut rendre le débogage du projet beaucoup plus difficile si vous n'êtes pas au courant de ces particularités!

Source

Où Acheter

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com