विषयसूची:

ईएएल - अरुडिनो मिडी नियंत्रक: 7 कदम
ईएएल - अरुडिनो मिडी नियंत्रक: 7 कदम

वीडियो: ईएएल - अरुडिनो मिडी नियंत्रक: 7 कदम

वीडियो: ईएएल - अरुडिनो मिडी नियंत्रक: 7 कदम
वीडियो: OWIS English as an Additional Language ( EAL ) Programme - Japanese Subtitles 2024, जुलाई
Anonim
ईएएल - अरुडिनो मिडी नियंत्रक
ईएएल - अरुडिनो मिडी नियंत्रक

सोरेन ओस्टरगार्ड पीटरसन द्वारा निर्मित, OEAAM16EDA

यह निर्देशयोग्य एक arduino आधारित MIDI नियंत्रक का वर्णन करता है। यह एक स्कूल प्रोजेक्ट है। अपने हाथ का उपयोग करके आप MIDI कनेक्शन और एक कनेक्टेड MIDI इंस्ट्रूमेंट (या इस मामले में एक सॉफ़्टसिंथ सॉफ़्टवेयर चलाने वाली नोटबुक) के माध्यम से साधारण धुन बजा सकते हैं। आप C प्रमुख पैमाने, c-d-e-f-g-a-b-c से नोट्स चला सकते हैं। MIDI नियंत्रक को नोटबुक से कनेक्ट करने में सक्षम होने के लिए, आपको m-audio Uno जैसे MIDI से USB इंटरफ़ेस की आवश्यकता होगी।

चरण 1: प्रदर्शन वीडियो

Image
Image

वॉल्यूम बढ़ाएं और आनंद लें!

यह काम किस प्रकार करता है:

MIDI नियंत्रक एक Arduino MEGA 2560 बोर्ड का उपयोग करता है। 16 मिमी विद्युत ट्यूब में निर्मित दो प्रकाश (एलडीआर) सेंसर एक डबल सेंसर सिस्टम बनाते हैं और बिना किसी झूठी डबल ट्रिगरिंग के एक स्थिर ट्रिगर बनाने के लिए उपयोग किए जाते हैं। एक फ्लैशलाइट एक प्रकाश किरण बना रहा है, जब बीम को नियंत्रक खेलने वाले हाथ से बाधित होता है, तो निचला प्रकाश संवेदक लापता बीम को महसूस करता है, और एक HC-SR04 अल्ट्रासोनिक सेंसर सेंसर से हाथ की दूरी को मापता है।

मापी गई दूरी का उपयोग Arduino प्रोग्राम में MIDI नोट ऑन मैसेज और MIDI इंटरफ़ेस पर ट्रांसमिटेट में पैक किए जाने वाले उपयुक्त नोट नंबर मान की गणना और सेट करने के लिए किया जाता है। MIDI आउटपुट इंटरफ़ेस 74HC14 हेक्स इन्वर्टर का उपयोग करता है और यह एक मानक सर्किट है। MIDI संचार सीरियल 1 का उपयोग करता है, मानक सीरियल पोर्ट डिबगिंग के लिए उपयोग किया जाता है।

जब हाथ को प्रकाश पुंज से सीधे ऊपर और दूर ले जाया जाता है, तो ऊपरी प्रकाश संवेदक प्रकाश पुंज को फिर से महसूस करता है और एक MIDI नोट ऑफ संदेश पैक किया जाता है और MIDI आउटपुट पर संचारित किया जाता है।

सेंसर के बीच का खेल क्षेत्र लगभग 63cm है, और MIDI नियंत्रक की कुल लंबाई लगभग 75cm है।

चरण 2: प्रकाश संवेदकों का विवरण

प्रकाश संवेदकों का विवरण
प्रकाश संवेदकों का विवरण
प्रकाश संवेदकों का विवरण
प्रकाश संवेदकों का विवरण

डबल सेंसर सिस्टम बनाने के लिए दो लाइट सेंसर एक दूसरे के ऊपर लगे होते हैं। यह सॉफ़्टवेयर में सही उपयोग किए जाने पर झूठी ट्रिगरिंग को रोकता है। प्रत्येक प्रकाश संवेदक में 16 मिमी मानक विद्युत ट्यूब में निर्मित एक फोटो प्रतिरोधी मॉड्यूल होता है। हैकसॉ के साथ प्रत्येक ट्यूब में एक स्लॉट बनाया जाता है और फोटो रेसिस्टर पीसीबी को स्लॉट में दबाया जा सकता है। सेंसर को डक्ट टेप से एक साथ टेप किया जाता है और लकड़ी के एक टुकड़े के एक छोर पर भी लगाया जाता है। कोई भी रोशनी पीछे से सेंसर तक नहीं पहुंच पाएगी। लाइट सेंसर ने 10k पुल-अप रेसिस्टर्स में बनाया है।

चरण 3: HC-SR04 अल्ट्रासोनिक सेंसर का विवरण

HC-SR04 अल्ट्रासोनिक सेंसर का विवरण
HC-SR04 अल्ट्रासोनिक सेंसर का विवरण

HC-SR04 अल्ट्रा सोनिक सेंसर MIDI कंट्रोलर के दूसरे छोर पर लगा हुआ है। एक चमकदार टॉर्च यहां भी लगाई गई है, यह आवश्यक प्रकाश पुंज बनाता है।

चरण 4: एडुइनो सर्किट

एडुइनो सर्किट
एडुइनो सर्किट
एडुइनो सर्किट
एडुइनो सर्किट

MIDI आउटपुट सर्किट मूल रूप से एक मानक 74HC14 हेक्स इन्वर्टर और कुछ रेसिस्टर्स प्लस 5 पिन DIN महिला कनेक्टर है। 74HC14 सर्किट MIDI आउटपुट को चलाता है और साथ ही MIDI से जुड़ी "वास्तविक दुनिया" के खिलाफ Arduino बोर्ड के लिए सुरक्षा के कुछ साधन प्रदान करता है। एक अतिरिक्त व्यावहारिक विशेषता मिडी गतिविधि एलईडी है जो डेटा भेजे जाने पर संकेत देती है।

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

उपयोग किया गया सामन:

1 पीसी Arduino मेगा 2560

2 पीसी फोटो रेसिस्टर (एलडीआर) बिल्ट-इन पुल अप रेसिस्टर के साथ (37 सेंसर किट से)

1 पीसी एचसी-एसआर04 अल्ट्रासोनिक सेंसर

1 पीसी 74HC14 हेक्स इनवर्टिंग श्मिट ट्रिगर

2 पीसी रोकनेवाला 220 ओम 0.25W

1 पीसी रोकनेवाला 1k ओम 0.25W

1 पीसी एलईडी कम वर्तमान 2mA

1 पीसी 100nF सिरेमिक कैपेसिटर (बिजली आपूर्ति डिकूपिंग के लिए, सीधे 74HC14 के पावर पिन पर)

ब्रेडबोर्ड या प्रोटोटाइप पीसीबी

2 पीसी 16 मिमी विद्युत ट्यूब, लंबाई 65 मिमी

लकड़ी के 1 पीसी, लंबाई 75 सेमी

डक्ट टेप

तारों

चरण 5: I/O लिस्टिंग

आई/ओ लिस्टिंग
आई/ओ लिस्टिंग

चरण 6: एडुइनो कोड

स्केच test_Midi6 न्यूपिंग लाइब्रेरी का उपयोग करता है जिसे आपको HC-SC04 अल्ट्रासोनिक सेंसर का उपयोग करने के लिए अपने Arduino प्रोग्रामिंग वातावरण में शामिल करना चाहिए। स्केच पर डेनिश में टिप्पणी की गई है, क्षमा करें.. स्केच को अच्छी तरह से संरचित रखने के लिए, स्केच के विभिन्न तर्क भागों के लिए अलग-अलग फ़ंक्शन बनाए जाते हैं और वैश्विक चर से अधिकतर बचा जाता है। प्रोग्रामफ्लो को मिडी कंट्रोलर फ्लोचार्ट पीडीएफ में देखा गया है।

// 15-05-2017 संस्करण: test_Midi6

// सोरेन stergaard Petesen // Arduino MEGA 2560 // डेट प्रोग्राम udgør en simple MIDI कंट्रोलर som kan styre en ekstern MIDI enhed, f.eks en softsynt på en PC। // MIDI कंट्रोलर कान सेंड टोनन्सलाग (कोमांडो पर नोट) hhv। (कोमांडो को नोट करें) एन ओकटाव सी-सी, सी दुर स्काला के लिए। // डेर स्पिल्स मेड एन "कराटे होंड" पी एट ब्रोड्ट // होवर सेंसरर्न एर मोंटेरेट। मिडी कमांडोएर्न ट्रिगर्स एएफ एन डोबेल्ट एलडीआर सेंसर, डा डेर स्कल लव्स एन सिक्कर // डिटेक्टेरिंग ऑफ बडे नोर हेंडेन लैंडर पी ब्रेटेट (नोट ऑन), सैम्ट नॉर हन्डेन फेजर्न्स इजेन (नोट ऑफ)। // MIDI कमांडोर्न "नोट ऑन" और "नोट ऑफ" बेस्टår hver af ३ बाइट्स को भेजता है på serial1 पोर्टन // vha det i हार्डवेयर opbyggede MIDI इंटरफ़ेस। // टोनहेजडेन बेस्टेम्स वीएचए अल्ट्रालीड्ससेंसर एचसी-एसआर04 #शामिल // बिब्लियोटेक टिल डेन एवेंडेट अल्ट्रालीडसेंसर एचसी-एसआर04 # डिफाइन TRIGGER_PIN 3 // Arduino पिन टिल ट्रिगर पिन p अल्ट्रासोनिक सेंसर #define ECHO_PIN 2 // Arduino पिन टिल इको पिन på MAX_DISTANCE 100 को परिभाषित करें // पिंग के लिए अधिकतम समर्थन #define Median 5 // Antal målinger der beregnes gennemsnit af के लिए få en sikker afstandsbestemmelse NewPing सोनार(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // न्यूपिंग ऑब्जेक्ट बनाना। इंट सेंसपिन1 = 53; // LDR1 को समझें, int Senspin2 = 52; // verste LDR2 føler बाइट MIDIByte2; // MIDIByte2 bool klar_note_on = 1 के लिए वरिबेल डिक्लेरेशन; // klar_note_on के लिए वैरिएबल डिक्लेरेशन, styrer afsendelse af नोट kommando. Første kommando er en note on kommando bool klar_note_off = 0; // klar_note_off के लिए वैरिएबल डिक्लेरेशन, स्टायरर afsendelse af नोट ऑफ kommando void setup() {pinMode(Senspin1, INPUT); // sæt सेंसर इनपुट पिनमोड (Senspin2, INPUT); // sæt सेंसर इनपुट Serial1.begin (31250); // सीरियल1 मिडी संचार के लिए तैयार है: ३१२५० बिट/सेकुंड सीरियल.बेगिन (९६००); // सीरियल मॉनिटर, टिल टेस्ट} शून्य लूप () {बूल सेंसर १ = डिजिटलरेड (सेंसपिन १); // एल एल डी आर १ - एलडीआर बूल सेंसर २ = डिजिटलरेड (सेंसपिन २); // læs LDR2 - verste LDR if (Sensor1 && klar_note_on) //hvis LDR1 aktiveret और klar til Note on { byte Note_Byte = Hent_tonehojde(); // अल्ट्रालाईड्स सेंसर के माध्यम से हेनत टोन højde MIDIByte2 = Hent_MidiByte2(Note_Byte); // हेंट मिडबाइट2, मिडी नोट नंबर, वर्डियन 0xFF और सीमा से बाहर Send_Note_On(MIDIByte2); // kald Send_Note_On funktion klar_note_on = 0; // der skal kun kommando klar_note_off = 1 पर एन नोट भेजता है; // næste kommando er note off } if (Sensor2 && !Sensor1 && klar_note_off) // Hvis der skal ने नोट ऑफ kommando gøres det her.. { Send_Note_Off(MIDIByte2); // कोमांडो klar_note_off = 0 से नोट भेजें; // der skal kun sends en note off kommando } if (!Sensor1 && !Sensor2) // उसकी gøres klar til ny Note on kommando, hånd er væk fra brædt { klar_note_on = 1; } } बाइट Hent_MidiByte2(बाइट NoteByte) {// Denne funktion रिटर्नर MIDI नोट नंबर, वैलगट उड फ़्रे NoteByte बाइट MIDIB2; स्विच (नोटबाइट) // उसकी परिभाषित hvilken værdi MIDIByte2 skal है ud fra værdien af Note_Byte { केस 0: { MIDIB2 = 0x3C; // टोनन 'सी'} ब्रेक; केस 1: {MIDIB2 = 0x3E; // टोनन 'डी'} ब्रेक; केस 2: {MIDIB2 = 0x40; // टोनन 'ई'} ब्रेक; केस 3: {MIDIB2 = 0x41; // टोनन 'एफ'} ब्रेक; केस 4: {MIDIB2 = 0x43; // टोनन 'जी'} ब्रेक; केस 5: {MIDIB2 = 0x45; // टोनन 'ए'} ब्रेक; केस 6: {MIDIB2 = 0x47; // टोनन 'बी'} ब्रेक; केस 7: {MIDIB2 = 0x48; // टोनन 'सी'} ब्रेक; डिफ़ॉल्ट: {MIDIB2 = 0xFF; // सीमा से बाहर } } MIDIB2 लौटाएं; // रिटर्नर MIDI नोट नंबर } बाइट Hent_tonehojde () {//Denne funktion henter resultatet af ultralydsmålingen unsigned int Tid_uS; // हमें बाइट का सामना करना पड़ता है; // बेरेगनेट आई सेमी बाइट परिणाम का सामना करता है; // इंडडलिंग ऑफ स्पिल ओमरेड कॉन्स्ट फ्लोट ओमरेग्निंग्सफाक्टर = ५८.३; // 2*(1/343 m/s)/100 = 58, 3uS/cm, der Ganges med 2 da Tiden er summen af Tiden frem og tilbage। Tid_uS = सोनार.पिंग_मेडियन (माध्य); // पिंग भेजें, इसे ठीक करें, मेडियन मेलिंगर अफस्टैंड के पीछे जीनम्सिंट = Tid_uS / Omregningsfaktor; // ओमरेगन टिड टिल अफस्टैंड आई सेमी (0 = बाहरी दूरी सीमा) परिणाम = अफस्टैंड / 8; // बेरेगन परिणाम वापसी परिणाम; // रिटर्नर परिणाम} शून्य Send_Note_On (बाइट टोननर) {// डेन्ने फंकशन सेंडर एन नोट ऑन कॉमांडो पीå मिडी इंटरफेस कॉन्स्ट बाइट कोमांडो = 0x90; // कोमांडो पीå मिडी कनाल 1 कॉन्स्ट बाइट वॉल्यूम पर ध्यान दें = 0xFF; // वॉल्यूम / वेलोसिटी = 127 सीरियल 1.राइट (कोमांडो); // kommando Serial1.write(tonenr) पर नोट भेजें; // टोन नंबर भेजें Serial1.write (वॉल्यूमेन); // वॉल्यूम भेजें (वेग) } शून्य Send_Note_Off (बाइट टोननर) {// डेने फंकशन सेंडर नोट ऑफ कोमांडो पीå मिडी इंटरफेस कॉन्स्ट बाइट कोमांडो = 0x80; // नोट ऑफ कोमांडो पीå मिडी कनाल 1 कॉन्स्ट बाइट वॉल्यूम = 0xFF; // वॉल्यूम / वेलोसिटी = 127 सीरियल 1.राइट (कोमांडो); // kommando Serial1.write(tonenr) से नोट भेजें; // टोन नंबर भेजें Serial1.write (वॉल्यूमेन); // वॉल्यूम भेजें (वेग)}

चरण 7: मिडी संचार की मूल बातें

मिडी (म्यूजिकल इंस्ट्रूमेंट डिजिटल इंटरफेस) इलेक्ट्रॉनिक संगीत वाद्ययंत्रों और अन्य उपकरणों को इंटरफेस करने के लिए एक सार्वभौमिक सीरियल संचार प्रोटोकॉल है। सीरियल संचार का उपयोग किया जाता है (31250 बिट/एस, ट्रांसमिशन माध्यम एक वर्तमान लूप है, रिसीवर के अंत में ऑप्टो-पृथक है। 5pin डीआईएन कनेक्टर का उपयोग किया जाता है। एक भौतिक MIDI कनेक्शन में 16 तार्किक संचार चैनल संभव हैं। MIDI में कई आदेश परिभाषित किए गए हैं मानक, मैं इस परियोजना में दो आदेशों का उपयोग करता हूं, इन आदेशों में 3 बाइट्स होते हैं:

ए) आदेश पर ध्यान दें:

1. बाइट सेंड = 0x90 अर्थात मिडी चैनल पर कमांड पर नोट 1

2. बाइट भेजना = 0xZZ ZZ नोट संख्या है, मैं 0x3C से 0x48. की सीमा का उपयोग करता हूं

3. बाइट सेंड = 0xFF FF = 255 यानी अधिकतम वॉल्यूम, रेंज 0x00 से 0xFF

बी) नोट ऑफ कमांड: १। बाइट सेंड = 0x80 अर्थात मिडी चैनल पर नोट ऑफ कमांड 1

2. बाइट भेजना = 0xZZ ZZ नोट संख्या है, मैं 0x3C से 0x48. की सीमा का उपयोग करता हूं

3. बाइट सेंड = 0xFF FF = 255 यानी अधिकतम वॉल्यूम, रेंज 0x00 से 0xFF

सिफारिश की: