সুচিপত্র:

EAL - Arduino MIDI কন্ট্রোলার: 7 টি ধাপ
EAL - Arduino MIDI কন্ট্রোলার: 7 টি ধাপ

ভিডিও: EAL - Arduino MIDI কন্ট্রোলার: 7 টি ধাপ

ভিডিও: EAL - Arduino MIDI কন্ট্রোলার: 7 টি ধাপ
ভিডিও: Setting up a 3d Printer with MKS sGen L v1.0 2024, জুলাই
Anonim
EAL - Arduino MIDI কন্ট্রোলার
EAL - Arduino MIDI কন্ট্রোলার

Søren Østergaard Petersen, OEAAM16EDA দ্বারা তৈরি

এই নির্দেশযোগ্য একটি Arduino ভিত্তিক MIDI নিয়ামক বর্ণনা করে। এটি একটি স্কুল প্রকল্প। আপনার হাত ব্যবহার করে আপনি MIDI সংযোগ এবং একটি সংযুক্ত MIDI যন্ত্রের মাধ্যমে সহজ সুরগুলি বাজাতে পারেন (অথবা এই ক্ষেত্রে একটি নোটবুক একটি সফটসিন্থ সফটওয়্যার চালাচ্ছে)। আপনি একটি C প্রধান স্কেল, c-d-e-f-g-a-b-c থেকে নোট খেলতে পারেন। MIDI নিয়ামককে একটি নোটবুকের সাথে সংযুক্ত করতে সক্ষম হতে, আপনার MIDI থেকে USB ইন্টারফেসের প্রয়োজন হবে যেমন m-audio Uno।

ধাপ 1: বিক্ষোভ ভিডিও

Image
Image

ভলিউম চালু করুন এবং উপভোগ করুন!

কিভাবে এটা কাজ করে:

MIDI নিয়ামক একটি Arduino MEGA 2560 বোর্ড ব্যবহার করে। 16 মিমি বৈদ্যুতিক টিউবে নির্মিত দুটি লাইট (এলডিআর) সেন্সর একটি ডাবল সেন্সর সিস্টেম তৈরি করে এবং কোন মিথ্যা ডাবল ট্রিগারিং ছাড়াই একটি স্থিতিশীল ট্রিগার তৈরিতে ব্যবহৃত হয়। একটি টর্চলাইট একটি হালকা রশ্মি তৈরি করছে, যখন কন্ট্রোলারটি বাজানোর মাধ্যমে বিমটি বাধাগ্রস্ত হয়, নিচের আলোর সেন্সর অনুপস্থিত মরীচি অনুভব করে এবং একটি HC-SR04 অতিস্বনক সেন্সর সেন্সর থেকে হাতের দূরত্ব পরিমাপ করে।

পরিমাপ করা দূরত্বটি Arduino প্রোগ্রামে MIDI নোট অন মেসেজ এবং MIDI ইন্টারফেসে ট্রান্সমিট করার জন্য উপযুক্ত নোট নম্বর মান গণনা এবং সেট আপ করার জন্য ব্যবহৃত হয়। MIDI আউটপুট ইন্টারফেস একটি 74HC14 হেক্স বৈদ্যুতিন সংকেতের মেরু বদল ব্যবহার করে এবং এটি একটি আদর্শ সার্কিট। MIDI যোগাযোগ সিরিয়াল 1 ব্যবহার করে, স্ট্যান্ডার্ড সিরিয়াল পোর্ট ডিবাগিংয়ের জন্য ব্যবহৃত হয়।

যখন হাতটি আলোর রশ্মি থেকে সরাসরি এবং দূরে সরানো হয়, তখন উপরের আলোর সেন্সরটি আবার আলোর রশ্মি অনুভব করে এবং একটি MIDI নোট অফ বার্তা প্যাক করা হয় এবং MIDI আউটপুটে প্রেরণ করা হয়।

সেন্সরগুলির মধ্যে খেলার জায়গা প্রায় 63 সেমি, এবং MIDI নিয়ামকের মোট দৈর্ঘ্য প্রায় 75 সেমি।

ধাপ 2: লাইট সেন্সরের বিবরণ

লাইট সেন্সরের বিবরণ
লাইট সেন্সরের বিবরণ
লাইট সেন্সরের বিবরণ
লাইট সেন্সরের বিবরণ

দুটি আলোর সেন্সর একে অপরের উপরে বসিয়ে একটি ডবল সেন্সর সিস্টেম গঠন করে। সফটওয়্যারে সঠিক ব্যবহার করলে এটি মিথ্যা ট্রিগারিং প্রতিরোধ করে। প্রতিটি হালকা সেন্সর একটি 16 মিমি স্ট্যান্ডার্ড বৈদ্যুতিক টিউবে নির্মিত একটি ফটো রোধকারী মডিউল নিয়ে গঠিত। প্রতিটি টিউবে একটি হ্যাকসো দিয়ে একটি স্লট তৈরি করা হয় এবং ফটো রেসিস্টার পিসিবি স্লটে চাপতে পারে। সেন্সরগুলি ডাক্ট টেপ দিয়ে একসাথে টেপ করা হয় এবং কাঠের টুকরোর এক প্রান্তে স্থির করা হয়। কোন আলো পিছন থেকে সেন্সর পৌঁছাতে সক্ষম হতে হবে হালকা সেন্সর 10k পুল আপ প্রতিরোধক মধ্যে নির্মিত হয়েছে।

ধাপ 3: HC-SR04 অতিস্বনক সেন্সরের বিশদ বিবরণ

HC-SR04 অতিস্বনক সেন্সরের বিবরণ
HC-SR04 অতিস্বনক সেন্সরের বিবরণ

HC-SR04 আল্ট্রা সোনিক সেন্সর MIDI কন্ট্রোলারের অন্য প্রান্তে স্থির। এখানেও একটি উজ্জ্বল টর্চলাইট স্থাপন করা হয়েছে, এটি প্রয়োজনীয় আলোক রশ্মি তৈরি করে।

ধাপ 4: অ্যাডুইনো সার্কিট

অ্যাডুইনো সার্কিট
অ্যাডুইনো সার্কিট
অ্যাডুইনো সার্কিট
অ্যাডুইনো সার্কিট

MIDI আউটপুট সার্কিট মূলত একটি আদর্শ 74HC14 হেক্স বৈদ্যুতিন সংকেতের মেরু বদল এবং কয়েকটি প্রতিরোধক প্লাস একটি 5 পিন DIN মহিলা সংযোগকারী। 74HC14 সার্কিট MIDI আউটপুট চালায় এবং একই সাথে MIDI আউট -এর সাথে সংযুক্ত "বাস্তব জগতের" বিরুদ্ধে Arduino বোর্ডের সুরক্ষার কিছু মাধ্যম প্রদান করে। একটি অতিরিক্ত ব্যবহারিক বৈশিষ্ট্য হল MIDI কার্যকলাপ LED যা সংকেত দেয় যখন তথ্য পাঠানো হয়।

আমি আমার হার্ডওয়্যারের জন্য একটি সঠিক প্রোটোটাইপ পিসিবি ব্যবহার করেছি কারণ আমার ব্রেডবোর্ডে খারাপ সংযোগের সাথে আমার অনেক সমস্যা ছিল। ফ্রিজিং -এ পরিকল্পিত, একটি উচ্চ রেজল্যুশন পিডিএফ কপি নীচের লিঙ্কটি টিপে ডাউনলোড করা যায়। আমি কিক্যাডের মত একটি যথাযথ স্কিম্যাটিক্স প্রোগ্রাম ব্যবহার করতে পছন্দ করি, আমি মনে করি ফ্রিজিং সহজতম পরীক্ষা ছাড়া অন্য কিছুর জন্য সীমাবদ্ধ।

ব্যবহৃত উপকরণ:

1 পিসি Arduino মেগা 2560

2 পিসি ফটো রেসিস্টার (এলডিআর) বিল্ট-ইন পুল আপ রেজিস্টার সহ (37 সেন্সর কিট থেকে)

1 পিসি HC-SR04 অতিস্বনক সেন্সর

1 পিসি 74HC14 হেক্স শিমিট ট্রিগার উল্টানো

2 পিসি প্রতিরোধক 220 ওহম 0.25W

1 পিসি প্রতিরোধক 1k ওহম 0.25W

1 পিসি LED কম বর্তমান 2mA

1 পিসি 100nF সিরামিক ক্যাপাসিটর (পাওয়ার সাপ্লাই ডিকোপলিংয়ের জন্য, সরাসরি 74HC14 এর পাওয়ার পিনে)

ব্রেডবোর্ড বা প্রোটোটাইপ পিসিবি

2 পিসি 16 মিমি বৈদ্যুতিক টিউব, দৈর্ঘ্য 65 মিমি

1 পিসি কাঠ, দৈর্ঘ্য 75 সেমি

নালী টেপ

তারের

ধাপ 5: I/O তালিকা

I/O তালিকা
I/O তালিকা

ধাপ 6: অ্যাডুইনো কোড

HC-SC04 অতিস্বনক সেন্সর ব্যবহার করার জন্য স্কেচ test_Midi6 নিউপিং লাইব্রেরি ব্যবহার করে যা আপনাকে অবশ্যই আপনার Arduino প্রোগ্রামিং পরিবেশে অন্তর্ভুক্ত করতে হবে। স্কেচটি ড্যানিশ ভাষায় মন্তব্য করা হয়েছে, দু sorryখিত.. স্কেচটি সুগঠিত রাখার জন্য, স্কেচের বিভিন্ন লজিক অংশের জন্য পৃথক ফাংশন তৈরি করা হয় এবং গ্লোবাল ভেরিয়েবলগুলি বেশিরভাগই এড়ানো হয়। প্রোগ্রামফ্লোটি MIDI নিয়ামক ফ্লোচার্ট পিডিএফ -এ দৃশ্যমান।

// 15-05-2017 সংস্করণ: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette program udgør en simple MIDI controller som kan styre en ekstern MIDI enhed, f.eks en softsynt på en PC। // MIDI controlleren kan sende toneanslag (kommando এ নোট) hhv। (kommando নোট বন্ধ) en oktav C-C, C dur skala এর জন্য। // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret। MIDI kommandoerne trig en af en dobbelt LDR sensor, da der skal laves en sikker // detektering af både når hånden lander på brættet (Note on), samt når hånden fjernes igen (Note off)। // MIDI kommandoerne "নোট অন" ওগ "নোট অফ" består hver af 3 bytes som sendes på serial1 porten // vha det i হার্ডওয়্যার opbyggede MIDI ইন্টারফেস। // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #অন্তর্ভুক্ত // গ্রন্থপরিচয় MAX_DISTANCE 100 সংজ্ঞায়িত করুন // পিংয়ের জন্য সর্বাধিক আফস্ট্যান্ড #ডিফাইন মিডিয়ান 5 // এন্টাল মুলিংগার ডার বেরেগেনস জেননেমসনিট এফ এফ এ এন সিকার আফস্ট্যান্ডসবেস্টমেলস নিউপিং সোনার (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // নিউপিং অবজেক্ট তৈরি করা। int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // steverste LDR2 føler বাইট MIDIByte2; // MIDIByte2 bool klar_note_on = 1 এর জন্য Variabel deklaration; // klar_note_on- এর জন্য Variabel deklaration, kommando- এ styrer afsendelse af নোট। kommando bool kar_note_off = 0; // klar_note_off এর জন্য Variabel deklaration, স্টায়ার আফসেন্ডেলসে এফ নোট অফ কম্যান্ডো অকার্যকর সেটআপ () {pinMode (Senspin1, INPUT); // sæt সেন্সর ইনপুট pinMode (Senspin2, INPUT); // sæt সেন্সর ইনপুট Serial1.begin (31250); // সিরিয়াল 1 MIDI কমিউনিকেশন পর্যন্ত bruges: 31250 বিট/sekundt Serial.begin (9600); // সিরিয়াল মনিটর, til test} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - underte LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - steverste LDR if (Sensor1 && klar_note_on) // hvis LDR1 aktiveret og klar til note on {byte Note_Byte = Hent_tonehojde (); // আল্ট্রালিডস সেন্সর MIDIByte2 = Hent_MidiByte2 (Note_Byte) এর মাধ্যমে হেন্ট টোন højde; // Hent MidByte2, MIDI নোট নম্বর, værdien 0xFF er সীমার বাইরে Send_Note_On (MIDIByte2); // kald Send_Note_On funktion klar_note_on = 0; // der skal kun sendes en note on kommando klar_note_off = 1; // næste kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sentes kommando gøres det det.. {Send_Note_Off (MIDIByte2); // kommando klar_note_off = 0 নোট পাঠান; // der skal kun sendes en note off kommando} if (! Sensor1 &&! Sensor2) // her 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 returnerer MIDI Note number, valgt ud fra NoteByte byte 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; // টন 'F'} বিরতি; কেস 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; // målt tid i uS byte Afstand; // beregnet afstand i cm byte resultat; // inddeling af spille område const float Omregningsfaktor = 58.3; // 2*(1/343 m/s)/100 = 58, 3uS/cm, der ganges med 2 da tiden er summen af tiden frem og tilbage। Tid_uS = sonar.ping_median (মধ্যমা); // পাঠান পিং, få tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = বাইরে দূরত্ব পরিসীমা) resultat = Afstand / 8; // Beregn resultatat return resultat; // ফেরতকারীর ফলাফল} অকার্যকর Send_Note_On (বাইট টননার) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // নোট kommando på MIDI ক্যানাল 1 const বাইট ভলিউমেন = 0xFF; // ভলিউমেন / বেগ = 127 Serial1.write (kommando); // kommando Serial1.write (tonenr) এ নোট পাঠান; // পাঠান স্বর সংখ্যা সিরিয়াল 1. লেখো (ভলিউমেন); // send volumen (বেগ)} void Send_Note_Off (byte tonenr) {// Denne funktion sender note off kommando på MIDI interfacet const byte kommando = 0x80; // kommando på MIDI kanal 1 const byte volumen = 0xFF; // ভলিউমেন / বেগ = 127 Serial1.write (kommando); // kommando Serial1.write (নোট) থেকে নোট পাঠান; // পাঠান স্বর সংখ্যা সিরিয়াল 1. লেখো (ভলিউমেন); // ভলিউমেন পাঠান (বেগ)}

ধাপ 7: MIDI যোগাযোগের বুনিয়াদি

MIDI (মিউজিক্যাল ইন্সট্রুমেন্ট ডিজিটাল ইন্টারফেস) হল একটি সার্বজনীন সিরিয়াল কমিউনিকেশন প্রোটোকল যা ইলেকট্রনিক মিউজিক্যাল ইন্সট্রুমেন্টস এবং অন্যান্য ডিভাইসে ইন্টারফেস করার জন্য। সিরিয়াল কমিউনিকেশন ব্যবহার করা হয় (31250 বিট/সেকেন্ড, ট্রান্সমিশন মিডিয়াম হল একটি বর্তমান লুপ, রিসিভারের শেষ প্রান্তে অপটো-বিচ্ছিন্ন। 5pin DIN সংযোগকারী ব্যবহার করা হয়। 16 টি যৌক্তিক যোগাযোগ মাধ্যম একটি ভৌত MIDI সংযোগে সম্ভব। অনেক কমান্ড MIDI তে সংজ্ঞায়িত করা হয় মান, আমি এই প্রকল্পে দুটি কমান্ড ব্যবহার করি, এই কমান্ডগুলি 3 বাইট নিয়ে গঠিত:

ক) নোট অন কমান্ড:

1. বাইট সেন্ড = 0x90 মানে MIDI চ্যানেল 1 এ কমান্ডের নোট

2. বাইট পাঠান = 0xZZ ZZ হল নোট নম্বর, আমি 0x3C থেকে 0x48 পরিসীমা ব্যবহার করি

3. বাইট পাঠান = 0xFF FF = 255 মানে সর্বোচ্চ ভলিউম, পরিসীমা 0x00 থেকে 0xFF

খ) নোট অফ কমান্ড: ১। বাইট সেন্ড = 0x80 মানে MIDI চ্যানেল 1 এ নোট অফ কমান্ড

2. বাইট পাঠান = 0xZZ ZZ হল নোট নম্বর, আমি 0x3C থেকে 0x48 পরিসীমা ব্যবহার করি

3. বাইট পাঠান = 0xFF FF = 255 মানে সর্বোচ্চ ভলিউম, পরিসীমা 0x00 থেকে 0xFF

প্রস্তাবিত: