Il existe des capteurs de force assez simple d’utilisation et compatible avec les microcontrôleurs comme Arduino. Ils se composent d’une cellule d’effort et d’un module de conversion. La cellule d’effort est un capteur à jauge de contrainte permettant de mesurer un effort dans une seule direction de l’espace. Il est généralement accompagné d’un module HX711 capable d’amplifier la mesure des efforts appliqués sur la cellule de force.
Matériel
- Ordinateur
- Arduino UNO
- Câble USB A Mâle/B Mâle
- Module HX711
- Cellule d’effort
Principe de fonctionnement
Le module HX711 est composé d’un amplificateur et d’un convertisseur analogique numérique HX711. Il permet l’amplification d’un signal envoyé par une cellule d’effort. Le capteur d’effort utilise un pont de Weahstone afin de convertir l’effort qui lui est appliqué en signal analogique.
Schéma
Le module HX711 communique avec le microcontrôleur à l’aide de deux broches digitale (SCK et DOUT) et est alimenté en 5V. Il est relié à la cellule de force par 4 fils dont la couleur reste standard sur les ponts de Wheastone:
- Excitation+ (E+) or VCC RED
- Excitation- (E-) or GND BLACK or YELLOW
- Output+ (O+), Signal+ (S+), or Amplifier+ (A+) WHITE
- O-, S-, or A- GREEN or BLUE
Code
Pour récupérer une valeur de force du capteur, celui-ci doit-être calibré. Pour réaliser la calibration, il vous faudra lancer le code avec deux masses connues différents afin de calculer le gain et offset du capteur.
//Libraries #include <HX711.h>//https://github.com/bogde/HX711 //Parameters const long LOADCELL_OFFSET = 340884; const float LOADCELL_DIVIDER = 262.5F; const int numberOfReadings = 10; const int doutPin = 2; const int sckPin = 4; //Variables HX711 scale = ; float weight = 0; float initWeight = 0; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); scale.begin(doutPin, sckPin); scale.set_scale(); //remove scale divider scale.tare(); // reset the scale to 0 //find Serial.println("Put a known wait and send command"); while (Serial.available() == 0) {} Serial.print("Compute average on 10..."); Serial.println(scale.get_units(10), 1); //repeat with two different weight to find DIVIDER and OFFSET //WEIGHT= (val-OFFSET)/DIVIDER scale.set_scale(LOADCELL_DIVIDER); scale.tare(); //scale.set_offset(LOADCELL_OFFSET); delay(200); initWeight = scale.get_units(numberOfReadings * 10), 10; } void loop() { readScale(); } void readScale() { /* function readScale */ //// Read button states from keypad if (scale.is_ready()) { weight = scale.get_units(numberOfReadings), 10; Serial.print("weight : "); Serial.println(weight); } else { Serial.println("HX711 not found."); } }
Résultat
Lorsque le capteur de force est calibré, il renvoie la valeur en g ou en kg (ou même N) selon l’unité que vous avez choisit lors du calcul des paramètres du capteurs. Il est possible de lisser la mesure sur plusieurs valeurs en plaçant le nombre de lectures désirées dans la fonction get_units(numberOfReadings). Cela permet d’avoir une mesure plus stable et plus juste de l’effort.
Applications
- Créer une balance connectée
- Activer un mécanisme en fonction du poids d’un objet
Sources
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie