Բովանդակություն:

EAL - Arduino MIDI վերահսկիչ ՝ 7 քայլ
EAL - Arduino MIDI վերահսկիչ ՝ 7 քայլ

Video: EAL - Arduino MIDI վերահսկիչ ՝ 7 քայլ

Video: EAL - Arduino MIDI վերահսկիչ ՝ 7 քայլ
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 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: onstուցադրման տեսանյութ

Image
Image

Բարձրացրեք ձայնը և վայելեք:

Ինչպես է դա աշխատում:

MIDI վերահսկիչն օգտագործում է Arduino MEGA 2560 տախտակ: Երկու լույսի (LDR) սենսորներ, որոնք տեղադրված են 16 մմ էլեկտրական խողովակի մեջ, ստեղծում են կրկնակի տվիչների համակարգ և օգտագործվում են կայուն ձգան ստեղծելու համար ՝ առանց որևէ կեղծ կրկնակի հրահրման: Լապտերը ստեղծում է լույսի ճառագայթ, երբ ճառագայթը ընդհատվում է վերահսկիչով նվագարկող ձեռքով, ներքևի լույսի սենսորը զգում է բացակայող ճառագայթը, իսկ HC-SR04 ուլտրաձայնային տվիչը չափում է սենսորից մինչև ձեռք հեռավորությունը:

Չափվող հեռավորությունը օգտագործվում է Arduino ծրագրում `MIDI Note On հաղորդագրության և MIDI ինտերֆեյսի վրա փաթեթավորվող համապատասխան նշումի համարի արժեքի հաշվարկման և կարգավորման համար: MIDI ելքային ինտերֆեյսը օգտագործում է 74HC14 վեցանկյուն ինվերտոր և բավականին ստանդարտ միացում է: MIDI հաղորդակցությունն օգտագործում է serial1, ստանդարտ սերիական նավահանգիստը ՝ կարգաբերման համար:

Երբ ձեռքը շարժվում է ուղիղ դեպի վեր և հեռու լույսի ճառագայթից, վերին լուսային սենսորը կրկին զգում է լույսի ճառագայթը, և MIDI Note Off հաղորդագրությունը փաթեթավորված է և փոխանցվում է MIDI ելքի վրա:

Սենսորների միջև խաղային տարածքը մոտ 63 սմ է, իսկ MIDI վերահսկիչի ընդհանուր երկարությունը `մոտ 75 սմ:

Քայլ 2. Լույսի տվիչների մանրամասները

Լույսի տվիչների մանրամասները
Լույսի տվիչների մանրամասները
Լույսի տվիչների մանրամասները
Լույսի տվիչների մանրամասները

Երկու լուսային սենսորները տեղադրված են միմյանց վրա և ստեղծում են կրկնակի տվիչների համակարգ: Այն կանխում է կեղծ հրահրումը ծրագրաշարում ճիշտ օգտագործելիս: Լույսի յուրաքանչյուր ցուցիչ բաղկացած է 16 մմ ստանդարտ էլեկտրական խողովակի մեջ կառուցված լուսանկարների դիմադրության մոդուլից: Յուրաքանչյուր խողովակի մեջ տեղադրվում է անցք `սղոցով, և լուսանկարչական դիմադրության PCB- ն կարող է սեղմվել անցքի մեջ: Սենսորները կպչուն ժապավենով ամրացված են, ինչպես նաև ամրացված են փայտի մի ծայրին: Ոչ մի լույս չպետք է կարողանա հասնել սենսորներին հետևից: Լույսի տվիչները կառուցել են 10k ձգվող դիմադրիչներ:

Քայլ 3. HC-SR04 ուլտրաձայնային տվիչի մանրամասները

HC-SR04 ուլտրաձայնային տվիչի մանրամասները
HC-SR04 ուլտրաձայնային տվիչի մանրամասները

HC-SR04 ուլտրաձայնային տվիչը ամրագրված է MIDI վերահսկիչի մյուս ծայրում: Այստեղ նույնպես տեղադրված է պայծառ լապտեր, այն ստեղծում է անհրաժեշտ լույսի ճառագայթ:

Քայլ 4: The Aduino Circuit

Ադուինոյի շրջան
Ադուինոյի շրջան
Ադուինոյի շրջան
Ադուինոյի շրջան

MIDI ելքային շղթան հիմնականում ստանդարտ 74HC14 վեցանկյուն ինվերտոր է և մի քանի դիմադրողներ ՝ գումարած 5 փին DIN իգական միակցիչ: 74HC14 միացումն ապահովում է MIDI ելքը և միևնույն ժամանակ ապահովում է Arduino տախտակի պաշտպանության որոշ միջոցներ MIDI- ին միացված «իրական աշխարհից»: Լրացուցիչ գործնական հատկանիշը MIDI գործունեության LED- ն է, որը ազդանշան է տալիս տվյալների ուղարկման ժամանակ:

Ես օգտագործել եմ PCB- ի համապատասխան նախատիպը իմ սարքաշարի համար, քանի որ շատ խնդիրներ ունեի իմ տախտակի վրա վատ միացումների հետ: Սխեման պատրաստված է Fritzing- ում, բարձր լուծման pdf պատճենը կարելի է ներբեռնել ՝ սեղմելով ստորև բերված հղումը: Ես նախընտրում եմ օգտագործել համապատասխան սխեմատիկ ծրագիր, ինչպիսին է Kicad- ը, կարծում եմ, որ Fritzing- ը սահմանափակված է ամեն ինչով, բացի ամենապարզ փորձերից:

Օգտագործված նյութեր.

1 հատ Arduino MEGA 2560

2 հատ Լուսանկարիչ (LDR) ներկառուցված ձգվող դիմադրիչով (37 սենսորային հավաքածուից)

1 հատ HC-SR04 ուլտրաձայնային տվիչ

1 հատ 74HC14 վեցանկյուն ՝ շրջելով Schmitt ձգանը

2 հատ դիմադրություն 220 Օմ 0.25W

1 հատ դիմադրություն 1k Օմ 0.25W

1 հատ LED ցածր հոսանք 2 մԱ

1 հատ 100nF կերամիկական կոնդենսատոր (էլեկտրամատակարարման անջատման համար, անմիջապես 74HC14- ի հոսանքի կապում)

Breadboard կամ նախատիպ PCB

2 հատ 16 մմ էլեկտրական խողովակ, երկարությունը 65 մմ

Փայտ 1 հատ, երկարությունը ՝ 75 սմ

Սկոտչ

Լարերը

Քայլ 5: I/O ցուցակագրում

I/O ցուցակագրում
I/O ցուցակագրում

Քայլ 6: Aduino ծածկագիրը

Test_Midi6 ուրվագիծը օգտագործում է NewPing գրադարանը, որը դուք պետք է ներառեք ձեր Arduino ծրագրավորման միջավայրում ՝ HC-SC04 ուլտրաձայնային տվիչ օգտագործելու համար: Էսքիզը մեկնաբանվում է դանիերենով: Flowրագրի ընթացքը արտացոլված է MIDI վերահսկիչի հոսքագծի pdf- ում:

// 15-05-2017 տարբերակ ՝ test_Midi6

// SØren Østergaard Petesen // Arduino MEGA 2560 // Dette ծրագիրը օգտագործում է պարզ MIDI վերահսկիչ, որը կարող է օգտագործվել MIDI- ով, f.eks և softsynt համակարգչով: // 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- ն գործարկում է dobdelt LDR սենսորից, եթե այն գտնվում է սարքում, ինչպես նաև անջատում է սարքը (նշվում է), այնուհետև մենք պետք է որոշենք (նշումը անջատված է): // MIDI kommandoerne "note on" og "off off" består hver af 3 bytes someses på serial1 porten // uha det i hardware opbyggede MIDI interface. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin til triger på ultrasonic sensor #define ECHO_PIN 2 // arduino pin pin սահմանել MAX_DISTANCE 100 // Առավելագույն դիմակայություն Ping #define Median 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 statement for klar_note_on, styrer afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Variabel deklaration for klar_note_off, styrer afsendelse af note off kommando void setup () {pinMode (Senspin1, INPUT); // սենսորային մուտքի pinMode (Senspin2, INPUT); // s sensort տվիչի մուտքագրում Serial1.begin (31250); // Serial1 կապտուկներ մինչև MIDI kommunikation: 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 aktiveret og klar til note on {byte Note_Byte = Hent_tonehojde (); // Hent tone højde via ultralyds sensor MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI նշման համար, 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 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 note on kommando, hånd er væk fra brædt {klar_note_on = 1; }} բայթ Hent_MidiByte2 (բայթ NoteByte) {// Denne funktion returnerer MIDI նշման համարը, որը պետք է օգտագործվի NoteByte բայթ 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 նշման համարը} բայթ Hent_tonehojde () {// Denne funktion henter resultatet at ultralydsmålingen unsigned int Tid_uS; // målt tid i uS բայթ Afstand; // beregnet afstand i cm բայթ 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 (միջին); // Ուղարկեք ping, եթե այն հետ է վերադարձվում iS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i սմ (0 = արտաքին հեռավորության տիրույթից) resultat = Afstand / 8; // Beregn resultat վերադարձի արդյունք; // Returner resultat} void Send_Note_On (byte tonenr) {// Denne ֆունկցիոնալ ուղարկողը նշում է 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); // ուղարկել համարի համարանիշ Serial1.write (volumen); // ուղարկել ծավալ (արագություն)} void Send_Note_Off (byte tonenr) {// Denne ֆունկցիոնալ ուղարկողի նշումը անջատված է kommando på MIDI interfacet const byte kommando = 0x80; // Նշում kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // ուղարկել գրառում kommando Serial1.write (tonenr); // ուղարկել համարի համարանիշ Serial1.write (volumen); // ուղարկել ծավալ (արագություն)}

Քայլ 7. MIDI հաղորդակցության հիմունքները

MIDI (Երաժշտական գործիքների թվային ինտերֆեյս) էլեկտրոնային երաժշտական գործիքների և այլ սարքերի միացման ունիվերսալ սերիական հաղորդակցության արձանագրություն է: Օգտագործվում է սերիական հաղորդակցություն (31250 բիթ/վ, փոխանցման միջավայրը ընթացիկ օղակ է, օպտո-մեկուսացված ստացողի վերջում: Օգտագործվում են 5 պին DIN միակցիչներ: Մեկ տրամաբանական հաղորդակցության հնարավոր է 16 տրամաբանական հաղորդակցություն: MIDI- ում շատ հրամաններ են սահմանվում) ստանդարտ, այս նախագծում ես օգտագործում եմ երկու հրաման, այս հրամանները բաղկացած են 3 բայթից.

ա) Նշում հրամանատարության վերաբերյալ.

1. բայթ ուղարկեք = 0x90, որը նշանակում է նշում MIDI ալիքի 1 -ում

2. բայթ ուղարկելը = 0xZZ ZZ- ն նշման թիվ է, ես օգտագործում եմ 0x3C- ից 0x48 տիրույթը

3. բայթ ուղարկելու = 0xFF FF = 255 նշանակում է առավելագույն ծավալը, միջակայքը 0x00- ից 0xFF

բ) Նշում անջատելու հրաման. 1. բայթ ուղարկելը = 0x80 նշանակում է նշման անջատման հրաման MIDI ալիքի 1 -ում

2. բայթ ուղարկել = 0xZZ ZZ- ն նշման համար է, ես օգտագործում եմ 0x3C- ից 0x48 տիրույթը

3. բայթ ուղարկելու = 0xFF FF = 255 նշանակում է առավելագույն ծավալը, միջակայքը 0x00- ից 0xFF

Խորհուրդ ենք տալիս: