Qu'est ce qu'un capteur de force ? Comment l'utiliser dans votre projet ?

Introduction

Le capteur de force permet de mesure une contrainte faite par l’utilisateur ou un objet et le transmet à la carte arduino sous forme de tension. Il est composé d’une cellule de force. La cellule de force est une jauge de contrainte permettant de mesurer un effort.

 Elle contient une resistance qui décroît en fonction de l’effort fourni. De cette façon l’effort peut-être calculé par rapport à la valeur de référence de la résistance. 

Le capteur de force peut lire une valeur allant de 0 newton à 10 newtons, ce qui corresponds à 1kg. Vous pourrez retrouver des capteurs allant jusqu’à 2-3 kg sur arduino. 

Selon ce dont vous avez besoin pour votre projet, il existe des capteurs de force de différentes taille et precision. 

Voici une petite liste de différents capteurs en fonction de leurs caractéristiques: 

 

CapteurPoids supportéTaille capteur
Hilitand0g -200g5 mm x 3.4 mm
RP-C10-ST20g et 2kg1×2.5 cm
RP-S40-ST10kg-20kg4×5.5 cm
Oumefar0 kg – 30 kg6×3 cm

Certain capteurs possèdent en plus un module de conversion pour amplifier le signal et le convertir en une valeur numérique. Ces capteurs ce branches sur une borne digital numérique de la carte Arduino. 

Voici un kit de different capteur de pression fonctionnant avec un module de conversion : 

Les broches du capteur de force

  • Vcc : Doit être branche au 5v de  votre carte Arduino
  • GND & Signal : On connecte cette broche à une résistance de 9.1 kilo-ohms, à une borne analogique et la masse

Afficher valeur sur le moniteur série

On va maintenant voir comment afficher les valeurs de force sur le moniteur série en newton-mètre.

#define capteur_force A0 // broche capteur de force

void setup() {
  Serial.begin(9600); // Initialisation du moniteur serie
}
void loop() {
  
  int lecture_valeur = analogRead(capteur_force); // on lit la valeur venant du capteur de force
  // Affichage de la valeur sur le moniteur serie
  Serial.print("Valeur du capteur : ");
  Serial.print(lecture_valeur);
  Serial.println(" milli Newton metre");
  delay(100); // pause pour attendre la valeur suivante
}

Voici le résultat sur le moniteur série :

Mesurer la force avec des LEDS

On va maintenant voir comment allumer des leds en fonctions de la force en newton-mètre.

Voici les valeurs pour lesquels les leds vont s’allumer:

 

Couleur LedValeur en Newton-mètre
LED Blanche200 >
LED Bleu450 >
LED Verte550 >
LED Jaune650 >
LED Orange800 >
LED Rouge900 >
#define capteur_force A0 // broche capteur de force
// on definit les leds
#define led_blanche 2 
#define led_bleu 3
#define led_verte 4 
#define led_jaune 5 
#define led_orange  6 
#define led_rouge 7 

void setup() {
  // on definit les leds en sortie
  pinMode(led_blanche, OUTPUT);
  pinMode(led_bleu, OUTPUT);
  pinMode(led_verte, OUTPUT);
  pinMode(led_jaune, OUTPUT);
  pinMode(led_orange, OUTPUT);
  pinMode(led_rouge, OUTPUT);
}
void loop() {
  
  int lecture_valeur = analogRead(capteur_force); // on lit la valeur venant du capteur de force
  // si la valeur est supérieur à 2 newton-mètre on allume la led blanche
  if (lecture_valeur > 200) { 
    digitalWrite(led_blanche, HIGH);
  }
  else digitalWrite(led_blanche, LOW); // On éteint la led si ce n'est pas le cas
  
  // On allume la led bleu si la valeur est supérieur à 4.5 Newton mètre
  if (lecture_valeur > 450) {
    digitalWrite(led_bleu, HIGH);
  }
  else digitalWrite(led_bleu, LOW);
  // on allume la led verte si la valeur est supérieur à 5.5 Newton-mètre 
  if (lecture_valeur > 550) {
    digitalWrite(led_verte, HIGH);
  }
  else digitalWrite(led_verte, LOW);
  // On allume la led jaune si la valeur est supérieur à 6.5 newton mètre 
  if (lecture_valeur > 650) {
    digitalWrite(led_jaune, HIGH);
  }
  else digitalWrite(led_jaune, LOW);
  // On allume la led orange si la valeur est supérieur à 8 Newton-mètre
  if (lecture_valeur > 800) {
    digitalWrite(led_orange, HIGH);
  }
  else digitalWrite(led_orange, LOW);
  // On allume la led rouge si la valeur est supérieur à 9 Newton-mètre
  if (lecture_valeur > 900) {
    digitalWrite(led_rouge, HIGH);
  }
  else digitalWrite(led_rouge, LOW);
}