3-Punkt-Biegeversuch

Hallo Leute,

ich bin leider völlig neu auf dem Gebiet des Arduino, soll jetzt aber damit arbeiten. Programmieren im weiteren Sinne ist nicht das Problem, auch wenn ich bisher nur mal was mit Java gemacht habe. Ich hoffe auf etwas Expertise hier.

Ich baue einen 3-Punkt-Biegeversuch in etwa Tischgröße für Kunststoffproben.

Dabei möchte ich zum einen einen Schrittmotor über einen Arduino steuern und zum anderen eine Kraftmessdose damit auslesen.

Zweiteres beschäftigt mich zunächst etwas mehr als der Schrittmotor (hierfür gibt es ja dutzende Anwendungsbeispiele im 3D-Druck).

Da ich unter Garantie irgendwann hier Hilfe suchen werde, dachte ich, mache ich gleich mal den Anfang.

Ich habe einen Thread zu einer Waage gefunden, der ganz vielversprechend klang:

Im Prinzip funktioniert so eine Waage ja genau, wie eine Kraftmessdose.

Es klingt etwas traurig, aber ich mache das im Hinblick auf Forschung und wollte deshalb fragen, ob jemand Erfahrung mit dem HX711 hat?
Eignet sich das Ding für mein Vorhaben oder bekomme ich damit im besten Falle Schätzwerte?
Soviel kann man an einer Wheatstonebrücke ja eigentlich nicht falsch machen?

Mein Plan ist im Moment mit diesem Sensor http://www.me-systeme.de/sensorik/kraftsensoren/km40.html?id=0 an den HX711 zu gehen und dann an den Arduino. Das ganze wird dann einmal über tar genullt, da ich den Sensor mit leichter Vorspannung im Versuchsaufbau anbringen muss.
Und dann soll das Ding mir einigermaßen genaue Werte bei gemächlicher Ausleserate ausgeben. Die Norm sagt nämlich 1mm/min und da sollten ein paar dutzend Werte pro Sekunde völlig ausreichen.

Nun ist es leider ein ziemlich Akt hier etwas zu bestellen ohne eigenes Geld dafür auszugeben. Und deshalb wollte ich sicher gehen, dass ich mir den HX711 nicht nach eintreffen ans Knie nageln kann.

Wäre super, wenn ihr mir etwas weiterhelfen könntet.

Und nur bereits im voraus, um nicht den Blutdruck von irgendjemandem in die Höhe schießen zu lassen:
Nein, ich verdiene damit nichts und ich möchte euch auch nicht als Arbeitstiere für irgendeine Abschlussarbeit einspannen :slight_smile:

Ich vermute mal, daß die Frage nicht ist, ob der HX711 für Dein Projekt geeignet ist, sondern ob Du für den HX711 geeignet bist :wink:

Im Prinzip ist Dein Projekt durchaus machbar, aber der Teufel steckt da im Detail. Beim Hantieren mit Spannungen im Millivolt-Bereich kommt es mehr auf die geeignete Verdrahtung an als auf die Elektronik. Für eine ordentliche Auflösung wird vielleicht ein externer ADC mit mehr als 10 Bit notwendig, der nahe am Sensor montiert wird.

Für die reproduzierbare Einleitung der Kräfte bzw. Biegung hast Du vermutlich schon einen Plan?

DrDiettrich:
Für eine ordentliche Auflösung wird vielleicht ein externer ADC mit mehr als 10 Bit notwendig, der nahe am Sensor montiert wird.

Der HX711 hat einen 24 Bit ADC eingebaut!

Autsch, da hatte ich wohl was ganz was anderes im Hinterkopf :frowning:

Sweeman:
. Die Norm sagt nämlich 1mm/min und da sollten ein paar dutzend Werte pro Sekunde völlig ausreichen.

Habe noch keine Erfahrung mit dem HX711 - aber schnell ist der sicher nicht - eher sehr langsam, zudem sollte es “ruhig” sein um einen richtigen Wert zu erhalten - also eine gleitende Veränderung bei einem Sigma Delta Wandler kann ein Problem sein.

80 Samples pro Sekunde sind möglich. Sigma Delta Wandler (und dann noch 24 Bit) sind natürlich langsam, aber wenn er meint dass ein paar Dutzend Wert in der Sekunde reichen kann es ok sein

Vielen Dank schon mal für die Beiträge!
Dass der Wandler theoretisch funktioniert, freut mich auf jeden Fall schon mal!
Wieviele Werte genau ich benötige, weiß ich erst, wenn ich die Spindel für die Krafteinleitung habe. Die Steigung wird ja bestimmen, wieviele Schritte mein Stepper machen muss um 1mm/min zu erreichen.
Hier ist es für meine Versuche auch nicht unglaublich zwingend nötig, dass es 1mm ist. Da der Versuch an sich sowieso noch keiner Norm unterliegt und sich lediglich an den aktuellen Standards orientieren soll.
Aktuell habe ich schon mal eine Spindel mit einer Steigung von 1mm. Das bedeutet ja einen Step alle 0,3 Sekunden. Kontinuierlich ist wohl etwas anderes, weshalb ich bereits ein Getriebe konstruiere, um das etwas zu glätten. 80 Samples klingt schon mal gut. Also muss ich zum Glück keine Messkarte auftreiben :slight_smile:

DrDiettrich:
Ich vermute mal, daß die Frage nicht ist, ob der HX711 für Dein Projekt geeignet ist, sondern ob Du für den HX711 geeignet bist :wink:

Im Prinzip ist Dein Projekt durchaus machbar, aber der Teufel steckt da im Detail. Beim Hantieren mit Spannungen im Millivolt-Bereich kommt es mehr auf die geeignete Verdrahtung an als auf die Elektronik. Für eine ordentliche Auflösung wird vielleicht ein externer ADC mit mehr als 10 Bit notwendig, der nahe am Sensor montiert wird.

Für die reproduzierbare Einleitung der Kräfte bzw. Biegung hast Du vermutlich schon einen Plan?

Da hat es sich bereits gelohnt hier zu schreiben. Vielen Dank! Das ist völlig aus meiner Planung gefallen und hätte mir sicher noch einige Sorgen bereitet. Ich hatte zunächst den Plan für die Elektronik ein Gehäuse drucken zu lassen, dass dann an den Lastrahmen geklemmt worden wäre. Was natürlich zu Problemen führen kann, wenn ich jetzt darüber nachdenke. Der Sensor ist vom Hersteller bereits verdrahtet und mit passendem Stecker für unsere Messelektronik gekommen (die ich nicht benutze, da sie ständig kaputt ist oder sonst wo unterwegs). Du meinst aber, dass der HX711 zu empfindlich auf die Leitung reagieren wird? Die länge beträgt etwa einen Meter. Ich wollte eigentlich eine Buchse für das IEEE1284 Kabel und den HX711 auf eine Platine löten. Dann hätte ich damit natürlich eine Menge zusätzlich kritische Stellen geschaffen.
Der Versuchsaufbau für eine reproduzierbare Krafteinleitung wird sehr ähnlich hierzu aussehen: http://grassezur.de/wp-content/uploads/2015/07/IMG_2756_detail.jpg
Die Dimensionen sind allerdings anders, da der kunststoff nicht Faserverstärkt sein wird, sondern Lasergesintert.

Eure Antworten helfen mir schon sehr! Ich werde das Ding heute mal bestellen und dann kann das Basteln beginnen :slight_smile:

Moin Leute, es ist soweit und mein Versuchsaufbau ist jetzt schon ziemlich physisch in dieser Welt vorhanden. Soweit bin ich eigentlich zufrieden, was Hardware und genauigkeit des Sensors angeht.
Was allerdings überhaupt nicht gut funktioniert ist die Abfragerate des Sensors.

Ich habe einen günstigen HX711 gekauft und nun nach einer kurzen Recherche, stellt sich heraus, dass hier mit 10Hz gemessen wird und man für 80Hz an den Microchippins rumlöten muss. Defacto ist es sogar noch langsamer, was ich aber wohl in der Lib vom HX ändern kann. Dort gibt es ein delay von 400ms für genauere Werte. Da ich sowieso eine ganze Menge Werte aufnehmen werde, ist mir das aber nicht so wichtig.

Mein Problem liegt eher darin, dass ich nun alles an einen Arduino angeschlossen habe. Das heißt den HX711 und einen A4988, mit dem ich meine Steppermotoren (2 Stk. parallel, das passt aber soweit von der Leistung und maximalem Strom) antreibe.

Nun kommt das, was ich nicht bedacht habe:
Das Delay der Messung vom HX711 verzögert natürlich meinen "Step" befehl an den Motor. Da ich möglichst glatte Bewegungen haben möchte, benutze ich 1/16 Schritte. Mit meiner Übersetzung von 1:10 und einer Spindelsteigung von 4mm benötige ich also bummelig alle 7,5 ms einen Step für einen Vorschub von 1mm/min.

Ich bräuchte also eine Art multitasking. Ist soetwas möglich? Ich habe mir schon mal das Beispiel "Blink without Delay" angeguckt. Ich halte das nur bedingt für eine gute Alternative, da meine Messung ja während der Steps weiterlaufen müsste. Vergesse ich irgendetwas oder muss ich mir nun tatsächlich noch einen Arduino Nano schnappen, der stumpf meinen Motor voran treibt und abundzu mal ein paar Daten an den anderen schießt?

Ich komme lieber mit 2 Messungen/Sekunde klar als mit einer unendlich langsamen Messung. Wenn ich am Ende 200 Proben damit kaputt machen will... Uff.

Für Multitasking möchte ich wieder mal auf ALib0 hinweisen. Man kann das natürlich alles zu Fuß programmieren, aber die Task-Makros machen den Code zumindest weit übersichtlicher.

Der DS18B20 (Temperatursensor) ist auch so ein Kandidat der mit der Standardlib. und den Beispielprogrammen den Arduino gerne mal für 750ms warten lässt.
Dort kann man aber mit etwas Geschick eine Wandlung im Sensor starten und später das Ergebnis abrufen. In der Zwischenzeit ist der Arduino dann frei für andere Dinge.

Vielleicht ist dieses Prinzip auch mit dem HX711 machbar. Dazu wäre ein Link zur verwendeten Library interessant damit man da mal reinschauen kann.

Gruß Peter

DrDiettrich:
Für Multitasking möchte ich wieder mal auf ALib0 hinweisen. Man kann das natürlich alles zu Fuß programmieren, aber die Task-Makros machen den Code zumindest weit übersichtlicher.

Vielen Dank, damit were ich mich erst mal genauer auseinandersetzen müssen!
Aber vom kurzen Überfliegen sieht das ja schon vielversprechend aus.

peter_de:
Der DS18B20 (Temperatursensor) ist auch so ein Kandidat der mit der Standardlib. und den Beispielprogrammen den Arduino gerne mal für 750ms warten lässt.
Dort kann man aber mit etwas Geschick eine Wandlung im Sensor starten und später das Ergebnis abrufen. In der Zwischenzeit ist der Arduino dann frei für andere Dinge.

Vielleicht ist dieses Prinzip auch mit dem HX711 machbar. Dazu wäre ein Link zur verwendeten Library interessant damit man da mal reinschauen kann.

Gruß Peter

Davon habe ich leider auch nicht so viel Ahnung. Also ob ich das den HX711 auf die eigene Kappe nehmen lassen kann und dann am Ende nur noch mal das Ergebnise abhole, nachdem ich die Berechnung angestoßen habe, oder ob er mir stumpf einfach nur Werte rüber wirft, die er aus dem analogen Signale gewandelt hat.

Verwendet habe ich diese Lib: GitHub - bogde/HX711: An Arduino library to interface the Avia Semiconductor HX711 24-Bit Analog-to-Digital Converter (ADC) for Weight Scales.

Ich wäre dir sehr dankbar, wenn du da mal einen Blick drauf werfen könntest.
Ich habe in der HX711.h schon die byte times von 10 auf 3 gesenkt und frage ihn jetzt nur noch alle 200ms per "Blink without delay"-Variante ab. Das hat in der Performance der Motoren schon gewaltig geholfen. Ein Unterschied ist aber klar zu erkennen.

Ich habe den Arduino gerade mal die Zeit mitschneiden lassen und es sind immer zwischen 93-100ms pro Abfrage. Das würde ja mit der 10Hz Rate übereinstimmen.

Hallo,
für den DS18B20 braucht es keine Lib, einige wenige Zeilen Code reichen.
Das aber nur am Rande.

Wäre mal gut zu wissen, was der TO denn überhaupt messen will.

Die Kraft, die es benötigt- um etwas zu zerstören?
Die Zeit, die es benötigt- um etwas zu zerstören?
Wieviel Zeit benötige ich, um etwas mit einer bestimmten Kraft zu zerstören?
Was für eine Kraft benötige ich, um etwas in einer bestimmten Zeit zu zerstören?
Das ganze geht auch mit unbestimmt…
Was will der TO da eigentlich kaputt machen?

Wenn der Faktor Zeit eine Rolle spielt, dann hat ein Delay() in dem Sketch
nichts zu suchen-
es sei denn, das Ergebnis darf z.B. in einer Toleranz von ± X ms liegen.
Gruß und Spaß
Andreas

SkobyMobil:
Hallo,
für den DS18B20 braucht es keine Lib, einige wenige Zeilen Code reichen.
Das aber nur am Rande.

Wäre mal gut zu wissen, was der TO denn überhaupt messen will.

Die Kraft, die es benötigt- um etwas zu zerstören?
Die Zeit, die es benötigt- um etwas zu zerstören?
Wieviel Zeit benötige ich, um etwas mit einer bestimmten Kraft zu zerstören?
Was für eine Kraft benötige ich, um etwas in einer bestimmten Zeit zu zerstören?
Das ganze geht auch mit unbestimmt…
Was will der TO da eigentlich kaputt machen?

Wenn der Faktor Zeit eine Rolle spielt, dann hat ein Delay() in dem Sketch
nichts zu suchen-
es sei denn, das Ergebnis darf z.B. in einer Tolerant von ± X ms liegen.
Gruß und Spaß
Andreas

Hey Andreas,
danke, dass du das noch mal so auf den Punkt bringst. Ich habe bemerkt, dass das wohl nur in meinem Kopf bzw. wenn man in der Materie steckt klar ist.

Ich baue gerade eine Druck-Prüfmaschine. Da werden genormte Kunststoffproben durchgebogen auf verschiedene Arten. Am Ende sieht es etwa so aus:

Wichtig ist hier vor allem, dass ich ein Kraft-Wegdiagramm erstellen kann. Dafür möchte ich die Kraft vom HX711 abgreifen, der an einer KM40 Messdose hängt und dazu lasse ich mir die Steps ausgeben. Die werden einfach per Variable mitgezählt. Daraus kann ich mir dann den Weg errechnen. Schlussendlich möchte ich eine serielle Kommunikation mit Python benutzen um mir die Werte zu holen und zu ploten.
Es ist nicht so unglaublich zeitkritisch. Die Norm sagt etwa 1mm/min. Lässt da aber Raum für Interpretation.
Außerdem wird der Prüfstand nicht genutzt um handfeste Werte zu ermitteln, sondern nur intern um das Druckergebnis aus unserem 3D-Druck besser bewerten zu können. Natürlich habe ich den Anreiz hier möglichst gute Ergebnisse einzufahren. Aber es ist hier auch keine Prüfanstalt :slight_smile:

Zum einen ist mir einfach wichtig, dass ich nicht 100 Jahre davor sitze und einem stotternden Motor zugucke und zum anderen sind mir die Drehungen im Moment noch zu unruhig.

Hallo,
also Zeit ist nicht so wichtig. Dein Vorhaben ist aber schon ziemlich sportlich.
Wenn da nichts ruckeln und zuckeln soll, braucht´s es einen kräftigen Motor.
Fast spielfrei laufende Spindeln. 1mm Steigung ist da schon recht heftig.
Der mechanische Aufbau wird nicht ohne sein.
Dann mal viel Spaß dabei.
Gruß
Andreas

Wenn ich deine Angaben richtig lese, arbeitest du mit einer Stepperkarte und Microschritten. 1/16 ist da schon heftig für den Motor, Microschritte sollte man nicht zu ausgiebig nutzen, auch wenn die Karte das kann. Der Motor ist nicht dafür ausgelegt, 1/16 Microsteps zu verarbeiten...auch wenn es wohl geht.

Stabiler und schonender sind Vollschritte oder Halbschritte. Mehr würde ich nicht machen. Eventuell musst du dir dann gedanken zum Getriebe machen. Aber Stepper laufen eigentlich schon mit 50Hz run, also mit einem Impuls alle 20ms. Jedenfalls bei Vollschritten. Spiel da mal etwas rum, verkleinere die Frequenz, dafür nimmt die Microsteps zurück.

Sweeman:
Ich wäre dir sehr dankbar, wenn du da mal einen Blick drauf werfen könntest.

In HX711.cpp finde ich in HX711::read() while (!is_ready()) als möglicherweise blockierendes Element.
In Deinem Sketch könntest Du das blockierende while in der Bibliothek durch ein if in Deinem Sketch aushebeln (ungetestet):

if(scale.is_ready()){
  wert = scale.read();
}