Përmbajtje:

EAL - Kontrolluesi Arduino MIDI: 7 hapa
EAL - Kontrolluesi Arduino MIDI: 7 hapa

Video: EAL - Kontrolluesi Arduino MIDI: 7 hapa

Video: EAL - Kontrolluesi Arduino MIDI: 7 hapa
Video: Модули MIDI для Arduino. Создавай и объединяй музыкальные инструменты. Железки Амперки 2024, Korrik
Anonim
EAL - Kontrolluesi MIDI Arduino
EAL - Kontrolluesi MIDI Arduino

Prodhuar nga Søren Østergaard Petersen, OEAAM16EDA

Ky udhëzues përshkruan një kontrollues MIDI të bazuar në arduino. Ky është një projekt shkollor. Duke përdorur dorën tuaj ju mund të luani melodi të thjeshta përmes lidhjes MIDI dhe një instrumenti të lidhur MIDI (ose si në këtë rast një fletore që drejton një softuer softsynth). Mund të luani shënime nga shkalla C kryesore, c-d-e-f-g-a-b-c. Për të qenë në gjendje të lidhni kontrolluesin MIDI me një fletore, do t'ju duhet një ndërfaqe MIDI në USB si m-audio Uno.

Hapi 1: Video demonstruese

Image
Image

Rritni volumin dhe kënaquni!

Si punon:

Kontrolluesi MIDI përdor një bord Arduino MEGA 2560. Dy sensorë të dritës (LDR) të integruar në tubin elektrik 16 mm formojnë një sistem të dyfishtë të sensorëve dhe përdoren për krijimin e një shkrepësi të qëndrueshëm pa asnjë shkas të dyfishtë të rremë. Një elektrik dore po krijon një rreze drite, kur rrezja ndërpritet nga dora që luan me kontrolluesin, sensori i dritës së poshtme ndjen rrezen e humbur dhe një sensor tejzanor HC-SR04 mat distancën nga sensori në dorë.

Distanca e matur përdoret në programin Arduino për llogaritjen dhe vendosjen e vlerës së duhur të numrit të shënimit që do të paketohet në një mesazh MIDI Note On dhe transmetues në ndërfaqen MIDI. Ndërfaqja e daljes MIDI përdor një inverter hex 74HC14 dhe është pothuajse një qark standard. Komunikimi MIDI përdor serial1, porti serik standard përdoret për korrigjim.

Kur dora lëvizet drejt e lart nga rrezja e dritës, sensori i sipërm i dritës ndjen rrezen e dritës përsëri dhe një mesazh MIDI Note Off paketohet dhe transmetohet në daljen MIDI.

Zona e lojës midis sensorëve është rreth 63 cm, dhe gjatësia e përgjithshme e kontrolluesit MIDI është rreth 75 cm.

Hapi 2: Detajet e sensorëve të dritës

Detajet e sensorëve të dritës
Detajet e sensorëve të dritës
Detajet e sensorëve të dritës
Detajet e sensorëve të dritës

Dy sensorët e dritës janë montuar njëra mbi tjetrën për të formuar një sistem të dyfishtë të sensorëve. Parandalon nxitjen e rreme kur përdoret si duhet në softuer. Çdo sensor i dritës përbëhet nga një modul i rezistencës së fotografisë i ndërtuar në një tub elektrik standard 16 mm. Një çarë është bërë në secilin tub me një sharrë hekuri dhe PCB rezistenca e fotografisë mund të shtypet në çarë. Sensorët janë ngjitur së bashku me shirit ngjitës dhe gjithashtu fiksohen në një skaj të një copë druri. Asnjë dritë nuk duhet të jetë në gjendje të arrijë te sensorët nga mbrapa. Sensorët e dritës kanë ndërtuar rezistenca tërheqëse 10k.

Hapi 3: Detajet e sensorit tejzanor HC-SR04

Detajet e sensorit tejzanor HC-SR04
Detajet e sensorit tejzanor HC-SR04

Sensori ultra zërit HC-SR04 është i fiksuar në skajin tjetër të kontrolluesit MIDI. Një elektrik dore e ndritshme është vendosur edhe këtu, krijon rrezen e nevojshme të dritës.

Hapi 4: Qarku Aduino

Qarku Aduino
Qarku Aduino
Qarku Aduino
Qarku Aduino

Qarku dalës MIDI është në thelb një inverter standard hex 74HC14 dhe disa rezistorë plus një lidhës femër DIN 5 pin. Qarku 74HC14 drejton daljen MIDI dhe në të njëjtën kohë siguron disa mjete mbrojtjeje për bordin Arduino kundër "botës reale" të lidhur me MIDI out. Një veçori shtesë praktike është LED aktiviteti MIDI që sinjalizon kur të dhënat dërgohen.

Unë kam përdorur një prototip të duhur PCB për pajisjen time sepse kisha shumë probleme me lidhjet e këqija në tryezën time të bukës. Skema është bërë në Fritzing, një kopje pdf me rezolucion të lartë mund të shkarkohet duke shtypur lidhjen më poshtë. Unë preferoj të përdor një program të duhur skematik si Kicad, mendoj se Fritzing është i kufizuar për çdo gjë, përveç eksperimenteve më të thjeshta.

Materialet e përdorura:

1 copë Arduino MEGA 2560

2 copë Rezistencë fotografike (LDR) me rezistencë tërheqëse të integruar (nga kompleti i sensorit 37)

1 copë sensor tejzanor HC-SR04

1 copë 74HC14 gjashtëkëndësh që përmbys këmbëzën Schmitt

2 copë rezistencë 220 Ohm 0.25W

Rezistencë 1 copë 1k Ohm 0.25W

1 copë LED me rrymë të ulët 2mA

1 copë kondensator qeramik 100nF (për shkëputjen e furnizimit me energji elektrike, drejtpërdrejt në kunjat e energjisë të 74HC14)

Breadboard ose prototip PCB

2 copë tub elektrik 16mm, gjatësi 65mm

1 copë druri, gjatësi 75cm

Shirit ngjitës

Telat

Hapi 5: Listimi I/O

Regjistrimi I/O
Regjistrimi I/O

Hapi 6: Kodi Aduino

Skica test_Midi6 përdor bibliotekën NewPing të cilën duhet ta përfshini në mjedisin tuaj të programimit Arduino, për të përdorur sensorin tejzanor HC-SC04. Skica komentohet në gjuhën daneze, më falni. Rrjedha e programit vizualizohet në skedarin e rrjedhës të kontrolluesit MIDI pdf.

// 15-05-2017 versioni: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Programi i detajuar mund të përdoret si një kontrollues MIDI që mund të përdoret në mënyrë ekstern MIDI të integruar, f.eks në softsynt në kompjuter. // Kontrolli MIDI mund të dërgojë toneanslag (shënim në komando) hhv. (shëno kommando) për en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne aktivizohet nga një dobësues i sensorit LDR, nëse është i nevojshëm për të hequr qafe // duke hequr qafe një vendndodhje më të shpejtë (shënim), vetëm sa më shpejt të jetë e mundur (shënim off). // Komandat MIDI "shënoni në" dhe "shënoni" më së miri nga 3 bytes nga dërgimi në serial1 porten // në detajet e ndërfaqes hardware të opiduar MIDI. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin til shkaktojë på sensor tejzanor #define ECHO_PIN 2 ultratinguj përcakto MAX_DISTANCE 100 // Masa maksimale për Ping #define Median 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse New soning sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Krijimi i objektit NewPing. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Øverste LDR2 fajler byte MIDIByte2; // Deklarata Variabel për MIDIByte2 bool klar_note_on = 1; // Deklarata e Variabel për klar_note_on, styrer afsendelse af shënim mbi kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Deklarata e Variabel për klar_note_off, styrer afsendelse nga shënimi i kommando void setup () {pinMode (Senspin1, INPUT); // sæt sensor pinMode (Senspin2, INPUT); // hyrja e sensorit Serial1.fill (31250); // Serial1 bruges deri në kominikimin MIDI: 31250 bit/sekundt Serial.begin (9600); // monitor serik, deri në testim} 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 dhe klar til shënim në {byte Shënim_Byte = Hent_tonehojde (); // Toni i hentit përdoret përmes sensorit ultralyds MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, numri i shënimit MIDI, por 0xFF është jashtë kufirit Send_Note_On (MIDIByte2); // kald Send_Note_On funksional klar_note_on = 0; // der skal kun sendes en shënim në kommando klar_note_off = 1; // nuk e komandon er shënimin} nëse (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sendes shënim nga komandat që ju nevojiten.. {Send_Note_Off (MIDIByte2); // dërgoni shënim kommando klar_note_off = 0; // der skal kun sendes en note off kommando} if (! Sensor1 &&! Sensor2) // her gøres klar til ny not on kommando, hånd er væk fra brædt {klar_note_on = 1; }} byte Hent_MidiByte2 (byte NoteByte) {// Numri i shënimit MIDI i kthimit të funksionit Denne, vlerësoni nga byte NoteByte MIDIB2; kaloni (NoteByte) // përkufizoni atë në MIDIByte2 nëse keni përdorur në Note_Byte {rasti 0: {MIDIB2 = 0x3C; // ton 'C'} pushim; rasti 1: {MIDIB2 = 0x3E; // ton 'D'} pushim; rasti 2: {MIDIB2 = 0x40; // ton 'E'} pushim; rasti 3: {MIDIB2 = 0x41; // ton 'F'} pushim; rasti 4: {MIDIB2 = 0x43; // ton 'G'} pushim; rasti 5: {MIDIB2 = 0x45; // ton 'A'} pushim; rasti 6: {MIDIB2 = 0x47; // ton "B"} pushim; rasti 7: {MIDIB2 = 0x48; // ton 'C'} pushim; parazgjedhje: {MIDIB2 = 0xFF; // jashtë rrezes}} kthe MIDIB2; // numri i shënimit MIDI i kthyesit} byte Hent_tonehojde () {// Funksioni i të dhënave më i fundit i rezultateve nga ultralydsmålingen i panënshkruar në Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm byte resultat; // inddeling nga 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 (mesatarja); // Dërgo ping, për kthimin e shpejtë të përdorimit në ShBA, gjennemsint nga Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid afstand i cm (0 = distanca jashtë distancës) resultat = Afstand / 8; // Beregn resultat return resultat; // Rezultati i kthimit} pavlefshëm Send_Note_On (byte tonenr) {// Dërguesi i funksionimit të Denne në shënim mbi komandën në MIDI interfacet const byte kommando = 0x90; // Shënim mbi komandimin në kanalin MIDI 1 konst byte volumen = 0xFF; // volumi / Shpejtësia = 127 Serial1.shkruaj (kommando); // dërgoni shënim në kommando Serial1.write (tonenr); // dërgoni numrin numer Serial1.write (volumen); // dërgoni volumin (shpejtësinë)} void Send_Note_Off (byte tonenr) {// Denne funksional shënuesi i dërguesit jashtë komandës në MIDI interfacet const byte kommando = 0x80; // Shënim komandimin për kanalin MIDI 1 konst byte volumen = 0xFF; // volumi / Shpejtësia = 127 Serial1.shkruaj (kommando); // dërgoni shënim kommando Serial1.write (tonenr); // dërgoni numrin numer Serial1.write (volumen); // dërgoni volumin (shpejtësinë)}

Hapi 7: Bazat e komunikimit MIDI

MIDI (Ndërfaqja Dixhitale e Instrumentit Muzikor) është një protokoll komunikimi serik universal për ndërlidhjen e instrumenteve muzikore elektronike dhe pajisjeve të tjera. Përdoret komunikimi serik (31250 bit/s, mediumi i transmetimit është një lak aktual, i opto-izoluar në fund të marrësit. Përdoren lidhës DIN 5pin. 16 kanale komunikimi logjik janë të mundshme në një lidhje fizike MIDI. Shumë komanda janë përcaktuar në MIDI standard, unë përdor dy komanda në këtë projekt, këto komanda përbëhen nga 3 bajt:

a) Shënim mbi komandën:

1. byte send = 0x90 që do të thotë shënim mbi komandën në kanalin MIDI 1

2. byte send = 0xZZ ZZ është numri i shënimit, unë përdor gamën 0x3C në 0x48

3. byte send = 0xFF FF = 255 që nënkupton volumin maksimal, diapazoni 0x00 deri në 0xFF

b) Komanda Note Off: 1. byte send = 0x80 që nënkupton komandën e shënimit në kanalin MIDI 1

2. byte send = 0xZZ ZZ është numri i shënimit, unë përdor gamën 0x3C në 0x48

3. byte send = 0xFF FF = 255 që nënkupton volumin maksimal, diapazoni 0x00 deri në 0xFF

Recommended: