Obsah:

EAL - MIDI ovládač Arduino: 7 krokov
EAL - MIDI ovládač Arduino: 7 krokov

Video: EAL - MIDI ovládač Arduino: 7 krokov

Video: EAL - MIDI ovládač Arduino: 7 krokov
Video: DVD 7-сегментный светодиодный дисплей и мембранная клавиатура 4x4 с Arduino Nano 2024, November
Anonim
EAL - MIDI ovládač Arduino
EAL - MIDI ovládač Arduino

Vyrobil Søren Østergaard Petersen, OEAAM16EDA

Tento návod popisuje MIDI kontrolér založený na arduine. Toto je školský projekt. Pomocou ruky môžete hrať jednoduché melódie prostredníctvom pripojenia MIDI a pripojeného MIDI nástroja (alebo ako v tomto prípade prenosného počítača so softvérom softsynth). Môžete hrať noty zo stupnice C dur, c-d-e-f-g-a-b-c. Na to, aby ste mohli pripojiť MIDI kontrolér k notebooku, budete potrebovať rozhranie MIDI na USB ako m-audio Uno.

Krok 1: Ukážkové video

Image
Image

Zvýšte hlasitosť a užívajte si!

Ako to funguje:

MIDI kontrolér používa dosku Arduino MEGA 2560. Dva svetelné (LDR) snímače zabudované do 16 mm elektrickej trubice tvoria dvojitý senzorový systém a slúžia na vytvorenie stabilného spúšťača bez falošného dvojitého spustenia. Baterka vytvára svetelný lúč, keď je lúč prerušený rukou hrajúcou na ovládač, dolný svetelný senzor zistí chýbajúci lúč a ultrazvukový snímač HC-SR04 meria vzdialenosť od snímača k ruke.

Nameraná vzdialenosť sa používa v programe Arduino na výpočet a nastavenie príslušnej hodnoty čísla noty, ktorá sa má zabaliť do správy MIDI Note On a prenosového rozhrania na rozhraní MIDI. Rozhranie MIDI používa hexadecimálny menič 74HC14 a je to takmer štandardný obvod. MIDI komunikácia používa serial1, na ladenie sa používa štandardný sériový port.

Keď sa ruka pohne priamo hore a preč od svetelného lúča, horný svetelný senzor znova zaznamená svetelný lúč a na MIDI výstupe je zabalená a odoslaná správa MIDI Note Off.

Hracia plocha medzi senzormi je približne 63 cm a celková dĺžka MIDI ovládača je približne 75 cm.

Krok 2: Podrobnosti o svetelných senzoroch

Podrobnosti o svetelných senzoroch
Podrobnosti o svetelných senzoroch
Podrobnosti o svetelných senzoroch
Podrobnosti o svetelných senzoroch

Dva svetelné senzory sú namontované na sebe a vytvárajú dvojitý senzorový systém. Pri správnom použití v softvéri zabraňuje falošnému spusteniu. Každý svetelný senzor sa skladá z modulu fotoodporu vstavaného do štandardnej elektrickej trubice 16 mm. V každej trubici je pomocou pílky vytvorený slot a do rezu je možné zatlačiť dosku s plošnými spojmi fotoodporu. Senzory sú k sebe prilepené lepiacou páskou a tiež pripevnené k jednému koncu kusa dreva. Na senzory sa zozadu nesmie dostať žiadne svetlo. Svetelné senzory majú vstavané 10k výsuvné odpory.

Krok 3: Podrobnosti o ultrazvukovom senzore HC-SR04

Podrobnosti o ultrazvukovom senzore HC-SR04
Podrobnosti o ultrazvukovom senzore HC-SR04

Ultrazvukový senzor HC-SR04 je upevnený na druhom konci MIDI ovládača. Aj tu je umiestnená jasná baterka, ktorá vytvára potrebný svetelný lúč.

Krok 4: Okruh Aduino

Okruh Aduino
Okruh Aduino
Okruh Aduino
Okruh Aduino

Výstupný obvod MIDI je v zásade štandardný šesťhranný menič 74HC14, niekoľko odporov a 5 -kolíkový konektor DIN. Obvod 74HC14 poháňa výstup MIDI a súčasne poskytuje určité prostriedky ochrany pre dosku Arduino pred „skutočným svetom“pripojeným k výstupu MIDI. Mimoriadne praktickou funkciou je kontrolka aktivity MIDI, ktorá signalizuje odoslanie údajov.

Na svoj hardvér som použil správny prototyp DPS, pretože som mal na svojom doske veľa problémov so zlými pripojeniami. Schéma je vytvorená vo Fritzingu, kópiu pdf vo vysokom rozlíšení si môžete stiahnuť kliknutím na odkaz nižšie. Dávam prednosť použitiu správneho schematického programu, ako je Kicad, myslím, že Fritzing je obmedzený na čokoľvek iné ako na najjednoduchšie experimenty.

Použitý materiál:

1 ks Arduino MEGA 2560

2 ks fotografický odpor (LDR) so vstavaným výsuvným odporom (zo sady 37 senzorov)

1 ks ultrazvukový senzor HC-SR04

1 ks 74HC14 invertujúci Schmittov spúšť

2 ks odpor 220 Ohm 0,25W

1 ks odpor 1k Ohm 0,25W

1 ks LED nízky prúd 2mA

1 ks 100nF keramický kondenzátor (na oddelenie napájania, priamo na napájacích kolíkoch 74HC14)

Breadboard alebo prototyp DPS

2 ks 16 mm elektrická trubica, dĺžka 65 mm

1 ks dreva, dĺžka 75 cm

Lepiaca páska

Drôty

Krok 5: Zoznam vstupov/výstupov

Zoznam I/O
Zoznam I/O

Krok 6: Aduino kód

Skica test_Midi6 používa na používanie ultrazvukového senzora HC-SC04 knižnicu NewPing, ktorú musíte zahrnúť do programovacieho prostredia Arduino. Náčrt je komentovaný dánsky, ospravedlňujeme sa. Aby bola náčrt dobre štruktúrovaný, sú oddelené funkcie tvorené pre rôzne logické časti náčrtu a väčšinou sa vyhýbajú globálnym premenným. Tok programu je vizualizovaný vo vývojovom diagrame MIDI ovládača pdf.

// Verzia 15-05-2017: test_Midi6

// Stredné zvukové karty // Arduino MEGA 2560 // Jednoduché programovanie jednoduchého MIDI ovládača, ktorý môže obsahovať ďalšie vylepšené MIDI, napríklad softvérové možnosti pre PC. // MIDI ovládače môžu odosielať tón (poznámka ku komandu) hhv. (poznámka kommando) pre en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne spúšte snímač dobíjania LDR, skalné lavy skákajú // detekujú veľkú vzdialenosť od zeme k zemi (poznámka je zapnutá), samt når hånden fjernes igen (note off). // MIDI kommandoerne "note on" og "note off" består hver af 3 bytes some sendes as serial1 porten // vha det i hardware opbyggede MIDI interface. // Najlepšie zvukové efekty HC-SR04 #include // Bibliografický zoznam ultratenkých snímačov HC-SR04 #define TRIGGER_PIN 3 // Arduino pin til trigger pin på ultrasonic sensor #define ECHO_PIN 2 // Arduino pin til echo pin på definujte MAX_DISTANCE 100 // Maximálna vzdialenosť pre Ping #definujte Medián 5 // Priemerné hodnoty pre veľké oblasti pre sonar NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Vytvorenie objektu NewPing. int Senspin1 = 53; // Nedotáčavosť LDR1 pre Senspin2 = 52; // Øverste LDR2 bajt MIDIByte2; // Deklarácia variácií pre MIDIByte2 bool klar_note_on = 1; // Deklarácia variácií pre klar_note_on, štýlová afsendelse poznámka k kommando. Første kommando er en poznámka k kommando bool klar_note_off = 0; // Deklarácia variácií pre klar_note_off, spôsob, akým poznámka zmizne z príkazu void setup () {pinMode (Senspin1, INPUT); // vstupný senzorový pinMode (Senspin2, INPUT); // vstup pre snímač snímača Serial1.begin (31250); // Sériové číslo 1 do MIDI komunikácie: 31 250 bit/sekunda Serial.begin (9600); // sériový monitor, do testu} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - základný bool LDR Sensor2 = digitalRead (Senspin2); // viac LDR2 - vždy LDR if (Sensor1 && klar_note_on) // hvis LDR1 aktiveret og klar til note on {byte Note_Byte = Hent_tonehojde (); // Prejdenie tónu prejde cez ultralyds senzor MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, číslo poznámky MIDI, viac ako 0xFF mimo rozsah Send_Note_On (MIDIByte2); // kald Funkcia Send_Note_On klar_note_on = 0; // der skal kun sendes en note on kommando klar_note_off = 1; // viac kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sentes note off kommando gøres det her.. {Send_Note_Off (MIDIByte2); // odoslanie poznámky, kommando klar_note_off = 0; // der skal kun sendes en note off kommando} if (! Sensor1 &&! Sensor2) // her glores klar til ny note on kommando, hånd er væk fra brædt {klar_note_on = 1; }} byte Hent_MidiByte2 (bajt NoteByte) {// Denné vrátenie funkcie MIDI číslo poznámky, hodnota ud fr NoteByte bajt MIDIB2; switch (NoteByte) // her defineres hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C; // tonen 'C'} break; prípad 1: {MIDIB2 = 0x3E; // tonen 'D'} prestávka; prípad 2: {MIDIB2 = 0x40; // tonen 'E'} prestávka; prípad 3: {MIDIB2 = 0x41; // tonen 'F'} break; prípad 4: {MIDIB2 = 0x43; // tonen 'G'} break; prípad 5: {MIDIB2 = 0x45; // tonen 'A'} prestávka; prípad 6: {MIDIB2 = 0x47; // tonen 'B'} break; prípad 7: {MIDIB2 = 0x48; // tonen 'C'} break; predvolené: {MIDIB2 = 0xFF; // mimo rozsah}} vrátiť MIDIB2; // číslo MIDI poznámky vracajúceho sa} bajt Hent_tonehojde () {// Denná funkcia obsahuje ďalšie výsledky ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm byte resultat; // indeling af spille område const float Omregningsfaktor = 58.3; // 2*(1/343 m/s)/100 = 58, 3uS/cm, hĺbka medze 2 dni od súčtu od päty. Tid_uS = sonar.ping_median (Medián); // Odoslanie príkazu ping, podľa toho, či sa to opakuje, podľa priemernej hodnoty Afstand = Tid_uS / Omregningsfaktor; // Omregn tid to afstand i cm (0 = outside range range) resultat = Afstand / 8; // Beregn resultat return resultat; // Výsledok vracania} neplatné Send_Note_On (bajt tonenr) {// Denná funkcia odosielateľa poznámky o komprimácii na MIDI rozhraní medzi bajtami kommando = 0x90; // Poznámka k doplnku MIDI kanála 1 konštantný bajtový objem = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // odoslanie poznámky na kommando Serial1.write (tonenr); // odoslať tónové číslo Serial1.write (volumen); // odoslanie volumen (rýchlosť)} neplatné Send_Note_Off (bajt tonenr) {// Denná funkcia odosielateľa poznámka vypnutá z MIDI interfacetu konštantný bajt kommando = 0x80; // Poznamenajte si, že počet MIDI kanálov je 1 bajt volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // odoslanie poznámky mimo kommando Serial1.write (tonenr); // odoslať tónové číslo Serial1.write (volumen); // odoslať volumen (rýchlosť)}

Krok 7: Základy MIDI komunikácie

MIDI (Musical Instrument Digital Interface) je univerzálny sériový komunikačný protokol na prepojenie elektronických hudobných nástrojov a iných zariadení. Používa sa sériová komunikácia (31 250 bit/s, prenosové médium je prúdová slučka, na konci prijímača je opticky izolovaná. Používajú sa 5-kolíkové konektory DIN. V jednom fyzickom spojení MIDI je možné 16 logických komunikačných kanálov. V MIDI je definovaných veľa príkazov. štandardne v tomto projekte používam dva príkazy, tieto príkazy pozostávajú z 3 bajtov:

a) Poznámka k príkazu:

1. byte send = 0x90, čo znamená poznámku k príkazu na MIDI kanáli 1

2. byte send = 0xZZ ZZ je číslo poznámky, používam rozsah 0x3C až 0x48

3. odoslanie bajtu = 0xFF FF = 255, čo znamená maximálny objem, rozsah 0x00 až 0xFF

b) Poznámka: Vypnutý príkaz: 1. byte send = 0x80, čo znamená príkaz poznámka na MIDI kanáli 1

2. byte send = 0xZZ ZZ je číslo poznámky, používam rozsah 0x3C až 0x48

3. odoslanie bajtu = 0xFF FF = 255, čo znamená maximálny objem, rozsah 0x00 až 0xFF

Odporúča: