Un capteur de flexion : voilà une utilisation originale des propriétés mécaniques des matériaux conducteurs. Cette fois pour un usage purement robotique puisqu’il s’agit de contrôler des moteurs en fonction de la courbure du capteur.
Le matériel
On utilise un capteur "Flex Sensor" de la société Spectra Symbol : deux fines couches de métal sont séparées par un polymère conducteur qui se déforme quand on le plie, modifiant la résistance aux bornes des deux couches métalliques.
Le capteur est souple, de taille réduite : extrêmement mince, la longueur du modèle le plus courant (12 centimètres) le rend idéal pour équiper un gant. Oui, c’est un gadget tout droit sorti des films de science fiction tels Retour vers le futur. Un univers qui inspire beaucoup la communauté geek.
Comme il s’agit d’un capteur à résistance variable, il nous faut simplement une résistance pour réaliser un pont diviseur de tension et obtenir ainsi une tension variable que l’on va pouvoir traiter sur une entrée analogique d’un micro-contrôleur.
Pour cet exemple on utilisera donc :
– un capteur Flex Sensor (entre 10 et 20 euros selon le pays)
– une Arduino ou toute carte avec une entrée analogique
– une résistance de 10 kOhms
– quelques fils et une plaquette d’essai.
– un moteur courant continu 5 volts, une led, etc...
Précaution : le connecteur serti dans la bande plastique qui rigidifie le capteur est très fragile lors de la soudure, attention de ne pas sectionner la piste métallique par une température trop élevée.
On peut aussi le fixer sans soudure directement dans une plaquette d’essai Labdec :
La manip’
Très simple : on réalise le pont diviseur en plaçant une borne du capteur à la masse, l’autre borne sur l’entrée analogique du micro-contrôleur, puis en plaçant une résistance de 10 kOhms entre cette entrée analogique = borne du capteur et la tension de référence (5 volts).
On connecte également un petit moteur (je l’ai fait sans contrôleur de puissance type pont en H, en étant assez rapide dans mes tests pour ne pas faire chauffer la carte) à courant continu entre la masse et une sortie PWM de l’Arduino ou du micro-contrôleur que vous utilisez.
Il ne reste plus qu’à lire la valeur sur l’entrée analogique et à générer un signal PWM de rapport cyclique proportionnel à la flexion du capteur.
Le code
Attention, adaptez ce code à votre montage et à votre carte Arduino : assurez-vous d’avoir un PWM sur la patte de connexion du moteur. Utilisez par exemple la patte 9 si votre version d’Arduino n’a pas de PWM (parfois indiqué par un en face du numéro sur les inscriptions de la carte) sur la patte 3.
Il se trouve dans les tests Arduino de notre répertoire de code, mais j’en recopie une bonne partie ci-dessous :
/**
* Exemple d’utilisation d’un capteur flexible
* de type "Spectra Symbol"
*
* (c) Julien Holtzer - Association Pobot - Janvier 2011
*
*/
// la valeur minimale qu’il faudra retrancher pour avoir une gamme raisonnable
int zero = 0 ;
void setup()
// Entrée analogique pour le capteur
pinMode(14,INPUT) ; // 14 = analog 0
// Sortie numérique pour le moteur
pinMode(3,OUTPUT) ;
// Moyenne sur 10 échantillons
for (int i = 0 ; i < 10 ; i++)
// division par le nombre d’échantillons
zero += analogRead(0)/10 ;
delay(500) ;
void loop()
// Génération d’un PWM sur la patte 9
// connecté à la borne + d’un petit moteur
// la borne - est à la masse
analogWrite(3,analogRead(0)-zero) ;
Et voilà, après copie dans l’Arduino, le moteur ne bouge pas quand le capteur est au repos, grâce à la soustraction du zéro relatif calculé en 10 itérations lorsqu’on démarre le programme.
Quand on plie le capteur (attention, ça ne fonctionne bien que dans un seul sens de pliure), le moteur accélère ! "It’s aliiive" !