Obsah:
- Krok 1: Demonstrační video
- Krok 2: Podrobnosti o světelných čidlech
- Krok 3: Podrobnosti o ultrazvukovém senzoru HC-SR04
- Krok 4: Okruh Aduino
- Krok 5: Seznam I/O
- Krok 6: Kód Aduino
- Krok 7: Základy MIDI komunikace
Video: EAL - MIDI ovladač Arduino: 7 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
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
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
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
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
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
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:
Arduino klávesnice Joystick Extender Box a ovladač zvuku věc pomocí Deej: 8 kroků
Arduino Keyboard Joystick Extender Box a ovladač zvuku Věc pomocí Deej: Proč Už nějakou dobu jsem chtěl na klávesnici přidat malý joystick pro ovládání prvků rozhraní nebo jiných menších úkolů ve hrách a simulátorech (MS Flight Sim, Elite: Dangerous, Star Wars: Squadrons, atd.). Také pro Elite: Dangerous jsem byl
IOT DMX ovladač s Arduino a Stage Monster Live: 6 kroků
IOT DMX ovladač s Arduino a Stage Monster Live: Ovládejte osvětlení pódia a další DMX zařízení z telefonu nebo jiného webového zařízení. Ukážu vám, jak rychle a snadno postavit vlastní DMX ovladač, který běží na platformě Stage Monster Live pomocí Arduino Mega
Automatický herní ovladač Google T Rex využívající Arduino: 7 kroků
Automatický herní ovladač Google T Rex pomocí Arduina: Umožňuje jej sestavit
Herní ovladač Arduino: 5 kroků
Arduino Game Controller: Herní ovladač je zařízení, které ve videohře poskytuje vstupy k pohybu postavy nebo objektu. Design a funkčnost herního ovladače jsou snadné a rozhodně vám poskytnou úžasný zážitek z hraní her, a bude to mnohem více
Arduino DIY herní ovladač - Herní ovladač Arduino PS2 - Hra Tekken s gamepadem pro kutily Arduino: 7 kroků
Arduino DIY herní ovladač | Herní ovladač Arduino PS2 | Hraní Tekken s DIY Arduino Gamepad: Ahoj kluci, hraní her je vždy zábava, ale hraní s vaší vlastní DIY vlastní hrou je zábavnější. Takže v tomto návodu vytvoříme herní ovladač pomocí arduino pro micro