Cov txheej txheem:

EAL - Arduino MIDI maub los: 7 Cov kauj ruam
EAL - Arduino MIDI maub los: 7 Cov kauj ruam

Video: EAL - Arduino MIDI maub los: 7 Cov kauj ruam

Video: EAL - Arduino MIDI maub los: 7 Cov kauj ruam
Video: 7.Несколько потенциометров на мультиплексоре CD74HC4067| Arduino | Midi | Hiduino 2024, Kaum ib hlis
Anonim
EAL - Arduino MIDI maub los
EAL - Arduino MIDI maub los

Ua los ntawm Søren gastergaard Petersen, OEAAM16EDA

Cov lus qhia no piav qhia txog arduino raws MIDI maub los. Nov yog tsev kawm ntawv txoj haujlwm. Los ntawm kev siv koj txhais tes koj tuaj yeem ua suab paj nruag yooj yim ntawm MIDI kev txuas thiab txuas MIDI ntsuas (lossis zoo li qhov no yog phau ntawv sau ua haujlwm software softsynth). Koj tuaj yeem ua cov ntawv sau los ntawm C qhov ntsuas loj, c-d-e-f-g-a-b-c. Txhawm rau tuaj yeem txuas MIDI maub los rau phau ntawv sau, koj yuav xav tau MIDI rau USB interface zoo li m-audio Uno.

Kauj Ruam 1: Qhia Ua Yeeb Yaj Kiab

Image
Image

Tig lub ntim thiab txaus siab!

Nws ua haujlwm li cas:

MIDI maub los siv Arduino MEGA 2560 board. Ob lub teeb (LDR) lub ntsuas hluav taws xob tau tsim rau hauv 16mm lub raj hluav taws xob tsim ua ob txoj kab hluav taws xob thiab tau siv los tsim qhov ua kom ruaj khov yam tsis muaj qhov ua yuam kev ob npaug. Lub teeb nyem tau tsim lub teeb nqaj, thaum lub nqaj raug cuam tshuam los ntawm txhais tes ua tus tswj, lub teeb qis qis hnov qhov nqaj uas ploj lawm, thiab HC-SR04 ultrasonic ntsuas ntsuas qhov deb ntawm lub sensor mus rau tes.

Qhov ntsuas ntsuas nyob deb yog siv hauv Arduino program rau kev suav thiab teeb tsa tus lej tsim nyog tus lej kom tau ntim rau hauv MIDI Nco Ntsoov Ntawm cov lus thiab xa tawm ntawm MIDI interface. MIDI cov khoom siv sib txuas siv 74HC14 hex inverter thiab zoo nkauj npaum li txheej txheem txheej txheem. MIDI kev sib txuas lus siv serial1, tus qauv chaw nres nkoj tau siv rau kev debugging.

Thaum txhais tes tau txav mus ncaj thiab deb ntawm lub teeb ci, lub teeb pom kev sab saud nkag siab lub teeb ci dua thiab daim ntawv MIDI ceeb toom tawm tau ntim thiab xa tawm ntawm MIDI cov zis.

Qhov chaw ua si nruab nrab ntawm cov ntsuas tau nyob ib puag ncig 63cm, thiab tag nrho qhov ntev ntawm MIDI maub los nyob ib puag ncig 75cm.

Kauj Ruam 2: Cov ntsiab lus ntawm Lub Teeb Pom Kev Zoo

Cov ntsiab lus ntawm Lub Teeb Pom Kev
Cov ntsiab lus ntawm Lub Teeb Pom Kev
Cov ntsiab lus ntawm Lub Teeb Pom Kev
Cov ntsiab lus ntawm Lub Teeb Pom Kev

Ob lub teeb pom kev zoo tau teeb tsa nyob rau sab saum toj ntawm txhua lwm yam los ua ob qho tib si sensor system. Nws tiv thaiv qhov ua tsis raug thaum siv raug hauv software. Txhua lub teeb pom kev zoo suav nrog daim duab tiv thaiv tus qauv ua rau hauv 16 hli tus qauv hluav taws xob raj. Ib lub qhov tau ua hauv txhua lub raj nrog lub hacksaw thiab cov duab resistor PCB tuaj yeem nias rau hauv lub qhov. Cov ntsuas tau kaw ua ke nrog cov kab xev kaw thiab tseem tsau rau ib kawg ntawm ib daim ntoo. Tsis muaj lub teeb yuav tsum tuaj yeem ncav cuag lub ntsuas hluav taws xob tom qab. Lub teeb pom kev zoo tau tsim hauv 10k rub tawm cov neeg tawm tsam.

Kauj Ruam 3: Cov ntsiab lus ntawm HC-SR04 Ultrasonic Sensor

Cov ntsiab lus ntawm HC-SR04 Ultrasonic Sensor
Cov ntsiab lus ntawm HC-SR04 Ultrasonic Sensor

HC-SR04 ultra sonic sensor tau kho nyob rau lwm qhov kawg ntawm MIDI maub los. Lub teeb nyem tau muab tso rau ntawm no ib yam nkaus, nws tsim lub teeb nqaj tsim nyog.

Kauj Ruam 4: Aduino Circuit

Lub Aduino Circuit
Lub Aduino Circuit
Lub Aduino Circuit
Lub Aduino Circuit

MIDI qhov hluav taws xob tso tawm yog ib qho qauv 74HC14 hex inverter thiab ob peb tus tiv thaiv ntxiv rau 5 tus pin DIN poj niam txuas. Lub voj voog 74HC14 tsav MIDI cov zis thiab tib lub sijhawm muab qee txoj hauv kev tiv thaiv rau Arduino pawg thawj coj tawm tsam "ntiaj teb tiag" txuas nrog MIDI tawm. Qhov ua tau zoo ntxiv yog MIDI kev ua haujlwm LED uas qhia thaum xa cov ntaub ntawv.

Kuv tau siv cov qauv PCB tsim nyog rau kuv kho vajtse vim tias kuv muaj teeb meem ntau nrog kev sib txuas tsis zoo ntawm kuv lub khob cij. Cov txheej txheem tau ua hauv Fritzing, cov ntawv daws teeb meem siab pdf tuaj yeem rub tawm los ntawm nias qhov txuas hauv qab no. Kuv nyiam siv cov phiaj xwm tsim nyog zoo ib yam li Kicad, Kuv xav tias Fritzing yog txwv rau txhua yam tab sis qhov kev sim yooj yim tshaj plaws.

Cov ntaub ntawv siv:

1 pcs Arduino MEGA 2560

2 pcs Photo resistor (LDR) nrog rub tawm tus tiv thaiv (los ntawm 37 cov khoom siv ntsuas)

1 pcs HC-SR04 ultrasonic sensor

1 pcs 74HC14 hex inverting Schmitt txhais

2 pcs resistor 220 Ohm 0.25W

1 pcs resistor 1k Ohm 0.25W

1 pcs LED qis tam sim no 2mA

1 pcs 100nF ceramic capacitor (rau lub hwj chim muab txiav tawm, ncaj qha ntawm 74HC14 lub hwj chim pins)

Breadboard los yog tsab PCB

2 pcs 16mm raj hluav taws xob, ntev 65mm

1 pcs ntoo, ntev 75cm

Kab xev kab xev

Hlau

Kauj Ruam 5: I/O Listing

I/O Cov Npe
I/O Cov Npe

Kauj Ruam 6: Aduino Code

Kev kos duab kos_Midi6 siv NewPing lub tsev qiv ntawv uas koj yuav tsum suav nrog hauv koj qhov Arduino programming ib puag ncig, kom siv HC-SC04 ultrasonic sensor. Cov duab kos tau hais tawm ua lus Danish, thov txim.. Txhawm rau ua kom cov duab kos tau zoo, ua haujlwm sib cais tau tsim los rau qhov sib txawv logic ntawm qhov kos duab thiab cov hloov pauv thoob ntiaj teb feem ntau zam. Qhov programflow tau pom hauv MIDI maub los flowchart pdf.

// 15-05-2017 version: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette program udgør en simpel MIDI maub los som kan styre en ekstern MIDI enhed, f.eks en softsynt på en PC. // MIDI controlleren kan sende toneanslag (nco txog kommando) hhv. (nco tseg kommando) rau en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne ua rau af en dobbelt LDR sensor, da der skal laves en sikker // detektering af både når hånden lander på brættet (nco txog), samt når hånden fjernes igen (ceeb toom tawm). // MIDI kommandoerne "note on" og "note off" består hver af 3 bytes som sendes på serial1 porten // vha 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 trigger pin på ultrasonic sensor #define ECHO_PIN 2 // Arduino pin til sensor echo pin txhais MAX_DISTANCE 100 // Qhov siab tshaj plaws rau Ping #define Median 5 // Antal målinger der beregnes gennemsnit af rau ntawm få en sikker afstandsbestemmelse NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Tsim lub NewPing Object. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Lverste LDR2 føler byte MIDIByte2; // Variabel deklaration rau MIDIByte2 bool klar_note_on = 1; // Variabel deklaration rau klar_note_on, styrer afsendelse af note ntawm kommando. Første kommando er en note ntawm kommando bool klar_note_off = 0; // Variabel deklaration for klar_note_off, styrer afsendelse af note off kommando void setup () {pinMode (Senspin1, INPUT); // sæt sensor input pinMode (Senspin2, INPUT); // sæt sensor input Serial1.begin (31250); // Serial1 bruges til MIDI kommunikation: 31250 ntsis/sekundt Serial.begin (9600); // serial monitor, til test} void loop () {bool Sensor1 = digitalRead (Senspin1)); // Læs LDR1 - underte LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - steverste LDR yog (Sensor1 && klar_note_on) // hvis LDR1 aktiveret og klar til note on {byte Note_Byte = Hent_tonehojde (); // Hent tone højde ntawm ultralyds sensor MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI nco tus lej, værdien 0xFF er tawm ntawm ntau qhov Send_Note_On (MIDIByte2); // kald Send_Note_On funktion klar_note_on = 0; // der skal kun xa ntawv ceeb toom rau kommando klar_note_off = 1; // næste kommando er note off} yog (Sensor2 &&! sensor1 && klar_note_off) // Hvis der skal xa ntawv ceeb toom tawm kommando gøres det her.. {Send_Note_Off (MIDIByte2); // xa ntawv ceeb toom kommando klar_note_off = 0; // der skal kun xa ntawv ceeb toom tawm kommando} yog (! }} byte Hent_MidiByte2 (byte NoteByte) {// Denne funktion returnerer MIDI note number, valgt ud fra NoteByte byte MIDIB2; hloov (NoteByte) // nws txhais tau tias hvilken værdi MIDIByte2 skal muaj ud fra værdien af Note_Byte {rooj plaub 0: {MIDIB2 = 0x3C; // tonen 'C'} tawg; rooj plaub 1: {MIDIB2 = 0x3E; // tonen 'D'} tawg; rooj plaub 2: {MIDIB2 = 0x40; // tonen 'E'} tawg; rooj plaub 3: {MIDIB2 = 0x41; // tonen 'F'} tawg; rooj plaub 4: {MIDIB2 = 0x43; // tonen 'G'} tawg; rooj plaub 5: {MIDIB2 = 0x45; // tonen 'A'} tawg; rooj plaub 6: {MIDIB2 = 0x47; // tonen 'B'} tawg; rooj plaub 7: {MIDIB2 = 0x48; // tonen 'C'} tawg; default: {MIDIB2 = 0xFF; // tawm ntawm qhov}} rov qab MIDIB2; // return MIDI note number} byte Hent_tonehojde () {// Denne funktion henter resultatet af ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand kuv 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 (Nruab nrab); // Xa ping, fid tid rov qab kuv uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = sab nraum nrug deb) resultat = Afstand / 8; // Beregn resultat return resultat; // Returner resultat} void Send_Note_On (byte tonenr) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // Nco tseg kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // xa ntawv ceeb toom rau kommando Serial1.write (tonenr); // xa suab nummer Serial1.write (ntim); // xa volumen (nrawm)} void Send_Note_Off (byte tonenr) {// Denne funktion sender note tawm kommando på MIDI interfacet const byte kommando = 0x80; // Nco tseg kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // xa ceeb toom tawm kommando Serial1.write (tonenr); // xa suab nummer Serial1.write (ntim); // xa volumen (tshaj tawm)}

Kauj Ruam 7: Lub hauv paus ntawm MIDI Kev Sib Txuas Lus

MIDI (Cov Khoom Siv Hluav Taws Xob Digital Interface) yog cov txheej txheem kev sib txuas lus thoob ntiaj teb rau kev cuam tshuam cov twj paj nruas hluav taws xob thiab lwm yam khoom siv. Kev sib txuas lus txuas tau siv (31250 ntsis/s, kev xa xov nruab nrab yog lub voj tam sim no, opto-cais ntawm tus txais qhov kawg. 5pin DIN txuas tau siv. 16 kev sib txuas lus muaj tswv yim muaj peev xwm ua tau hauv ib lub cev MIDI kev txuas. Ntau cov lus txib tau hais tseg hauv MIDI tus qauv, Kuv siv ob lo lus txib hauv txoj haujlwm no, cov lus txib no suav nrog 3 bytes:

a) Nco tseg ntawm kev hais kom ua:

1. byte xa = 0x90 lub ntsiab lus ceeb toom ntawm kev hais kom ua ntawm MIDI channel 1

2. byte xa = 0xZZ ZZ yog tus lej cim, kuv siv ntau yam 0x3C rau 0x48

3. byte xa = 0xFF FF = 255 lub ntsiab lus siab ntim, ntau 0x00 txog 0xFF

b) Nco tseg Off command: 1. byte xa = 0x80 lub ntsiab lus nco tseg hais kom ua ntawm MIDI channel 1

2. byte xa = 0xZZ ZZ yog tus lej sau tseg, kuv siv ntau yam 0x3C rau 0x48

3. byte xa = 0xFF FF = 255 lub ntsiab lus siab ntim, ntau 0x00 txog 0xFF

Pom zoo: