एक Arduino के साथ एक माइक्रोफोन का उपयोग करना


18

EDIT : मैं इस समस्या में काफी समय से जाँच कर रहा हूँ। यह एक तरीका है जितना मैंने सोचा था कि शुरुआती लोगों के लिए कुछ कठिन परियोजना नहीं है। इसके लिए महंगे हार्डवेयर (माइक्रोफ़ोन और एम्पलीफायर) और माइक्रोकंट्रोलर पर कुछ परिष्कृत ऑडियो एनालाइज़िग की आवश्यकता होती है। यहां तक ​​कि amplyfier सर्किट के साथ एक पूर्ण माइक्रोफोन वांछित परिणाम प्रदान नहीं करता है (इस उत्पाद पर टिप्पणियों के अनुसार)


मैं Arduino के लिए पूरी तरह से नया हूं (लेकिन मैं प्रोग्रामिंग से परिचित हूं)। VU मीटर के निर्माण के लिए , मैं Arduino के एनालॉग 0 पिन पर एक माइक्रोफोन लगाना चाहता हूं और सीरियल कनेक्शन के माध्यम से मूल्य प्रदर्शित करता हूं।

मैंने गुगली की और इस सर्किट को पाया:

सरल ऑडियो प्री-एम्पलीफायर

... और मैंने इस परिणाम के साथ इसे बनाने की कोशिश की:

(मैं अब उनके जवाब में ओली ग्लेसर द्वारा सुझाए गए सर्किट का उपयोग कर रहा हूं)

धारावाहिक मॉनिटर के मान संगीत की मात्रा के आधार पर नहीं बदलते हैं।

Arduino के एनालॉग इनपुट पर वॉल्यूम को मापने का सबसे आसान तरीका क्या है?

इसके अलावा, मेरे पास TDA2822M है , लेकिन मुझे नहीं पता कि यह इस परियोजना के लिए सहायक है या नहीं। माइक्रोफ़ोन पर कैप्शन XF-18D को पढ़ता है ।

संपादित करें: मेरा arduino कोड:

void setup() {
  Serial.begin(9600); 
}

void loop() {
  Serial.println(analogRead(0));
  delay(300);
}

धारावाहिक आउटपुट: 1023 1022 1022 1022 1022 1023 1022 और इसी तरह

अगर माइक्रोफ़ोन काम करता है तो मैं कैसे जांच सकता हूं? क्या यह दिशात्मक है?

संपादित करें: मैं अब S9014 ट्रांजिस्टर का उपयोग कर रहा हूं। एडीसी और सीरियल कनेक्शन का काम (मैंने उन्हें एक पोटेंशियोमीटर के साथ परीक्षण किया)।

धारावाहिक का उत्पादन अब 57 के आसपास है।

इसके अलावा, मेरे पास मल्टीमीटर या ऑसिलोस्कोप नहीं है। मेरे पास अब एक मल्टीमीटर है।


क्या आपने एक दायरे के साथ सत्यापित किया है कि आप अपने सर्किट के आउटपुट में एक ऑडियो तरंग देख सकते हैं?
हाइकऑनस्टेस्ट

वाह, क्यों 3V3 और 5V पिन योजनाबद्ध में छोटा है? यह एक मुद्दा हो सकता है।
कॉनर वुल्फ

नहीं, मैं सिर्फ योजनाबद्ध ठीक से आकर्षित नहीं किया।
टोस्ट

जवाबों:


14

"सबसे आसान" तरीका केवल एडीसी के साथ सिग्नल और नमूना लागू करना है। एक बफर में परिणाम स्टोर करें, फिर वांछित के रूप में प्रदर्शित करें (आपके मामले में RS232 के माध्यम से पीसी को भेजें)
यदि आप सिग्नल का आरएमएस स्तर चाहते हैं तो आपको पीसी या बाद में भेजने से पहले कुछ बिंदु पर यह गणना करने की आवश्यकता होगी।

जैसा कि दिखाया गया है आपका एम्पलीफायरिंग सर्किट आदर्श नहीं है, लेकिन एक बुनियादी VU मीटर के लिए यथोचित काम करना चाहिए। EDIT - मैंने अभी C2 पर ध्यान दिया है, इसे हटा दें क्योंकि यह ट्रांजिस्टर से डीसी पूर्वाग्रह को रोक देगा, और सिग्नल जमीन से नीचे झूल जाएगा।

EDIT - यहाँ के ट्रांजिस्टर को बेहतर बनाने के लिए एक बेहतर सर्किट है:

इलेक्ट्रेट amp

यह उपयोग किए जाने वाले ट्रांजिस्टर के बारे में बहुत परवाह नहीं करना चाहिए, आउटपुट पूर्वाग्रह 2.5 वी के आसपास होना चाहिए।
इनपुट विभक्त (R3 और R4) के लिए सटीक मान बहुत महत्वपूर्ण नहीं हैं, यह 1: 4 का अनुपात है जो कि अधिक है। तो आप 400k और 100k, या 40k और 10k, आदि का उपयोग कर सकते हैं (इन संबंधित मूल्यों से ऊपर या नीचे नहीं जाने की कोशिश करें)। C2> 10uF होना चाहिए। C1 होना चाहिए> 1uF (आपके योजनाबद्ध में C1 को प्रतिस्थापित करता है)
R1 और R2 को इन मानों के होने की आवश्यकता है।
आप सभी की जरूरत के साथ इलेक्ट्रेट है यह पूर्वाग्रह अवरोधक (आपके योजनाबद्ध में आर 1)

चिंता का एक बिंदु है Arduino 3.3V और 5V लाइनें एक साथ बंधी हुई प्रतीत होती हैं - मैं मान रहा हूं कि यह एक योजनाबद्ध त्रुटि है, लेकिन अगर वास्तविक सर्किट में ऐसा होता है तो यह काम नहीं करेगा, और कुछ नुकसान पहुंचा सकता है।
समस्या को इंगित करने के लिए यह आपके कोड को देखने में मदद करेगा, और आप पीसी पर क्या देख रहे हैं। इसके अलावा आप किस ट्रांजिस्टर का उपयोग कर रहे हैं?

यदि आपके पास एक आस्टसीलस्कप है, तो आप यह देख सकते हैं कि आपका माइक / ट्रांजिस्टर सही ढंग से काम कर रहा है या नहीं। यदि नहीं, तो एक मल्टीमीटर का उपयोग कुछ और बुनियादी परीक्षण करने के लिए किया जा सकता है (जैसे कि + 5V वर्तमान की पुष्टि करें, ट्रांजिस्टर का पुष्टि आधार ~ 0.6V पर है, यह सुनिश्चित करने के लिए परीक्षण कलेक्टर + 5V या बिना सिग्नल के साथ ग्राउंड पर मौजूद नहीं है)

इसके अलावा आपको यह सुनिश्चित करने की आवश्यकता है कि RS232 सही तरीके से काम कर रहा है, इसलिए कुछ परीक्षण मूल्यों को भेजने के लिए कुछ सरल कोड लिखना एक अच्छा विचार होगा।

यदि आप अनुरोधित जानकारी प्रदान कर सकते हैं, और हमें बताएं कि आपके पास कौन से उपकरण उपलब्ध हैं और अधिक विशिष्ट सहायता दी जा सकती है।

EDIT - अगर आप इतनी धीरे-धीरे सैंपलिंग कर रहे हैं, तो आपको इस तरह से पीक डिटेक्ट सर्किट की आवश्यकता होगी:

चोटी का पता लगाना

आप इस सर्किट को ट्रांजिस्टर और अरुडिनो पिन (माइनस सी 2) के बीच में रखेंगे।

डायोड सिर्फ किसी भी डायोड के बारे में हो सकता है। टोपी और अवरोधक मान केवल एक दिशानिर्देश हैं, उन्हें थोड़ा बदला जा सकता है। उनके मान निर्धारित करते हैं कि सिग्नल स्तर के साथ वोल्टेज को बदलने में कितना समय लगेगा। आप आरसी स्थिरांक (यानी R * C - उपरोक्त उदाहरण का उपयोग करके यह गणना कर सकते हैं, RC स्थिरांक 1e-6 * 10e3 = 10ms है। वोल्टेज मूल रूप से लगभग 90% तक गिरने में 2.3 गुना समय लगेगा, यह मूल मूल्य है, इसलिए उपरोक्त उदाहरण में यदि वोल्टेज 1V से शुरू होता है और आप सिग्नल को हटा देते हैं, तो यह 23 वी के बाद के 0.1V पर गिर जाएगा।

EDIT - ठीक है, मुझे लगता है कि मुझे एक बड़ी समस्या मिली। आपका S9012 ट्रांजिस्टर एक PNP ट्रांजिस्टर है (जैसा कि S9015 है), आपको इस सर्किट के लिए NPN ट्रांजिस्टर की आवश्यकता है। S9014 तो आप इस एक का उपयोग करना होगा, एक NPN ट्रांजिस्टर है।

"104" चिह्नित कैपेसिटर लगभग निश्चित रूप से 0.1uF सिरेमिक कैपेसिटर हैं। मान (pF में) पहले 2 नंबर हैं, उसके बाद अंतिम संख्या द्वारा शून्य संख्या निर्धारित की गई है। तो 104 के लिए, मान 10 + 4 शून्य या 100,000pF है। 100,000pF 100nF या 0.1uF है।

EDIT - इसमें कोई स्कोप या मल्टीमीटर नहीं होने से यहां जीवन बहुत मुश्किल हो जाता है (आपको जितनी जल्दी हो सके एक या दोनों को पकड़ लेना चाहिए)
हालांकि, कुछ बुनियादी पीसी साउंडकार्ड ऑसीलोस्कोप हैं जिनका उपयोग आपके इलेक्ट्रेट / ट्रांजिस्टर सर्किट का परीक्षण करने के लिए किया जा सकता है। विज़ुअल एनालाइज़र काफी अच्छा उदाहरण है:

दृश्य विश्लेषक

यदि आप C2 को प्रतिस्थापित करते हैं (कड़ाई से आवश्यक नहीं है, लेकिन एक अच्छा विचार है), तो आपको सीधे पीसी में सिग्नल को खिलाने में सक्षम होना चाहिए और यह देखने के लिए सॉफ़्टवेयर में निरीक्षण करना चाहिए कि क्या माइक्रोफ़ोन और प्रवर्धन सही तरीके से काम कर रहे हैं। यदि आपके पीसी में उपयोग की रेखा है, लेकिन माइक्रोफोन इनपुट आमतौर पर 2V IIRC तक अच्छा है। आप सीधे इलेक्ट्रेट का भी परीक्षण कर सकते हैं - बस ट्रांजिस्टर बिट को हटा दें और आर 1 और सी 1 को रखें, सी 1 के दूसरी तरफ से सिग्नल लें।
ध्यान दें कि यह विधि डीसी स्तरों का परीक्षण नहीं करेगी , केवल एसी (sॉर्डार्ड इनपुट में डीसी अवरोधक टोपी के कारण) लेकिन एसी (ऑडियो) संकेत वह है जो आप यहां रुचि रखते हैं।

यदि आप यह कोशिश करते हैं, तो स्क्रीनशॉट पोस्ट करें ताकि हमें पता चल सके कि क्या हो रहा है।


3.3V और 5V एक साथ बंधे नहीं हैं। पहली बार मैं इस सॉफ्टवेयर का उपयोग कर रहा हूँ - क्षमा करें। मैं अपने कोड को प्रश्न में डालूंगा लेकिन ऐसा कुछ भी नहीं है जो इसके साथ गलत हो सकता है। इसके अलावा, मैंने आज एक परियोजना बनाई जो एक फोटोरसिस्टर का उपयोग करती है और छह लीड पर मूल्य प्रदर्शित करती है जैसे मैं चाहता हूं कि मेरा वू मीटर जैसा दिखे और मैंने उसके साथ सीरियल कनेक्शन का परीक्षण किया। मेरे पास न तो आस्टसीलस्कप है और न ही मल्टीमीटर। ट्रांजिस्टर में कैप्शन है "S9012 H 331" मेरे पास "S9014 C 331" और S9015 हैं।
टोस्ट

@Toast - C2 के बारे में संपादन देखें, इसे निकालें और सीधे कनेक्ट करें।
ओली ग्लेसर

मैंने C2 को हटा दिया और भागों को जोड़ दिया क्योंकि क्रिस्टोफॉन ने अपने उत्तर में इसका वर्णन किया। अभी भी वही परिणाम।
जूल

1
यदि आपके पास एक पोटेंशियोमीटर या एक चर वोल्टेज स्रोत है, तो आप अपने इनपुट सर्किट से स्वतंत्र, अपने कोड का परीक्षण करने के लिए एडीसी के इनपुट के लिए 0-5 वी इनपुट लागू कर सकते हैं। आप एक साथ दो चीजों को डिबग करने की कोशिश कर रहे हैं - सर्किट को अलग करें और एक आस्टसीलस्कप और / या अपने कोड को अलग करके अपने व्यवहार को सत्यापित करें और अपने कोड को मान्य करने के लिए एक पूर्वानुमानित लेकिन परिवर्तनीय इनपुट प्रदान करें।
हाइकऑनस्टास्ट जूल

1
@OliGlaser मैं सर्किट से भ्रमित हूं। "इलेक्ट्रेट" एक माइक्रोफोन है? माइक्रोफोन के अन्य तार कहां जाते हैं, GND या VCC? क्या मैं उस सर्किट से ५ या ३.३ वी कनेक्ट करता हूँ? क्या आप किसी तरह से EDITब्लॉकों को हटा सकते हैं और इसे संपादित कर सकते हैं ताकि इसे टिप्पणी धागा पढ़े बिना समझा जा सके? मैं भी एक शुरुआत हूं और मुझे समझ नहीं आ रहा है कि समस्या का समाधान कैसे किया गया और क्या मैं आपके द्वारा पोस्ट किए गए सर्किट का उपयोग कर सकता हूं।
टॉम ज़ातो -

4

मान लें कि आपका सर्किट काम करता है ऑडियो सिग्नल kHz रेंज में है जबकि Arduino में DC स्तरों के लिए अनुकूल ADC है। आपके संकेत पर डीसी घटक शून्य है जो यह कहना है कि यह एक निश्चित वोल्टेज पर तैरता है। यह वह निश्चित वोल्टेज है जिसे आपका एडीसी पढ़ रहा है।

यह तय करने के लिए कि आप अपने आउटपुट में एडीसी और एक संधारित्र और रोकनेवाला से जुड़ने के साथ श्रृंखला में एक डायोड डालेंगे।

कैप को प्राप्त होने वाले शिखर मान पर चार्ज किया जाएगा, जबकि सिग्नल के निधन होने पर रोकनेवाला कैप का निर्वहन करेगा।

--|>|---*---- adc
        *---- resistor -----*----ground
        \----- capacitor ---/

संपादित करें: एडीसी इनपुट वास्तव में तैर रहा है क्योंकि इसमें श्रृंखला संधारित्र के कारण कोई पूर्वाग्रह नहीं है। यदि आप मेरे समाधान C2 को हटाने का प्रयास करने जा रहे हैं।


ठीक है, मैंने इसे सर्किट में जोड़ा और सीरियल मॉनिटर पर सिग्नल अब 458 है (लेकिन जब शोर होता है तब भी नहीं बदलता है)।
टोस्ट

मैंने "S9012 H 331" से "S9014 C 331" ट्रांजिस्टर का आदान-प्रदान किया और मूल्य 56 है।
टोस्ट

1
Arduino ADC ऑडियो के लिए पर्याप्त तेजी से नमूना लेने में सक्षम है। मैं उनका उपयोग नहीं करता हूं, लेकिन मुझे लगता है कि पुस्तकालय कार्यों के साथ 10ksps (5kHz बैंडविड्थ तक) संभव है, जो लो-फाई सामान के लिए ठीक है (मुझे पूरा यकीन है कि वास्तविक ATMega सामान्य रूप से उपयोग किए जाने पर तेजी से नमूना ले सकता है)
ओली ग्लेसर

@ टोस्ट - आप कितनी तेजी से नमूना ले रहे हैं? अगर यह बहुत धीरे-धीरे है तो पीक डिटेक्टर एक अच्छा विचार है। आप सॉफ्टवेयर में यह कर सकते हैं।
ओली ग्लेसर

2
@Kristoffon - नहीं एक Arduino नहीं के साथ, लेकिन मैं नमूना और वापस ऑडियो खेलने के लिए कई बार 8-बिट micros (जैसे PIC16F, 18F, आदि) का उपयोग किया है। 10ksps आसानी से संभव है। इस AVR ADC दस्तावेज़ को उद्धृत करने के लिए :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.
Oli Glaser

4

1022, 1023 की आपकी रीडिंग मूल रूप से अरुडिनो के एडीसी पर पूर्ण पैमाने पर हैं। मान लें कि आपने अपने आरेख में दिखाए गए अनुसार एक गैर-दोषपूर्ण श्रृंखला संधारित्र स्थापित किया है, तो यह स्तर आपके द्वारा बनाए गए माइक्रोफोन सर्किट से नहीं आ सकता है, क्योंकि यह केवल बदलते वोल्टेज (यानी, एसी) को बदल सकता है।

नतीजतन, मुझे संदेह है कि आप ATMEGA के भीतर ही लीकेज करंट पढ़ रहे हैं - आपको संभवतः किसी भी अन्य (असंबद्ध) एनालॉग पिन पर समान परिणाम मिलेगा।

कुछ उच्च मूल्य प्रतिरोधों (10K और 100K के बीच) के साथ एक बहुत "हल्का" वोल्टेज विभक्त बनाने की कोशिश करें और इसे संदर्भ वोल्टेज को आधा करने के लिए एनालॉग इनपुट को पूर्वाग्रह करने के लिए उपयोग करें (आप एक पोटेंशियोमीटर का उपयोग भी कर सकते हैं, जो आपको कुछ अतिरिक्त परीक्षण क्षमता देता है)। फिर बिना इनपुट के आपकी रीडिंग 512 के पड़ोस में होनी चाहिए।

एक बार जब आपके पास ADC इनपुट उपयुक्त रूप से पक्षपाती हो जाता है, तो आप यह देखने की कोशिश करना शुरू कर सकते हैं कि क्या आपको इसके माध्यम से भिन्नता मिलती है। आप अपने बैंडविड्थ को कुछ कम कर सकते हैं, जिसका अर्थ है कि आपको उच्च आवृत्ति घटकों का अलियासिंग मिल जाएगा, लेकिन अगर आप जो करने की कोशिश कर रहे हैं वह समग्र मात्रा का अनुमान है जो एक समस्या का बहुत अधिक नहीं होना चाहिए।


यह सही लगता है, मुझे लगता है कि यह अतिभारित है। ओपी क्या आपने छोटे स्पीकर को कनेक्ट करने के बारे में सोचा है जो आपके रीडिंग की एनालॉग लाइन को डिबग करता है। जब मैंने एक वू मीटर बनाया तो मैंने एक हेडफोन जैक से लाइनें लीं, जो सीधे एनालॉगराइड में सीधी थी और परिणामस्वरूप मैप की गई थी।
हेलोएन्थर्थिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.