Forum: Mikrocontroller und Digitale Elektronik Vibrationsmessgerät mit Piezo + Arduino


von Christopher L. (Firma: Latia) (transformator)


Angehängte Dateien:

Lesenswert?

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
von Bonzzo (Gast)


Lesenswert?

Ich wuerd einen externen ADC empfehlen, der etwas mehr Rummms hat. Mehr 
Bits, mehr Geschwindigkeit.

von Toxic (Gast)


Lesenswert?

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

von lrep (Gast)


Lesenswert?

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.

von Jemin K. (jkam)


Lesenswert?

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
von Dirk S. (disc)


Angehängte Dateien:

Lesenswert?

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

von Ulrich F. (Gast)


Lesenswert?

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.

von Michael K. (Gast)


Lesenswert?

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.

von Christopher L. (Firma: Latia) (transformator)


Angehängte Dateien:

Lesenswert?

@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

von Michael K. (Gast)


Lesenswert?

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.

von Max M. (jens2001)


Lesenswert?

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......

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von piezo (Gast)


Lesenswert?

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!

von Messer (Gast)


Lesenswert?

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

von Christopher L. (Firma: Latia) (transformator)


Lesenswert?

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 :)

von piezo (Gast)


Lesenswert?

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.

von piezo (Gast)


Lesenswert?

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.

von Ich (Gast)


Lesenswert?

Ü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.

von Ich (Gast)


Lesenswert?

Es muss natürlich heißen:
"Die Spannung ist nämlich noch von Temperatur und Frequenz abhängig."

von Michael K. (Gast)


Lesenswert?

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.

von Harald W. (wilhelms)


Lesenswert?

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.

von chris (Gast)


Lesenswert?

Peak and holt Schaltung und zwar so: Zweite Diode in Serie, dann evtl. 
Sehr kleines C gegen Masse und 1M parallel.

von Christopher L. (Firma: Latia) (transformator)


Angehängte Dateien:

Lesenswert?

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)

von Lutz (Gast)


Lesenswert?

habt ihr denn schon mal andere Sensoren getestet?

von Gerhard O. (gerhard_)


Lesenswert?

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
von Schüler (Gast)


Lesenswert?

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...

von Bastler (Gast)


Lesenswert?

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

von Christopher L. (Firma: Latia) (transformator)


Lesenswert?

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!

von Grobi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.