Სარჩევი:

EAL - Arduino MIDI კონტროლერი: 7 ნაბიჯი
EAL - Arduino MIDI კონტროლერი: 7 ნაბიჯი

ვიდეო: EAL - Arduino MIDI კონტროლერი: 7 ნაბიჯი

ვიდეო: EAL - Arduino MIDI კონტროლერი: 7 ნაბიჯი
ვიდეო: How to use TM1637 4 digits seven segment display with Arduino 2024, ივლისი
Anonim
EAL - Arduino MIDI კონტროლერი
EAL - Arduino MIDI კონტროლერი

დამზადებულია Søren Østergaard Petersen, OEAAM16EDA

ეს ინსტრუქცია აღწერს არდუინოზე დაფუძნებულ MIDI კონტროლერს. ეს არის სკოლის პროექტი. თქვენი ხელის გამოყენებით შეგიძლიათ ითამაშოთ მარტივი მელოდიები MIDI კავშირისა და დაკავშირებული MIDI ინსტრუმენტის საშუალებით (ან როგორც ამ შემთხვევაში რვეული რბილი კომპიუტერის პროგრამული უზრუნველყოფით). თქვენ შეგიძლიათ ითამაშოთ ნოტები C მაჟორიდან, c-d-e-f-g-a-b-c. იმისათვის, რომ შეძლოთ MIDI კონტროლერის დაკავშირება ნოუთბუქთან, დაგჭირდებათ MIDI to USB ინტერფეისი, როგორიცაა m-audio Uno.

ნაბიჯი 1: სადემონსტრაციო ვიდეო

Image
Image

აუწიეთ ხმას და ისიამოვნეთ!

Როგორ მუშაობს:

MIDI კონტროლერი იყენებს Arduino MEGA 2560 დაფას. ორი სინათლის (LDR) სენსორი, რომელიც ჩაშენებულია 16 მმ -იან ელექტრულ მილში, ქმნის ორმაგი სენსორულ სისტემას და გამოიყენება სტაბილური გამომწვევის შესაქმნელად ყოველგვარი ცრუ ორმაგი გამშვების გარეშე. ფანარი ქმნის სინათლის სხივს, როდესაც სხივი წყდება კონტროლერის მიერ დაკავებული ხელით, ქვედა შუქის სენსორი გრძნობს დაკარგული სხივს და HC-SR04 ულტრაბგერითი სენსორი ზომავს მანძილს სენსორიდან ხელში.

გაზომილი მანძილი გამოიყენება Arduino პროგრამაში გამოსათვლელად და შესაქმნელად შესაბამისი შენიშვნის ნომრის მნიშვნელობის შესაფუთად MIDI Note On შეტყობინებასა და გადაცემას MIDI ინტერფეისზე. MIDI გამომავალი ინტერფეისი იყენებს 74HC14 hex ინვერტორს და საკმაოდ სტანდარტული წრეა. MIDI კომუნიკაცია იყენებს serial1, სტანდარტული სერიული პორტი გამოიყენება გამართვისთვის.

როდესაც ხელი გადაადგილებულია პირდაპირ მაღლა და შორს სინათლის სხივიდან, ზედა სინათლის სენსორი კვლავ გრძნობს სინათლის სხივს და MIDI Note Off შეტყობინება შეფუთულია და გადადის MIDI გამომავალზე.

სათამაშო არე სენსორებს შორის არის დაახლოებით 63 სმ, ხოლო MIDI კონტროლერის საერთო სიგრძე დაახლოებით 75 სმ.

ნაბიჯი 2: სინათლის სენსორების დეტალები

სინათლის სენსორების დეტალები
სინათლის სენსორების დეტალები
სინათლის სენსორების დეტალები
სინათლის სენსორების დეტალები

ორი სინათლის სენსორი ერთმანეთზეა დამონტაჟებული ორმაგი სენსორული სისტემის შესაქმნელად. ის ხელს უშლის ცრუ გამომწვევ პროგრამას სწორად გამოყენებისას. თითოეული სინათლის სენსორი შედგება ფოტო რეზისტენტული მოდულისგან, რომელიც ჩაშენებულია 16 მმ სტანდარტულ ელექტრო მილში. სლოტი მზადდება თითოეულ მილში ხრახნით და ფოტო რეზისტენტული PCB შეიძლება დაჭერით სლოტში. სენსორები მიმაგრებულია წებოვანი ლენტით და ასევე ფიქსირდება ხის ნაჭრის ერთ ბოლოზე. არცერთ შუქს არ უნდა შეეძლოს სენსორების მიღწევა უკნიდან. სინათლის სენსორებს ჩაშენებული აქვთ 10k გამწევ რეზისტორები.

ნაბიჯი 3: დეტალები HC-SR04 ულტრაბგერითი სენსორის შესახებ

HC-SR04 ულტრაბგერითი სენსორის დეტალები
HC-SR04 ულტრაბგერითი სენსორის დეტალები

HC-SR04 ულტრაბგერითი სენსორი დაფიქსირებულია MIDI კონტროლერის მეორე ბოლოში. აქაც არის მოთავსებული ნათელი ფანარი, ის ქმნის აუცილებელ სინათლის სხივს.

ნაბიჯი 4: ადუინოს წრე

ადუინოს წრე
ადუინოს წრე
ადუინოს წრე
ადუინოს წრე

MIDI გამომავალი წრე არის ძირითადად სტანდარტული 74HC14 ექვსკუთხა ინვერტორი და რამდენიმე რეზისტორი პლუს 5 პინიანი DIN ქალი კონექტორი. 74HC14 წრე ამოძრავებს MIDI გამომავალს და ამავდროულად უზრუნველყოფს არდუინოს დაფის დაცვის გარკვეულ საშუალებებს MIDI- სთან დაკავშირებული "რეალური სამყაროსგან". დამატებითი პრაქტიკული მახასიათებელია MIDI აქტივობის LED, რომელიც სიგნალებს მონაცემების გაგზავნისას.

მე გამოვიყენე შესაბამისი პროტოტიპი PCB ჩემი აპარატურისთვის, რადგან ბევრი პრობლემა მქონდა ჩემს დაფაზე ცუდი კავშირების გამო. სქემა შექმნილია Fritzing– ში, მაღალი რეზოლუციის pdf ასლის ჩამოტვირთვა შესაძლებელია ქვემოთ მოცემულ ბმულზე დაჭერით. მე მირჩევნია გამოვიყენო შესაბამისი სქემატური პროგრამა, როგორიცაა Kicad, მე ვფიქრობ, რომ Fritzing არის შეზღუდული არაფრის გარდა, უმარტივესი ექსპერიმენტებისათვის.

გამოყენებული მასალები:

1 ცალი Arduino MEGA 2560

2 ცალი ფოტო რეზისტორი (LDR) ჩამონტაჟებული გამწევი რეზისტორით (37 სენსორის ნაკრებიდან)

1 ცალი HC-SR04 ულტრაბგერითი სენსორი

1 ცალი 74HC14 თექვსმეტიანი შმიტის ტრიგერის შემობრუნება

2 ცალი რეზისტორი 220 Ohm 0.25W

1 ცალი რეზისტორი 1k Ohm 0.25W

1 ცალი LED დაბალი დენი 2 mA

1 ცალი 100nF კერამიკული კონდენსატორი (ელექტრომომარაგების გათიშვისთვის, პირდაპირ 74HC14- ის დენის ქინძისთავებზე)

პურის დაფა ან პროტოტიპი PCB

2 ცალი 16 მმ ელექტრული მილი, სიგრძე 65 მმ

ხის 1 ცალი, სიგრძე 75 სმ

Წებოვანი ლენტი

მავთულები

ნაბიჯი 5: I/O ჩამონათვალი

I/O ჩამონათვალი
I/O ჩამონათვალი

ნაბიჯი 6: ადუინოს კოდი

ესკიზი test_Midi6 იყენებს NewPing ბიბლიოთეკას, რომელიც თქვენ უნდა ჩართოთ Arduino პროგრამირების გარემოში, რათა გამოიყენოთ HC-SC04 ულტრაბგერითი სენსორი. ესკიზი დანიურად არის განმარტებული, უკაცრავად. იმისათვის, რომ ესკიზი იყოს კარგად სტრუქტურირებული, ცალკეული ფუნქციები შედგენილია ესკიზის სხვადასხვა ლოგიკური ნაწილისთვის და გლობალური ცვლადები ძირითადად თავს არიდებენ. პროგრამის მიმდინარეობა ვიზუალიზებულია MIDI კონტროლერის დიაგრამის pdf– ში.

// 15-05-2017 ვერსია: test_Midi6

// SØren Østergaard Petesen // Arduino MEGA 2560 // Dette პროგრამა იყენებს MIDI კონტროლერს, რომელიც საშუალებას გაძლევთ გამოიყენოთ MIDI, f.eks და softsynt კომპიუტერში. // MIDI კონტროლერი შეუძლია გაგზავნოს ტონანსლაგი (შენიშვნა კომანდოზე) hhv. (შენიშვნა კომანდო) en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne იწყებს მუშაობას LDR სენსორთან ერთად, რაც საშუალებას გაძლევთ შეაფასოთ იგი // შეაფასოთ იგი შემდეგნაირად (შენიშვნა), უბრალოდ არ არის საჭირო (შენიშვნა გამორთულია). // MIDI kommandoerne "შენიშვნა" და "გამორთვა" საუკეთესოდ აქვს 3 ბაიტი, რომელიც გამოგიგზავნით სერიალ 1 პორტალს // ეს ტექნიკა საშუალებას მოგცემთ გამოიყენოთ MIDI ინტერფეისი. // ულტრაბგერითი სენსორი HC-SR04 #ჩართვა // ბიბლიოთეკა ულტრაბგერითი სენსორის HC-SR04 #განსაზღვრეთ TRIGGER_PIN 3 // Arduino pin til trigger på ულტრაბგერითი სენსორი #განსაზღვრეთ ECHO_PIN 2 ულტრაბგერითი #სენსორი განსაზღვრეთ MAX_DISTANCE 100 // მაქსიმალური დასაყრდენი პინგისთვის #განსაზღვრეთ მედიანა 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse NewPing სონარი (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing ობიექტის შექმნა. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // teverste LDR2 føler byte MIDIByte2; // Variabel დეკლარაცია MIDIByte2 bool klar_note_on = 1; // Variabel დეკლარაცია klar_note_on, styrer afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Variabel დეკლარაცია klar_note_off, styrer afsendelse af not off kommando void setup () {pinMode (Senspin1, INPUT); // სენსორის შეყვანის pinMode (Senspin2, INPUT); // s sensort სენსორის შეყვანა Serial1.begin (31250); // სერიალი 1 ბრუჟები MIDI კომუნიკამდე: 31250 bit/sekundt Serial.begin (9600); // სერიული მონიტორი, ტესტამდე} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - underte LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - øverste LDR if (Sensor1 && klar_note_on) // hvis LDR1 გააქტიურებულია და აღინიშნება {byte Note_Byte = Hent_tonehojde (); // Hent tone højde via ultralyds sensor MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI შენიშვნის ნომერი, ეს არის 0xFF დიაპაზონიდან 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; // არ შენიშნავს გამორთვას} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sendes note off kommando gøres det her.. {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 ny note on kommando, hånd er væk fra brædt {klar_note_on = 1; }} ბაიტი Hent_MidiByte2 (ბაიტი NoteByte) {// Denne funktion returnerer MIDI note note, valdt ud fra NoteByte byte MIDIB2; გადართვა (NoteByte) // მისი განსაზღვრება MIDIByte2– ის გამოყენებისას Note_Byte– დან {case 0: {MIDIB2 = 0x3C; // ტონი 'C'} შესვენება; შემთხვევა 1: {MIDIB2 = 0x3E; // ტონი 'D'} შესვენება; შემთხვევა 2: {MIDIB2 = 0x40; // ტონი 'E'} შესვენება; შემთხვევა 3: {MIDIB2 = 0x41; // ტონი 'F'} შესვენება; შემთხვევა 4: {MIDIB2 = 0x43; // ტონი 'G'} შესვენება; შემთხვევა 5: {MIDIB2 = 0x45; // ტონი 'A'} შესვენება; შემთხვევა 6: {MIDIB2 = 0x47; // ტონი 'B'} შესვენება; შემთხვევა 7: {MIDIB2 = 0x48; // ტონი 'C'} შესვენება; ნაგულისხმევი: {MIDIB2 = 0xFF; // დიაპაზონის მიღმა}} დაბრუნება MIDIB2; // დაბრუნებული MIDI შენიშვნის ნომერი} byte Hent_tonehojde () {// Denne funktion henter resultatet ultrallydsmålingen unsigned int Tid_uS; // mid tid i uS byte Afstand; // beregnet afstand i სმ ბაიტი resultat; // inddeling af spille område const float Omregningsfaktor = 58.3; // 2*(1/343 მ/წმ)/100 = 58, 3uS/სმ, der ganges med 2 da tiden er summen af tiden frem og tilbage. Tid_uS = sonar.ping_median (მედიანა); // გაგზავნეთ პინგი, fid tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = გარე მანძილიდან) resultat = Afstand / 8; // Beregn resultat დაბრუნების resultat; // დაბრუნებული resultat} void Send_Note_On (byte tonenr) {// Denne funksion გამგზავნი en note on kommando på MIDI interfacet const byte kommando = 0x90; // შენიშვნა kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // გაუგზავნე ჩანაწერი kommando Serial1.write (tonenr); // ნომრის გაგზავნა nummer Serial1.write (მოცულობა); // გაგზავნა მოცულობა (სიჩქარე)} void Send_Note_Off (byte tonenr) {// Denne funksion sender note off kommando på MIDI interfacet const byte kommando = 0x80; // შენიშვნა კომანდო på MIDI არხის 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // გააგზავნე ჩანაწერი kommando Serial1.write (tonenr); // ნომრის გაგზავნა nummer Serial1.write (მოცულობა); // გაგზავნეთ მოცულობა (სიჩქარე)}

ნაბიჯი 7: MIDI კომუნიკაციის საფუძვლები

MIDI (მუსიკალური ინსტრუმენტის ციფრული ინტერფეისი) არის უნივერსალური სერიული საკომუნიკაციო ოქმი ელექტრონული მუსიკალური ინსტრუმენტებისა და სხვა მოწყობილობების დასაკავშირებლად. გამოიყენება სერიული კომუნიკაცია (31250 ბიტი/წმ, გადამცემი საშუალება არის მიმდინარე მარყუჟი, ოპტო-იზოლირებული მიმღების ბოლოს. გამოიყენება 5 პინიანი DIN კონექტორები. 16 ლოგიკური საკომუნიკაციო არხი შესაძლებელია ერთ ფიზიკურ MIDI კავშირში. ბევრი ბრძანება განსაზღვრულია MIDI- ში სტანდარტულად, მე ვიყენებ ორ ბრძანებას ამ პროექტში, ეს ბრძანებები შედგება 3 ბაიტისგან:

ა) შენიშვნა ბრძანებაზე:

1. byte send = 0x90 რაც ნიშნავს შენიშვნას MIDI არხზე 1 ბრძანებაზე

2. byte send = 0xZZ ZZ არის შენიშვნის ნომერი, მე ვიყენებ დიაპაზონს 0x3C დან 0x48

3. byte send = 0xFF FF = 255 რაც ნიშნავს მაქსიმალურ მოცულობას, დიაპაზონი 0x00 0xFF

ბ) შენიშვნა გამორთული ბრძანება: 1. byte გაგზავნა = 0x80 რაც ნიშნავს შენიშვნის გამორთვის ბრძანებას MIDI არხზე 1

2. byte send = 0xZZ ZZ არის შენიშვნის ნომერი, მე ვიყენებ დიაპაზონს 0x3C დან 0x48

3. byte send = 0xFF FF = 255 რაც ნიშნავს მაქსიმალურ მოცულობას, დიაპაზონი 0x00 0xFF

გირჩევთ: