Hallo Microcontrollergemeinde, ein Kumpel und ich wollen ein Vibrationsmessgerät bauen das ziemlich genau die Stärke der Vibration messen kann. Unser 1. Ansatz war das mit ein Arduino + Piezo element umzusetzen (siehe Schaltplan) Leider ist jetzt bei unseren Ergebnissen die Streubreite der Amplitude (Spannung des Piezo Elements) bei gleicher Vibration zu hoch für unser Vorhaben. Streuung siehe Foto Unsere Frage; kennt ihr eine Möglichkeit die Vibration genauer messen zu können? - wir haben ein einfaches Piezoelement (ca. 50cent) benutzt - wir haben schon ein OP Verstärker ausprobiert der eher die Streuung vergrößerte. - bestenfalls würden wir das Problem mit dem Arduino der Einfachheit wegen lösen wollen/ wären aber auch offen für neue microcontroller da die Tastrate des Arduino nicht sonderlich hoch ist. Über Anregungen/Tipps /Ideen würden wir uns sehr freuen
:
Bearbeitet durch User
Ich wuerd einen externen ADC empfehlen, der etwas mehr Rummms hat. Mehr Bits, mehr Geschwindigkeit.
Christopher Lamers schrieb: > Über Anregungen/Tipps /Ideen würden wir uns sehr freuen Wie waere es mit einem speziellen Vibrationssensor? https://www.sparkfun.com/products/9199
Christopher Lamers schrieb: > das ziemlich > genau die Stärke der Vibration messen kann "der Vibration" ? Welcher Vibration? Ein Piezo-Quitscher ist kein Beschleunigungsaufnehmer und Angaben zu Intensität und Frequenzbereich sowie zu den Achsen wären sicher hilfreich.
Hmm, sieht so aus als könnte man damit gut den Arduino schrotten. Macht mal einen 10k Widerstand in Reihe zum Eingang. Versucht mal die Samplerate zu erhöhen, im Moment kann Eure Variation einfach durch zu langsame Abtastung erklärt werden. Wenn der Arduino nicht mehr hergibt, dann Tiefpass mit Kondensator hinterm Widerstand. Das Ding hier kennt Ihr? Geht sehr gut! http://www.watterott.com/de/Piezo-Vibrationssensor-klein-horizontal Entweder wie beschrieben mit Teiler bzw. Vorwiderstand an den ADC, oder noch einen Kondensator vor dem Eingang als Tiefpassfilter. Grenzfrequenz müsst Ihr Euch aber selbst ausrechnen. Wenn Ihr es hochpräzise wollt: http://www.meas-spec.com/product/t_product.aspx?id=5433 Hier ein paar Grundlagen: http://www.digikey.com/en/articles/techzone/2011/dec/fundamentals-of-piezoelectric-shock-and-vibration-sensors Eventuell könnt Ihr Euch auch überlegen, ob nicht ein Beschleunigungsmesser besser geeignet ist.
:
Bearbeitet durch User
Moin, Vibrationsmessung geht auch mit gängigen Drehraten-/Beschleunigungssensoren (MPU6000/6050). Hängt natürlich vom zu messenden Frequenzbereich ab. Heraus kommt dann sowas wie im Anhang. Gruß Dirk
Viel kann ich dazu nicht sagen.... Weiß ja auch noch nicht mal genau, was ihr überhaupt messen wollt.... Eine (vielleicht) ähnliche Aufgabe habe ich vor langen Jahren mal so gelöst, dass ich Schwingungen induktiv aufgenommen haben. Magnet in Spule federnd+gedämpft aufgehangen. Signal in die Soundkarte eines PC und eine FFT drüber gescheucht. Bei höheren Frequenzen wäre ich vermutlich auch auf Piezo gegangen und das gleiche Verfahren angewendet. Das geht mit dem Uno/Arduino natürlich so nicht. Die Auto/Motor Heinis haben da auch so ihre Tricks auf Lager.... Die verwenden spezialisierte Bausteine um Klopfen auszuwerten. Z.B.: einen TPIC8101 Siehe: https://www.mikrocontroller.net/articles/Klopfsensormessgerät Einen TPIC8101 würde man vermutlich an einen Arduino dran bekommen.
Wie sieht das Oszillogramm des Piezo Signales aus ? Wie groß ist die höchste gemessene Frequenz und liegt Ihr mit Eurer AD Abtastrate mindestens um Faktor zwei höher ? http://de.wikipedia.org/wiki/Nyquist-Shannon-Abtasttheorem Vibration ist meistens eine Frequenzmischung. Ohne FFT kommt im Idealfall eine Peakmessung dabei raus, die sich aber viel einfacher über eine peak hold Schaltung (D+C) erreichen lässt.
@Irep > "der Vibration" ? > Welcher Vibration? > Ein Piezo-Quitscher ist kein Beschleunigungsaufnehmer und Angaben zu > Intensität und Frequenzbereich sowie zu den Achsen wären sicher > hilfreich. Es handelt sich um ein Flummi der Auf eine Tischplatte fällt. (siehe Bild) In welchem Frequenzbereich das jetzt ist weiß icht so genau. Wenn man aber eine seismische Masse an das Piezo hängt kann man auf jeden Fall sehr schwache Aufschläge detektieren (Allerdings mit den Problem wie oben beschrieben) @Jemin Kamara > Versucht mal die Samplerate zu erhöhen, im Moment kann Eure Variation > einfach durch zu langsame Abtastung erklärt werden. Wenn der Arduino > nicht mehr hergibt, dann Tiefpass mit Kondensator hinterm Widerstand. > Das Ding hier kennt Ihr? Geht sehr gut! > http://www.watterott.com/de/Piezo-Vibrationssensor-klein-horizontal > Entweder wie beschrieben mit Teiler bzw. Vorwiderstand an den ADC, oder > noch einen Kondensator vor dem Eingang als Tiefpassfilter. Grenzfrequenz > müsst Ihr Euch aber selbst ausrechnen. > Wenn Ihr es hochpräzise wollt: > http://www.meas-spec.com/product/t_product.aspx?id=5433 Danke auf jeden Fall für deine Tipps und der Link Wir lassen uns die werte mit Serial.print darstellen: void setup() {Serial.begin(9600);} void loop() { int vibration = analogRead(A0); Serial.print("Sensorwert = " ); Serial.println(vibration);} Zwar steht im Internet dass der ArduinoBefehl "analogRead" eine sample rate von 10.000 1/s hat aber die ausgegebenen Werte erscheinen gerade mal mit 56 1/s Über ein Tiefpassfilter hab ich auch schon drüber nachgedacht (da ich den oft bei anderen die was ähnliches machten gesehen hab), doch mir ist nicht ganz klar was dadurch verbessert werden kann. Ich kenne den Tiefpass nur als Filter um unerwünschtes Rauschen rauszufiltern.Rauschen wär ja bei uns nicht das Problem
Klassische peak hold Anwendung. Dich interessiert nur der erste, größte Wert. Diode + Kondensator hält peak wert. Über AD Pin entladen vor nächster messung. Sonst musst Du eine wahnsinns Samplingrate fahren um den extrem kurzen Peak zu messen. Schütze den AD mit einem Serienwiderstand. Die integrierten Dioden nach GND / VCC machen dann den Rest.
Christopher Lamers schrieb: > int vibration = analogRead(A0); > Serial.print("Sensorwert = " ); > Serial.println(vibration);} Christopher Lamers schrieb: > aber die ausgegebenen Werte erscheinen gerade > mal mit 56 1/s Wenn ihr jeden Wert einzelnd in Echtzeit über die Serielle......
Christopher Lamers schrieb: > ein Vibrationsmessgerät bauen das ziemlich genau die Stärke der > Vibration messen kann. Nimm einen kalibrierten Beschleunigungssensor. Dieses Gebastel mit dem "Piezosensor" trifft sich niemals mit dem Begriff "genau". Ich würde sagen, die Begriffe kommen sich nicht mal in die Nähe... Stichwort für die Google-Suche: ADXL Aber so wie ich das sehe, hat eure Aufgabe mit "genau" auch gar nichts zu tun, sondern bestenfalls mit "schnell" und "empfindlich": Christopher Lamers schrieb: > Es handelt sich um ein Flummi der Auf eine Tischplatte fällt. Christopher Lamers schrieb: > Zwar steht im Internet dass der ArduinoBefehl "analogRead" eine sample > rate von 10.000 1/s hat aber die ausgegebenen Werte erscheinen gerade > mal mit 56 1/s Tja, wenn du mit deinem Ferrari (ADC mit 10000/sec) hinter einem Trekker (serielle Schnitte mit 9600Baud) herzuckelst, dann wirst du die möglichen 300km/h auch nicht ganz ausreizen können...
:
Bearbeitet durch Moderator
Max Mustermann schrieb: > Wenn ihr jeden Wert einzelnd in Echtzeit über die Serielle...... Kann von "Echtzeit" überhaupt keine Rede sein. Ihr könnt eure Samplingrate schon vervielfachen, wenn ihr die serielle Ausgabe mit 115200 oder sogar mehr macht (angeblich bis 250baud möglich). Das ist aber immernoch nicht richtig. Also: Messwerte im RAM des µC (4kb sind schon was) puffern und anschließend ausgeben lassen. Array anlegen, mit Messwerten füllen, wenn voll, Ausgabe!
Christopher Lamers schrieb: > void setup() > {Serial.begin(9600);} > void loop() > { > int vibration = analogRead(A0); > Serial.print("Sensorwert = " ); > Serial.println(vibration);} > > Zwar steht im Internet dass der ArduinoBefehl "analogRead" eine sample > rate von 10.000 1/s hat aber die ausgegebenen Werte erscheinen gerade > mal mit 56 1/s Die serielle Ausgabe braucht im Verhältnis zur Aufnahme der Messadaten ewig. 1. Schritt Baudrate erhöhen 2. Unnütze Zeichen vermeiden (("Sensorwert = " );) braucht kein Mensch 3. Daten erst aufnehmen und dann ausgeben also 1000 Messwerte aufnehmen und dann alle zusammen bei Beendigung der Messung ausgeben. damit kommt man auf jeden fall in den bereich von (geschätzt) 1kHz Messrate
Michael Knoelke schrieb: > Klassische peak hold Anwendung. > Dich interessiert nur der erste, größte Wert. > Diode + Kondensator hält peak wert. > Über AD Pin entladen vor nächster messung. > > Sonst musst Du eine wahnsinns Samplingrate fahren um den extrem kurzen > Peak zu messen. das hört sich sehr viel versprechend an, das werde ich mal die Tage ausprobieren. Wichtig ist das das Messgerät 1 Sekunde nach dem Aufschlag wieder messbereit ist aber das sollte sich ja programmieren lassen das der Kondensator nach dem der aufgeladen ist gemessen werden kann. Lothar Miller schrieb: > Tja, wenn du mit deinem Ferrari (ADC mit 10000/sec) hinter einem Trekker > (serielle Schnitte mit 9600Baud) herzuckelst, dann wirst du die > möglichen 300km/h auch nicht ganz ausreizen können... oh je die baudrate hatte ich die ganze zeit außem kopf gelassen. Hab sie mal höher gestellt und direkt bessere ergebnisse erhalten. Leider krieg ich nch nicht ganz hin die werte direkt auszulesen am besten graphisch und muss die alle dann mit copypaste einfügen, aber da arbeite ich dran. Danke auf jeden Fall für den einleuchtenden vergleich :)
Wenn ihr unbedingt gleich per UART ausgeben wollt, solltet ihr nur den reinen Messwert als einzelnes Byte (bei 8bit Auflösung) oder eben 2Bytes (bei 10Bit Auflösung) ausgeben. Ich fürchte, ihr schreibt ASCII raus, das vervielfacht natürlich die Datenmenge unnötig. Also: ADC auf 8bit Konfigurieren, nur das eine Byte auslesen, per UART raus, nächste Messung. Das alles mit möglichst hoher Baudrate. Die Bytes könnt ihr dann z.B. mit HTerm auffangen und später speichern. Die Logfiles dann mit Matlab, Excel, etc. auswerten.
Bisher haut ihr allein schon 13-15Bytes raus für nix ("Sensorwert = "). Das ist Quatsch. Kein Ahnung, wie man mit Arduino Binärdaten rausgibt, aber das wird schon gehen. "Printbin" wäre das in BASCOM z.B. Mehr braucht ihr ja nicht.
Üblicherweise schreit ein Piezo nach einem Ladungsverstärker. Die Spannung ist nämlich noch von Temperatur und Spannung abhängig. Auf das gesamte System haben noch akustische Parameter einen Einfluss: * Wie bzw. wie gleichbleibend ist der Piezo angekoppelt * worauf liegt die Platte (Dämpfungskörper?) * wie groß/dick ist die Platte Du regst mit dem Impuls verschiedene Wellenmoden an, die mit unterschiedlichen Laufzeiten und Reflexionen an Deinem Sensor ankommen) Ein MEMS-Schwingungssensor (LIS3DH z.B.) könnte helfen, wenn der Frequenzbereich ausreicht.
Es muss natürlich heißen: "Die Spannung ist nämlich noch von Temperatur und Frequenz abhängig."
Ich glaube das es überhaupt nicht um Vibrationsmessung geht sondern vielmehr um den Aufschlagimpuls des Flummis um daraus die Fallhöhe auf 2cm genau zu ermitteln. Damit würde es um die Höhe eines einzigen Spannungsimpulses gehen wenn die Spannungshöhe der kinetischen Energie des Flummis entspricht. Um im schulischen Rahmen, den ich hier mal unterstelle, billig zu bleiben geht das durchaus mit einem Piezo wenn man keine Wissenschaftliche Genauigkeit und weiten Temperaturbereich braucht. Auf dem Piezo sollte dann aber was schweres liegen damit der Impuls der über die Tischplatte kommt auch den Piezo komprimieren kann. Alternativ wäre zu überlegen einfach mit einem Mikrofon die Zeit zwischen zwei Aufschlägen zu messen (Aufschlag, Rückprall, Aufschlag). Mit Komparator + Capture Compare sollte das genauer sein sofert der Flummi immer gleich komprimiert.
Christopher Lamers schrieb: > ein Kumpel und ich wollen ein Vibrationsmessgerät bauen das ziemlich > genau die Stärke der Vibration messen kann. Also eine Art Geophon? Damit gibt es jahrzehntelange Erfahrung. Da wird man sicherlich auch passende Literatur finden.
Peak and holt Schaltung und zwar so: Zweite Diode in Serie, dann evtl. Sehr kleines C gegen Masse und 1M parallel.
chris schrieb: > Peak and holt Schaltung und zwar so: Zweite Diode in Serie, dann evtl. > Sehr kleines C gegen Masse und 1M parallel. so wir haben die peak hold schaltung aufgebaut und sie funktioniert sehr gut für diesen Fall und die Messergebnisse waren für den gewollten Messbereich sehr akzeptabel. Danke für de super Tipp! Jetzt gibt es nur noch ein kleines Problem und zwar haben fallen die Messerergebnisse unterschiedlich aus, sobald wir das Piezoelement wechseln (bis zu 30%). Unser Ziel ist es eigentlich mehrere Vibrationssensoren zuhaben die alle identisch sind d.h. würde man das Piezoelement austauschen hätte man die gleichen Ergebnisse. Habt ihr eine Idee, woran das liegen kann bzw. ob hochwertigere Sensoren genauere (identischere) ergebnisse liefern,oder welche sensoren geeigneter wären? Foto von unseren sensoren habe ich nochmal angehängt (auch wenn es im Foto bisschen schlecht zu erkennen ist aber beide durchmesser sind identisch)
Hallo Chris, in Deinem Bild sind mir Deine angelöteten Drahtverbindungen aufgefallen. Falls Du nicht (wie vorgeschrieben) Silberhaltiges Spezial Lot dazu verwendet hast, möchte ich Dich darauf aufmerksam machen weil mit normalen bleihaltigen Lot durch Diffundieren sich der Metallbelag von der Keramik lösen kann und es entstehen nicht lötbare Löcher im Metallbelag.. Belege: http://piceramic.de/produkte/piezo-elemente.html http://piceramic.de/download/A000T0047_DE_Handhabung_und_elektrische_Kontaktierung_von_Piezokomponenten.pdf (Auf Seite 4) http://www.mtf.stuba.sk/docs/internetovy_casopis/2009/kolenak.pdf http://www.ee.cityu.edu.hk/~ycchan/publications-ycchan/PeerReviewedJournals/PeerJournal-48.pdf Gruß, Gerhard
:
Bearbeitet durch User
Christopher Lamers schrieb: > Habt ihr eine Idee, woran das liegen kann Grundlagen der Physik? - Ankopplung des "Sensors" auf der Platte... - F=m*a ==> Lötkleckse auf den Piezos mit unterschieldlicher Masse...
Christopher Lamers schrieb: > Leider krieg ich nch nicht ganz hin die werte direkt > auszulesen am besten graphisch und muss die alle dann > mit copypaste einfügen, aber da arbeite ich dran. Für die Realtime-Darstellung der Messwerte vom Arduino eignet sich z.B: http://www.serialcominstruments.com/serial.php oder http://www.serialcominstruments.com/instrument.php
wow, denke du kennst dich aus im Bereich Piezo elemente ;) das mit dem Bleilosen Zinn werde ich demnächst mal ausprobieren und was noch viel wahrscheinlicher ist das ich zu lange an dem Piezo rumgelötet habe und der einfach zu heiß geworden ist (habe im Datenblatt gelesen dass dadurch die dipolarität abnehmen kann) vielen Dank, wäre da sonst niemals drauf gekommen!
Hmmm also meiner Meinung nach ist so ein Piezoelement für das Vorhaben ungeeignet, eher zum groben erkennen ob z.B. der Impuls der durch das Einwirken auf das Elemnt erzeugt wird eine Shwelle überschreitet. Ich habe mit genau sowas schon mal ein e-drum set gebastelt, da habe ich mit der stärke (höhe der Spannung) des Impulses geregelt wie laut / stark eine Trommel angeschlagen wird. Dabei ist auch aufgefallen das die dinger nicht immer die selben Impulse erzeugen, halt sehr ähnlich, aber nicht gleich. Ein DMS Kraftsensor + 16Bit ADC (ein ordentliches Platinenlayout schadet nicht um stabile Werte zuu bekommen) hohe sampling rate > 100Hz dann sollte es was werden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.