- सामग्री की आवश्यकता:
- सर्किट आरेख:
- स्कैमैटिक्स और स्पष्टीकरण:
- समझ रहे हैं
- Arduino पर पियानो टन बजाना:
- Arduino प्रोग्रामिंग:
- चलायें, रिकॉर्ड, खेलना और दोहराना! :
Arduino उन लोगों के लिए एक वरदान रहा है जो आसानी से सामान बनाने के लिए इलेक्ट्रॉनिक्स पृष्ठभूमि से नहीं हैं। यह एक बेहतरीन प्रोटोटाइप उपकरण है या कुछ ठंडा करने की कोशिश करने के लिए, इस परियोजना में हम Arduino का उपयोग करके एक छोटा सा मज़ेदार पियानो बनाने जा रहे हैं । यह पियानो सिर्फ 8 पुश बटन और बजर के साथ बहुत सादा है। यह स्पीकर पर विभिन्न प्रकार के पियानो नोट्स बनाने के लिए Arduino के टोन () फ़ंक्शन का उपयोग करता है । इसे थोड़ा सा मसाला देने के लिए हमने प्रोजेक्ट में रिकॉर्डिंग फीचर जोड़ा है, यह हमें एक धुन रिकॉर्ड करने और आवश्यकता के बाद इसे फिर से खेलने में सक्षम बनाता है । ध्वनि सही है !! तो चलो 'निर्माण…
सामग्री की आवश्यकता:
- अरुडिनो उनो
- 16 * 2 एलसीडी डिस्प्ले
- बजर
- ट्रिमर 10k
- एसपीडीटी स्विच
- पुश बटन (8 नग)
- प्रतिरोध (10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k, 10k)
- ब्रेड बोर्ड
- तारों को जोड़ना
सर्किट आरेख:
पूरा Arduino पियानो प्रोजेक्ट कुछ कनेक्टिंग तारों के साथ एक ब्रेडबोर्ड के ऊपर बनाया जा सकता है। फ्रिट्ज़िंग का उपयोग करके बनाए गए सर्किट आरेख जो परियोजना के ब्रेडबोर्ड दृश्य को दिखाता है नीचे दिखाया गया है
बस सर्किट आरेख का पालन करें और तदनुसार तारों को कनेक्ट करें, एक पीसीबी मॉड्यूल के साथ उपयोग किए जाने वाले पुश बटन और बजर लेकिन वास्तविक हार्डवेयर में हमने केवल स्विच और बजर का उपयोग किया है, यह आपको बहुत भ्रमित नहीं करना चाहिए क्योंकि उनके पास एक ही प्रकार का पिन है। । आप अपने कनेक्शन बनाने के लिए हार्डवेयर की निचली छवि का भी उल्लेख कर सकते हैं।
बाईं ओर से प्रतिरोधों का मान निम्न क्रम में है, 10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k और 10k । यदि आपके पास समान DPST स्विच नहीं है, तो आप ऊपर दिए गए सर्किट आरेख में दिखाए गए सामान्य टॉगल स्विच का उपयोग कर सकते हैं। आइए अब परियोजना के योजनाबद्ध सिद्धांतों पर गौर करें कि हमने निम्नलिखित कनेक्शन क्यों बनाए हैं।
स्कैमैटिक्स और स्पष्टीकरण:
सर्किट आरेख के लिए योजनाबद्ध जो ऊपर दिखाया गया है, नीचे दिया गया है, इसे फ्रिट्ज़िंग का उपयोग करके भी बनाया गया था।
एक मुख्य कनेक्शन जिसे हमें समझना है कि हमने एनालॉग A0 पिन के माध्यम से 8 पुश बटन को Arduino से कैसे जोड़ा है । मूल रूप से हमें 8 इनपुट पिनों की आवश्यकता होती है जो 8 इनपुट पुश बटन से जुड़े हो सकते हैं, लेकिन इस तरह की परियोजनाओं के लिए हम 8 पिन वाले माइक्रोकंट्रोलर का उपयोग केवल पुश बटन के लिए नहीं कर सकते हैं क्योंकि हमें बाद में उपयोग करने की आवश्यकता हो सकती है। हमारे मामले में हमारे पास एलसीडी डिस्प्ले है जिसे इंटरफेज किया जाना है।
तो हम Arduino के एनालॉग पिन का उपयोग करते हैं और सर्किट को पूरा करने के लिए अलग-अलग प्रतिरोधक मानों के साथ एक संभावित विभक्त बनाते हैं। इस तरह जब प्रत्येक बटन को एक अलग एनालॉग वोल्टेज दबाया जाता है, तो एनालॉग पिन को आपूर्ति की जाएगी। केवल दो प्रतिरोधों और दो पुश बटन के साथ एक नमूना सर्किट नीचे दिखाया गया है।
इस स्थिति में ADC पिन + 5V प्राप्त होगा जब पुश बटन दबाए नहीं जाते हैं, यदि पहला बटन दबाया जाता है तो संभावित विभक्त 560R रोकनेवाला के माध्यम से पूरा हो जाता है और यदि दूसरा बटन दबाया जाता है तो संभावित विभक्त 1.5 का उपयोग करके प्रतिस्पर्धा करता है। k रोकनेवाला। इस तरह एडीसी पिन द्वारा प्राप्त वोल्टेज संभावित विभक्त के सूत्रों के आधार पर अलग-अलग होगा। यदि आप अधिक जानना चाहते हैं कि संभावित विभक्त कैसे काम करता है और एडीसी पिन द्वारा प्राप्त वोल्टेज के मूल्य की गणना कैसे करें तो आप इस संभावित विभक्त कैलकुलेटर पृष्ठ का उपयोग कर सकते हैं।
इसके अलावा सभी कनेक्शन सीधे आगे हैं, एलसीडी पिन 8, 9, 10, 11 और 12. से जुड़ा है । बजर पिन 7 से जुड़ा है और एसपीडीटी स्विच अरडिनो के पिन 6 से जुड़ा है। पूरा प्रोजेक्ट लैपटॉप के यूएसबी पोर्ट के माध्यम से संचालित होता है। आप Arduino को DC जैक के माध्यम से 9V या 12V आपूर्ति से भी जोड़ सकते हैं और परियोजना अभी भी उसी तरह काम करेगी।
समझ रहे हैं
Arduino में एक आसान टोन () फ़ंक्शन है जिसका उपयोग विभिन्न आवृत्ति संकेतों को उत्पन्न करने के लिए किया जा सकता है जो कि बजर का उपयोग करके विभिन्न ध्वनियों का उत्पादन करने के लिए उपयोग किया जा सकता है। तो आइए समझते हैं कि फ़ंक्शन कैसे काम करता है और इसका उपयोग कैसे किया जा सकता है Arduino।
इससे पहले हमें पता होना चाहिए कि एक पीजो बजर कैसे काम करता है। हमने अपने स्कूल में पीजो क्रिस्टल के बारे में सीखा होगा, यह एक क्रिस्टल के अलावा कुछ भी नहीं है जो यांत्रिक कंपन को बिजली या इसके विपरीत में परिवर्तित करता है। यहां हम एक वैरिएबल करंट (फ्रीक्वेंसी) लागू करते हैं, जिसके लिए क्रिस्टल इस प्रकार ध्वनि उत्पन्न करता है। इसलिए पाइजो बजर को कुछ शोर करने के लिए हमें पाइजो इलेक्ट्रिक क्रिस्टल को कंपन करने के लिए बनाना है, पिच और शोर का स्वर इस बात पर निर्भर करता है कि क्रिस्टल कितनी तेजी से कंपन करता है। इसलिए वर्तमान की आवृत्ति को अलग करके टोन और पिच को नियंत्रित किया जा सकता है।
ठीक है, तो हम Arduino से एक चर आवृत्ति कैसे प्राप्त करते हैं? यह वह जगह है जहाँ टोन () फ़ंक्शन आता है। टोन () एक विशिष्ट पिन पर एक विशेष आवृत्ति उत्पन्न कर सकता है। आवश्यकता होने पर समय अवधि का भी उल्लेख किया जा सकता है। टोन के लिए वाक्यविन्यास () है
सिंटैक्स टोन (पिन, फ़्रीक्वेंसी) टोन (पिन, फ़्रीक्वेंसी, ड्यूरेशन) पैरामीटर्स पिन: वह पिन जिस पर टोन फ़्रीक्वेंसी जेनरेट की जाती है: हर्ट्ज़ में टोन की आवृत्ति - अहस्ताक्षरित अंतरंग अवधि: मिलीसेकंड में टोन की अवधि (वैकल्पिक 1) - लंबे समय तक अहस्ताक्षरित
पिन के मान आपके किसी भी डिजिटल पिन हो सकते हैं। मैंने यहां पिन नंबर 8 का उपयोग किया है। उत्पन्न होने वाली आवृत्ति आपके Arduino बोर्ड में टाइमर के आकार पर निर्भर करती है। संयुक्त राष्ट्र संघ और अधिकांश अन्य सामान्य बोर्डों के लिए न्यूनतम आवृत्ति जो उत्पादन की जा सकती है, वह है 31Hz और उत्पादन की जाने वाली अधिकतम आवृत्ति 65535Hz है। हालाँकि हम मनुष्य केवल 2000Hz और 5000 हर्ट्ज के बीच की आवृत्ति सुन सकते हैं।
Arduino पर पियानो टन बजाना:
ठीक है, इससे पहले कि मैं इस विषय पर आरंभ करूं, मुझे स्पष्ट कर देना चाहिए कि मैं संगीत नोट्स या पियानो के साथ एक नौसिखिया हूं, इसलिए कृपया मुझे क्षमा करें अगर इस शीर्षक के तहत कुछ भी उल्लेख किया गया है तो वह अस्पष्ट है।
अब हम जानते हैं कि हम Arduino में टोन फ़ंक्शन का उपयोग कुछ ध्वनियों का उत्पादन करने के लिए कर सकते हैं, लेकिन हम उसी का उपयोग करके किसी विशेष नोट के टन कैसे खेल सकते हैं। हमारे लिए भाग्यशाली ब्रेट हागमन द्वारा लिखित "पिचेज़" नामक एक पुस्तकालय है । इस लाइब्रेरी में एक पियानो पर कौन सी आवृत्ति किस नोट के बराबर है, इसके बारे में पूरी जानकारी है। मुझे आश्चर्य हुआ कि यह पुस्तकालय वास्तव में कितनी अच्छी तरह काम कर सकता है और लगभग हर नोट को पियानो पर बजाता है, मैंने पाइरेट्स ऑफ कैरिबियन, क्रेजी फ्रॉग, मारियो और यहां तक कि टाइटैनिक के पियानो नोट्स को खेलने के लिए भी इस्तेमाल किया और वे भयानक लग रहे थे। उफ़! हम यहां विषय से थोड़ा हटकर हो रहे हैं, इसलिए यदि आप रुचि रखते हैं तो Arduino प्रोजेक्ट का उपयोग करके धुनों की जाँच करें। आपको उस प्रोजेक्ट में पिचों के बारे में अधिक जानकारी मिलेगी। पुस्तकालय।
हमारी परियोजना में केवल 8 पुश बटन हैं इसलिए प्रत्येक बटन केवल एक विशेष संगीत नोट चला सकता है और इस प्रकार पूरी तरह से हम केवल 8 नोट खेल सकते हैं। मैंने एक पियानो पर सबसे अधिक उपयोग किए जाने वाले नोटों का चयन किया, लेकिन क्या आप किसी भी 8 का चयन कर सकते हैं या यहां तक कि अधिक पुश बटन के साथ परियोजना का विस्तार कर सकते हैं और अधिक नोट्स जोड़ सकते हैं।
इस परियोजना में चुने गए नोट सी 4, डी 4, ई 4, एफ 4, जी 4, ए 4, बी 4 और सी 5 हैं जो क्रमशः 1 से 8 बटन का उपयोग करके खेले जा सकते हैं।
Arduino प्रोग्रामिंग:
सिद्धांत के बहुत से हमें Arduino प्रोग्रामिंग के मजेदार हिस्से के लिए मिलता है। पूरा Arduino कार्यक्रम इस पृष्ठ के अंत में दिया जाता है आप या यदि आप उत्सुक नीचे कूद कर सकते हैं कि कैसे को समझने के लिए कोड काम करता है आगे पढ़ें।
हमारे Arduino प्रोग्राम में हमें पिन A0 से एनालॉग वोल्टेज को पढ़ना है, फिर भविष्यवाणी करें कि कौन सा बटन दबाया गया था और उस बटन के संबंधित टोन को चलाएं। ऐसा करते समय हमें यह भी रिकॉर्ड करना चाहिए कि उपयोगकर्ता ने कौन सा बटन दबाया है और उसने कितनी देर तक दबाया है, ताकि बाद में हम उपयोगकर्ता द्वारा चलाए गए स्वर को फिर से बना सकें।
तर्क वाले हिस्से में जाने से पहले, हमें यह घोषित करना होगा कि हम कौन से 8 नोट खेल रहे होंगे । नोटों के लिए संबंधित आवृत्ति तब पिचों से ले ली जाती है। पुस्तकालय और फिर नीचे दिखाए गए अनुसार एक सरणी बनाई जाती है। यहाँ नोट C4 खेलने की आवृत्ति 262 और इसी तरह की है।
int नोट्स = {262, 294, 330, 349, 392, 440, 494, 523}; // C4, D4, E4, F4, G4, A4, B4 के लिए आवृत्ति सेट करें
आगे हमें उल्लेख करना होगा कि एलसीडी डिस्प्ले किस पिन से जुड़ा है। यदि आप ऊपर दिए गए सटीक समान स्कीमाटिक्स का अनुसरण कर रहे हैं तो आपको यहां कुछ भी बदलने की आवश्यकता नहीं है।
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // पिंस जिसमें एलसीडी लिक्विड क्रिस्टल एलसीडी (आरएस, एन, डी 4, डी 5, डी 6, डी 7) से जुड़ा है ;
अगला, हमारे सेटअप फ़ंक्शन के अंदर हम डीबगिंग के लिए सिर्फ एलसीडी मॉड्यूल और सीरियल मॉनिटर को इनिशियलाइज़ करते हैं। हम यह भी सुनिश्चित करने के लिए एक इंट्रो संदेश प्रदर्शित करते हैं कि चीजें नियोजित हैं। अगला , मुख्य लूप फ़ंक्शन के अंदर हमारे पास दो हैं जबकि लूप हैं ।
जब तक SPDT स्विच को अधिक रिकॉर्डिंग में रखा जाता है तब तक एक लूप निष्पादित किया जाएगा । रिकॉर्डिंग मोड में उपयोगकर्ता आवश्यक टन का भुगतान कर सकता है और उसी समय जो टोन चलाया जा रहा है वह भी सहेजा जाएगा। तो जबकि लूप नीचे इस तरह दिखता है
जबकि (digitalRead (6) == 0) // यदि टॉगल स्विच को रिकॉर्डिंग मोड {lcd.setCursor (0, 0) में सेट किया गया है; lcd.print ("रिकॉर्डिंग.."); lcd.setCursor (0, 1); Detect_button (); Play_tone (); }
जैसा कि आपने देखा होगा कि लूप के अंदर हमारे दो कार्य हैं । पहला फ़ंक्शन Detect_button () का उपयोग किया जाता है जो यह पता लगाता है कि उपयोगकर्ता ने कौन सा बटन दबाया है और दूसरा फ़ंक्शन Play_tone () संबंधित टोन को चलाने के लिए उपयोग किया जाता है। इस फ़ंक्शन के अलावा Detect_button () फ़ंक्शन भी रिकॉर्ड करता है कि कौन सा बटन दबाया जा रहा है और Play_tone () फ़ंक्शन रिकॉर्ड करता है कि बटन कितनी देर तक दबाया गया था।
Detect_button () फ़ंक्शन के अंदर हम पिन A0 से एनालॉग वोल्टेज को पढ़ते हैं और कुछ पूर्वनिर्धारित मूल्यों के साथ तुलना करके यह पता लगाते हैं कि कौन सा बटन दबाया गया है। मान को या तो वोल्टेज विभक्त कैलकुलेटर का उपयोग करके या प्रत्येक बटन के लिए एनालॉग मूल्य को पढ़ने के लिए सीरियल मॉनिटर का उपयोग करके निर्धारित किया जा सकता है।
शून्य Detect_button () { analogVal = analogRead (A0); // पिन A0 pev_button = बटन पर एनालॉग वाल्टैग पढ़ें ; // याद रखें कि उपयोगकर्ता द्वारा दबाया गया पिछला बटन (analogVal <550) बटन = 8; अगर (analogVal <500) बटन = 7; अगर (analogVal <450) बटन = 6; अगर (analogVal <400) बटन = 5; अगर (analogVal <300) बटन = 4; अगर (analogVal <250) बटन = 3; if (एनालॉगवैल <150) बटन = 2; अगर (analogVal <100) बटन = 1; if (analogVal> 1000) बटन = 0; / **** Rcord में दबाया बटन एक सरणी *** / if (बटन! = pev_button && pev_button! = 0) { record_button = pev_button; button_index ++; दर्ज_बटन = 0; button_index ++; } / ** रिकॉर्डिंग कार्यक्रम का अंत ** / }
जैसा कि कहा गया है, इस फ़ंक्शन के अंदर हम उस क्रम को भी रिकॉर्ड करते हैं जिसमें बटन दबाए जाते हैं। रिकॉर्ड किए गए मान दर्ज किए गए एक सरणी में दर्ज किए जाते हैं, जिसे रिकॉर्ड किया गया_बटन। हम पहले चेक करते हैं कि क्या कोई नया बटन दबाया गया है, अगर दबाया जाता है तो हम यह भी जांचते हैं कि क्या वह बटन नहीं है। 0. बटन 0 जहां कुछ भी नहीं है लेकिन कोई बटन दबाया नहीं गया है। अगर लूप के अंदर हम वैरिएबल बटन_index द्वारा दिए गए इंडेक्स लोकेशन पर वैल्यू स्टोर करते हैं और फिर हम इस इंडेक्स वैल्यू को बढ़ाते हैं ताकि हम उसी लोकेशन पर न लिखें।
/ **** Rcord में दबाया बटन एक सरणी *** / अगर (बटन = pev_button && pev_button = 0!) { Recorded_button = pev_button; button_index ++; दर्ज_बटन = 0; button_index ++; } / ** रिकॉर्डिंग कार्यक्रम का अंत ** /
अंदर Play_tone () समारोह हम बटन एकाधिक का उपयोग करके दबाया के लिए संबंधित स्वर खेलेंगे अगर स्थिति। इसके अलावा हम एक सरणी नामित उपयोग करेगा recorded_time अंदर जो हम समय अवधि जिसके लिए बटन दबाया गया था बचत होगी। ऑपरेशन रिकॉर्डिंग अनुक्रम के समान है, हम यह निर्धारित करने के लिए मिलिस () फ़ंक्शन का उपयोग करते हैं कि प्रत्येक बटन को कितनी देर तक दबाया गया था, साथ ही चर का आकार कम करने के लिए, हम मान को 10 से विभाजित करते हैं। बटन के लिए 0, जिसका अर्थ है कि उपयोगकर्ता नहीं है कुछ भी दबाने पर हम समान अवधि के लिए कोई स्वर नहीं बजाते। फ़ंक्शन के अंदर पूरा कोड नीचे दिखाया गया है।
शून्य Play_tone () { / **** प्रत्येक बटन प्रेस के बीच के समय को सरणी में दबाएं *** / अगर (बटन! = pev_button) { lcd.clear (); // फिर इसे साफ़ करें note_time = (मिली () - start_time) / 10; record_time = note_time; time_index ++; start_time = मिली (); } / ** रिकॉर्डिंग कार्यक्रम का अंत ** / (बटन == 0) { noTone (7); lcd.print ("0 -> रोकें.."); } अगर (बटन == 1) { टोन (7, नोट्स); lcd.print ("1 -> NOTE_C4"); } अगर (बटन == 2) { टोन (7, नोट्स); lcd.print ("2 -> NOTE_D4"); } यदि (बटन == 3) { टोन (7, नोट्स); lcd.print ("3 -> NOTE_E4"); } अगर (बटन == 4) { टोन (7, नोट्स); lcd.print ("4 -> NOTE_F4"); } अगर (बटन == 5) { टोन (7, नोट्स); lcd.print ("5 -> NOTE_G4"); } अगर (बटन == 6) { टोन (7, नोट्स); lcd.print ("6 -> NOTE_A4"); } अगर (बटन == 7) { टोन (7, नोट्स); lcd.print ("7 -> NOTE_B4"); } अगर (बटन == 8) { टोन (7, नोट्स); lcd.print ("8 -> NOTE_C5"); } }
अंत में रिकॉर्डिंग के बाद उपयोगकर्ता को रिकॉर्ड किए गए स्वर को चलाने के लिए DPST को दूसरी दिशा में टॉगल करना होता है । जब यह किया जाता है, तो प्रोग्राम पिछले लूप से बाहर हो जाता है और लूप के दौरान दूसरे में प्रवेश करता है जहां हम नोटों को खेलते हुए बटन के अनुक्रम में खेलते हैं जो पहले दर्ज की गई थी। ऐसा करने का कोड नीचे दिखाया गया है।
जबकि (digitalRead (6) == 1) // यदि टॉगल स्विच को प्लेइंग मोड { lcd.clear () में सेट किया गया है ; lcd.setCursor (0, 0); lcd.print ("अब बजाना.."); for (int i = 0; मैं <sizeof (record_button) / 2; i ++) { विलंब ((record_time) * 10); // अगली धुन देने से पहले प्रतीक्षा करें यदि (रिकॉर्ड किया गया_बटन == 0) noTone (7); // उपयोगकर्ता किसी भी बटन को किसी अन्य टोन (7, नोट्स - 1)]; // उपयोगकर्ता द्वारा छुआ बटन के अनुरूप ध्वनि खेलते हैं } } }}
चलायें, रिकॉर्ड, खेलना और दोहराना!:
दिखाए गए सर्किट आरेख के अनुसार हार्डवेयर बनाएं, और कोड को Arduino बोर्ड और उसके दिखाए गए समय पर अपलोड करें। रिकॉर्डिंग मोड में एसपीडीटी को रखें और अपनी पसंद के स्वर बजाना शुरू करें, प्रत्येक बटन को दबाने से एक अलग टोन उत्पन्न होगा। इस मोड के दौरान एलसीडी " रिकॉर्डिंग…" प्रदर्शित करेगा और दूसरी पंक्ति पर आपको उस नोट का नाम दिखाई देगा जिसे वर्तमान में नीचे दबाया जा रहा है
एक बार जब आप SPDT स्विच को दूसरी तरफ टॉगल करने के लिए अपने टोन को बजा लेते हैं और LCD को " अब बजाना.." प्रदर्शित करना चाहिए और फिर उस टोन को बजाना शुरू करें जो आपने अभी-अभी बजाया है। नीचे की तस्वीर में दिखाए गए अनुसार टॉगल स्विच को तब तक रखा जाएगा, जब तक टॉगल स्विच को फिर से वही स्वर नहीं बजाया जाएगा।
परियोजना का पूरा काम नीचे दिए गए वीडियो में पाया जा सकता है। आशा है कि आपने इस परियोजना को समझा और इसके निर्माण का आनंद लिया। यदि आपको इस पोस्ट के निर्माण में कोई समस्या है, तो उन्हें टिप्पणी अनुभाग में रखें या अपनी परियोजना में तकनीकी मदद के लिए मंचों का उपयोग करें। इसके अलावा नीचे दिए गए प्रदर्शन वीडियो की जांच करना न भूलें ।