Nachdem ich in EWD Waage selbst gemacht mit Arduino Teil 1 die nötige Hard – und Software vorgestellt habe, soll es hier mit dem Bau weitergehen:
Aufbau der EWD Waage:
Die Schaltung ist sehr einfach. Die beiden Sensoren und das Display werden parallel an den I²C-Bus angeschlossen. SDA an Pin 4 und SCL an Pin 5. Das Ganze versorgen wir dann noch mit 5 Volt und Masse.
Einer der beiden Sensoren bekommt noch einen 10-k-Widerstand zwischen Pin A und GND gelötet. Dadurch hat der Sensor eine andere I²C Adresse und beide Sensoren können angesprochen werden.
Der Rest wird einfach wie auf dem Schaltplan am Arduino angelötet (ich empfehle einen Arduino ohne bereits verlötete Stiftleiste. Das Auslöten macht keinen Spaß).
Anpassen der Software:
Ich gehe davon aus, das ihr die Basics à la „wie lade ich einen Sketch auf meinen Arduino“ bereits drauf habt. Andernfalls gibt es jede Menge gute Tutorials online. Ein guter Test ob alles funktioniert ist z. B. der Blink Sketch. Hier gibt es ein sehr gutes Einsteigertutorial dazu Klick.
Je nachdem wo und welche Komponenten ihr gekauft habt, können die I²C Adressen von denen im Sketch abweichen. Nachdem also die Schaltung zusammengebaut ist und ihr sicher seid das alles funktioniert, sollte man erst einmal den I²C Scanner ausführen. Der Serial-Monitor gibt uns nun die Adressen aller angeschlossenen Geräte aus.
1)https://playground.arduino.cc/Main/I2cScanner
Das könnte dann ungefähr so aussehen.
Sollten die Adressen von denen im Sketch abweichen, müsst ihr nun die erhaltenen I²C-Adressen für die Sensoren eintragen:
Und zwar hier
if (!sensor_A.begin(0x1C))
und hier
if (!sensor_B.begin(0x1D))
Und ganz wichtig, die Adresse für das LCD wird hier:
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7);
eingetragen.
Glückwunsch! Nun sollte die EWD Waage schon einmal funktionieren.
Um die Winkel auf null zu stellen, stellt man die Messbrücken einfach auf eine gerade Oberfläche und haltet den Taster für 3 Sekunden gedrückt. Das Display sollte nun „Reset OK“ Anzeigen, und die Winkel auf null stehen.
Kalibrieren:
Wie ihr vielleicht feststellen konntet, sind die Sensoren noch nicht kalibriert. Dies könnt ihr tun, indem ihr den Kalibrationssketch hochladet. Legt nun die Messbrücken auf jede mögliche Seite, also flach, auf den Kopf etc., und drückt dann immer die Leertaste. Dadurch werden die Maximalwerte der Sensoren eingelesen und Gain und Offset-Werte daraus berechnet.
Update 18.07.2018:
Da mich einige Anfragen zur Kalibrierung erreicht haben, möchte ich hier eine Schritt für Schritt Anleitung nachreichen:
- Den Sketch aus der Incidence Meter Calibration Datei auf den Arduino spielen. (Der Sketch befindet sich im ordner „src“. *.cpp Dateien können einfach in *.ino umbenannt werden.)
- Den Serial Monitor öffnen.
- Die beiden Messbrücken mit den Sensoren auf einen ebenen Tisch stellen und die Leertaste drücken. (Je nachdem welche Programmierumgebung ihr benutzt, müsste ihr die Eingabe dann senden )
- Nun stellt ihr die Messbrücken auf den Kopf und drückt wieder die Leertaste.
- Das wiederholt ihr so oft, bis ihr beide Messbrücken in wirklich allen Richtung in extremposition eingelesen habt. Die Minima/Maxima Werte müssen um die 4000 liegen.
- Offset und Gain sind die errechneten Kalibrationswerte die ihr in den Hauptsketch eintragen müsst. Offset sollte möglichst klein sein (keinesfalls 2000 o.ä.) und Gain sollte bei ca. 1 liegen.
Wenn alle Extrempositionen eingelesen sind, nehmt ihr die Werte für X, Y und Z von hier:
Type key when ready... -48 Minima Sensor A: -3998 -4056 -3992 Maxima Sensor A: 4032 4124 4112 Offset Sensor A: 85 132 159 Gain Sensor A: 0.9989011000000 0.9152625400000 0.9020757300000
und tragt sie im Sketch der EWD Waage ein
/*********************************CALIBRATION VALUES*******************************/ /*****************!!RUN THE CALIBRATION SKETCH AND FILL IN YOUR OWN VALUES!!****************/ #define offset_AX 0 // OFFSET values #define offset_AY 0 #define offset_AZ 0 #define offset_BX 0 // OFFSET values #define offset_BY 0 #define offset_BZ 0 const double gain_AX = 1; // GAIN factors const double gain_AY = 1; const double gain_AZ = 1; #define gain_BX 1 // GAIN factors #define gain_BY 1 #define gain_BZ 1
Das war nun auch schon alles. Solltet Ihr Fragen zum Bau, Verbesserungsvorschläge etc. haben, könnt ihr diese gerne in die Kommentare schreiben, oder an info@rc-maker.com schicken. Ich würde mich sehr darüber freuen.
Viel Spaß beim bauen!
Quellen
Hallo,
kann es sein, dass bei den Sensoren etwas geändert wurde? Zum Einstellen der Adresse muss eine direkte Verbindung zu GND hergestellt werden, da der Adress-Pin im Standard mit einem 10k auf 3V3 ist. Mit einem 10k gegen GND hätte man keinen definierten Zustand.
Hab die Sensoren von der angegebenen Adresse bestellt.
Grüße
Christopher
Hi,
ich habe auch den EWD-Sensor nachgebaut. Als Sensor habe ich den originalen Adafruit MMA8451von Eckstein verwendet. Soweit ist alles ok. Nach dem abnullen auf dem Tisch, sollte der Sensor bei einer Neigung der Meßschiene nach rechts oder links um (+/-45°), keinerlei Änderung erfahren, dem ist nicht so. Wenn ich eine der Meßschienen zur Seite Neige, dann habe ich je nach Richtung +/- 1,6° Abweichung am Display. Den Sensor mußte ich leider anpassen ( abfeilen ), da der Schacht zu klein war. Spielt dies eine Rolle?
Sollte der Sensor wider Erwarten nicht ganz mittig sein (Abweichung im 1/10 Bereich) hätte das Auswirkungen auf das Messergebnis, dafür ist ja doch das Kalibrieren zuständig, oder irre ich mich da?
Grüße
Robert
Hallo Robert,
ich werde bei Gelegenheit mal versuchen das nachzuvollziehen. Bei meinen Tests hats funktioniert. Ich habe allerdings auch keine V-Leitwerke vermessen.
Gruß Max
Hallo Max,
habe über die letzten Wochen die Beiträge in rc-networks und auf deiner Homepage sehr interessiert gelesen und mir die erste Waage zusammen gebaut.
Vielen Dank erst einmal für die super Informationen und das tolle Projekt an dich und die anderen im Forum.
Sensoren und Display werden bei mir erkannt und ich bekommen alle Werte angezeigt und berechnet. Nur zum kalibrieren bin ich wohl zu doof.
Die Beschreibung von dir auf deiner Homepage hilft mit hier leider nicht weiter. Wenn ich einen Sensor nach jedem drehen auslese (Leeertaste + senden drücken), dann bekomme ich in Summe 12 Werte bei 6 Seiten. Alle Werte unterscheiden sich, je nach Stellung des Sensors. Welchen Offset und Gain Wert von welcher Messung muss ich denn jetzt nehmen und in den Sketch einfügen?
Ich habe jetzt erst einmal den jeweils letzten Wert der Kalibrierung genommenn und die Waage funktioniert damit (scheinbar). Wobei ich mir nicht sicher bin, ob meine Einträge passen. Du hast in deinem Beispiel die Gain Werte für Ax bis Az mit 1 belegt (const double…). Ich habe hier die Werte der Kalibrierung eingetragen. Muss der Wert von deinem Beispiel den Wert 1 haben oder muss hier der Wert der Kalibrierung eingetragen werden?
Die zweite Frage von mir ist:
Warum bekomme ich einen Winkel angezeigt, wenn ich die Waage/den Sensor kippe (wie auf dem Bild von dir in rc.network Post 36). Bei dir wird Null Grad angezeigt. Sollte bei mir eigentlich auch so sein.
Meine dritte Frage ist:
Du liest in deinem Sketch alle Werte aus dem Sensor aus (X,Y,Z), und berechnest damit was?
Bei einer EWD-Messung müsste doch eigentlich eine Ebene/Achse ausreichend sein, oder bin ich hier auf dem Holzweg? Je nach Einbaulage des Sensors müsste nach meinem Verständnis die Achse X oder Y ausreichend sein zur Berechnung (nur eine Ebene). Die Achse Z (lotrecht zur Platine des Sensors) dürfte doch eigentlich nicht relevant sein. Über eine „Aufklärung“ von die würde ich mich sehr freuen.
Viele Grüße
Ralf
Hallo Ralf,
bei der Kalibrierung nimmst du den letzten Block der Ausgabe. Nur hier sind die Extremwerte für alle Achsen erfasst.
Es muss der beim kalibrieren errechnete Gain-Wert eingetragen werden. Im Beispiel steht dieser auf 1, da der Sketch damit funktioniert. Ist halt ungenau.
Warum bei dir beim Kippen der Sensoren ein Wert angezeigt wird, weis ich auch nicht. Wie groß ist denn die Abweichung? Sind die Druckteile genau im Winkel? Ist der Sensor winklig eingeschraubt?
Zur dritten Frage:
Wenn du es genau wissen willst, empfehle ich dir dieses Dokument: https://www.analog.com/media/ru/technical-documentation/application-notes/AN-1057.pdf
Stark vereinfacht ausgedrückt, wird die Z-Achse „rausgerechnet“ damit du den Sensor kippen kannst, und trotzdem Null rauskommt.
Viele Grüße
Max
Hallo Max,
besten Dank für deine Rückmeldung.
Habe zwischenzeitlich die ganzen Werte beim kalibrieren in ein Text File geladen, um die Änderungen nachvollziehen zu können. Wie du beschrieben hast, ist jeweils er letzte Wert/Block das was eingetragen werden muss, weil hier die die Extremwerte enthalten sind.
Die Gain-Werte habe ich zwischenzeitlich auch aus der Kalibrierung übernommen.
Zum Thema Winkel beim Kippen:
Die Druckteile sind winkelig und der Sensor ist auch winkelig eingeschraubt.
Nach dem Einschalten des Andruino bekomme ich (nach dem Sensortest) immer auf beiden Sensoren +16 Grad angezeigt. Nach Taster drücken (Nullen) habe ich 0 Grad, welche sich beim Kippen bis 90 Grad plus oder minus (Z-Achse zeigt nach unten oder oben, Sensor liegt waagerecht) langsam (exponential) bis auf -16 Grad ändern. Dieses Phänomen habe ich bei beiden Sensoren. Ich kann dir gerne dazu Fotos schicken zum nachvollziehen.
Zur dritten Frage (die hätte ich mir sparen können)
Ich habe mich seit langem mal wieder mit trigonometrischen Funktionen beschäftigt und mit einem Geodreieck das Kippen nachvollzogen. Dabei ist mir bewusst geworden, dass die Z-Achse in die Berechnung mit einbezogen werden muss, um den Bezug zur horizontalen Achse (Profilsehne) zu bekommen. Werde mir in eine ruhigen Stunde das Dokument aus deinem Link einmal durchlesen, um noch ein besseres Verständnis zu bekommen.
Viele Grüße
Ralf
Und du bist dir sicher das du die MMA8451 Sensoren hast? Schau mal mit der Lupe auf dem Chip. Es sind wohl einige Sensoren mit falschen Angaben im Umlauf
Hallo Max,
ich habe die orginalen Adafruit Sensoren gekauft. Auf der einen Seite der Platine steht: adafruit, 3-Axis 14 Bit Accelerometer, +-2/+-4/+-8g, 5V Safe.
Auf der anderen Seite steht: MMA8451
Auf dem Chip steht gar nichts. Da ist die Beschriftung entfernt worden.
Die Platinen sehen genauso aus wie auf deinem Verdrahtungsbild auf Seite 2 des Berichts, genauso wie die Bestückung der Bauteile.
Ich habe sie hier gekauft: https://www.digikey.de/product-detail/de/adafruit-industries-llc/2019/1528-1041-ND/4990790
Viele Grüße
Ralf
Digitale EWD Waage selbst gemacht klingt verlockend! Alles ist sehr verständlich erklärt, so sollte es bei mir keine Probleme geben. Vielen Dank für den Hinweis Kalibrationssketch zu verwenden.
Habe schon mal 2 Stück bestellt,
https://www.banggood.com/6DOF-MPU-6050-3-Axis-Gyro-With-Accelerometer-Sensor-Module-For-Arduino-p-80862.html?rmmds=buy&cur_warehouse=CN
werde erstmal den 8451 testen, wenn er dann kommt, später dann mal den 6050..
Es scheint im Moment einen Engpass=hoher Bedarf an 8451 zu geben..
schönen Gruß
Klaus
Kann auch der MPU 6050 16bit AD converter-chip, 16-bit data output
anstelle MMA8451, 14-bit verwendet werden?
schönen Gruß
Hallo Klaus,
theoretisch ginge das, und die 16bit Auflösung ist natürlich gut. Allerdings müsste der ganze Sketch dafür angepasst und eine andere Library eingebunden werden.
Gruß Max