EDIT : J'étudie ce problème depuis un certain temps. Cela s'avère être un projet beaucoup plus difficile que je ne le pensais et pas quelque chose pour les débutants. Cela nécessite un matériel coûteux (microphone et amplificateur) et une analyse audio sophistiquée sur le microcontrôleur. Même un microphone complet avec circuit amplifié ne donne pas les résultats souhaités (selon les commentaires sur ce produit)
Je suis entièrement nouveau sur l'Arduino (mais je suis familier avec la programmation). Afin de construire un VU-mètre , je veux mettre un microphone sur la broche 0 analogique de l'Arduino et afficher la valeur via la connexion série.
J'ai googlé et trouvé ce circuit:
... et j'ai essayé de le construire avec ce résultat:
(J'utilise maintenant le circuit suggéré par Oli Glaser dans sa réponse)
Les valeurs sur le moniteur série ne changent pas en fonction du volume de la musique.
Quelle est la façon la plus simple de mesurer le volume sur l'entrée analogique de l'Arduino?
De plus, j'ai un TDA2822M , mais je ne sais pas s'il est utile pour ce projet. La légende du microphone indique XF-18D .
Edit: Mon code arduino:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(0));
delay(300);
}
La sortie série: 1023 1022 1022 1022 1022 1023 1022 et ainsi de suite
Comment puis-je vérifier si le microphone fonctionne? Est-ce directionnel?
Edit: j'utilise maintenant un transistor S9014. L'ADC et la connexion série fonctionnent (je les ai testés avec un potentiomètre).
La sortie série est maintenant d'environ 57.
De plus, je n'ai ni multimètre ni oscilloscope.
J'ai un multimètre maintenant.
la source
Réponses:
La manière "la plus simple" consiste simplement à appliquer le signal et l'échantillon avec l'ADC. Stockez les résultats dans un tampon puis affichez-les comme vous le souhaitez (dans votre cas, envoyez-les au PC via RS232)
Si vous voulez le niveau RMS du signal, vous devrez le calculer à un moment donné, soit avant de l'envoyer au PC, soit après.
Votre circuit d'amplification comme indiqué n'est pas idéal, mais devrait fonctionner raisonnablement pour un VU-mètre de base. EDIT - Je viens de remarquer C2, supprimez-le car cela bloquera la polarisation CC du transistor et le signal oscillera sous la terre.
EDIT - voici un meilleur circuit pour le transistor amplificateur:
Cela ne devrait pas trop se soucier du transistor utilisé, la polarisation de sortie devrait être d'environ 2,5V.
Les valeurs exactes du diviseur d'entrée (R3 et R4) ne sont pas trop importantes, c'est le rapport de 1: 4 qui l'est davantage. Vous pouvez donc utiliser par exemple 400k et 100k, ou 40k et 10k, etc. (essayez de ne pas aller au-dessus ou en dessous de ces valeurs respectives). C2 devrait être> 10uF. C1 doit être> 1uF (remplace C1 dans votre schéma)
R1 et R2 doivent cependant être ces valeurs.
Tout ce dont vous avez besoin est l'électret avec sa résistance de polarisation (R1 dans votre schéma)
Un point préoccupant est que les lignes Arduino 3,3 V et 5 V semblent être liées ensemble - je suppose que c'est une erreur schématique, mais si c'est le cas dans le circuit réel, cela ne fonctionnera pas et pourrait endommager quelque chose.
Pour identifier le (s) problème (s), il serait utile de voir votre code et ce que vous voyez du côté PC. Quel transistor utilisez-vous également?
Si vous avez un oscilloscope, vous pouvez vérifier si votre micro / transistor fonctionne correctement. Sinon, un multimètre peut être utilisé pour effectuer des tests plus basiques (par exemple, confirmer + 5 V présent, confirmer que la base du transistor est à ~ 0,6 V, tester le collecteur pour s'assurer qu'il n'est pas fixé à + 5 V ou mis à la terre sans signal présent)
Vous devez également vous assurer que le RS232 fonctionne correctement, donc écrire un code simple pour envoyer des valeurs de test serait une bonne idée.
Si vous pouvez fournir les informations demandées et faites-nous savoir quels outils vous disposez d'une aide plus spécifique peut être fournie.
EDIT - si vous échantillonnez si lentement, vous aurez besoin d'un circuit de détection de crête comme celui-ci:
Vous mettriez ce circuit entre le transistor et la broche Arduino (moins C2)
La diode peut être à peu près n'importe quelle diode. Les valeurs de cap et de résistance ne sont qu'une indication, elles peuvent être légèrement modifiées. Leurs valeurs dictent le temps que prendra la tension pour changer avec le niveau du signal. Vous pouvez calculer cela en utilisant la constante RC (c.-à-d. R * C - dans l'exemple ci-dessus, la constante RC est 1e-6 * 10e3 = 10 ms. La tension prendra environ 2,3 constante de temps pour chuter de 90% de sa valeur d'origine, donc dans l'exemple ci-dessus, si la tension commence à 1 V et que vous supprimez le signal, il sera tombé à 0,1 V environ 23 ms plus tard.
EDIT - d'accord, je pense avoir trouvé un problème majeur. Votre transistor S9012 est un transistor PNP (tout comme le S9015), vous avez besoin d'un transistor NPN pour ce circuit. Le S9014 est un transistor NPN, vous devrez donc utiliser celui-ci.
Les condensateurs marqués "104" sont presque certainement des condensateurs en céramique de 0,1 uF. La valeur (en pF) correspond aux 2 premiers chiffres suivis d'un nombre de zéros défini par le dernier nombre. Ainsi, pour 104, la valeur est de 10 + 4 zéros, soit 100 000pF. 100 000 pF est 100 nF ou 0,1 uF.
EDIT - Le fait de ne pas avoir de portée ou de multimètre rend la vie très difficile ici (vous devriez en saisir un ou les deux dès que vous le pouvez)
Cependant, il existe certains oscilloscopes de carte son PC de base qui pourraient être utilisés pour tester votre circuit électret / transistor. Visual Analyzer est un assez bon exemple:
Si vous remplacez C2 (pas strictement nécessaire mais une bonne idée), vous devriez être en mesure d'introduire le signal directement dans le PC et d'observer dans le logiciel pour voir si le microphone et l'amplification fonctionnent correctement. Si votre PC a une ligne en cours d'utilisation, mais l'entrée microphone est généralement bonne pour jusqu'à 2V IIRC. Vous pouvez également tester l'électret directement - retirez simplement le bit du transistor et conservez R1 et C1, prenez le signal de l'autre côté de C1.
Notez que cette méthode ne testera pas les niveaux DC, seulement l'AC (en raison d'un capuchon de blocage DC dans l'entrée de la carte son) mais le signal AC (audio) est ce qui vous intéresse ici.
Si vous essayez cela, postez les captures d'écran afin que nous puissions avoir une idée de ce qui se passe.
la source
EDIT
blocs et les modifier de manière à ce qu'ils puissent être compris sans lire le fil de commentaires? Je suis également un débutant et je ne comprends pas comment le problème a été résolu et si je peux utiliser le circuit que vous avez affiché tel quel.En supposant que votre circuit fonctionne, le signal audio est dans la plage des kHz tandis que l'Arduino a un ADC adapté aux niveaux DC. La composante continue de votre signal est nulle, c'est-à-dire qu'elle flotte sur une tension fixe. C'est cette tension fixe que votre ADC lit.
Pour résoudre ce problème, vous devez mettre une diode en série avec votre sortie connectée à l'ADC et à un condensateur et une résistance.
Le capuchon se charge jusqu'à la valeur de crête reçue tandis que la résistance décharge le capuchon lorsque le signal s'éteint.
Edit: L'entrée ADC est en fait flottante car elle n'a aucun biais en raison du condensateur série. Si vous allez essayer ma solution, supprimez C2.
la source
When using single-ended mode, the ADC bandwidth is limited by the ADC clock speed. Since one conversion takes 13 ADC clock cycles, a maximum ADC clock of 1 MHz means approximately 77k samples per second. This limits the bandwidth in single-ended mode to 38.5 kHz, according to the Nyquist sampling theorem.
Vos lectures de 1022, 1023 sont essentiellement à pleine échelle sur l'ADC de l'Arduino. En supposant que vous avez installé un condensateur série non défectueux comme indiqué dans votre schéma, ce niveau ne peut pas provenir du circuit de microphone que vous avez construit, car cela ne peut que coupler des tensions changeantes (c.-à-d. AC).
Par conséquent, je soupçonne que vous lisez le courant de fuite dans l'ATMEGA lui-même - vous obtiendriez probablement le même résultat sur n'importe quelle autre broche analogique (non connectée).
Essayez de créer un diviseur de tension très "léger" avec des résistances de haute valeur (entre 10K et 100K) et utilisez-le pour polariser l'entrée analogique à la moitié de la tension de référence (vous pouvez également utiliser un potentiomètre, ce qui vous donne une capacité de test supplémentaire). Ensuite, votre lecture sans entrée devrait être de l'ordre de 512.
Une fois que l'entrée ADC est correctement biaisée, vous pouvez commencer à essayer de voir si vous obtenez des variations. Vous sous-échantillonnez peut-être votre bande passante, ce qui signifie que vous obtiendrez un aliasing des composants haute fréquence, mais si tout ce que vous essayez de faire est d'estimer le volume global, cela ne devrait pas poser trop de problème.
la source