Capteur de poids et Arduino nano

Bonsoir,

Je travaille sur un projet de capteur de poid à l’aide d’un module HX711 et d’une Arduino nano 33BLE , je vous joint ci dessous mon programme pour calibrer et mesurer les valeurs renvoyés , mais celui-ci me renvoi tantôt « inf » tantôt « nan ». Je voudrait savoir si mon programme était correct et quoi faire pour l’améliorer ou si le problème viens alors du montage,
Merci, bonne soirée

#include "HX711.h"

HX711 scale;

uint8_t dataPin  = 4;          
uint8_t clockPin = 5;        

void setup() {

  Serial.begin(9600);          
 
  while (!Serial);                   
  Serial.println(" Le module HX711 est connecté ")
  Serial.println("Début");

  scale.begin(dataPin, clockPin);

  Serial.print("UNITS: ");
  Serial.println(scale.get_units(10));            

  Serial.println("\n Initialisation de l'échelle:");
  while(Serial.available()) Serial.read();

  scale.tare();
  Serial.print("UNITS: ");
  Serial.println(scale.get_units(10));

  Serial.println("\n Put 1000 gram in the scale, press a key to continue");
  while(!Serial.available());
  while(Serial.available()) Serial.read();

  scale.calibrate_scale(1000, 5);
  Serial.print("UNITS: ");
  Serial.println(scale.get_units(10));

  Serial.println("\nScale is calibrated, press a key to continue");
  Serial.println(scale.get_scale());
  Serial.println(scale.get_offset());
  while(Serial.available()) Serial.read();
}


void loop()
{
  Serial.println(scale.get_units(10));
  delay(1000);
}

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

si vous utilisez cette bibliothèque il y a un exemple de calibration ➜ essayez le

Merci je vais essayer

Cette question ne règle en aucun cas votre problème, (je crois que celle de jml le fait), mais votre code est bizarre

est comprehensible pour moi

l'est aussi.

mais pas

Manquerait il une ligne? Serais je bigleux?

Oui, le code tel qu'il est n'est pas bon, il manque des choses.

mais certains éléments sont raisonnables :

Par exemple ceci est le code standard pour l'ouverture de la voie série et l'attente de son établissement si nécessaire

Quand on fait ! Serial on a un opérateur booléen (NOT) sur l'instance Serial. Il se trouve que la classe HardwareSerial surcharge l'opérateur de conversion en booléen et donc quand on fait ! Serial on déclenche cet opérateur. Sur un UNO cette fonction surchargée répond vrai à chaque fois mais sur les arduino USB natif (Leonardo, Micro, Due, Zero, MKR series, Nano 33 IoT, ...) il y a du code exécuté qui attend l'énumération CDC.


Le code habituel de calibration demande à l'utilisateur de mettre des masse connues sur la balance et d'appuyer sur entrée ↲.

Dans le moniteur série, suivant comment il est configuré, quand on valide, ça peut envoyer plusieurs (CR LF) caractères d'un coup.

Le code suivant

est une façon d'espérer vider le buffer d'entrée et d'avaler les 2 caractères (ce n'est pas garanti surtout à 9600 bauds donc le code n'est pas terrible).

L'idée c'est qu'il faut que le buffer d'entrée soit vide pour la prochaine phase d'attente sinon le code passera directement à la suite

OP a peut être eu un accident de copier coller.
Merci beaucoup d'avoir clarifié ce "code" .
Il faut faire attention avec le baudrate:https://github.com/bogde/NEPASCLICQUER/HX711/blob/master/examples/HX711_full_example/HX711_full_example.ino
donne, comme exemple, un baudrate à 57kBds, un autre exemple de la même librairie est à 38kBds... ça peut semer le désordre dans les tentatives de dépannage sur la ligne serie. Vous avez lié vers une source ... moins exotique...
Je ne sais pas combien HX711 a d'homonymes sous github...
edite: et merci pour le lien github d'arduino avr... malgré ma méfiance pour github...

tout le code source Arduino est là bas...

6 posts were split to a new topic: Discussion futile sur github

D’accord, merci pour vos explications, mais concrètement quels sont les points à changer pour que le programme fonctionne ?

Avez vous essayé?

Oui, mais rien n’est renvoyé dans le moniteur série

Le setup du code de demo commence par cela

Vous devriez au moins voir cela si votre terminal est à 115200 bauds

Savez vous regler le "baudrate" de votre terminal?
edite s'il est mal reglé, il devrait (de memoire) afficher des caracteres bizarres...

Ah, je viens de voir que vous êtes sur une Nano33 BLE et pas une Nano classique

C’est de l’USB natif, il faut rajouter

while (!Serial);    

Après le Serial.begin(). Le baud rate est ignoré

comment est alimenté Votre HX711 ?

Merci, le programme fonctionne maintenant

L’alimentation de mon module hx711 se fait via la sortie 5v et le GND de mon Arduino nano elle même branchée mon ordinateur via le Port Micro usb de la nano. Faut-il ajouter une tension d’alimentation externe pour le hx711 ?

normalement non, ça consomme peu - de l'ordre de 1.5 à 2mA de mémoire donc largement dans ce que peut fournir la pin 5V de. votre nano et d'une alim USB.

D’accord, merci. Cependant mon programme marche très bien avec une Arduino mega mais avec ne me renvoi que des zéros avec la nano. J’ai pourtant bien connecté les broches data et sck aux pins A4 (SDA) et A5 (SCL) de ma nano.


#include <Arduino.h>
#include "HX711.h"


// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 20;
const int LOADCELL_SCK_PIN = 21;


unsigned long startTime;  // Variable pour stocker le temps de début


HX711 scale;


void setup() {
  Serial.begin(115200);
  while (!Serial);
  Serial.println("HX711 Demo");
  Serial.println("Initializing the scale");


  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);


  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());      


  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));   


  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));   


  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1); 
            
  scale.set_scale(30000);
  scale.tare();             


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


  Serial.print("read: \t\t");
  Serial.println(scale.read());           


  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20)); 


  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));  


  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);  


  Serial.println("Readings:");
  startTime = millis();
}


void loop() {


  if (millis() - startTime >= 10000) {
    return; 
  }


  Serial.print(scale.get_units());
  Serial.print(",");
  //delay(1000);
}


Quelle bibliothèque exactement utilisez vous (lien)?

Est elle 100% compatible avec la Nano33 ?