2 balances sur 1 HX711

Bonjour à tous,
Les cartes d'acquisition à base de HX711 sont capables de prendre en compte 2 entrées load cells (E et B)
E+,E- et B+,B-
Comment se fait dans le code le choix de l'entrée ?
Je souhaite pouvoir peser soit E , soit B ,soit en faire la somme.

doit on écrire:

Serial.print(scale.getGram(), 1);

pour la première load cell et :

Serial.print(scale.getGram(), 0);

pour la seconde ?

le code complet de mon exemple de base est:


// Hx711.DOUT - pin #A1
// Hx711.SCK - pin #A0

#include "hx711.h"

Hx711 scale(A1, A0);

void setup() {

Serial.begin(9600);

}

void loop() {

Serial.print(scale.getGram(), 1);
Serial.println(" g");

delay(200);
}

Je n'ai pas trouvé d'exemple de code sur le ouaib qui mets en pratique l'utilisation des deux entrées dispo. de la carte HX711

Merci pour vos réponses

soraka:
Bonjour à tous,
Les cartes d’acquisition à base de HX711 sont capables de prendre en compte 2 entrées load cells (E et B)
E+,E- et B+,B-

bonjour
E+,E- c’est l’Excitation du/des ponts
les entrées c’est A+,A- et B+,B-

Re ...
En effet ... A+ A- et B+ B-

et donc la réponse à ma question est ? ...

soraka:
Re ...
En effet ... A+ A- et B+ B-

et donc la réponse à ma question est ? ...

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);

soraka:
et donc la réponse à ma question est ? ...

dans la datasheet

Input and gain selection is controlled by the
number of the input PD_SCK pulses (Table 3).
PD_SCK clock pulses should not be less than 25
or more than 27 within one conversion period, to
avoid causing serial communication error.
PD_SCK Pulses Input channel Gain
25 A 128
26 B 32
27 A 64
Table 3 Input Channel and Gain Selection

comme tu peux le voir l'entrée B a un gain fixe de 32 alors que le A c'est 64 ou 128 donc difficile a utiliser avec le même capteur

re-re bonsoir,

C'est un exemple de code simple que je demande basé sur celui ci dessous .
Ensuite j'extrapolerai pour ma propre appli.
Vos réponses sont interressantes mais je ne suis pas plus avancé.
J'ai bien 2 capteurs distincts , un sur l'entrée A et l'autre sur l'entrée B
merci.


// Hx711.DOUT - pin #A1
// Hx711.SCK - pin #A0

#include "HX711.h"

HX711 scale(A1, A0);

void setup() {
Serial.begin(9600);
}

void loop() {

//----lecture entrée cellule A------
Serial.println(scale.read());
Serial.println(" kg (A)");
delay(200);

//-----lecture entrée cellule B------
Serial.println(scale.read());
Serial.println(" kg (B)");
delay(200);

}

il faut mettre ton code entre les balises code et /code

soraka:
C’est un exemple de code simple que je demande basé sur celui ci dessous .

et bien c’est pas simple puisque l’entrée est selectionable dans la déclaration
HX711 scale(A1, A0, 32);
voir ici

il faut faire un scale.begin pour chaque canal

scale.begin(A1, A0); //pour canal A avec gain 128 (gain lib 128 par defaut)
scale.begin(A1, A0,64); // pour canal A avec gain 64
scale.begin(A1, A0,32); // pour canal B (gain fixe de 32)

A tester : (compile OK)

#include "HX711.h"

HX711 scale;

void setup() {
  Serial.begin(9600);
  Serial.println("HX711 Demo A B");
  scale.power_up();
}


void loop() {
  scale.begin(A1, A0); // canal A gain=128
  Serial.print("CANAL A GAIN=128 : ");
  Serial.println(scale.read());

  scale.begin(A1, A0, 32); // canal B gain=32
  Serial.print("CANAL B GAIN= 32 : ");
  Serial.println(scale.read());

delay(1000);

}

non,ça compile pas chez moi ...
La fonction scale.begin(); n'est pas reconnue
trop compliqué ....
Je vais essayer autrement en faisant passer Dout de A et Dout de B par un CD4053 que l'arduino pilotera pour aller chercher les données soit sur l'un soit sur l'autre.
Merci encore

soraka:
non,ça compile pas chez moi ...

quelle lib utilise tu ?
trouvée où ?
celle que j'utilise

rjnc38:
voir ici

tout dépend de la lib utilisée
dans le lien ci dessus il y a une fonction set_gain qui fait la commutation

J'utilise la librairie HX711-master déjà dans d'autres croquis de pesée.
si je télécharge une autre lib. HX711,ça va tout me planter.
Je vais faire comme j'ai dit,juste pour ce montage.
Merci

soraka:
J'utilise la librairie HX711-master déjà dans d'autres croquis de pesée.
si je télécharge une autre lib. HX711,ça va tout me planter.
Je vais faire comme j'ai dit,juste pour ce montage.
Merci

ça ne me dit toujours pas où tu a recupéré cette lib :sunglasses:

il semble y avoir plusieurs lib avec le même "nom", mais gérant différemment l’accès aux canaux A et B

Maintenant si passer par une usine à gaz hard (4053) avec ses dispersions caractéristiques nécessairement induites te semble être pour toi la meilleure solution, je ne vais pas perdre mon temps à tenter d’être plus convaincant ... :grin:

soraka:
trop compliqué ....
Je vais essayer autrement en faisant passer Dout de A et Dout de B par un CD4053 que l'arduino pilotera pour aller chercher les données soit sur l'un soit sur l'autre.

on voit pas trop ce que tu cherche réellement à faire, exploiter des cellules avec 2 gains différents implique une résolution différente (déjà avec un gain de 128 on récupère pas grand chose alors avec 32 ...)
plutôt que d'utiliser un commutateur pourquoi ne pas utiliser 2 HX711 (commuter Dout n'est pas suffisant puisque la commutation se fait par SCK)
sans connaitre toutes tes contraintes on va avoir du mal a t'aider ...

J’ai récupéré cette lib. sur github je crois.
Je cherche à peser sable,gravier,eau , ciment dans une bétonnière pour faire du béton de façon à avoir toujours le même dosage et le même volume par gâche.
Je ne suis pas à 100gr près…
La longue bascule est sous les roues de la béto. et la petite sous le pied fixe.(Une bétonnière a trois points d’appui au sol)
Chaque bascule est composée de 4 capteurs load cell (50kg) montés en pont de wheatstone(montage Instructables)
Avec les deux bascules je peux peser 400kg.
Chaque bascule A et B est équipée d’un module HX711 et doit pouvoir servir seule.
Lorsque la bétonnière est posée sur les deux,je dois pouvoir faire la somme des 2 .Voilà …

Et si j'utilisais la liaison série Wire entre 2 arduinos ? un master et un slave pour communiquer mes infos de pesée de l'un vers l'autre? j'ai trouvé dans les exemples de la lib.Wire les croquis "master_writer" et "slave_receiver" .... serais-ce ma solution?

soraka:
J'ai récupéré cette lib. sur github je crois.

bonjour
fait un .zip de ta librairie et poste le ici

soraka:
La longue bascule est sous les roues de la béto. et la petite sous le pied fixe.(Une bétonnière a trois points d'appui au sol)
Chaque bascule est composée de 4 capteurs load cell (50kg) montés en pont de wheatstone(montage Instructables)
Avec les deux bascules je peux peser 400kg.
Chaque bascule A et B est équipée d'un module HX711 et doit pouvoir servir seule.
Lorsque la bétonnière est posée sur les deux,je dois pouvoir faire la somme des 2 .Voilà ...

alors pourquoi ne pas utiliser 1 seul Arduino avec 2 HX711 qui ont chacun les 4 cellules raccordées sur l'entrée A
(je l'ai fais sur une UNO pour voir la dérive de 2 types de capteurs qui étaient donc sous la même charge)
tu peux ainsi :

  • avoir des paramètres (offset et calibration) propres a chaque balance
  • faire la tare sur les 2 balances en même temps (que la bétonnière soit sur une ou deux balances)
  • afficher le poids individuels et la somme des deux

j'utilise cette librairie : GitHub - bogde/HX711: An Arduino library to interface the Avia Semiconductor HX711 24-Bit Analog-to-Digital Converter (ADC) for Weight Scales.

C'est exactement ce que je veux faire ,rjnc38 !
mais comment l'arduino va piloter l'un OU l'autre HX711???
par exemple dans ce croquis de démo,comment rajouter un second HX711?

#include "HX711.h"

// HX711.DOUT	- pin #A1
// HX711.PD_SCK	- pin #A0

HX711 scale(A1, A0);		//le paramètre gain est omis,la valeur 128 ser

void setup() {
  Serial.begin(38400);
  Serial.println("HX711 Demo");

  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());			// print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));  	// print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));		// print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);	// print the average of 5 readings from the ADC minus tare weight (not set) divided 
						// by the SCALE parameter (not set yet)  

  scale.set_scale(2280.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();				        // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));		// print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided 
						// by the SCALE parameter set with set_scale

  Serial.println("Readings:");
}

void loop() {
  Serial.print("one reading:\t");
  Serial.print(scale.get_units(), 1);
  Serial.print("\t| average:\t");
  Serial.println(scale.get_units(10), 1);

  scale.power_down();			        // put the ADC in sleep mode
  delay(5000);
  scale.power_up();
}

en déclarant une double instance avec des noms différents sur des ports différents

HX711 balance1(A1, A0); 
HX711 balance2(A3, A2);

et ensuite tu transforme tous les scale.xxxx en balance1.xxx et balance2.xxx