Mega 2560 e HX711 problemi di lettura sensore

Buongiorno a tutti,

Sto realizzando una pesa, ha 4 sensori ma al momento ne stò provando solo uno.
Ho un Funduino mega 2560, un paio di moduli HX711 di diversi produttori e delle celle di carico da 20kg.

In sostanza il problema è che con la stranota libreria (bogde) non leggo il valore corretto. Mi scorrono i valori che si alternano tra loro ma NON reagiscono alla pressione sul sensore e addirittura scollegando il sensore i valori non cambiano.

Ho provato anche con una board di un produttore diverso ma niente da fare; ho pure scritto una mia funzione per leggere i valori grezzi dal sensore ma il problema (in forma diversa) rimane.

Sapreste darmi una dritta ? Vi allego il mio codice (quello scritto da me):

unsigned long adc_read(void);
#define SDTA 57
#define SCLK 56

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

void loop() {
  Serial.println(adc_read());
  delay(200);
}

unsigned long adc_read(void){
 unsigned long Count;
 unsigned char i;
 pinMode(SCLK, OUTPUT);
 pinMode(SDTA, INPUT);
 digitalWrite(SCLK, LOW);
 Count = 0;
 for (i=0;i<24;i++){
 digitalWrite(SCLK, HIGH);
 Count=Count<<1;
 digitalWrite(SCLK, LOW);
 if (digitalRead(SDTA)) Count++;
 }
 digitalWrite(SCLK, HIGH);
 digitalWrite(SCLK, LOW);
 return(Count);
}

Ho misurato il clock generato dal mega e ha su porte analogiche un ON-time/Off-time di 3,6uS e spicci, mentre su porte digitali è un pò piu lento ma comunque sempre sotto i 10uS (nel caso steste pensando a un problema di temporizzazzioni).

L'altro codice che ho usato l'ho preso da internet e mi sembra essere quello classico con prima la taratura e poi la misura vera e proprio fatte in due sketch diversi.

Se provi a fare un po' di ricerche qui sul forum (i'icona a forma di lente, in alto a destra) ... dovresti trovare vari post per gli HX711 ...

Guglielmo

Grazie, ma non sono nuovo dei forum e per evitare cazziatoni ho gia spulciato i vecchi thread :slight_smile: :slight_smile:

Ho pure misurato il bilanciamento dei sensori nella speranza di trovarli difettosi... ma niente.

mmm non mi pare che corrisponda a questa ma posso sbagliarmi...

tratto da https://www.mouser.com/ds/2/813/hx711_english-1022875.pdf

Reference Driver(C)
//-------------------------------------------------------------------
sbit ADDO = P1^5;
sbit ADSK = P0^0;
unsigned long ReadCount(void){
  unsigned long Count;
  unsigned char i;
  ADDO=1;
  ADSK=0;
  Count=0;
  while(ADDO);
  for (i=0;i<24;i++){
    ADSK=1;
    Count=Count<<1;
    ADSK=0;
    if(ADDO) Count++;
  }
  ADSK=1;
  Count=Count^0x800000;
  ADSK=0;
  return(Count);
}

Ciao, si ho preso spunto proprio da li e l'ho modificata per le esigenze di arduino.

Ma non è solo quella, ho pure provato altre librerie esterne e non funziona nessuna... Appena ho un attimo provo altri sensori.

Niente da fare, ho provato pure un quartetto di sensori con 3 fili opportunamente collegati, ma non cambia niente.

A queto punto credo che ci sia un problema sull'hardware/software di arduino. Se vi viene in mente qualchel prova che posso fare dite pure, intanto vi allego l'atro codice che ho usato.

#include <HX711.h>  //You must have this library in your arduino library folder

#define DOUT  57
#define CLK  56

HX711 scale(DOUT, CLK);

//Change this calibration factor as per your load cell once it is found you many need to vary it in thousands
float calibration_factor = -96650; //-106600 worked for my 40Kg max scale setup 

//=============================================================================================
//                         SETUP
//=============================================================================================
void setup() {
  Serial.begin(9600);  
  Serial.println("Press T to tare");
  scale.set_scale(-96650);  //Calibration Factor obtained from first sketch
  scale.tare();             //Reset the scale to 0  
}

//=============================================================================================
//                         LOOP
//=============================================================================================
void loop() {
  Serial.print("Weight: ");
  Serial.print(scale.get_units(), 3);  //Up to 3 decimal points
  Serial.println(" kg");
  delay(100);

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == 't' || temp == 'T')
      scale.tare();  //Reset the scale to zero      
  }
}

ma con questo sketch come si comporta?

Sto usando le celle di carico da 10kg sempre con HX711 ma non ho nessun problema. Prova semmai a spostare il D e il PD_CLK su altri piedini del tuo Mega.