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
bonjour ! mon souci est le suivant : j’aimerais cree une balance avec un capteur de force avec le CAN Hx711 sans utiliser de librery ! comment pour ai-je procededer
Bonjour, à ma connaissance la seule manière de se passer de la librairie est de réécrire vos propres fonctions pour utiliser le capteur. Pour cela, il vous faut une bonne connaissance du matériel ou vous inspirer de la librairie en question.
Pour quelle raison ne pas utiliser la librairie?
Bonjour, J’ai un problème avec mon code, je fais varier le offset mais cela n’impacte pas les valeurs…. je ne peux donc avoir un capteur bien calibré
Bonjour,
avez-vous décommenté la ligne suivante?
//scale.set_offset(LOADCELL_OFFSET);
Bonjour j’ai un souci avec mon code. J’ai fait un code Calibrage pour avoir une valeur poids grâce à des capteurs TEM01052B. Ces 4 capteurs nécessite qu’un seul HX711.
Mais l’on m’a dit que le code de Calibration ne servait qu’à calibrer le montage pour vérifier qu’il soit bon. Je cherche donc un code qui permettrait de trouver mes valeurs poids et qui ne soit pas un code calibrage. Si jamais vous avez des idées
Bonjour, j’ai une question.
Est ce que c’est obligatoire d’avoir un poids de référence? En d’autres termes, suis je obligé de débarrasser mon capteur de tout poids avant scale.tar()?
Parce que j’utilise ce capteur pour une application, et j’aimerais que le capteur me donne le poids qui lui est accroché, que ce poids y soit dessus (accroché) avant ou après le tare. Est ce possible?
Bonjour,
oui pour faire une tare correct. comme toute balance, il y a une tare à faire à la mise sous tension.
si votre système est constamment allumé dans ce cas-là pas besoin de tare.
Après vous pourriez trouver une solution pour travailler en poids relatif mais il faudra connaitre le poids au moment de la tare ou avant l’allumage.
Bonjour,
Désireux concevoir un banc de traction pour modèle réduit, pourriez vous me dire à quel endroit je pourrai télécharger le capteur de force que vous utilisez avec fritzing?
Merci d’avance
Diiity
Bonjour, vous devez faire une recherche de « hx711 fritzing part »