J'ai comme projet universitaire l'instrumentation d'une ruche et j'ai déjà tous les capteurs qui fonctionnent sauf celui pour la mesure du poids.
Je cherche à faire une balance avec une carte Arduino Leonardo ETH et des capteurs de force 50kg. (Ce type de capteur est-il bien monté en pont de Wheatstone ? On peut lire plein de choses différentes là dessus sur internet...)
Il me faut donc un ampli pour pouvoir lire les valeurs de poids qui sont beaucoup trop faibles sinon. J'ai commencé avec un ampli différentiel Grove , pour la facilité des branchements, que je n'ai pas réussi à faire fonctionner (les bibliothèques semblent trop compliquées).
J'ai donc voulu essayé avec un module HX711 pour lequel il y a beaucoup d'exemples sur internet. Sauf que je n'ai pas réussi à le faire marcher et j'ai essayé plusieurs programmes et bibliothèques différents en suivant les "modèles" que j'ai pu trouver... J'ai vérifié avec un multimètre la résistance entre les fils vert et blanc (signal). Lorsque que l'on exerce une force sur le capteur, la résistance augmente ce qui est cohérent et qui veut dire que le problème ne vient pas du capteur en lui-même.
J'ai à ma disposition deux capteurs de force 50kg, deux modules HX711 et deux amplis GROVE basés sur des INA 132.
Est-ce que quelqu'un aurait une idée afin de faire fonctionner une potentielle balance ? Je ne comprends pas ce qui ne fonctionne pas dans ce que j'ai fait.
J'ai comme projet universitaire l'instrumentation d'une ruche et j'ai déjà tous les capteurs qui fonctionnent sauf celui pour la mesure du poids.
Je cherche à faire une balance avec une carte Arduino Leonardo ETH et des capteurs de force 50kg. (Ce type de capteur est-il bien monté en pont de Wheatstone ? On peut lire plein de choses différentes là dessus sur internet...)
Il me faut donc un ampli pour pouvoir lire les valeurs de poids qui sont beaucoup trop faibles sinon. J'ai commencé avec un ampli différentiel Grove , pour la facilité des branchements, que je n'ai pas réussi à faire fonctionner (les bibliothèques semblent trop compliquées).
J'ai donc voulu essayé avec un module HX711 pour lequel il y a beaucoup d'exemples sur internet. Sauf que je n'ai pas réussi à le faire marcher et j'ai essayé plusieurs programmes et bibliothèques différents en suivant les "modèles" que j'ai pu trouver... J'ai vérifié avec un multimètre la résistance entre les fils vert et blanc (signal). Lorsque que l'on exerce une force sur le capteur, la résistance augmente ce qui est cohérent et qui veut dire que le problème ne vient pas du capteur en lui-même.
J'ai à ma disposition deux capteurs de force 50kg, deux modules HX711 et deux amplis GROVE basés sur des INA 132.
Est-ce que quelqu'un aurait une idée afin de faire fonctionner une potentielle balance ? Je ne comprends pas ce qui ne fonctionne pas dans ce que j'ai fait.
Merci,
Bonne journée !
Bonjour
ces capteurs fonctionnent tres bien avec des hx711
attention au cablage, il est trompeur avec la documentation ecrite
Brochage:
Rouge: + 5Vcc
Noir: GND
Vert: +
Blanc: -
il faut connecter
ROUGE sur E+ du HX711
NOIR sur E- du HX711
VERT sur A+ du HX711
BLANC sur A- du HX711
Et pour le code j'en ai utilisé plusieurs d'abord j'ai cette bibliothèque qui revient dans plusieurs codes, la HX711.h
#ifndef HX711_h
#define HX711_h
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
class HX711
{
private:
byte PD_SCK; // Power Down and Serial Clock Input Pin
byte DOUT; // Serial Data Output Pin
byte GAIN; // amplification factor
long OFFSET = 0; // used for tare weight
float SCALE = 1; // used to return weight in grams, kg, ounces, whatever
public:
// define clock and data pin, channel, and gain factor
// channel selection is made by passing the appropriate gain: 128 or 64 for channel A, 32 for channel B
// gain: 128 or 64 for channel A; channel B works with 32 gain factor only
HX711(byte dout, byte pd_sck, byte gain = 128);
HX711();
virtual ~HX711();
// Allows to set the pins and gain later than in the constructor
void begin(byte dout, byte pd_sck, byte gain = 128);
// check if HX711 is ready
// from the datasheet: When output data is not ready for retrieval, digital output pin DOUT is high. Serial clock
// input PD_SCK should be low. When DOUT goes to low, it indicates data is ready for retrieval.
bool is_ready();
// set the gain factor; takes effect only after a call to read()
// channel A can be set for a 128 or 64 gain; channel B has a fixed 32 gain
// depending on the parameter, the channel is also set to either A or B
void set_gain(byte gain = 128);
// waits for the chip to be ready and returns a reading
long read();
// returns an average reading; times = how many times to read
long read_average(byte times = 10);
// returns (read_average() - OFFSET), that is the current value without the tare weight; times = how many readings to do
double get_value(byte times = 1);
// returns get_value() divided by SCALE, that is the raw value divided by a value obtained via calibration
// times = how many readings to do
float get_units(byte times = 1);
// set the OFFSET value for tare weight; times = how many times to read the tare value
void tare(byte times = 10);
// set the SCALE value; this value is used to convert the raw data to "human readable" data (measure units)
void set_scale(float scale = 1.f);
// get the current SCALE
float get_scale();
// set OFFSET, the value that's subtracted from the actual reading (tare weight)
void set_offset(long offset = 0);
// get the current OFFSET
long get_offset();
// puts the chip into power down mode
void power_down();
// wakes up the chip after power down mode
void power_up();
};
#endif /* HX711_h */
et le code suivant :
/*
Example using the SparkFun HX711 breakout board with a scale
By: Nathan Seidle
SparkFun Electronics
Date: November 19th, 2014
License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
This is the calibration sketch. Use it to determine the calibration_factor that the main example uses. It also
outputs the zero_factor useful for projects that have a permanent mass on the scale in between power cycles.
Setup your scale and start the sketch WITHOUT a weight on the scale
Once readings are displayed place the weight on the scale
Press +/- or a/z to adjust the calibration_factor until the output readings match the known weight
Use this calibration_factor on the example sketch
This example assumes pounds (lbs). If you prefer kilograms, change the Serial.print(" lbs"); line to kg. The
calibration factor will be significantly different but it will be linearly related to lbs (1 lbs = 0.453592 kg).
Your calibration factor may be very positive or very negative. It all depends on the setup of your scale system
and the direction the sensors deflect from zero state
This example code uses bogde's excellent library: https://github.com/bogde/HX711
bogde's library is released under a GNU GENERAL PUBLIC LICENSE
Arduino pin 2 -> HX711 CLK
3 -> DOUT
5V -> VCC
GND -> GND
Most any pin on the Arduino Uno will be compatible with DOUT/CLK.
The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
*/
#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;
}
}
Et je me demande si c'est possible de "griller" les amplis ? Peut-être ai-je fait une fausse manip ou de mauvais branchements, ce qui voudrait dire que les amplis ne fonctionnent plus...
class HX711
{
private:
byte PD_SCK; // Power Down and Serial Clock Input Pin
byte DOUT; // Serial Data Output Pin
byte GAIN; // amplification factor
long OFFSET = 0; // used for tare weight
float SCALE = 1; // used to return weight in grams, kg, ounces, whatever
public:
// define clock and data pin, channel, and gain factor
// channel selection is made by passing the appropriate gain: 128 or 64 for channel A, 32 for channel B
// gain: 128 or 64 for channel A; channel B works with 32 gain factor only
HX711(byte dout, byte pd_sck, byte gain = 128);
HX711();
virtual ~HX711();
// Allows to set the pins and gain later than in the constructor
void begin(byte dout, byte pd_sck, byte gain = 128);
// check if HX711 is ready
// from the datasheet: When output data is not ready for retrieval, digital output pin DOUT is high. Serial clock
// input PD_SCK should be low. When DOUT goes to low, it indicates data is ready for retrieval.
bool is_ready();
// set the gain factor; takes effect only after a call to read()
// channel A can be set for a 128 or 64 gain; channel B has a fixed 32 gain
// depending on the parameter, the channel is also set to either A or B
void set_gain(byte gain = 128);
// waits for the chip to be ready and returns a reading
long read();
// returns an average reading; times = how many times to read
long read_average(byte times = 10);
// returns (read_average() - OFFSET), that is the current value without the tare weight; times = how many readings to do
double get_value(byte times = 1);
// returns get_value() divided by SCALE, that is the raw value divided by a value obtained via calibration
// times = how many readings to do
float get_units(byte times = 1);
// set the OFFSET value for tare weight; times = how many times to read the tare value
void tare(byte times = 10);
// set the SCALE value; this value is used to convert the raw data to "human readable" data (measure units)
void set_scale(float scale = 1.f);
// get the current SCALE
float get_scale();
// set OFFSET, the value that's subtracted from the actual reading (tare weight)
void set_offset(long offset = 0);
// get the current OFFSET
long get_offset();
// puts the chip into power down mode
void power_down();
// wakes up the chip after power down mode
void power_up();
};
#endif /* HX711_h */
et le code suivant :
/*
Example using the SparkFun HX711 breakout board with a scale
By: Nathan Seidle
SparkFun Electronics
Date: November 19th, 2014
License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
This is the calibration sketch. Use it to determine the calibration_factor that the main example uses. It also
outputs the zero_factor useful for projects that have a permanent mass on the scale in between power cycles.
Setup your scale and start the sketch WITHOUT a weight on the scale
Once readings are displayed place the weight on the scale
Press +/- or a/z to adjust the calibration_factor until the output readings match the known weight
Use this calibration_factor on the example sketch
This example assumes pounds (lbs). If you prefer kilograms, change the Serial.print(" lbs"); line to kg. The
calibration factor will be significantly different but it will be linearly related to lbs (1 lbs = 0.453592 kg).
Most any pin on the Arduino Uno will be compatible with DOUT/CLK.
The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
*/
#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();
Et je me demande si c'est possible de "griller" les amplis ? Peut-être ai-je fait une fausse manip ou de mauvais branchements, ce qui voudrait dire que les amplis ne fonctionnent plus...
Connecte en fonction des infos que j'ai donné au dessus en te basant sur la serigraphie arriere de ton module
Oui c'est ce que j'ai fait, je ne pense pas que le problème vienne des câblages. A moins que le code couleur du capteur que j'ai ne corresponde pas à celui qui est dans la doc.
Quand vous dites : ça ne marche pas, on veut bien vous croire et vous aider. Pour autant, un peu plus de précision dans "ce qui ne marche pas" pourrait nous éclairer.
C'est vrai que je n'ai pas dit ce qui marchait pas, c'était pas très malin :
Alors le problème est que je n'arrive pas à lire une valeur de poids. J'ai fait tous les branchements Arduino - ampli - capteur de force en suivant le bon code couleur, etc...
J'ai inclue la bibliothéque HX711.h et donc la HX711.cpp puis ouvert le code qui permet de faire l'étalonnage du capteur. (J'ai téléchargé ce fichier .zip pour la bibliothèque)
J'ai également des poids de masses connues pour faire l'étalonnage. Lorsque je pose un poids (je suis même allée jusqu'à 12kg), la valeur de masse ne change pas, elle reste à zéro.
AmelieeeeS:
C'est vrai que je n'ai pas dit ce qui marchait pas, c'était pas très malin :
Alors le problème est que je n'arrive pas à lire une valeur de poids. J'ai fait tous les branchements Arduino - ampli - capteur de force en suivant le bon code couleur, etc...
J'ai inclue la bibliothéque HX711.h et donc la HX711.cpp puis ouvert le code qui permet de faire l'étalonnage du capteur. (J'ai téléchargé ce fichier .zip pour la bibliothèque)
J'ai également des poids de masses connues pour faire l'étalonnage. Lorsque je pose un poids (je suis même allée jusqu'à 12kg), la valeur de masse ne change pas, elle reste à zéro.
avant de t'occuper de calibrer , il faut déja regarder si le hx711 seul est operationnel
que donne la sortie serie avec le programme ci-dessous ?
sans la jauge connectée (pas de connection E+ E- A+ A-)
/*
Arduino pin 2 -> HX711 CLK
3 -> DOUT
5V -> VCC
GND -> GND
Most any pin on the Arduino Uno will be compatible with DOUT/CLK.
The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
*/
#include "HX711.h"
#define DOUT 3
#define CLK 2
HX711 scale(DOUT, CLK);
void setup() {
Serial.begin(9600);
//scale.power_up(); // decommenter avec jauge connectée
}
void loop() {
Serial.println(scale.read()); // print a raw reading from the ADC
delay(250);
}
Si vous avez un multimètre, branchez le entre les bornes A+ et A- du HX711. Puis poser/enlever votre masse de 12 kg sur votre balance. Vous devriez voir une évolution de la tension aux bornes de votre multimètre, de l'ordre de 1 V.
ChPr:
Si vous avez un multimètre, branchez lz entre les bornes A+ et A- du HX711. Puis poser/enlever votre masse de 12 kg sur votre balance. Vous devriez voir une évolution de la tension aux bornes de votre multimètre, de l'ordre de 1 V.
Bonjour,
Je pense que tu veux dire de l'ordre de 1mV.
ChPr:
Si vous avez un multimètre, branchez lz entre les bornes A+ et A- du HX711. Puis poser/enlever votre masse de 12 kg sur votre balance. Vous devriez voir une évolution de la tension aux bornes de votre multimètre, de l'ordre de 1 V.
Cordialement.
Pierre
Je l'avais déjà fait avant et j'ai bien une valeur de l'ordre du mV. J'ai mesuré également en alimentant le capteur.
Artouste:
avant de t'occuper de calibrer , il faut déja regarder si le hx711 seul est operationnel
que donne la sortie serie avec le programme ci-dessous ?
sans la jauge connectée (pas de connection E+ E- A+ A-)
ChPr:
Si vous avez un multimètre, branchez le entre les bornes A+ et A- du HX711. Puis poser/enlever votre masse de 12 kg sur votre balance. Vous devriez voir une évolution de la tension aux bornes de votre multimètre, de l'ordre de 1 V.
Cordialement.
Pierre
Quand vous dites branchez aux bornes A+ et A- du HX711 ça revient à brancher directement sur le capteur c'est bien ça ?
Autre proposition, croisez les fils A+ et A- car s'ils avaient été connectés dans le mauvais sens, cela aurait correspondu à une masse négative ! ce qui donnerait certainement un résultat de pesée nul.
AmelieeeeS:
Je l'avais déjà fait avant et j'ai bien une valeur de l'ordre du mV. J'ai mesuré également en alimentant le capteur.
Je n'ai que des 0 qui s'affichent sur les deux HX711.
Par acquis de conscience je viens de faire un test simple
avec le petit prog plus haut et cette lib
HX711 alimenté en 5V par le uno
je n'obtiens jamais de valeur exactement à zero avec :
rien de connecté sur A+ A- (pins en l'air)
un cavalierCC ( flèche bleue) sur A+ A-
C'est un comportement tout à fait normal
la seule option pour obtenir du vrai ZERO est une inversion de CLK et DATA