Introduction

Le capteur de flexion est une bande de 7.3 cm de longueur dont la résistance varie lorsqu’on exerce une flexion dessus. Il peut se plier de 0 degrés jusqu’à 180 degrés.

Les capteurs Flex sont disponibles en deux tailles: une de 2,2 pouces (5,5 cm) de long et une autre de 4,5 pouces ( 11,4 cm) de long . 

Il peut-être utile dans plusieurs domaines : 

  • Il permet de mesurer le mouvement mécanique, le débit d’air, le débit d’eau et même les vibrations.
  • Il peut être utilisé comme capteur de mouvement ou comme interrupteur très résistant et très fiable.

Comment fonctionne le capteur ?

Un côté du capteur est imprimé avec une encre polymère qui contient des particules conductrices. Lorsque le capteur est droit, les particules confèrent à l’encre une résistance d’environ 30k Ohms.

Lorsque le capteur est plié à l’écart de l’encre, les particules conductrices s’éloignent davantage, augmentant cette résistance (à environ 50k-70K Ohms lorsque le capteur est plié à 90 et jusqu’à 125K Ohms à 180 degrés).

Attention !

Il ne faut toutefois pas trop plier la bande afin de ne pas la casser.

Les broches du capteur

Voici les broches du capteur de flexion :

  • GND : A brancher sur la masse de la carte Arduino
  • Vcc : A brancher sur la carte arduino avec une résistance de 10k ohms.

Afficher la valeur sur le moniteur série

On va maintenant voir comment afficher la flexion du capteur sur le moniteur série.

const int flexPin = A2; //On déclare la pin du capteur de flexion
int valeur; //Variable pour sauvegarder la valeur lue par le capteur

void setup(){
  Serial.begin(9600);// On initialize le moniteur série
}

void loop(){  
  valeur = analogRead(flexPin);         //On lit et sauvegarde la valeur lue par le capteur de flexion
  valeur = map(valeur, 700, 900, 0, 180);// On convertit les valeurs pour qu'elles correspondent à celles de la led 
  Serial.print("Le capteur est tordu a:"); // On affiche sur le moniteur série la valeur
  Serial.print(valeur);
  Serial.println("  degres");
  delay(100);                          //Attente entre deux mesures  
}

Voici ce que l’on obtient sur le moniteur série :

Allumer une led en fonction de l'inclinaison

Voici un circuit pour faire varier l’intensité de la led en fonction de la flexion du capteur. Quand le capteur est à 0°, la led est éteinte, mais plus le capteur de flexion s’approche des 180° plus la led brille.

const int ledPin = 9;   //On déclare la pin de la led
const int flexPin = A2; //On déclare la pin du capteur de flexion
int valeur; //Variable pour sauvegarder la valeur lue par le capteur

void setup(){
  pinMode(ledPin, OUTPUT);  //On définit la led comme une sortie
}

void loop(){  
  valeur = analogRead(flexPin);         //On lit et sauvegarde la valeur lue par le capteur de flexion
  valeur = map(valeur, 700, 900, 0, 255);// On convertit les valeurs pour qu'elles correspondent à celles de la led 
  analogWrite(ledPin, valeur);          //On assigne la valeur à la led
  delay(100);                          //Attente entre deux mesures  
}

Contrôler un servomoteur avec le capteur

Le dernier circuit que l’on vous propose permet d’adapter la rotation d’un servomoteur  avec un capteur de flexion. En effet il est très possible que ces deux composants soitent utilisés ensemble dans votre projet pour par exemple garder l’équilibre d’un robot en adaptant la position du servomoteur si le capteur est plus ou moins tordu.

Ici le servomoteur est à la position 0° quand le capteur n’est pas tordu, et 180° quand le capteur est complètement tordu.

#include <Servo.h> // la bibliothèque du servmoteur
Servo servomoteur; // le servomoteur
const int capteur_flex=A0;// Broche du capteur de flexion
int valeur_capteur = 0; // variable pour récupérer la valeur du capteur

void setup(){
  pinMode(capteur_flex, INPUT); //On déclare le capteur comme une entrée
  servomoteur.attach(12, 500, 2500);// On attache le servomoteur à la pin 12 de l'arduino
}

void loop(){
  valeur_capteur = analogRead(capteur_flex);// On lit et stocke la valeur du capteur
  valeur_capteur = map(valeur_capteur, 700,900, 0, 180); // On modifie cette valeur poru qu'elle doit entre 0° et 180°.
  servomoteur.write(valeur_capteur); // On assigne cette valeur au servomoteur
  delay(10); // pause de 10 milliseconde entre chaque  lecture de valeur
}