Zeit eines anliegenden analogen Signals messen
|
06.12.2014, 19:32
Beitrag #1
|
|||
|
|||
Zeit eines anliegenden analogen Signals messen
Hallo. Für die Auswertung eines Mikrofonsignals möchte ich gerne dessen Dauer auswerten. Das Mikrofonsignal liegt an einem analogen Pin an. Wenn das Signal einen bestimmten Wert für eine bestimmte Dauer überschreitet, soll eine Aktion ausgelöst werden. Wie kann ich das am einfachsten "messen"?
|
|||
06.12.2014, 20:16
Beitrag #2
|
|||
|
|||
RE: Zeit eines anliegenden analogen Signals messen
Hi,
im Prinzip so wie Taster entprellen. Das Signal zyklisch (so schnell wie möglich) abfragen. Solange es unter dem Schwellwert ist, eine Variable auf millis() setzen. Wenn es über dem Schwellwert ist, dann ist "millis() - Variable" die Dauer, für die es über dem Schwellwert ist. Abhängig davon kannst Du dann irgendwas tun. Gruß, Thorsten Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen. |
|||
06.12.2014, 20:39
Beitrag #3
|
|||
|
|||
RE: Zeit eines anliegenden analogen Signals messen
Hallo,
wie Thorsten schon geschrieben hat kannst du die Zeit in der das Mikrofonsignal über einem bestimmten Pegel liegt mit millis() messen. Wenn die Zeitdauer nur wenige Millisekunden beträgt erhält man mit micros() eine bessere Auflösung. "Mikrofonsignal" kann aber so viel bedeuten. ![]() Grundsätzlich liefert ein Mikrofonsignal aber erst mal ein Wechselspannungssignal. Mit Wechselspannungssignalen kann aber ein Mikrocontroller nicht so viel anfangen. Die negativen Halbwellen sind ohne Zusatzschaltung nicht messbar sondern nur die positiven. Je nach Mikrofontyp sind die positiven Halbwellen aber auch sehr klein. Dann erhält man eine bessere Auflösung wenn man die Referenzspannung für den A/D-Wandler auf 1,1V umschaltet. Gruß Arne Gruß Arne ![]() ![]() |
|||
06.12.2014, 21:28
Beitrag #4
|
|||
|
|||
RE: Zeit eines anliegenden analogen Signals messen
Leider in englisch, aber sehr nachvollziehbar, gibt es hier: http://meettechniek.info/embedded/arduino-analog.html einen Artikel wie man einerseits schnell analoge Pins per Interrupt auslesen kann, andererseits aber die Loop-Schleife völlig frei bleibt. Dadurch kann man in der Loop-Schleife dann den Gedanken von Thorsten verfolgen. Ebenso wird das Thema der Referenz (siehe Arne) besprochen.
Grüße Ricardo Nüchtern betrachtet...ist besoffen besser ![]() |
|||
07.12.2014, 14:12
Beitrag #5
|
|||
|
|||
RE: Zeit eines anliegenden analogen Signals messen
Danke, das hilft mir erstmal
![]() (06.12.2014 20:39)ardu_arne schrieb: "Mikrofonsignal" kann aber so viel bedeuten. Ich habe mir dieses Mikro bestellt: http://www.ebay.de/itm/171506638483?_trk...EBIDX%3AIT Ich glaube damit sollte ich die genannte Problematik nicht haben ![]() |
|||
07.12.2014, 14:29
Beitrag #6
|
|||
|
|||
RE: Zeit eines anliegenden analogen Signals messen
Hallo,
ich habe mir das verlinkte Mikro mal angesehen. Die Beschreibung ist leider etwas dürftig. Wenn ich das aber richtig interpretiere gibt das Teil kein Analogsignal heraus. Pegel abhängig gibt es ein Binärsignal "Low-Active Signalausgang". Die Schaltschwelle kann man vermutlich am Poti einstellen. Wenn der eingestellte Pegel überschritten wird, geht der Ausgang auf LOW. Das Teil ist aber entgegen der Beschreibung im Eingangspost für den Arduino kein Mikrofon sondern ein Mikrofon mit Auswerteschaltung. Deshalb sollte man den OUT-Pin am Arduino auch an einen Binäreingang anschließen. Die Zeiten wie lange dieser Eingang dann 0 ist kann man wie bereits beschrieben mit millis() oder micros() messen und das Ergebnis dann auswerten. Gruß Arne Gruß Arne ![]() ![]() |
|||
07.12.2014, 14:46
Beitrag #7
|
|||
|
|||
RE: Zeit eines anliegenden analogen Signals messen
Ja, nachdem ich das eben mal gegooglet habe was das mit Low-Signal bedeutet stelle ich jetzt auch gerade für mich fest, dass das nicht das richtige für meine Sache ist... Narf... Naja, hätte ich ja auch vor dem Kauf drauf kommen können. Selber Schuld. Welche "richtigen" Mikrofone könnt ihr mir denn empfehlen, welches ein richtiges Analoges Signal ausgibt, was man schön auswerten kann. Ich möchte damit halt für den Anfang erstmal ein "Basslicht" realisieren was je nach Bassintensität stärker und in einer anderen Farbe leuchtet. Dafür ist das nun besorgte dann ja absolut nicht geeignet.
|
|||
07.12.2014, 15:38
Beitrag #8
|
|||
|
|||
RE: Zeit eines anliegenden analogen Signals messen
Hallo,
wie ich in Beitrag #3 bereits geschrieben habe treffen mit dem Begriffen "Mikrofon" und "Arduino" im Prinzip zwei Welten aufeinander. Ohne zusätzliche elektronische Schaltung als Bindeglied zwischen beiden ist das Problem nicht besser zu lösen als es mit deinem vorhandenen Mikrofonmodul auch schon möglich wäre. Das Problem ist zum einen, dass ein Mikrofon immer Wechselspannung erzeugt und ein Arduino im Prinzip zur Messung von Gleichspannung (auch variabler Gleichspannung) ausgelegt ist. Und zum Anderen möchte ein Arduino gerne mindestens 1100mV um voll auszusteuern, aber ein Mikrofon liefert, je nach Typ, nur 10 bis 100mV Signalspannung. Es hängt jetzt von den Anforderungen an dein erwartetes Ergebnis ab welchen Aufwand du als Schaltung für das Bindeglied treiben willst. Die einfachsten und oft billigsten Mikrofone sind dynamische Mikrofone. Hierbei wird durch den Schalldruck eine Spule in einem Magnetfeld bewegt und die dabei induzierte Wechselspannung an zwei Klemmen ausgegeben. Diese Mikrofone liefern meist für den Arduino nur eine fast unbrauchbar kleines Signal. Etwas besser sind Kondensatormikrofone mit eingebautem Verstärker. Die gibt es auch sehr günstig, brauchen aber eine Versorgungsspannung. Auf deinem "Sound Detection Modul" ist vermutlich ein solches verbaut. Egal ob du jetzt ein dynamisches Mikrofone oder ein Kondensatormikrofon verwendest, um auf einen für den Arduino vernünftig auszuwertenden Pegel zu kommen, brauchst du einen Mikrofonverstärker mit einem Verstärkungsfaktor von 10 bis 100. Den Analogeingang des Arduinos kann man dann mit einem Spannungsteiler auf halbe Referenzspannung bringen und das Mikrofonsignal über einen Kondensator einkoppeln. Der Arduino liefert dann ohne Eingangssignal einen Wert von ca. 512 am Analogeingang. Je nach Signalstärke und Polung des Eingangssignals wird der Messwert dann größer oder kleiner. Um das Signal dann Frequenzspeziefisch auszuwerten bedient man sich oft der "Fast Fourier Transformation" (FFT). Dazu gibt es auch passende Librarys. z.B. diese oder diese. Gruß Arne Gruß Arne ![]() ![]() |
|||
|
|
|
Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste