Jauge de contraintes et HX711

Bonjour,
J'essaie de construire une balance pour une ruche. Voici mon montage :
7873d78d03823fb60bf2322e0fa944e0f3f66274

Voici mon code

#include <HX711.h>

#define DOUT 4
#define CLK 5

HX711 scale;

// Facteurs de calibration pour chaque jauge
// Remplacez les valeurs par les facteurs de calibration que vous souhaitez utiliser
const float calibrationFactors[4] = {0.005, 0.005, 0.005, 0.005};

void setup() {
  Serial.begin(9600);
  scale.begin(DOUT, CLK);
}

void loop() {
  float sumMass = 0.0;
  int numMeasurements = 5;

  // Mesurer les masses pour chaque jauge et calculer la somme
  for (int i = 0; i < numMeasurements; i++) {
    for (int j = 0; j < 4; j++) {
      float measuredMass = measureScale(j);
      sumMass += measuredMass;
      Serial.print("Jauge ");
      Serial.print(j + 1);
      Serial.print(": ");
      Serial.print(measuredMass);
      Serial.println(" g");
      delay(100);
    }
  }

  // Calculer la moyenne des masses mesurées
  float averageMass = sumMass / (numMeasurements * 4);

  Serial.print("Moyenne des masses mesurées: ");
  Serial.print(averageMass);
  Serial.println(" g");

  delay(1000);
}

float measureScale(int index) {
  // Appliquer le facteur de calibration à la lecture brute
  float calibratedReading = scale.read() * calibrationFactors[index];
  return calibratedReading;
}

Voici le retour de la console
07:56:37.773 -> Jauge 1: 1258.87 g
07:56:37.874 -> Jauge 2: 1258.95 g
07:56:37.974 -> Jauge 3: 1258.85 g
07:56:38.054 -> Jauge 4: 1258.66 g

Je n'ai placé aucune masse sur le plateau reposant sur les jauges
Je ne comprends pas pourquoi j'obtiens cela.
Pourriez vous m'aider, je vous en remercie beaucoup

Bonjour @Frankydu13

il est normal que les 4 valeurs soient ideniques .....et pas surprnnant que cette valeur commune diffère un peu de zéro

le HX711 amplifie et convertit la tension unique résultat du déséquilbre d'un pont de Wheatstone formé par 4 jauges correctement montées.Ce déséquilibre étant ci-dessous traité par les entrées INA= et INA- (extrait de la doc du composant HX711)
pont

la faible tension destinée à être amplifiée et convertie est (Vina+ - Vina-)
INA+ et INA - formant l'entrée différentielle principale des HX711

Acquérir 4 valeurs indépendantes et en faire la moyenne ne correspond pas au principe de fonctionnement des HX711

L'écart à zéro constaté se gère en faisant la tare pour compenser le poids du plateau et les petites inégalités entre les 4 jauges supposées parfaitement identiques en théorie

1 Like

Bonjour,
Je travaille aussi sur ce sujet.
Il y a une calibration à ajuster dans le programme

faut que je retrouve, du style : float BAL_CAL_FACTOR = 23000.0;
j'ai regardé cette video, si cela peut t'aider

Cordialement

1 Like

Bonjour,

J'etais parti sur un module sigfox, on me conseille LORA que je ne connais pas.
tu vas utiliser quelle module ?

Cordialement

Merci beaucoup. Si je comprends bien il faut que je modifie le code pour obtenir une seule mesure en tarant l'ensemble (4 jauges de contraintes + plateau) est ce bien cela ?

oui mais par la suite un moyennage (ou autre traitement) des valeurs successives s'avèrera peut être utile

tarer et calibrer

1 Like

Si je comprends bien, l'ensemble des 4 jauges de contraintes se comporte comme une seule jauge à 4 fils ? J'espère que je ne dis pas de bêtise ...

oui , c'est cela le pont de Wheatstone pouvant éventuellement comporter 4 jauges en en faisant travailler 2 en compression et 2 , opposés ,en extension

voir ici chez Sparkfun :+1::
https://learn.sparkfun.com/tutorials/load-cell-amplifier-hx711-breakout-hookup-guide/all

ou

1 Like

Le module élémentaire :
image

L'assemblage des modules :
image

L'alimentation se fait par E1 et E2
La mesure se fait par A et B

Rcomp = résistance qui travaille à la compression
Relong = résistance qui travaille à l'élongation.

Les Rcomp sont en série, les Relong sont en série

1 Like

Voici le code issus de Arduino with Load Cell and HX711 Amplifier (Digital Scale) | Random Nerd Tutorials

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/arduino-load-cell-hx711/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

// Calibrating the load cell
#include "HX711.h"

// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 4;
const int LOADCELL_SCK_PIN = 5;

HX711 scale;

void setup() {
  Serial.begin(57600);
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
}

void loop() {

  if (scale.is_ready()) {
    scale.set_scale();    
    Serial.println("Tare... remove any weights from the scale.");
    delay(5000);
    scale.tare();
    Serial.println("Tare done...");
    Serial.print("Place a known weight on the scale...");
    delay(5000);
    long reading = scale.get_units(10);
    Serial.print("Result: ");
    Serial.println(reading);
  } 
  else {
    Serial.println("HX711 not found.");
  }
  delay(1000);
}

//calibration factor will be the (reading)/(known weight)

j'obtiens sur la console (masse de ref de 3000g)

15:51:53.342 -> Tare... remove any weights from the scale.
15:51:59.086 -> Tare done...
15:51:59.086 -> Place a known weight on the scale...Result: 68105
15:52:05.853 -> Tare... remove any weights from the scale.
15:52:11.577 -> Tare done...
15:52:11.577 -> Place a known weight on the scale...Result: -21
15:52:18.379 -> Tare... remove any weights from the scale.
15:52:24.073 -> Tare done...
15:52:24.073 -> Place a known weight on the scale...Result: 7
15:52:30.867 -> Tare... remove any weights from the scale.
15:52:36.613 -> Tare done...
15:52:36.613 -> Place a known weight on the scale...Result: -4
15:52:43.361 -> Tare... remove any weights from the scale.
15:52:49.097 -> Tare done...
15:52:49.097 -> Place a known weight on the scale...Result: 8
15:52:55.845 -> Tare... remove any weights from the scale.
15:53:01.572 -> Tare done...
15:53:01.572 -> Place a known weight on the scale...Result: -26
15:53:08.357 -> Tare... remove any weights from the scale.
15:53:14.103 -> Tare done...
15:53:14.103 -> Place a known weight on the scale...Result: -34
15:53:20.858 -> Tare... remove any weights from the scale.
15:53:26.576 -> Tare done...
15:53:26.576 -> Place a known weight on the scale...Result: -3
15:53:33.358 -> Tare... remove any weights from the scale.
15:53:39.087 -> Tare done...
15:53:39.087 -> Place a known weight on the scale...Result: 10
15:53:45.857 -> Tare... remove any weights from the scale.
15:53:51.568 -> Tare done...
15:53:51.568 -> Place a known weight on the scale...Result: -1
15:53:58.378 -> Tare... remove any weights from the scale.
15:54:04.078 -> Tare done...
15:54:04.078 -> Place a known weight on the scale...Result: -10
15:54:10.853 -> Tare... remove any weights from the scale.
15:54:16.583 -> Tare done...
15:54:16.583 -> Place a known weight on the scale...Result: 13
15:54:23.389 -> Tare... remove any weights from the scale.
15:54:29.095 -> Tare done...
15:54:29.095 -> Place a known weight on the scale...Result: -15
15:54:35.862 -> Tare... remove any weights from the scale.
15:54:41.578 -> Tare done...
15:54:41.578 -> Place a known weight on the scale...Result: -11
15:54:48.346 -> Tare... remove any weights from the scale.
15:54:54.078 -> Tare done...
15:54:54.078 -> Place a known weight on the scale...Result: -19
15:55:00.846 -> Tare... remove any weights from the scale.
15:55:06.574 -> Tare done...
15:55:06.574 -> Place a known weight on the scale...Result: 11
15:55:13.373 -> Tare... remove any weights from the scale.
15:55:19.078 -> Tare done...
15:55:19.078 -> Place a known weight on the scale...Result: -32
15:55:25.856 -> Tare... remove any weights from the scale.
15:55:31.595 -> Tare done...
15:55:31.595 -> Place a known weight on the scale...Result: -15
15:55:38.345 -> Tare... remove any weights from the scale.
15:55:44.074 -> Tare done...
15:55:44.074 -> Place a known weight on the scale...Result: 29
15:55:50.880 -> Tare... remove any weights from the scale.
15:55:56.597 -> Tare done...
15:55:56.597 -> Place a known weight on the scale...Result: 17
15:56:03.364 -> Tare... remove any weights from the scale.
15:56:09.115 -> Tare done...
15:56:09.115 -> Place a known weight on the scale...Result: -20
15:56:15.870 -> Tare... remove any weights from the scale.
15:56:21.568 -> Tare done...
15:56:21.568 -> Place a known weight on the scale...Result: 12
15:56:28.358 -> Tare... remove any weights from the scale.
15:56:34.067 -> Tare done...
15:56:34.067 -> Place a known weight on the scale...Result: 18
15:56:40.880 -> Tare... remove any weights from the scale.
15:56:46.568 -> Tare done...
15:56:46.568 -> Place a known weight on the scale...Result: -25
15:56:53.380 -> Tare... remove any weights from the scale.
15:56:59.112 -> Tare done...
15:56:59.112 -> Place a known weight on the scale...

Que pensez vous de ces valeurs , avant que je ne calcul de facteur de calibration ?

je fais ma calibration comme cela :

#include "HX711.h"

#define DOUT  3  // modification selon le branchament
#define CLK  2  // modification selon le branchament

HX711 scale(DOUT, CLK);

float calibration_factor = -7050; //valeur de base peut etre mise à - 10 000

void setup() {
  Serial.begin(9600);
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press + or a to increase calibration factor");
  Serial.println("Press - or z to decrease calibration factor");

  scale.set_scale();
  scale.tare();	//remise à zero de la tare, ne rien poser

  long zero_factor = scale.read_average(); //Obtenir une lecture de base
  Serial.print("Zero factor: "); //Cela peut être utilisé pour supprimer le besoin de tarer la balance. Utile dans les projets à échelle permanente.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); //Ajuster à ce facteur d'étalonnage

  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 3); // 3 = 3 decimales, 2 ......
  Serial.print(" Kgs");
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.println();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }
}

je lance a vide puis je mets un poids connu. en effectuant des + ou -, tu obtiens ton poids avec la valeur de calibration que tu utiliseras dans tes programmes.

j'espere t'aider.

Moi ca a tres bien fonctionné

Cordialement

1 Like

Merci beaucoup à tous. J'y suis arrivé.
Est ce que la température a un impact significatif ? La balance se trouvera sous une ruche avec une température extérieure de 42°c environ en plein après midi en été.
Si oui, comment intégrer la fluctuation de T°c ?

Certainement la température aura un effet.
La question est de savoir s'il sera gênant.

Ce sujet a déjà été traité.
La balance pour les ruches et la porte de poulailler automatique sont les deux sujets qui ont les plus étés traités sur ce forum.
Le forum a un moteur de recherche, tu l'utilises pour profiter de l'expérience des autres.
J'y ai entré : Balance ruche
et j'ai obtenu 33 réponces.

1 Like

Merci beaucoup. Ta remarque est très pertinente quant à la gène éventuelle. Je vais rechercher sur le moteur de recherche

Bonjour Frankydu13
Je vous confirme que vous allez avoir des fluctuations en fonction de la température. Je suis actuellement en train de travaillez pour compenser ces fluctuations. J'obtiens quelques résultats intéressants même si je suis encore loin d'une annulation : j'arrive à les réduire d'un facteur 2.5 environ. Si cela vous intéresse on peut en discuter

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.