Obsah:

EAL - MIDI ovladač Arduino: 7 kroků
EAL - MIDI ovladač Arduino: 7 kroků

Video: EAL - MIDI ovladač Arduino: 7 kroků

Video: EAL - MIDI ovladač Arduino: 7 kroků
Video: Mechanical 7 Segment Display Driven By An Arduino 2024, Červenec
Anonim
EAL - Arduino MIDI ovladač
EAL - Arduino MIDI ovladač

Výrobce Søren Østergaard Petersen, OEAAM16EDA

Tento návod popisuje MIDI kontrolér založený na Arduinu. Jedná se o školní projekt. Pomocí ruky můžete přehrávat jednoduché melodie přes MIDI připojení a připojený MIDI nástroj (nebo jako v tomto případě notebook se softwarem softsynth). Můžete hrát noty ze stupnice C dur, c-d-e-f-g-a-b-c. Abyste mohli připojit MIDI kontrolér k notebooku, budete potřebovat rozhraní MIDI na USB jako m-audio Uno.

Krok 1: Demonstrační video

Image
Image

Zvyšte hlasitost a užívejte si!

Jak to funguje:

MIDI ovladač používá desku Arduino MEGA 2560. Dva světelné (LDR) senzory zabudované do 16mm elektrické trubice tvoří dvojitý senzorový systém a slouží k vytvoření stabilní spouště bez jakéhokoli falešného dvojitého spouštění. Svítilna vytváří světelný paprsek, když je paprsek přerušen rukou hrající na ovladač, spodní světelný senzor detekuje chybějící paprsek a ultrazvukový senzor HC-SR04 měří vzdálenost od snímače k ruce.

Naměřená vzdálenost se v programu Arduino používá k výpočtu a nastavení příslušné hodnoty čísla noty, která má být zabalena do zprávy MIDI Note On a přenosové sady na rozhraní MIDI. MIDI výstupní rozhraní používá hexadecimální měnič 74HC14 a je do značné míry standardním obvodem. MIDI komunikace používá serial1, pro ladění se používá standardní sériový port.

Když se ruka pohybuje přímo nahoru a pryč od světelného paprsku, horní světelný senzor znovu detekuje světelný paprsek a na MIDI výstupu je zabalena a vyslána zpráva MIDI Note Off.

Hrací plocha mezi senzory je přibližně 63 cm a celková délka MIDI ovladače je přibližně 75 cm.

Krok 2: Podrobnosti o světelných čidlech

Podrobnosti o světelných senzorech
Podrobnosti o světelných senzorech
Podrobnosti o světelných senzorech
Podrobnosti o světelných senzorech

Dva světelné senzory jsou namontovány na sebe a vytvářejí dvojitý senzorový systém. Zabraňuje falešnému spuštění při správném použití v softwaru. Každý světelný senzor se skládá z modulu fotorezistoru zabudovaného do standardní elektrické trubice o průměru 16 mm. V každé trubce je pomocí štěrbinové pily vytvořen slot a desku s fotoodporem lze zatlačit do slotu. Senzory jsou slepeny lepicí páskou a také připevněny k jednomu konci kusu dřeva. Zezadu nesmí na senzory dosáhnout žádné světlo. Světelné senzory mají vestavěné 10k výsuvné odpory.

Krok 3: Podrobnosti o ultrazvukovém senzoru HC-SR04

Podrobnosti o ultrazvukovém senzoru HC-SR04
Podrobnosti o ultrazvukovém senzoru HC-SR04

Ultrazvukový senzor HC-SR04 je upevněn na druhém konci MIDI ovladače. I zde je umístěna jasná svítilna, která vytváří potřebný světelný paprsek.

Krok 4: Okruh Aduino

Okruh Aduino
Okruh Aduino
Okruh Aduino
Okruh Aduino

Výstupní obvod MIDI je v zásadě standardní hexadecimální měnič 74HC14 a několik odporů plus 5kolíkový DIN konektor. Obvod 74HC14 pohání MIDI výstup a zároveň poskytuje určitý způsob ochrany desky Arduino před „skutečným světem“připojeným k MIDI outu. Mimořádně praktickou funkcí je LED dioda aktivity MIDI, která signalizuje odeslání dat.

Pro svůj hardware jsem použil správný prototyp DPS, protože jsem měl na svém prkénku spoustu problémů se špatným připojením. Schéma je vytvořeno ve Fritzing, kopii pdf ve vysokém rozlišení lze stáhnout kliknutím na odkaz níže. Dávám přednost použití správného schématického programu, jako je Kicad, myslím, že Fritzing je omezen na cokoli jiného než na nejjednodušší experimenty.

Použité materiály:

1 ks Arduino MEGA 2560

2 ks fotografický odpor (LDR) s vestavěným výsuvným odporem (ze sady 37 snímačů)

1 ks ultrazvukový senzor HC-SR04

1 ks 74HC14 hex invertující Schmittova spoušť

2 ks odpor 220 Ohm 0,25W

1 ks rezistor 1k Ohm 0,25W

1 ks LED nízký proud 2mA

1 ks 100nF keramický kondenzátor (pro odpojení napájení, přímo na napájecích pinech 74HC14)

Breadboard nebo prototyp DPS

2 ks 16mm elektrická trubice, délka 65 mm

1 ks dřeva, délka 75 cm

Lepící páska

Dráty

Krok 5: Seznam I/O

I/O výpis
I/O výpis

Krok 6: Kód Aduino

Sketch test_Midi6 používá knihovnu NewPing, kterou musíte zahrnout do svého programovacího prostředí Arduino, k použití ultrazvukového senzoru HC-SC04. Náčrt je komentován dánsky, omlouvám se. Aby byla skica dobře strukturovaná, jsou pro různé logické části náčrtu vytvořeny samostatné funkce a většinou se vyhýbají globálním proměnným. Tok programu je vizualizován ve vývojovém diagramu MIDI ovladače pdf.

// Verze 15-05-2017: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette program udgør en simpel MIDI controller some kan styre en ekstern MIDI vylepšené, f.eks en softsynt på en PC. // MIDI ovladač může odeslat toneanslag (poznámka ke komandu) hhv. (poznámka kommando) pro en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne spouští dobrý snímač LDR, da skalní lave en sikker // zjišťování vzdálenosti od země k přistání k bodu (poznámka zapnuta), samt når hånden fjernes igen (note off). // MIDI kommandoerne "note on" og "note off" består hver af 3 bytes some sendes with serial1 porten // vha det i hardware opbyggede MIDI interface. // Nejlepší tonery pro 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 echo pin på definujte MAX_DISTANCE 100 // Maximální afstand pro 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); // Vytvoření objektu NewPing. int Senspin1 = 53; // Nedotáčivost LDR1 pro větší citlivost Senspin2 = 52; // Řverste LDR2 bajt MIDIByte2; // Deklarace variabel pro MIDIByte2 bool klar_note_on = 1; // Deklarace variabelů pro klar_note_on, styrer může přidat poznámku k kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Deklarace proměnných pro klar_note_off, styrer může přidat poznámku kommando void setup () {pinMode (Senspin1, INPUT); // vstup vstupního senzoru pinMode (Senspin2, INPUT); // vstup senzoru Serial1.begin (31250); // Serial1 Bruges til MIDI kommunikation: 31250 bit/sekundt Serial.begin (9600); // sériový monitor, til test} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - základní LDR bool Sensor2 = digitalRead (Senspin2); // více LDR2 - vždy LDR if (Senzor1 && klar_note_on) // hvis LDR1 aktivuje a zaznamenává do {byte Note_Byte = Hent_tonehojde (); // Hentý tón přejde přes ultralyds senzor MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, číslo poznámky MIDI, více 0xFF mimo rozsah Send_Note_On (MIDIByte2); // kald Funkce Send_Note_On klar_note_on = 0; // der skal kun sendes en note on kommando klar_note_off = 1; // více 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); // odeslání poznámky pryč 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 (byte NoteByte) {// Denne funktion returnerer Číslo MIDI noty, valgt ud fra NoteByte byte MIDIB2; switch (NoteByte) // její definice hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C; // tonen 'C'} break; případ 1: {MIDIB2 = 0x3E; // tonen 'D'} break; případ 2: {MIDIB2 = 0x40; // tonen 'E'} break; případ 3: {MIDIB2 = 0x41; // tonen 'F'} break; případ 4: {MIDIB2 = 0x43; // tonen 'G'} break; případ 5: {MIDIB2 = 0x45; // tonen 'A'} break; případ 6: {MIDIB2 = 0x47; // tonen 'B'} break; případ 7: {MIDIB2 = 0x48; // tonen 'C'} break; výchozí: {MIDIB2 = 0xFF; // mimo rozsah}} vrátit MIDIB2; // returner MIDI note number} byte Hent_tonehojde () {// Denne funkce henter vysledky ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm byte resultat; // inddeling af spille område const float Omregningsfaktor = 58.3; // 2*(1/343 m/s)/100 = 58, 3uS/cm, střední rozsah 2 dny od součtu od tilbage. Tid_uS = sonar.ping_median (medián); // Odeslání příkazu ping, tj. Zpětné odeslání v USA, střední hodnota Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = outside range range) resultat = Afstand / 8; // Beregn resultat return resultat; // Výsledek vracení} neplatné Send_Note_On (bajtový tonr) {// Denní funkce odesílatele poznámka na kommando na MIDI interfacet konst byte kommando = 0x90; // Poznámka ke komandu na MIDI kanále 1 konst. Bajt volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // poslat poznámku na kommando Serial1.write (tonenr); // odeslat tónové číslo Serial1.write (volumen); // odeslat volumen (rychlost)} void Send_Note_Off (byte tonenr) {// Denne function sender note off kommando på MIDI interfacet const byte kommando = 0x80; // Poznamenejte si, že počet MIDI kanálů je 1 bajt volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // odeslání poznámky kommando Serial1.write (tonenr); // odeslat tónové číslo Serial1.write (volumen); // poslat volumen (rychlost)}

Krok 7: Základy MIDI komunikace

MIDI (Musical Instrument Digital Interface) je univerzální sériový komunikační protokol pro propojení elektronických hudebních nástrojů a dalších zařízení. Používá se sériová komunikace (31 250 bitů/s, přenosové médium je proudová smyčka, na konci přijímače je opticky izolována. Jsou použity 5pinové konektory DIN. V jednom fyzickém připojení MIDI je možné 16 logických komunikačních kanálů. V MIDI je definováno mnoho příkazů standardně, v tomto projektu používám dva příkazy, tyto příkazy se skládají ze 3 bytů:

a) Poznámka k příkazu:

1. byte send = 0x90, což znamená poznámku k příkazu na MIDI kanálu 1

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

3. byte send = 0xFF FF = 255, což znamená maximální objem, rozsah 0x00 až 0xFF

b) Příkaz Vypnuto: 1. byte send = 0x80, což znamená příkaz not off na MIDI kanálu 1

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

3. byte send = 0xFF FF = 255, což znamená maximální objem, rozsah 0x00 až 0xFF

Doporučuje: