INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
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"?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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.Huh
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

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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 Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2014, 14:12
Beitrag #5
RE: Zeit eines anliegenden analogen Signals messen
Danke, das hilft mir erstmal Smile

(06.12.2014 20:39)ardu_arne schrieb:  "Mikrofonsignal" kann aber so viel bedeuten.Huh
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.

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 Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
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

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Frage zur Programmierung eines Ultraschallsensors jalu4601 10 349 21.09.2016 15:06
Letzter Beitrag: Bitklopfer
  Ansteuern eines Schrittmotors Uwe1475 28 1.015 03.09.2016 21:03
Letzter Beitrag: Uwe1475
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 756 16.07.2016 11:43
Letzter Beitrag: Binatone
  Zerlegung eines Programmcodes hello_world 5 535 30.04.2016 11:01
Letzter Beitrag: rkuehle
  Oszillation eines Steppermotors Nimes 12 909 07.03.2016 17:47
Letzter Beitrag: Binatone
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 574 06.03.2016 14:44
Letzter Beitrag: hotsystems
Bug Mit zwei Ultraschallsensoren die Drehbewegung eines Servos steuern Poet 5 558 21.02.2016 18:37
Letzter Beitrag: Carlo
  Suche Konzept für ein Inhaltsverzeichnis eines EEPROM avoid 0 311 27.01.2016 10:49
Letzter Beitrag: avoid
  Fehlermeldung beim compilieren eines RF24 Programmes. arduinofan 5 548 14.01.2016 22:52
Letzter Beitrag: ardu_arne
  Zeit - Verzögerung bergfrei 12 769 14.01.2016 22:09
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste