Obsah:
- Krok 1: Ukážkové video
- Krok 2: Podrobnosti o svetelných senzoroch
- Krok 3: Podrobnosti o ultrazvukovom senzore HC-SR04
- Krok 4: Okruh Aduino
- Krok 5: Zoznam vstupov/výstupov
- Krok 6: Aduino kód
- Krok 7: Základy MIDI komunikácie
Video: EAL - MIDI ovládač Arduino: 7 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
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
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
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
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
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
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:
Klávesnica Arduino Joystick Extender Box a ovládač zvuku vec používajúca Deej: 8 krokov
Arduino Keyboard Joystick Extender Box a ovládač zvuku Vec pomocou Deej: Prečo Už nejaký čas chcem na svoju klávesnicu pridať malý joystick na ovládanie prvkov rozhrania alebo iných menších úloh v hrách a simulátoroch (MS Flight Sim, Elite: Dangerous, Star Wars: Squadrons, etc.). Tiež pre Elite: Dangerous som bol
IOT DMX ovládač s Arduino a Stage Monster Live: 6 krokov
IOT DMX ovládač s Arduino a Stage Monster Live: Ovládajte osvetlenie pódia a ďalšie zariadenia DMX z telefónu alebo akéhokoľvek iného zariadenia s webovým pripojením. Ukážem vám, ako rýchlo a jednoducho postaviť svoj vlastný DMX ovládač, ktorý beží na platforme Stage Monster Live pomocou Arduino Mega
Automatický herný ovládač Google T Rex používajúci Arduino: 7 krokov
Automatický herný ovládač Google T Rex pomocou Arduina: nechajte ho postaviť
Ovládač hry Arduino: 5 krokov
Herný ovládač Arduino: Herný ovládač je zariadenie, ktoré vo videohre poskytuje vstupy na pohyb postavy alebo objektu. Dizajn a funkčnosť herného ovládača sú jednoduché a určite vám poskytnú úžasný zážitok z hrania hier, a bude to oveľa viac
DIY herný ovládač založený na Arduine - Herný ovládač Arduino PS2 - Hra Tekken s gamepadom DIY Arduino: 7 krokov
DIY herný ovládač založený na Arduine | Herný ovládač Arduino PS2 | Hranie Tekkenu s gamepadom pre domácich majstrov Arduino: Dobrý deň, chlapci, hranie hier je vždy zábavné, ale hranie s vlastným ovládačom pre vlastnú potrebu je zábavnejšie. Preto v tomto návode vytvoríme herný ovládač pomocou arduino pro micro