HX711 mit 4 Wägezellen an ESP 8266

Hallo zusammen,
Ich scheitere gerade daran vernünftige Messwerte mit einem HX711 am ESP8266 zu erhalten. Die Wiege -Ergebnisse wichen stark ab und verändern sich laufend im serial Monitor auch ohne Änderung der zu wiegenden Masse.
Ich habe diverse Projekte an einem Arduino Uno mit meiner Konfiguration problemlos laufen gesehen, grundsätzlich muss es also funktionieren.
Jetzt habe ich in einem Forum geslesen, dass es an der Taktfrequez des ESP liegen kann, da dieser ja erheblich mehr als der Uno hat. Kann ich den ESP8266 via Code auf die MHz des Uno drücken?

Besten Dank
Gruß
Timo

Ich wüsste nicht wie. Bin aber kein Ultra-Experte dazu.
Aber das müsste sich auch anders lösen lassen.
nachdem ich das Random Nerd tutorial gefunden habe das einen ESP8266 benutzt

Die Schnittstelle des HX711 wird mit einer bestimmten Geschwindigkeit betrieben
und um auf diese Geschwindigkeit zu kommen kann man da im Code der Library garantiert etwas anpassen.

Ist meine Vermutung, dass diese Anpassung an den Prozessortakt von der Library automatisch gemacht wird.

Die Spannungen die da an den Wägezellen gemessen werden variieren im Millivoltbereich.
Wenn du da wechselnde Werte bekommst dann könnte das auch an elektromagnetischen Störungen liegen. Wie lange sind denn die Leitungen zwischen Wägezellen und HX711?

Wenn die mehrere Meter sind dann hast du dir da ein empfindliches "Elektrosmog"-Messgerät gebaut.

Es ist immer eine gute Idee den kompletten Sketch zu posten.

Eine weitere Möglichkeit warum es evtl. nicht richtig funktioniert ist, dass der ESP8266 mit 3.3V arbeitet und ein Arduino Uno mit 5V

Was sagt das Datenblatt des HX711-moduls zur Betriebsspannung?

Eine weitere Möglichkeit ist, dass du die Clock/Data-Leitungen an IO-pins angeschlossen hast die dafür evtl. nicht geeignet sind
Hier ist eine Beschreibung welche IO-pins PULLUP bzw. PULLDOWN-Widerstände haben.

Um das zu überprüfen schließe zunächst mal nur eine Wägezelle in IO-pins an
wie in diesem Tutorial angegeben

1 Like
  1. Du kannst A+ und A- ( bzw B+ und B-) kurzschließen. Dann muß der Hx711 einen konstanten gleichbleibenden Wert geben (einige kleine Schwankungen würde ich schon zulassen).
  2. Die Schnittstelle des HX711 sollte typisch mit 500kHz (Takt) angesteuert werden ( max 2,5Mhz)
  3. Zwischen einer Messung un der nächsten müssen je nach beschaltung des RATE Pin 12,5mS bis 100mS zeit sein.

Grüße Uwe

Moin ihr zwei, habt vielen dank für euer Feedback.
@StefanL38
ich habe es mit Beispielsketchen und anderen funktionierenden Sketchen probiert ( funktionieren am Arduino). Ist also kein Sketch Thema
Leitungslänge kann es nicht sein, habe die Standardkabel verwendet, die müssten ja passen hoffe ich :wink:
Spannung könnte ein Thema sein, aber der HX sollte eigentlich auch an 3.3V laufen, da schau ich noch mal.

@uwefed
Kurzschließen kann ich das werde ich mal messen, habe schon unterschiedliche Hersteller der Module probiert, überall das gleiche Phänomen.
Wie kann ich Einfluss auf die 500Mhz nehmen?

Beste grüße und vieln, vielen Dank

Ergänzung es sind keine 500 MHz es sind 0,5 MHz bis 2,5 MHz.

0,5 MHz = 500 kHz

Der HX711 hat einen Clock und Datapin. Das bedeutet der Clock-Pin bestimmt den Takt.
Hast du ein Digitalmultimeter dass auch Frequenz messen kann?
Oder hast du einen Logic Analyser damit kannst du nachmessen mit welcher Frequenz der Clock-Pin geschaltet wird.

Explizit die Frage:
Hast du am ESP8266 einen Demo-Sketch benutzt und dabei darauf geachtet dass die gewählten IO-pins weder PULLUP noch PULLDOWN-Widerstände haben?
Wenn ja dann poste den kompletten Sketch den du benutzt hast.

Die langwierigste Fehlersuche ist die
die allzu viele Annahmen trifft "daran kann es nicht liegen"

So ich habe jetzt eine Wägezelle 5kg mit HX711 modul herausgeholt
Mit einem ESP8266 nodeMCU verbunden
Dann diesen Testcode geflasht

//
//    FILE: HX_kitchen_scale.ino
//  AUTHOR: Rob Tillaart
// PURPOSE: HX711 demo
//     URL: https://github.com/RobTillaart/HX711


#include "HX711.h"

HX711 scale;

//uint8_t dataPin = 6;
//uint8_t clockPin = 7;
uint8_t dataPin  = 12;//for esp8266
uint8_t clockPin = 13;//for esp8266

void setup() {
  Serial.begin(115200);
  Serial.println(__FILE__);
  Serial.print("LIBRARY VERSION: ");
  Serial.println(HX711_LIB_VERSION);
  Serial.println();

  scale.begin(dataPin, clockPin);

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

  Serial.println("\nEmpty the scale, press a key to continue");
  while(!Serial.available());
  
  while(Serial.available()) {
    Serial.read();
  }
  scale.tare();
  Serial.print("UNITS: ");
  Serial.println(scale.get_units(10));


  Serial.println("\nPut 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());
  while(Serial.available()) {
    Serial.read();
  }
}


void loop() {
  Serial.print("UNITS: ");
  Serial.println(scale.get_units(10));
  delay(250);
}
// -- END OF FILE --

und diese Ausgabe bekommen

22:22:33.654 -> Empty the scale, press a key to continue
22:22:59.717 -> UNITS: 16.90
22:23:00.752 -> 
22:23:00.752 -> Put 1000 gram in the scale, press a key to continue
22:23:21.248 -> UNITS: 999.99
22:23:22.287 -> 
22:23:22.287 -> Scale is calibrated, press a key to continue
22:23:33.666 -> UNITS: -0.04
22:23:34.847 -> UNITS: -0.01
22:23:35.979 -> UNITS: -0.07
22:23:37.112 -> UNITS: 100.09
22:23:38.245 -> UNITS: 264.85
22:23:39.426 -> UNITS: 264.89
22:23:40.561 -> UNITS: 264.87
22:23:41.692 -> UNITS: 264.87
22:23:42.826 -> UNITS: 264.85
22:23:44.006 -> UNITS: 264.85
22:23:45.139 -> UNITS: 264.89
22:23:46.272 -> UNITS: 264.94
22:23:47.407 -> UNITS: 264.89
22:23:48.586 -> UNITS: 264.90
22:23:49.719 -> UNITS: 245.07
22:23:50.850 -> UNITS: -0.17
22:23:51.983 -> UNITS: -0.10
22:23:53.163 -> UNITS: 6.79
22:23:54.297 -> UNITS: 81.38
22:23:55.427 -> UNITS: 81.37
22:23:56.561 -> UNITS: 81.37
22:23:57.742 -> UNITS: 81.44
22:23:58.878 -> UNITS: 81.47
22:24:00.010 -> UNITS: 81.41
22:24:01.189 -> UNITS: 62.98
22:24:02.322 -> UNITS: -0.13
22:24:03.455 -> UNITS: -0.15
22:24:04.588 -> UNITS: 179.23
22:24:05.768 -> UNITS: 398.06
22:24:06.903 -> UNITS: 398.15
22:24:08.037 -> UNITS: 398.07
22:24:09.169 -> UNITS: 398.12
22:24:10.350 -> UNITS: 398.18
22:24:11.481 -> UNITS: 398.14
22:24:12.614 -> UNITS: 398.14

Funktioniert. Einfach so.

Wie man sieht schwanken die Werte im hunderstel Grammbereich.
Der HX711 ist ein 24 bit AD-Wandler
Das bedeutet bei 3.3V eine Empfindlichkeit von 3.3V / 2^24 = 0.196 Millivolt.
Das ist überhaupt kein Wunder das da die hinteren zwei Bits die ganze Zeit schwanken.

Wenn dir jemand bei der Fehlersuche wirklich behilflich sein soll
dann ist es an der Zeit, dass du mal eine Menge Details postest:

  • Was kann die Wägezelle maximal wiegen?
  • Foto vom HX711-Modul plus link wo du es gekauft hast
  • Dokumentation welches Kabel der Wägezelle soll an welchen HX711-Anschluss
  • Fotos wie du alles verkabelt hast
  • Dein kompletter Sketch mit dem du gestestet hast
  • Die Zahlenwerte die du auf dem seriellen Monitor bekommst

Hi zusammen, ich bin gerade in der Hardwarefinalisierung gefangen, kann mich daher gerade nicht um die Software-Seite kümmern.
Werde mich aber natürlich noch darum kümmern, nur gerade jetzt passt es nicht.
Trotzdem tausend Dank, ich werde hier berichten.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.