Orodha ya maudhui:

EAL - Mdhibiti wa MIDI wa Arduino: Hatua 7
EAL - Mdhibiti wa MIDI wa Arduino: Hatua 7

Video: EAL - Mdhibiti wa MIDI wa Arduino: Hatua 7

Video: EAL - Mdhibiti wa MIDI wa Arduino: Hatua 7
Video: Pro Micro ATMEGA32U4 Arduino Pins and 5V, 3.3V Explained 2024, Novemba
Anonim
EAL - Mdhibiti wa MIDI wa Arduino
EAL - Mdhibiti wa MIDI wa Arduino

Iliyoundwa na Søren Østergaard Petersen, OEAAM16EDA

Hii inaelezewa inaelezea mdhibiti wa MIDI wa arduino. Huu ni mradi wa shule. Kwa kutumia mkono wako unaweza kucheza nyimbo rahisi kupitia unganisho la MIDI na chombo cha MIDI kilichounganishwa (au kama ilivyo katika daftari hii inayoendesha programu ya softsynth). Unaweza kucheza maelezo kutoka kwa kiwango kikubwa cha C, c-d-e-f-g-a-b-c. Ili kuweza kuunganisha kidhibiti cha MIDI na daftari, utahitaji kiolesura cha MIDI na USB kama m-audio Uno.

Hatua ya 1: Video ya Maonyesho

Image
Image

Ongeza sauti na ufurahie!

Inavyofanya kazi:

Mdhibiti wa MIDI hutumia bodi ya Arduino MEGA 2560. Sensorer mbili nyepesi (LDR) zilizojengwa kwenye bomba la umeme la 16mm huunda mfumo wa sensorer mara mbili na hutumiwa kuunda kichocheo thabiti bila uchochezi wowote wa uwongo mara mbili. Tochi inaunda boriti nyepesi, wakati boriti inaingiliwa na mkono unaocheza kidhibiti, sensor ya chini ya taa huhisi boriti iliyokosekana, na sensor ya ultrasonic ya HC-SR04 hupima umbali kutoka kwa sensorer hadi mkono.

Umbali uliopimwa hutumiwa katika programu ya Arduino kwa kuhesabu na kuweka nambari inayofaa ya nambari ya kuingizwa ili kuingizwa kwenye Ujumbe wa MIDI kwenye ujumbe na usambazaji kwenye kiolesura cha MIDI. Kiolesura cha pato cha MIDI hutumia inverter ya hex ya 74HC14 na ni sawa na mzunguko wa kawaida. Mawasiliano ya MIDI hutumia serial1, bandari ya kawaida ya serial hutumiwa kwa utatuzi.

Wakati mkono unahamishwa moja kwa moja juu na mbali na boriti ya taa, sensorer ya juu huhisi mwanga wa taa tena na ujumbe wa MIDI Kumbuka Off umejaa na kusambaza kwa pato la MIDI.

Sehemu ya kucheza kati ya sensorer iko karibu 63cm, na urefu wa jumla wa mtawala wa MIDI ni karibu 75cm.

Hatua ya 2: Maelezo ya Sensorer za Nuru

Maelezo ya Sensorer za Nuru
Maelezo ya Sensorer za Nuru
Maelezo ya Sensorer za Nuru
Maelezo ya Sensorer za Nuru

Sensorer mbili nyepesi zimewekwa juu ya kila mmoja ili kuunda mfumo wa sensorer mara mbili. Inazuia uchochezi wa uwongo wakati unatumiwa sahihi kwenye programu. Kila sensorer nyepesi ina moduli ya kipinga picha iliyojengwa kwenye bomba la umeme lenye kiwango cha 16 mm. Yanayopangwa ni kufanywa katika kila bomba na hacksaw na picha resistor PCB inaweza kuwa taabu ndani ya yanayopangwa. Sensorer zimefungwa pamoja na mkanda wa bomba na pia zimewekwa kwa mwisho mmoja wa kipande cha kuni. Hakuna taa lazima iweze kufikia sensorer kutoka nyuma. Sensorer za nuru zimejenga katika vipinga 10k vya kuvuta.

Hatua ya 3: Maelezo ya Sensor ya Ultrasonic ya HC-SR04

Maelezo ya Sensor ya Ultrasonic ya HC-SR04
Maelezo ya Sensor ya Ultrasonic ya HC-SR04

HC-SR04 Ultra sonic sensor imewekwa katika mwisho mwingine wa mdhibiti wa MIDI. Tochi mkali imewekwa hapa pia, inaunda taa muhimu ya nuru.

Hatua ya 4: Mzunguko wa Aduino

Mzunguko wa Aduino
Mzunguko wa Aduino
Mzunguko wa Aduino
Mzunguko wa Aduino

Mzunguko wa pato la MIDI kimsingi ni inverter ya kawaida ya hex 74HC14 na vipingamizi vichache pamoja na kontena 5 ya kike ya DIN. Mzunguko wa 74HC14 huendesha pato la MIDI na wakati huo huo hutoa njia za ulinzi kwa bodi ya Arduino dhidi ya "ulimwengu wa kweli" uliounganishwa na MIDI nje. Kipengele cha ziada cha vitendo ni shughuli ya MIDI ya LED inayoashiria wakati data inatumwa.

Nimetumia mfano sahihi wa PCB kwa vifaa vyangu kwa sababu nilikuwa na shida nyingi na unganisho mbaya kwenye ubao wangu wa mkate. Mpangilio umetengenezwa huko Fritzing, nakala ya pdf ya azimio kubwa inaweza kupakuliwa kwa kubofya kiunga hapa chini. Ninapendelea kutumia programu sahihi ya skimu kama Kicad, nadhani Fritzing ni mdogo kwa chochote isipokuwa majaribio rahisi.

Vifaa vilivyotumika:

Pcs 1 Arduino MEGA 2560

2 pcs Picha resistor (LDR) na kontena ya kuvuta iliyojengwa (kutoka kwa vifaa vya sensorer 37)

Pcs 1 HC-SR04 sensor ya ultrasonic

Pcs 1 74HC14 hex inverting kichocheo cha Schmitt

Pcs 2 resistor 220 Ohm 0.25W

Pcs 1 resistor 1k Ohm 0.25W

Pcs 1 LED ya chini ya sasa 2mA

Pcs 1 100nF kauri capacitor (kwa kusambaza umeme, moja kwa moja kwenye pini za nguvu za 74HC14)

Bodi ya mkate au mfano wa PCB

Pcs 2 bomba la umeme 16mm, urefu wa 65mm

Pcs 1 za kuni, urefu wa 75cm

Mkanda wa bomba

Waya

Hatua ya 5: Orodha ya I / O

Orodha ya I / O
Orodha ya I / O

Hatua ya 6: Nambari ya Aduino

Mchoro test_Midi6 hutumia maktaba ya NewPing ambayo lazima ujumuishe katika mazingira yako ya programu ya Arduino, kutumia HC-SC04 sensor ya ultrasonic. Mchoro umetolewa maoni kwa Kidenmani, samahani.. Kuweka mchoro uliojengwa vizuri, kazi tofauti zinaundwa kwa sehemu tofauti za mantiki za mchoro na anuwai za ulimwengu zinaepukwa zaidi. Utiririshaji wa programu unaonekana katika pdf ya flowchart pdf.

// Toleo la 15-05-2017: mtihani_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Programu ya Kutumia programu rahisi ya MIDI kudhibiti njia ya MIDI kupakwa, f.eks en softsynt på en PC. // MIDI controlleren kan sende toneanslag (kumbuka kwenye kommando) hhv. (kumbuka kommando) kwa en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne husababisha sensa ya LDR ya dobbelt, kwa kutumia vifaa vya kusisimua // kufutwa kwa programu yako (angalia juu), angalia barua pepe yako (angalia mbali). // MIDI kommandoerne "kumbuka kwenye" og "kumbuka kuzima" bora kwa saa 3 kwa kutuma kwa serial1 porten // vha det i vifaa 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 to ultrasonic sensor #define ECHO_PIN 2 // Arduino pin til echo pin på ultrasonic fafanua MAX_DISTANCE 100 // Kiwango cha juu cha Ping #define Median 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Kuunda kitu cha NewPing. int Senspin1 = 53; // Chini ya LDR1 føler int Senspin2 = 52; // Øverste LDR2 føler byte MIDIByte2; // Tangazo la Variabel la MIDIByte2 bool klar_not_on = 1; // Tangazo la Variabel kwa klar_not_on, ster afsendelse af note kwenye kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Tangazo la Variabel la klar_not_off, ster afsendelse af kumbuka usanidi wa kommando batili () {pinMode (Senspin1, INPUT); // senat sensor pinMode (Senspin2, INPUT); // pembejeo ya sensorer Serial1.begin (31250); // Serial1 bruges to MIDI commommix: 31250 bit / sekundt Serial.begin (9600); // mfuatiliaji wa serial, majaribio =} kitanzi batili () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - chini LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - stverste LDR if (Sensor1 && klar_not_on) // hvis LDR1 inajumuisha orodha ya barua kwenye {byte Note_Byte = Hent_tonehojde (); // Sauti ya Hent højde kupitia sensa ya ultralyds MIDIByte2 = Hent_MidiByte2 (Kumbuka_Byte); // Hent MidByte2, nambari ya kumbuka ya MIDI, værdien 0xFF er out of range Send_Note_On (MIDIByte2); // kald Send_Note_On funktion klar_not_on = 0; // der skal kun hutuma dokezo kwenye kommando klar_not_off = 1; // nudeste kommando er note off} ikiwa (Sensor2 &&! Sensor1 && klar_not_off) // Hvis der skal atuma noti mbali ya kommando gøres det her.. {Send_Note_Off (MIDIByte2); // tuma noti mbali kommando klar_not_off = 0; // der skal kun send en en note off kommando} ikiwa (! Sensor1 && Sensor2) // yeye ataona orodha ya habari juu ya kommando, na atatumia {klar_note_on = 1; }} baiti Hent_MidiByte2 (byte NoteByte) {// Denne funktion Returnerer MIDI nambari ya noti, valgt ud fra NoteByte byte MIDIB2; badilisha (NoteByte) // her defineres hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {kesi 0: {MIDIB2 = 0x3C; // kuvunja tonen 'C'}; kesi 1: {MIDIB2 = 0x3E; // mapumziko ya tonen 'D'}; kesi ya 2: {MIDIB2 = 0x40; // mapumziko ya tonen 'E'}; kesi ya 3: {MIDIB2 = 0x41; // tonen 'F'} mapumziko; kesi ya 4: {MIDIB2 = 0x43; // tonen 'G'} mapumziko; kesi ya 5: {MIDIB2 = 0x45; // tonen 'A'} mapumziko; kesi ya 6: {MIDIB2 = 0x47; // mapumziko ya tonen 'B'}; kesi ya 7: {MIDIB2 = 0x48; // kuvunja tonen 'C'}; chaguomsingi: {MIDIB2 = 0xFF; // nje ya masafa}} kurudi MIDIB2; // kurudi nambari ya nambari ya MIDI} byte Hent_tonehojde () {// Kuandika habari juu ya matokeo ya ultralydsmålingen ambayo haijasainiwa na Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm byte matokeo; // inddeling af spille område const kuelea 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 (Median); // Tuma habari, fanya habari tena kwa uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = umbali wa umbali wa nje) resultat = Afstand / 8; // Beregn matokeo ya kurudi matokeo; // Matokeo ya mrudishaji} batili Send_Note_On (byte tonenr) {// Denne funktion sender en note on kommando p MIDI interfacet const byte kommando = 0x90; // Kumbuka kwenye kommando kwenye MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.andika (kommando); // tuma dokezo kwenye kommando Serial1.write (tonenr); // tuma nummer ya sauti Serial1.write (volumen); // tuma volumen (kasi)} batili Send_Note_Off (byte tonenr) {// Denne funktion sender note off kommando p MIDI interfacet const byte kommando = 0x80; // Kumbuka mbali kommando kwa MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.andika (kommando); // tuma dokezo mbali kommando Serial1.write (tonenr); // tuma nummer ya toni Serial1.write (volumen); // tuma volumen (kasi)}

Hatua ya 7: Misingi ya Mawasiliano ya MIDI

MIDI (Musical Instrument Digital Interface) ni itifaki ya mawasiliano ya serial ya kuingiliana na vyombo vya muziki vya elektroniki na vifaa vingine. Mawasiliano ya serial hutumiwa (31250 bit / s, njia ya kupitisha ni kitanzi cha sasa, kilichotengwa kwa macho mwisho wa mpokeaji. Viunganishi vya 5pin DIN hutumiwa. Njia 16 za mawasiliano za busara zinawezekana katika unganisho moja la MIDI. Amri nyingi zinafafanuliwa katika MIDI wastani, ninatumia amri mbili katika mradi huu, amri hizi zina ka 3:

a) Kumbuka juu ya amri:

1. byte send = 0x90 maana ya kumbuka kwa amri kwenye kituo cha MIDI 1

2. byte send = 0xZZ ZZ ni nambari ya kumbuka, ninatumia fungu 0x3C hadi 0x48

3. byte send = 0xFF FF = 255 ikimaanisha ujazo wa juu, masafa 0x00 hadi 0xFF

b) Kumbuka Amri ya mbali: 1. tuma = 0x80 ikimaanisha kumbuka amri kwenye kituo cha MIDI 1

2. byte send = 0xZZ ZZ ni nambari ya kumbuka, ninatumia fungu 0x3C hadi 0x48

3. byte send = 0xFF FF = 255 ikimaanisha ujazo wa juu, masafa 0x00 hadi 0xFF

Ilipendekeza: