Bonjour la communauté,
Je souhaite réaliser un appareil, utilisé en archerie, qui permet de peser les flèches et d'en mesurer la "rigidité" : le spine.
Les "extrémités" de la flèche reposent sur 2 capteurs de force 5kg, chacun ayant son propre amplificateur HX711.
Les actions sont déclenchées par des bouton poussoirs.
Les valeurs sont affichées sur un petit écran LCD I2C.
Mon soucis est que les valeurs sont absurdes ... c'est embêtant quand même ![]()
Les capteurs mesurent bien les variations de poids, mais les mesures ne fonctionnent pas du tout : Après la tare, la mesure du poids à vide indique 454 G au lieu de 0 et lorsque je pèse une flèche "étalon", la mesure ajoute 11 G au lieu de 21.
J'ai testé plusieurs exemples pour vérifier que mes capteurs fonctionnent bien, soient bien branchés, etc ... et tout va bien de ce côté là.
J'ai utilisé les exemples de calibrage, notamment celui de la bibliothèque HX711.h, ce qui m'a permis de déterminer les facteurs de calibrage des capteurs, mais je me suis rendu compte que quand le code appelle < scale[m].get_units(10)> , il ne va chercher que le 1er (449.93). Le deuxième n'est pas utilisé dans le calcul.
Bref, voici le code en question
(je ne l'ai pas précisé, mais j'imagine que vous comprendrez de vous même que je suis novice, autodidacte, qu'il y a beaucoup de notions qui m'échappent encore, ... Mais je suis motivé pour apprendre ... de mes erreurs et aussi de vos conseils avisés et bienveillants)
(J'espère avoir mis les bonnes balises
)
//MON PROGRAMME DE SPINE TESTEUR//
//LES LIBRAIRIES//
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneButton.h>
#include <HX711.h>
//DECLARER L'AFFICHEUR//
LiquidCrystal_I2C lcd(0x27, 16, 2);
//DECLARER LES BOUTONS, PINS ET ETAT//
OneButton bouton1 (4, true);
OneButton bouton2 (5, true);
OneButton bouton3 (6, true);
const uint8_t pinsDOUT[] = {2, 7};
const uint8_t pinsCLK[] = {3, 8};
float calibration_factor [] = {449.93, -476}; //DEFINIR LES FACTEURS DE CALIBRATION DES 2 HX711
float baseWeight = 0.00;
float spineWeight = 0.00;
HX711 scale1;
HX711 scale2;
HX711 scale[] = {scale1 , scale2};
void setup() {
Serial.begin (9600);
Serial.println("ARCHER, ");
Serial.println("JE TE SALUE !");
Serial.println(" ");
Serial.println("Bouton 1 : PESER LA FLECHE");
Serial.println("Bouton 2 : MESURER LE SPIN");
Serial.println("APPUYER LONG SUR LE bouton 1 POUR FAIRE LA TARE DU CAPTEUR DE CHARGE" );
Serial.println("_____________________________________________________________________" );
Serial.println();
lcd.init();
// ECRIRE UN MESSAGE D'ACCUEIL//
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Archer, ");
lcd.setCursor(0, 1);
lcd.print("Je te salue !");
delay (1000);
//FONCTIONS DES BOUTONS//
bouton1.attachClick(Click1);
bouton1.attachLongPressStop (LongPressStop1);
bouton2.attachClick(Click2);
bouton3.attachClick(Click3);
//bouton3.attachLongPressStop(LongPressStop3);
}
void loop() { //INITIALISATION DES BOUTONS//
bouton1.tick();
bouton2.tick();
bouton3.tick();
}
void LongPressStop1() { //Action du bouton 1 si appui long : faire la tare//
uint8_t m;
scale[m].begin(pinsDOUT[m], pinsCLK[m]);
scale[m].set_scale(calibration_factor [m]);
scale[m].tare();
delay (100);
lcd.clear(); //AFFICHAGE SUR L'ECRAN LCD
lcd.setCursor (0, 0);
lcd.print ("Poids :");
lcd.setCursor (0, 1);
lcd.print (0.0, 2);
lcd.setCursor (5, 1);
lcd.print ("G");
Serial.println ("APPUI LONG SUR BOUTON 1 = TARE"); //AFFICHAGE SUR LE MONITEUR SERIE
Serial.print ("Facteur de calibrage : ");
Serial.println(calibration_factor [m]);
Serial.println ("Tare ok ");
Serial.println();
delay(100);
}
void Click1() { //Action du bouton 1 si appui court : peser et indiquer le poids su l'afficheur//
uint8_t m;
scale[m].begin(pinsDOUT[m], pinsCLK[m]);
scale[m].set_scale(calibration_factor [m]);
scale[m].get_units(10);
baseWeight = scale[m].get_units(10);
lcd.clear(); //AFFICHAGE SUR L'ECRAN LCD
lcd.setCursor (0, 0);
lcd.print ("Poids :");
lcd.setCursor (0, 1);
lcd.print (baseWeight, 2);
lcd.setCursor (7, 1);
lcd.print ("G");
Serial.println ("APPUI SUR BOUTON 1 = MESURE DU POIDS"); //AFFICHAGE SUR LE MONITEUR SERIE
Serial.print ("POIDS : ");
Serial.println (baseWeight, 3);
Serial.println();
delay(100);
}
void Click2() { //Action du bouton 2 : peser, calculer le spine et l'afficher//
uint8_t m;
scale[m].begin(pinsDOUT[m], pinsCLK[m]);
scale[m].set_scale(calibration_factor [m]);
scale[m].get_units(10);
delay (100);
baseWeight = scale[m].get_units(10);
spineWeight = ((((baseWeight / 1000.00) - 0.521980143) * 60 / 1.565940428) + 20);
lcd.clear(); //AFFICHAGE SUR L'ECRAN LCD
lcd.setCursor (0, 0);
lcd.print ("Spine :");
lcd.setCursor (0, 1);
lcd.print(spineWeight, 3);
lcd.setCursor (8, 1);
lcd.print ("Gr");
Serial.println ("APPUI SUR BOUTON 2 = MESURE DU SPINE"); //AFFICHAGE SUR LE MONITEUR SERIE
Serial.print ("POIDS : ");
Serial.println (baseWeight, 3);
Serial.print ("SPINE : ");
Serial.println (spineWeight, 3);
Serial.println();
delay (100);
}
void Click3() { //Action du bouton 3 : Pas de fonction utile pour ce projet//
lcd.clear();
lcd.setCursor (0, 0);
lcd.print("Bouton 3"); //L'affichage permet de vérifier que le cablage est bon//
delay(100);
}
Est ce que vous sauriez me dire si le principe de ce code peut fonctionner ? (faire fonctionner 2 HX711 en parallèle et traiter les données moyennes ?), ou si je devrais repartir sur une autre piste ?
D'avance merci !


