Turinys:

EAL - „Arduino MIDI“valdiklis: 7 žingsniai
EAL - „Arduino MIDI“valdiklis: 7 žingsniai

Video: EAL - „Arduino MIDI“valdiklis: 7 žingsniai

Video: EAL - „Arduino MIDI“valdiklis: 7 žingsniai
Video: Ardukopteris lenktyniniame keturkopteryje. Tai ne INAV jums! Pirma dalis. Pagrindinė sąranka 2024, Liepa
Anonim
EAL - „Arduino MIDI“valdiklis
EAL - „Arduino MIDI“valdiklis

Pagaminta Søren Østergaard Petersen, OEAAM16EDA

Šioje instrukcijoje aprašomas arduino pagrįstas MIDI valdiklis. Tai mokyklos projektas. Naudodamiesi ranka, galite groti paprastas melodijas per MIDI jungtį ir prijungtą MIDI instrumentą (arba kaip šiuo atveju nešiojamąjį kompiuterį, kuriame veikia „softsynth“programinė įranga). Galite groti natos iš C-dur, C-d-e-f-g-a-b-c. Kad galėtumėte prijungti MIDI valdiklį prie nešiojamojo kompiuterio, jums reikės MIDI ir USB sąsajos, pvz., „M-audio Uno“.

1 žingsnis: demonstracinis vaizdo įrašas

Image
Image

Padidinkite garsumą ir mėgaukitės!

Kaip tai veikia:

MIDI valdiklis naudoja „Arduino MEGA 2560“plokštę. Du šviesos (LDR) jutikliai, įmontuoti 16 mm elektros vamzdyje, sudaro dvigubą jutiklių sistemą ir yra naudojami stabiliam trigeriui sukurti be klaidingo dvigubo paleidimo. Žibintuvėlis sukuria šviesos spindulį, kai spindulį nutraukia ranka žaidžiantis valdiklis, apatinis šviesos jutiklis nustato trūkstamą spindulį, o HC-SR04 ultragarso jutiklis matuoja atstumą nuo jutiklio iki rankos.

Išmatuotas atstumas naudojamas „Arduino“programoje, norint apskaičiuoti ir nustatyti tinkamą užrašo numerio vertę, kuri turi būti supakuota į MIDI užrašą apie pranešimą ir perduoti MIDI sąsajoje. MIDI išvesties sąsaja naudoja 74HC14 šešiakampį keitiklį ir yra beveik standartinė grandinė. MIDI ryšiui naudojamas serijinis1, derinimui naudojamas standartinis nuoseklusis prievadas.

Kai ranka pakeliama tiesiai aukštyn ir toliau nuo šviesos spindulio, viršutinis šviesos jutiklis vėl suvokia šviesos spindulį, o MIDI užrašo išjungimo pranešimas yra supakuotas ir perduodamas MIDI išvestyje.

Žaidimo zona tarp jutiklių yra apie 63 cm, o bendras MIDI valdiklio ilgis yra apie 75 cm.

2 žingsnis: Išsami informacija apie šviesos jutiklius

Informacija apie šviesos jutiklius
Informacija apie šviesos jutiklius
Informacija apie šviesos jutiklius
Informacija apie šviesos jutiklius

Du šviesos jutikliai yra sumontuoti vienas ant kito ir sudaro dvigubą jutiklių sistemą. Tai apsaugo nuo klaidingo suveikimo, kai programinėje įrangoje naudojamas teisingai. Kiekvieną šviesos jutiklį sudaro foto rezistoriaus modulis, įmontuotas į 16 mm standartinį elektros vamzdelį. Kiekviename vamzdyje yra plyšys su pjūklu, o foto rezistoriaus PCB galima įspausti į angą. Jutikliai suklijuojami lipnia juostele ir taip pat pritvirtinami prie vieno medžio gabalo galo. Jokia šviesa neturi pasiekti jutiklių iš užpakalio. Šviesos jutikliuose yra įmontuoti 10k ištraukiamieji rezistoriai.

3 žingsnis: išsami informacija apie ultragarsinį jutiklį HC-SR04

Išsami informacija apie ultragarsinį jutiklį HC-SR04
Išsami informacija apie ultragarsinį jutiklį HC-SR04

HC-SR04 ultragarsinis jutiklis yra pritvirtintas kitame MIDI valdiklio gale. Čia taip pat įdėtas ryškus žibintuvėlis, kuris sukuria reikiamą šviesos spindulį.

4 žingsnis: „Aduino“grandinė

Aduino trasa
Aduino trasa
Aduino trasa
Aduino trasa

MIDI išvesties grandinė iš esmės yra standartinis 74HC14 šešiakampis keitiklis ir keli rezistoriai bei 5 kontaktų DIN jungtis. 74HC14 grandinė varo MIDI išvestį ir tuo pačiu suteikia tam tikrą „Arduino“plokštės apsaugą nuo „realaus pasaulio“, prijungto prie MIDI išvesties. Papildoma praktinė funkcija yra MIDI veiklos šviesos diodas, kuris signalizuoja, kai siunčiami duomenys.

Aš naudojau tinkamą PCB prototipą savo techninei įrangai, nes turėjau daug problemų dėl blogų jungčių mano duonos lentoje. Schema sukurta „Fritzing“, didelės raiškos pdf kopiją galima atsisiųsti paspaudus žemiau esančią nuorodą. Aš norėčiau naudoti tinkamą scheminę programą, tokią kaip „Kicad“, manau, kad „Fritzing“yra ribotas bet kam, išskyrus paprasčiausius eksperimentus.

Naudotos medžiagos:

1 vnt. „Arduino MEGA 2560“

2 vnt. Foto rezistorius (LDR) su įmontuotu ištraukiamuoju rezistoriumi (iš 37 jutiklių komplekto)

1 vnt ultragarsinis jutiklis HC-SR04

1 vnt 74HC14 šešiakampis apverstas Schmitto gaidukas

2 vnt rezistorius 220 omų 0,25W

1 vnt rezistorius 1k Ohm 0,25W

1 vnt LED silpnos srovės 2mA

1 vnt 100nF keraminis kondensatorius (atjungiant maitinimą, tiesiai prie 74HC14 maitinimo kaiščių)

Duonos lenta arba PCB prototipas

2 vnt. 16 mm elektros vamzdis, ilgis 65 mm

1 vnt medžio, ilgis 75 cm

Lipni juosta

Laidai

5 žingsnis: I/O sąrašas

Įvesties/išvesties sąrašas
Įvesties/išvesties sąrašas

6 žingsnis: „Aduino“kodas

Eskizas test_Midi6 naudoja „NewPing“biblioteką, kurią turite įtraukti į „Arduino“programavimo aplinką, kad galėtumėte naudoti ultragarsinį jutiklį HC-SC04. Eskizas komentuojamas danų kalba, atsiprašau. Kad eskizas būtų gerai struktūrizuotas, atskiros funkcijos sudaromos skirtingoms loginėms eskizo dalims ir dažniausiai vengiama visuotinių kintamųjų. Programų eiga vizualizuojama MIDI valdiklio schemoje pdf.

// 2017-05-15 versija: test_Midi6

// Søren Østergaard Petesen // „Arduino MEGA 2560“// „Dette“programa, skirta paprastam MIDI valdikliui, kuris gali būti perkeltas į MIDI, o taip pat ir kompiuteryje. // MIDI controlleren kan sende toneanslag (pastaba dėl komunikacijos) hhv. (pastabos išjungimas), skirtas oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. „MIDI kommandoerne“suaktyvina LDB jutiklį, da der skal laves en sikker // detektering af både når hånden lander på brættet (pastaba), samt når hånden fjernes igen (pastaba išjungta). // „MIDI kommandoerne“užrašas „og“užrašas išjungtas „geriausias“, kai jis turi 3 baitus, kai siunčiamas serijinis 1 portas // ar galima nustatyti aparatinės įrangos MIDI sąsają. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // biblioteka iki denendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino smeigtukas su įjungimo kaiščiu ultragarso jutikliu #define ECHO_PIN 2 // Arduino pin to echo pin på ultragarso jutiklis # define MAX_DISTANCE 100 // Maksimalus „Ping“atsistojimas #define Median 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // „NewPing“objekto kūrimas. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Øverste LDR2 føler byte MIDIByte2; // „Variabel“deklaracija, skirta MIDIByte2 bool klar_note_on = 1; // Variabel deklaration for klar_note_on, styrer afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Variabel deklaration for klar_note_off, styrer afsendelse af note off kommando void setup () {pinMode (Senspin1, INPUT); // sæt sensor input input pinMode (Senspin2, INPUT); // sæt jutiklio įvestis Serial1.begin (31250); // Serial1 bruges til MIDI communication: 31250 bit/sekundt Serial.begin (9600); // serijinis monitorius, iki testo} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - undere LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - øverste LDR if (Sensor1 && klar_note_on) // hvis LDR1 aktyveret og klar til note on {byte Note_Byte = Hent_tonehojde (); // Paspauskite tono garsą per ultralyds jutiklį MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Paleido MidByte2, MIDI užrašo numerį, 0xFF er už diapazono Send_Note_On (MIDIByte2); // kald Send_Note_On funktion klar_note_on = 0; // der skal kun sendes en note on kommando klar_note_off = 1; // næste kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal siunčia užrašą kommando gøres det her.. {Send_Note_Off (MIDIByte2); // send note off kommando klar_note_off = 0; // der skal kun sendes en note off kommando} if (! Sensor1 &&! Sensor2) // her gøres klar til ny note on kommando, hånd er væk fra brædt {klar_note_on = 1; }} baitas Hent_MidiByte2 (baitas NoteByte) {// Denne funktion returnerer MIDI užrašo numeris, valgt ud fra NoteByte baitas MIDIB2; switch (NoteByte) // jos apibrėžimai hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C; // tonen 'C'} break; 1 atvejis: {MIDIB2 = 0x3E; // tonen 'D'} break; 2 atvejis: {MIDIB2 = 0x40; // tonen 'E'} break; 3 atvejis: {MIDIB2 = 0x41; // tonen 'F'} break; 4 atvejis: {MIDIB2 = 0x43; // tonen 'G'} break; 5 atvejis: {MIDIB2 = 0x45; // tonen 'A'} break; 6 atvejis: {MIDIB2 = 0x47; // tonen 'B'} break; 7 atvejis: {MIDIB2 = 0x48; // tonen 'C'} break; numatytasis: {MIDIB2 = 0xFF; // už diapazono}} return MIDIB2; // grąžinimo MIDI užrašo numeris} baitas Hent_tonehojde () {// Denne funktion henter resultatet af ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm baitų rezultatas; // inddeling af spille område const float 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 (mediana); // Send ping, få tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = išorinis atstumas) resultat = Afstand / 8; // Beregn resultat return resultat; // Grąžinimo rezultatas} void Send_Note_On (baitų toneris) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // Pastaba apie komunikaciją p MIDI kanal 1 const baitas tūris = 0xFF; // tūris / greitis = 127 Serial1.write (kommando); // send note on kommando Serial1.write (tonenr); // send tone nummer Serial1.write (volumen); // send volumen (greitis)} void Send_Note_Off (baitų toneris) {// Denne funktion sender note off kommando på MIDI interfacet const byte kommando = 0x80; // Pastaba išjungta MIDI kanal 1 const baitų tūris = 0xFF; // tūris / greitis = 127 Serial1.write (kommando); // send note off kommando Serial1.write (tonenr); // send tone nummer Serial1.write (volumen); // siųsti tūrį (greitį)}

7 žingsnis: MIDI komunikacijos pagrindai

MIDI (muzikos instrumentų skaitmeninė sąsaja) yra universalus nuoseklaus ryšio protokolas, skirtas elektroniniams muzikos instrumentams ir kitiems prietaisams sujungti. Naudojamas nuoseklusis ryšys (31250 bitų per sekundę, perdavimo terpė yra srovės kilpa, opto izoliuota imtuvo gale. Naudojamos 5 kontaktų DIN jungtys. Vienu fiziniu MIDI ryšiu galimi 16 loginių ryšio kanalų. Daug komandų yra apibrėžtos MIDI standartas, šiame projekte naudoju dvi komandas, šias komandas sudaro 3 baitai:

a) Pastaba dėl komandos:

1. baitų siuntimas = 0x90 reiškia pastabą apie komandą 1 MIDI kanale

2. baitų siuntimas = 0xZZ ZZ yra pastabos numeris, aš naudoju diapazoną nuo 0x3C iki 0x48

3. baitų siuntimas = 0xFF FF = 255 reiškia maksimalų garsumą, diapazonas nuo 0x00 iki 0xFF

b) Pastaba išjungimo komanda: 1. baitų siuntimas = 0x80, reiškiantis „Note off“komandą 1 MIDI kanale

2. baitų siuntimas = 0xZZ ZZ yra pastabos numeris, aš naudoju diapazoną nuo 0x3C iki 0x48

3. baitų siuntimas = 0xFF FF = 255 reiškia maksimalų garsumą, diapazonas nuo 0x00 iki 0xFF

Rekomenduojamas: