विषयसूची:

स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं: 6 कदम (चित्रों के साथ)
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं: 6 कदम (चित्रों के साथ)

वीडियो: स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं: 6 कदम (चित्रों के साथ)

वीडियो: स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं: 6 कदम (चित्रों के साथ)
वीडियो: Class-D Amplifier; Audio Modulated Flyback "Plasma Speaker" & trad Speaker 2024, जुलाई
Anonim
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं
स्पीकर या फ्लाईबैक ट्रांसफॉर्मर पर PWM का उपयोग करके Arduino के साथ गाने (MP3) चलाएं

हैलो दोस्तों, यह मेरी पहली शिक्षाप्रद है, मुझे आशा है कि आप इसे पसंद करेंगे !!

मूल रूप से, इस प्रोजेक्ट में मैंने अपने लैपटॉप से Arduino में संगीत डेटा संचारित करने के लिए अपने Arduino और मेरे लैपटॉप के बीच सीरियल संचार का उपयोग किया है। और डेटा को PWM सिग्नल के रूप में चलाने के लिए Arduino TIMERS का उपयोग करना।

मैं यह उल्लेख करना चाहता था कि, यह परियोजना शुरुआती लोगों के लिए नहीं है !!!।

दरअसल, यह प्रोजेक्ट सबसे लंबे प्रोजेक्ट्स में से एक था, क्योंकि इसे काम करने के लिए हमें कई काम करने होते हैं।

ध्यान

मैंने इस निर्देश के दूसरे भाग को बनाया है, जो कि अधिक आसान है और काम करने के लिए न्यूनतम परेशानी की आवश्यकता है

दूसरे भाग से लिंक करें (सबसे आसान)।

चरण 1: इस परियोजना के लिए हमें जिन चीजों की आवश्यकता है (आवश्यकताएं)

1. Arduino Board (हम किसी भी बोर्ड (328, 2560) यानी मेगा, ऊनो, मिनी, आदि का उपयोग कर सकते हैं लेकिन विशिष्ट विभिन्न पिनों के साथ)

2. लिनक्स के साथ पीसी या लैपटॉप (मैंने फेडोरा 29 का उपयोग किया है) या लिनक्स के साथ लाइव यूएसबी

3. ब्रेडबोर्ड या परफ़बोर्ड

4. कनेक्टिंग वायर

5. TC4420 (Mosfet ड्राइवर या ऐसी बात)

6. पावर मोसफेट (एन या पी चैनल, कृपया तदनुसार तार करें) (मैंने एन-चैनल का उपयोग किया है)

7. स्पीकर या फ्लाईबैक ट्रांसफॉर्मर (हाँ, आपने इसे सही पढ़ा !!)

8. उपयुक्त बिजली आपूर्ति (0-12 वी) (मैंने अपनी एटीएक्स बिजली आपूर्ति का उपयोग किया है)

9. हीट सिंक (मैंने अपने पुराने पीसी से उबार लिया है)

10. विंडोज और पेन ड्राइव के साथ पीसी।

प्रत्येक घटक और इस परियोजना की विस्तृत कार्यप्रणाली जानने के लिए कृपया अगला चरण पढ़ें।

मैंने इस निर्देश के दूसरे भाग को बनाया है, जो कि अधिक आसान है और काम करने के लिए न्यूनतम परेशानी की आवश्यकता है। दूसरे भाग से लिंक करें (सबसे आसान)।

चरण 2: कार्य सिद्धांत को समझना

आह !! एक निर्देशयोग्य का सबसे लंबा हिस्सा, इस खंड को पढ़ना और लिखना दोनों उबाऊ है।

सबसे पहले, हमें एक सिंहावलोकन प्राप्त करने की आवश्यकता है कि यह चीज़ वास्तव में कैसे काम करती है।

हम यहां जो कर रहे हैं, वह यह है कि सबसे पहले, हम अपने एमपी3 गाने को WAV फाइल में और इस फाइल को सॉफ्टवेयर का उपयोग करके C हेडर फाइल में बदल रहे हैं, जो लिंक में है। इस सी कोड में वास्तव में 8-बिट (क्यों 8-बिट ?? आगे पढ़ें) डेटा नमूने होते हैं जिन्हें हमें अपने Arduino का उपयोग करके एक निश्चित दर या गति पर चलाने की आवश्यकता होती है, जो हमारी नमूना दर के अनुसार निर्दिष्ट होती है।

एक ऑडियो सिग्नल का सिद्धांत।

उन लोगों के लिए जो नहीं जानते कि नमूना दर या बिट दर क्या है: -

नमूनाकरण दर को नमूनों की संख्या के रूप में परिभाषित किया गया है, हम एक सेकंड में खेल रहे हैं (आमतौर पर हर्ट्ज या केएचजेड में मापा जाता है)।

विस्तार से जानने के लिए:-यहां क्लिक करें

मानक नमूनाकरण दर 44100 हर्ट्ज (सर्वोत्तम गुणवत्ता), 32000 हर्ट्ज, 22050 हर्ट्ज, आदि हैं

जिसका मतलब है कि 44100 नमूने एक सेकंड में उसी के अनुसार तरंग उत्पन्न करने के लिए उपयोग किए जाते हैं।

यानी प्रत्येक नमूने को 1/44100=22.67 यूएस के निश्चित अंतराल पर चलाया जाना आवश्यक है।

फिर एक ऑडियो सिग्नल की बिट डेप्थ आती है, जो आमतौर पर एक माप है कि डिजिटल ऑडियो में ध्वनि को कितनी सटीक रूप से दर्शाया जाता है। बिट गहराई जितनी अधिक होगी, डिजिटल ध्वनि उतनी ही सटीक होगी।

लेकिन 16 मेगाहर्ट्ज घड़ी के साथ Arduino या किसी अन्य माइक्रो-नियंत्रक के साथ हमें केवल 8-बिट तक का उपयोग करने की अनुमति मिलती है। मैं इसे समझाऊंगा क्यों।

३२८पी के डेटाशीट में पृष्ठ संख्या १०२ पर एक सूत्र है:- डेटाशीट

मैं विवरण में नहीं जाऊंगा, मैं इस सूत्र का उपयोग क्यों कर रहा हूं।

सिग्नल की आवृत्ति = क्लॉक सिग्नल / N x (1+TOP)

क्लॉक सिग्नल = 16 मेगाहर्ट्ज (Arduino बोर्ड)

N=prescaler (1 हमारी परियोजना के लिए मूल्य है)

TOP=मान 0 से 2^16 (16-बिट टाइमर काउंटर के लिए) (255=2^8 (8-बिट) हमारे प्रोजेक्ट के लिए)

हमें सिग्नल की आवृत्ति का मान मिलता है = 62.5 kHz

इसका मतलब है कि वाहक तरंग आवृत्ति बिट गहराई पर निर्भर है।

मान लीजिए, अगर हम टॉप वैल्यू = 2^16=65536 (यानी 16-बिट की बिट गहराई) का उपयोग करते हैं

तब हमें सिग्नल की आवृत्ति का मान = 244 हर्ट्ज (जिसका हम उपयोग नहीं कर सकते)

OKK… तो ऑडियो सिग्नल कैसे काम करता है, इसका इतना सिद्धांत काफी है, इसलिए प्रोजेक्ट पर वापस जाएं।

गाने के लिए उत्पन्न C कोड को Arduino में कॉपी किया जा सकता है और चलाया जा सकता है, लेकिन हम 8000 Hz की नमूना दर के साथ 3-सेकंड ऑडियो प्लेबैक तक सीमित हैं। क्योंकि यह सी कोड एक टेक्स्ट फाइल है और इसलिए संपीड़ित नहीं बल्कि डीकंप्रेस्ड है। और यह बहुत अधिक जगह लेता है। (उदाहरण के लिए ४३-सेकंड ऑडियो के साथ सी कोड फ़ाइल ४४, १ किलोहर्ट्ज़ नमूने के साथ २३ एमबी तक जगह लेती है)। और हमारा अरुडिनो मेगा हमें लगभग २५६ केबी का स्थान देता है।

तो हम Arduino का उपयोग करके गाने कैसे चलाएंगे। यह मुमकिन नहीं है। यह निर्देश योग्य नकली है। पाठक चिंता न करें, इसलिए हमें Arduino को ऑडियो डेटा भेजने के लिए बहुत अधिक गति (1 Mb/s तक) पर Arduino के बीच किसी प्रकार के संचार का उपयोग करने की आवश्यकता है।

लेकिन ऐसा करने के लिए हमें वास्तव में कितनी गति चाहिए ??

उत्तर ४४००० बाइट्स प्रति सेकंड है जिसका अर्थ है ४४०००*८=३२५,००० बिट्स/सेकंड से अधिक की गति।

इस डेटा को हमारे Arduino पर भेजने के लिए हमें बड़े भंडारण के साथ एक और परिधीय की आवश्यकता है। और वह लिनक्स के साथ हमारा पीसी होगा (लिनक्स के साथ पीसी क्यों ??? इसके बारे में और जानने के लिए कृपया आगे पढ़ें।)

आह … इसका मतलब है कि हम सीरियल कम्युनिकेशन का उपयोग कर सकते हैं … लेकिन रुकिए … सीरियल केवल 115200 बिट्स / एस तक की गति से संभव है, जिसका अर्थ है (325000/115200 = 3), यह आवश्यकता से तीन गुना धीमा है।

नहीं, मेरे दोस्तों, ऐसा नहीं है। हम ५००,००० बिट्स/सेकेंड की गति या बॉड दर का उपयोग अधिकतम २०-३० सेमी तक की केबल के साथ करेंगे, जो आवश्यकता से १.५ गुना तेज है।

क्यों लिनक्स, विंडोज नहीं ???

इसलिए, हमें अपने पीसी के साथ 1/44100=22.67 यूएस के अंतराल (ऊपर भी निर्दिष्ट) पर नमूने भेजने की आवश्यकता है।

तो हम इसे ऐसा करने के लिए कैसे प्रोग्राम कर सकते हैं ??

हम किसी प्रकार के स्लीप फ़ंक्शन का उपयोग करके अंतराल पर सीरियल के माध्यम से डेटा बाइट भेजने के लिए C++ का उपयोग कर सकते हैं

जैसे नैनोस्लीप, क्रोनो, आदि, आदि…।

के लिए(int x=0;x

सेंडडाटा (एक्स);

नैनोस्लीप (22000);// 22uS

}

लेकिन यह विंडोज़ पर काम नहीं करता है, लिनक्स पर भी इस तरह से काम नहीं करता है (लेकिन मुझे एक और तरीका मिला है जिसे आप मेरे कोड में संलग्न कर सकते हैं।)

क्योंकि हम विंडोज़ का उपयोग करके इस तरह की ग्रैन्युलैरिटी हासिल नहीं कर सकते। इस तरह की ग्रैन्युलैरिटी हासिल करने के लिए आपको लिनक्स की जरूरत है।

मुझे लिनक्स के साथ भी समस्याएं मिलीं …

हम लिनक्स का उपयोग करके इस तरह की ग्रैन्युलैरिटी प्राप्त कर सकते हैं, लेकिन मुझे अपने प्रोग्राम को 22uS के लिए स्लीप करने के लिए ऐसा कोई फ़ंक्शन नहीं मिला।

नैनोस्लीप, क्रोनो नैनोस्लीप, आदि जैसे कार्य भी काम नहीं करते हैं, क्योंकि वे केवल 100 यूएस से अधिक की नींद प्रदान करते हैं। लेकिन मुझे ठीक 22 यू.एस. मैंने Google पर प्रत्येक पृष्ठ पर शोध किया है और सी/सी ++ में उपलब्ध सभी संभावित कार्यों के साथ प्रयोग किया है लेकिन मेरे लिए कुछ भी काम नहीं किया है। फिर मैं अपने स्वयं के कार्य के साथ आया, जिसने मेरे लिए एक वास्तविक आकर्षण के रूप में काम किया।

और मेरा कोड अब 1uS या उससे अधिक की सटीक, सटीक नींद प्रदान करता है !!!

इसलिए हमने मुश्किल हिस्से को कवर कर लिया है और बाकी आसान है…

और हम एक विशिष्ट आवृत्ति के साथ वाहक तरंग आवृत्ति के साथ Arduino का उपयोग करके एक PWM सिग्नल उत्पन्न करना चाहते हैं। (62.5KHz (जैसा कि ऊपर गणना की गई है) सिग्नल की अच्छी प्रतिरक्षा के लिए)।

इसलिए, हमें PWM बनाने के लिए Arduino के तथाकथित TIMERS का उपयोग करने की आवश्यकता है। वैसे, मैं उस पर अधिक विवरण में नहीं जाऊंगा, क्योंकि आपको TIMERS विषय पर कई ट्यूटोरियल मिलेंगे, लेकिन अगर आपको कुछ नहीं मिलते हैं, तो नीचे टिप्पणी करें मैं एक बनाऊंगा।

मैंने अपने Arduino Pins को बचाने के लिए TC4420 Mosfet ड्राइवर का उपयोग किया है, क्योंकि वे कभी-कभी MOSFET चलाने के लिए इतना करंट नहीं दे सकते।

तो, यह इस परियोजना का लगभग सिद्धांत था, अब हम सर्किट आरेख देख सकते हैं।

ध्यान दें ध्यान दें

वास्तव में, इस परियोजना को जानबूझकर बहुत कठिन बना दिया गया था (मैं बताता हूँ क्यों), एक और तरीका है जिसके लिए मेरे अगले निर्देश में सिर्फ Arduino और स्पीकर की आवश्यकता नहीं है। लिंक यहाँ है।

*इस परियोजना का मुख्य उद्देश्य सीरियल कम्युनिकेशन का उपयोग करना और इसकी शक्ति को जानना है और यह सीखना है कि हम अपने पीसी को इतने अच्छे अंतराल पर कार्यों को ठीक से करने के लिए कैसे प्रोग्राम कर सकते हैं।*

चरण 3: योजनाबद्ध

ढांच के रूप में
ढांच के रूप में

सभी घटकों को कनेक्ट करें जैसा कि योजनाबद्ध में दिखाया गया है। तो आपके पास यहां दो विकल्प हैं:-

1. एक स्पीकर कनेक्ट करें (5V से जुड़ा)

2. फ्लाईबैक ट्रांसफॉर्मर कनेक्ट करें (12V से कनेक्टेड)

मैंने दोनों की कोशिश की है। और दोनों बहुत अच्छा काम करते हैं।

अस्वीकरण:-

*मैं सावधानी के साथ फ्लाईबैक ट्रांसफार्मर का उपयोग करने की सलाह देता हूं क्योंकि यह खतरनाक हो सकता है क्योंकि यह उच्च वोल्टेज उत्पन्न करता है। और मैं किसी भी क्षति के लिए उत्तरदायी नहीं हूँ।*

चरण 4: ऑडेसिटी का उपयोग करके MP3 को WAV फ़ाइल में बदलें

ऑडेसिटी का उपयोग करके MP3 को WAV फ़ाइल में बदलें
ऑडेसिटी का उपयोग करके MP3 को WAV फ़ाइल में बदलें
ऑडेसिटी का उपयोग करके MP3 को WAV फ़ाइल में बदलें
ऑडेसिटी का उपयोग करके MP3 को WAV फ़ाइल में बदलें
ऑडेसिटी का उपयोग करके MP3 को WAV फ़ाइल में बदलें
ऑडेसिटी का उपयोग करके MP3 को WAV फ़ाइल में बदलें

तो, सबसे पहले, सॉफ्टवेयर डाउनलोड करें

1. दुस्साहस, Google से खोजें और डाउनलोड करें

2. WAV फ़ाइल को C-कोड में बदलने के लिए, WAVToCode नाम से एक विंडो एप्लिकेशन डाउनलोड करें

आप इस लिंक से WAVToCode सॉफ़्टवेयर का उपयोग करना सीख सकते हैं और इसे इस लिंक से डाउनलोड कर सकते हैं।

मैं दोनों सॉफ़्टवेयर का उपयोग करने के तरीके के बारे में विस्तृत चरण भी दूंगा।

कृपया इस निर्देश से जुड़ी तस्वीरें देखें।

इस चरण में, हम MP3 को Wav में बदल देंगे। (तस्वीरों का पालन करें, परियोजना दर 44100Hz होनी चाहिए)

अगले चरण में, हम एक wav फ़ाइल को C कोड में बदल देंगे।

चरण 5: डब्ल्यूएवी से सी-कोड

डब्ल्यूएवी से सी-कोड
डब्ल्यूएवी से सी-कोड
डब्ल्यूएवी से सी-कोड
डब्ल्यूएवी से सी-कोड
डब्ल्यूएवी से सी-कोड
डब्ल्यूएवी से सी-कोड

तस्वीरों का पालन करें।

पिछले दो चित्रों को देखें, परिवर्तन बिल्कुल समान होने चाहिए, बड़े अक्षर बड़े होने चाहिए और छोटे अक्षर कम होने चाहिए, या संकलन के दौरान आपको सिंटैक्स त्रुटि मिलेगी।

(आप देख सकते हैं कि 1min 41s गाने ने 23mb स्पेस लिया।)

गीत का नाम और लंबाई क्रमशः अपने गीत के नाम और अवधि के साथ बदलें।

और सी कोड फाइल को सेव करें।

इसे उन सभी गानों के साथ करें जिन्हें आप Arduino के साथ बजाना चाहते हैं।

चरण 6: एक अंतिम फ़ाइल बनाएं और अपने लिनक्स को सक्रिय करें

एक अंतिम फ़ाइल बनाएं और अपने लिनक्स को सक्रिय करें
एक अंतिम फ़ाइल बनाएं और अपने लिनक्स को सक्रिय करें
एक अंतिम फ़ाइल बनाएं और अपने लिनक्स को सक्रिय करें
एक अंतिम फ़ाइल बनाएं और अपने लिनक्स को सक्रिय करें
एक अंतिम फ़ाइल बनाएं और अपने लिनक्स को सक्रिय करें
एक अंतिम फ़ाइल बनाएं और अपने लिनक्स को सक्रिय करें

इस लिंक में प्रदान की गई फ़ाइल में अपने सभी परिवर्तित गीतों को जोड़ें।

और तस्वीरों का पालन करें।

कोड को Arduino में अपलोड करें, जिसे मैंने संलग्न किया है।

सी कोड फ़ाइल नाम याद रखें। (उदाहरण के लिए जीवन शैली, डॉलर, वियर), क्योंकि हमें केस-संवेदी के साथ हमारे कोड में ठीक उन्हीं नामों का उल्लेख करना होगा।

अंत में अपने फेडोरा लाइव यूएसबी या अन्य को फायर करें और जीसीसी कंपाइलर स्थापित करें और फिर फ़ोल्डर से संकलन निर्देशों का उपयोग करके प्रोग्राम को संकलित करें और इसे चलाएं।

अंत में, आप स्पीकर या फ्लाईबैक के गाने सुन सकेंगे।

इस निर्देश को पढ़ने के लिए धन्यवाद और अगर आपको यह पसंद आया तो कृपया टिप्पणी करें।

ध्यान मैंने इस निर्देश के दूसरे भाग को बनाया है, जो कि अधिक आसान है और काम करने के लिए न्यूनतम परेशानी की आवश्यकता है। दूसरे भाग का लिंक (सबसे आसान)

सिफारिश की: