Wägezellen/ HX711 Darstellungsproblem

Hi ich will eine Wägezelle mit hx711 programmieren und mir das gewicht ausgeben lassen, mit diesem gewicht möchte ich später mithilfe einer konstruktion ein Drehmoment ermitteln.
Nun mein problem ich hab den Code libary usw. aber der Sensor bzw. Das Programm reagiert nur sehr langsam. Er zeigt mir das gewicht kurz an, nullt sich aber selbser wieder nach kurzer zeit. Auch im seriellen monitror läuft alles nur sehr langsam ab. Woran kann das Liegen?

#include <LiquidCrystal_I2C.h>

#include <Wire.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Adresse für den LCD Bildschirm
#include <HX711.h>

HX711 scale(A1, A0); // Stecker Eingänge für den HX711

long Rohwert;           //vom HX711 gelieferter Rohwert
long offset = 113480;  //offset
float Scale = 1766 ;   //scale
float Masse;            //berechnete Masse in g
const int buttonPin = 2; //Nummer für den Pushbutton Pin
int buttonState = 0;    //variable für reading the pushbutton status


// Hauptsetup/Hauptprogramm
void setup()
   {
    Serial.begin(115200);

    scale.set_gain(128); //A-Kanal: gain = 64 oder 128; B-Kanal: fix 32

     pinMode(buttonPin, INPUT);

     lcd.begin(16,2);          //Bildschirm wird initialisiert ,Befehl init ging nicht
  
    //Print a massage to the LCD.
     lcd.backlight() ;
     lcd.setCursor(4, 2);
     lcd.print("mg-Waage");
     
      delay(3000);
      
     lcd.setCursor(4,0);
     lcd.print("     ");
     lcd.setCursor(0,0);
     lcd.print("m = ");
    }

    
//Hauptschleife

 void loop(){
   
   buttonState = digitalRead(buttonPin); //Knopf für den neuen tara (offset)
   if (buttonState == HIGH)
     {
     scale.read_average(20);
     offset = scale.read_average(20); //Einlesen von 20 Rohwerten zu Ermittlung des tara (offset)
     }
     
   scale.read_average(20);
   Rohwert = scale.read_average(20); //Einlesen von 20 Rohwerten
   
   Masse = (Rohwert - offset) / Scale; //Berechnung der Masse in g
   
  
    Serial.print("Wert = ");
    Serial.println(Rohwert);

  
   Serial.print("Masse = ");
   Serial.println(Masse,2);
   
   
   lcd.setCursor(4,0);
   lcd.print("           ");
   lcd.setCursor(4, 0);
   lcd.print(Masse,0);
   lcd.print(" g");
   
   delay(50);
  }
  1. Den Code bitte in einen Code-Block schreiben, das macht die Sache übersichtlicher....dazu gibts links oben im Editor Fenster die Schaltfläche </>

  2. Du nutzt nur ein Delay von 50ms.... also alle 50ms muss sich das Display aktualisieren (neben den anderen Funktionen), was recht häufig ist. Erhöhe das Delay mal spaßenshalber auf 1000ms. Damit hast Du zwar erstmal 1fps, aber wenn es soweit funktioniert weißt Du, dass hier der Fehler liegt.
    Dann kannst Du eine Anzeige- und eine Messroutine schreiben, das Delay entfernen und das Programm mit millis neu anpassen (siehe Tutorial)

Der HX711 läuft normalerweise mit 10 Hz.

Jedes deiner scale.read_average(20); braucht also 2 Sekunden.

Es fehlt der Schaltplan. Ich tippe darauf, dass beim Tara-Tester der Pull-Down fehlt. Dadurch floatet der Eingang und die Waage stellt sich ständig auf Null zurück. Taravorgang plus Wägung sind 4s.. Das macht das Programm wirklich sehr träge.

Vielen Dank für die schnellen Antworten.

DerLehmi< Mit den delay(1000) probiert leider keine wirkliche Änderung.

Whandall< Ok sowas in der Art hatte ich auch mal gelesen und auch das der auf 80hz laufen kann, weiter habe ich sogar von so einer art mod gelesen bei dem die bei PIN15 auf dem HX711 nen Widerstand drauf setzen. Weißt du da mehr?

Theseus< Ok, ich habe nen "ganz normalen" tara Knopf installiert behaupte ich mal. Pull-Down? sagt mir weiter nichts.

Ich gebe nochmal mehr input.

Habe mich etwas an die Anleitung aus einem Video gehalten.(Bitte kein gelächte :wink: )

Das Vid https://www.youtube.com/watch?v=GjNk2_j021g&t=13s

Schaltplan für den tara Knopf>

#include <LiquidCrystal_I2C.h>
 
 
#include <Wire.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Adresse für den LCD Bildschirm
#include <HX711.h>
 
HX711 scale(A1, A0); // Stecker Eingänge für den HX711

long Rohwert;           //vom HX711 gelieferter Rohwert
long offset = 113480;  //offset
float Scale = 1766 ;   //scale
float Masse;            //berechnete Masse in g
const int buttonPin = 2; //Nummer für den Pushbutton Pin
int buttonState = 0;    //variable für reading the pushbutton status


// Hauptsetup/Hauptprogramm
void setup()
    {
     Serial.begin(115200);
 
     scale.set_gain(128); //A-Kanal: gain = 64 oder 128; B-Kanal: fix 32
 
      pinMode(buttonPin, INPUT);
 
      lcd.begin(16,2);          //Bildschirm wird initialisiert ,Befehl init ging nicht
   
     //Print a massage to the LCD.
      lcd.backlight() ;
      lcd.setCursor(4, 2);
      lcd.print("mg-Waage");
      
       delay(3000);
       
      lcd.setCursor(4,0);
      lcd.print("     ");
      lcd.setCursor(0,0);
      lcd.print("m = ");
     }

     
 //Hauptschleife
 
  void loop(){
    
    buttonState = digitalRead(buttonPin); //Knopf für den neuen tara (offset)
    if (buttonState == HIGH)
      {
      scale.read_average(20);
      offset = scale.read_average(20); //Einlesen von 20 Rohwerten zu Ermittlung des tara (offset)
      }
      
    scale.read_average(20);
    Rohwert = scale.read_average(20); //Einlesen von 20 Rohwerten
    
    Masse = (Rohwert - offset) / Scale; //Berechnung der Masse in g
    
   
     Serial.print("Wert = ");
     Serial.println(Rohwert);

   
    Serial.print("Masse = ");
    Serial.println(Masse,2);
    
    
    lcd.setCursor(4,0);
    lcd.print("           ");
    lcd.setCursor(4, 0);
    lcd.print(Masse,0);
    lcd.print(" g");
    
    delay(50);
   }

CountVertigo:
und auch das der auf 80hz laufen kann,
weiter habe ich sogar von so einer art mod gelesen bei dem die bei PIN15 auf dem HX711 nen Widerstand drauf setzen.
Weißt du da mehr?

Die Abtastrate wird per Pin eingestellt, da ist immer eine Brücke/Modifikations nötig um zu wechseln.
Bei meinem Modul-Typ konnte ich das so lösen (andere haben eine Lötbrücke auf der Unterseite)

Das blockierende Lesen des Sensors ist zwar bequem, aber dem Programmfluss sehr abträglich.

Man kann diesen Sensor auch ohne Blockieren lesen.

Ich habe mich mal daran versucht GitHub - whandall/NBHX711: A non-blocking Avia HX711 library for Arduino, kannst du dir ja mal anschauen.

Theseus< Ok, ich habe nen "ganz normalen" tara Knopf installiert behaupte ich mal. Pull-Down? sagt mir weiter nichts.

Ein Eingang braucht eine definierten Spannungspegel um nicht zufällige Werte zu liefern darum braucht es außer einem Taster (der normalerweise offen ist) auch noch einen Widerstand. Der wird Pullup (wenn er zwischen Pin und Versorgungsspannung) oder Pulldown (zwischen pin und Masse) Widerstand genannt.

Du brauchst einen Widerstand (Werte zwischen 10k und 100kOhm sind üblich) oder Du schaltest den Taster zwischen pin und Masse) und aktivierst den internen Pullupwiderstand.

Grüße Uwe

@uwefed

Angeblich benutzt er einen Pulldown Widerstand

Foto von oben

Aha, hatte er im Link versteckt.
Jetzt weiß er wenigstens was das ist.
Grüße Uwe

Hier nochmal MEINE Konstruktion.

Vom Code her meint ihr das müsse so in Ordnung sein ? Macht der Sinn?

Und sind da Große Unterschied welche Art von libarys ich benutze ? Vielleicht benutze ich nicht die entsprechende libary?

CountVertigo:
Und sind da Große Unterschied welche Art von libarys ich benutze ?

Ist für dich blockierend / nicht-blockierend ein großer Unterschied? Für mich schon.

Macht mein Code denn nun so Sinn? Also so Flüssig wie in dem Video was ich am Anfang verlinkt habe, läuft es bei mir nicht ! Wie gesagt er nimmt das gewicht kurz an und 0 sich wieder ein. Also er korrigiert sich nicht selber...(von wegen Waage schwankt im Ausdruck)

Kann sowas am Display liegen und die Einstellungen? Also kann ich mir nicht vorstellen.

Im seriellen monitor beobachte ich das auch, der "wert" steigert sich um einen gewissen Betrag und hält diesen, nachdem ich Gewicht auf den DMS gestellt habe. Und die "Masse" zeigt mir kurz gewisse g zahlen. fällt das wieder auf 0.

Und das beobachte ich wenn alle angeschlossen ist (Display, Knopf) und auch wenn ich nur den Sensor dran habe.

Logisch 0 sich deine Waage ständig, denn das befiehlst Du ihr auch. Laut dem Foto deines Aufbau ist der Tara-Taster Falsch angeschlossen! Du hast den Widerstand an 5V und am Eingangspin, den Taster hast Du zwischen Eingangs Pin und GND geschaltet. Damit ziehst Du mit dem Widerstand den Eingangs-Pin dauernd auf 5V (HIGH).
Im Sketch Prüfst Du, ogb der Eingang für TARA auf HIGH ist, und wenn ja, machst Du das Tara.
Nun wegen des an 5V angeschlossenen Widerstandes, ist dies eben immer der Fall!

Entweder Du schliesst den Widerstand an GND und dafür den Taster an +5V, - oder du änderst in Sketch fogende Zeile:

   if (buttonState == HIGH)

in:

   if (buttonState == LOW)

Aber nur eines der beiden ändern, also entweder die Verdrahtung des Tasters ODER den Sketch-

LG Stefan

juhu ein Erfolg

Danke für den Hinweis Deltaflyer! ich hab es umgesteckt. UND TATSACHE, es scheint zu Funktionieren.

Zum einen habe ich diese "mod" durchgeführt, dadurch läuft das System wesentlich schneller also zuvor, einfach nen 10k reingelötet.

und mit dem Hinweis auf den falsch angebrachten stecker läuft es nun.

Ich lege gewicht drauf, er erkennt es und sagt mir bspw. 35g an und hält dieses, bzw führt eine korrektur bei Gewichtänderung durch. Wenn das Gewicht runter geht oder ich etwas den Tara knopf drücke springt die Waage wieder auf 0. Klasse Vielen Dank Euch!