Bonjour,
je débute avec les jauges de contraintes et j'en ai acheté une de 20kg Capteur de force 20 kg CZL635-20 - Force | GO TRONIC et aussi un amplificateur HX711 de chez sparkfun SparkFun Load Cell Amplifier - HX711 - SEN-13879 - SparkFun Electronics
J'ai commencé à bidouillé quelque code trouvé sur le net pour la calibration et après plusieurs effort j'ai suivi le tuto en anglais sur sparkfun sur la meme page que le module HX711.
Cependant lorsque je lance le code pour la calibration, le moniteur série affiche 0 lbs même si je mets un poids de 1kg dessus.
#include "HX711.h"
#define DOUT 3
#define CLK 2
HX711 scale(DOUT, CLK);
float calibration_factor = -7050; //-7050 worked for my 440lb max scale setup
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(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading
Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
Serial.println(zero_factor);
}
void loop() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor
Serial.print("Reading: ");
Serial.print(scale.get_units(), 1);
Serial.print(" lbs"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
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;
}
}
Un peu d'aide me serait utile
Merci et bonne journée!
Bonjour
Il me semble avoir déjà vu ces derniers jours la même demande.....
-Que donne l'action sur les touches indiquées dans le code pour la calibration ?
-Le schéma de raccordement des 4 jauges est-il effectivement bien respecté ?
Oui j'avais déjà demandé :
les actions dans le moniteur série change seulement le facteur de calibration et rien d'autre
Les messages multiples ne sont pas autorisés sr ce forum, ni les 'up'... il faut savoir attendre qu'un ou plusieurs bénévoles répondent .... Le non respect de la Règle du Forum amène très souvent le déplacement du fil dans la poubelle du Bar
Ce schéma est-il effectivement réalisé par le montage ?
Pour débugguer , voir dans la librairie. Il est possible d'afficher les données brutes, en amont de la 'mise à l'échelle moyennée' , avec d'autres fonctions que scale.read_average()
Bonjour
Je suis débutant en Arduino comme je ne comprends encore pas tout j'ai fait un programme qui n'utilise pas la bibliothèque Hx711, je l'ai consultée et j'ai trouve que c'était bien compliqué !
En regardant la datasheet en effet j'ai trouve plus facile de faire le programme très simple dont je te donne le code:
Principe:
Ce programme est base sur une interruption déclenchée sur front descendant sur la pin D2 (qui est connecte à DOUT du HX711) En effet quand DOUT passe de 1 à 0 les data sont disponibles (la conversion analogique digitale est terminée), il suffit alors de les extraire grâce aux pulses d'horloge (D4), un pulse par bit, dont 24 pulses, puis un dernier pulse indique au HX711 qu'on souhaite un Gain de 128 sur l’entrée A du HX711
On sort de l'interruption quand la donnée est complète
Retour dans la boucle loop la donnée est alors filtrée par un filtre pas bas (me rappelle plus mais en gros 1 Hz)
L'appui sur un bouton poussoir ( D3 ,pullup) génère une interruption qui enregistre la tare qui sera utilisée pour l'affichage
Avec ma jauge: 1kg , la sensibilité est à quelques 1/100g (un morceau de papier de 2cm2 ! )
//Jauge de contrainte 1kg , Hx711
const int TARE_Raz=3; //raz tare
const int PD_SCK=4; //pin horloge
const int DOUT=2; //entree data
volatile long Force=0;
volatile long ForcePrecedente=0;
volatile long ForceFiltree=0;
volatile long ForceFiltreePrecedente=0;
volatile long ForceFiltreeCorrigeeGain=0;
volatile bool Fincycle=false;
volatile bool NewData=false;
int N=0;
volatile float Somme=0;
//volatile float Moyenne =0;
volatile float Tare =0;
volatile float InverseGainFiltre =0.05; // filtre passe bas ForceFiltree(n) = Force(n)+Force(n-1)+CoeffFiltre* ForceFiltree(n-1)
//ForceFiltreeCorrigeGain(n) =ForceFiltree(n) *InverseGainFiltre
volatile float CoeffFiltre =0.9;
void Traction(){
Fincycle=!Fincycle;
if(Fincycle==true)
{
NewData=false;
Force=0; //variable de stockage des data
for(int i=1;i<=24;i++) //data sur 24 bit !
{
digitalWrite(PD_SCK,HIGH); //horloge à 1 pour extraire les bit data de DOUT
Force=Force<<1; //decalage gauche de la valeur precedente
if(digitalRead(DOUT)==HIGH)
{ // ajout de 1 a Force si DOUT=1
Force=Force+1;
}
digitalWrite(PD_SCK,LOW); //horloge à 0 fin cycle de lecture d'un bit
}
digitalWrite(PD_SCK,HIGH); // 25 eme clock horloge pour signifie au HX711 qu'on souhaite un gain de 128 sur les entrees A
digitalWrite(PD_SCK,LOW); //horloge à 0
NewData=true;
}
}