Tartalomjegyzék:

EAL - Arduino MIDI vezérlő: 7 lépés
EAL - Arduino MIDI vezérlő: 7 lépés

Videó: EAL - Arduino MIDI vezérlő: 7 lépés

Videó: EAL - Arduino MIDI vezérlő: 7 lépés
Videó: Mechanical 7 Segment Display Driven By An Arduino 2024, Július
Anonim
EAL - Arduino MIDI vezérlő
EAL - Arduino MIDI vezérlő

Készítette: Søren Østergaard Petersen, OEAAM16EDA

Ez az utasítás egy arduino alapú MIDI vezérlőt ír le. Ez egy iskolai projekt. A keze segítségével egyszerű dallamokat játszhat le a MIDI -kapcsolaton és a csatlakoztatott MIDI -eszközön keresztül (vagy mint ebben az esetben egy softsynth szoftvert futtató notebookon). C-dúr skálán, c-d-e-f-g-a-b-c hangokat játszhat le. Ahhoz, hogy a MIDI-vezérlőt notebookhoz tudja csatlakoztatni, szüksége lesz egy MIDI-USB interfészre, például az m-audio Uno-ra.

1. lépés: Bemutató videó

Image
Image

Növelje a hangerőt és élvezze!

Hogyan működik:

A MIDI vezérlő Arduino MEGA 2560 kártyát használ. A 16 mm -es elektromos csőbe épített két fényérzékelő (LDR) kettős érzékelőrendszert alkot, és stabil hajtómű létrehozására szolgál hamis kettős indítás nélkül. A zseblámpa fénysugarat hoz létre, amikor a sugarat megszakítja a kéz a vezérlővel, az alsó fényérzékelő érzékeli a hiányzó sugarat, és egy HC-SR04 ultrahangos érzékelő méri az érzékelő és a kéz közötti távolságot.

A mért távolságot az Arduino program használja a MIDI Note On üzenetbe és a MIDI felületen továbbítandó megfelelő jegyzet számértékének kiszámításához és beállításához. A MIDI kimeneti interfész 74HC14 hexadecimális invertert használ, és nagyjából szabványos áramkör. A MIDI kommunikáció soros1 -et használ, a szabványos soros port a hibakeresésre szolgál.

Amikor a kezet egyenesen felfelé és a fénysugártól távolra mozgatják, a felső fényérzékelő újra érzékeli a fénysugarat, és a MIDI Note Off üzenet csomagolásra kerül és továbbítódik a MIDI kimenetre.

A játéktér az érzékelők között körülbelül 63 cm, a MIDI vezérlő teljes hossza pedig körülbelül 75 cm.

2. lépés: A fényérzékelők részletei

A fényérzékelők részletei
A fényérzékelők részletei
A fényérzékelők részletei
A fényérzékelők részletei

A két fényérzékelő egymásra van szerelve, hogy kettős érzékelőrendszert alkosson. Megakadályozza a hamis indítást, ha a szoftvert megfelelően használják. Minden fényérzékelő egy fotoellenállás modulból áll, amelyet egy 16 mm -es szabványos elektromos csőbe építettek be. Minden csőbe nyílást készítünk fémfűrésszel, és a fotóellenállás NYÁK -t be lehet nyomni a nyílásba. Az érzékelőket ragasztószalaggal ragasztják össze, és egy fadarab egyik végéhez rögzítik. Semmilyen fénynek nem kell elérnie az érzékelőket hátulról. A fényérzékelők beépített 10k felhúzó ellenállásokat tartalmaznak.

3. lépés: A HC-SR04 ultrahangos érzékelő részletei

A HC-SR04 ultrahangos érzékelő részletei
A HC-SR04 ultrahangos érzékelő részletei

A HC-SR04 ultrahangos érzékelő a MIDI vezérlő másik végén van rögzítve. Itt is fényes zseblámpát helyeznek el, ez hozza létre a szükséges fénysugarat.

4. lépés: Az Aduino áramkör

Az Aduino Circuit
Az Aduino Circuit
Az Aduino Circuit
Az Aduino Circuit

A MIDI kimeneti áramkör alapvetően egy szabványos 74HC14 hexadecimális inverter és néhány ellenállás, valamint egy 5 tűs DIN csatlakozó. A 74HC14 áramkör hajtja a MIDI kimenetet, és egyben védelmet nyújt az Arduino kártyának a MIDI kimenethez csatlakoztatott "valós világ" ellen. További praktikus funkció a MIDI aktivitás LED, amely jelzi az adatok küldését.

Megfelelő prototípusú NYÁK -t használtam a hardverhez, mert sok problémám volt a kenyérlapon lévő rossz kapcsolatokkal. A vázlat Fritzingben készült, nagy felbontású pdf másolat letölthető az alábbi linkre kattintva. Inkább egy megfelelő sematikus programot használok, mint a Kicad, azt hiszem, a Fritzing korlátozott mindenre, csak a legegyszerűbb kísérletekre.

Felhasznált anyagok:

1 db Arduino MEGA 2560

2 db fényellenállás (LDR) beépített felhúzó ellenállással (37 érzékelő készletből)

1 db HC-SR04 ultrahangos érzékelő

1 db 74HC14 hexa invertáló Schmitt trigger

2 db ellenállás 220 Ohm 0,25W

1 db ellenállás 1k Ohm 0,25W

1 db LED gyengeáramú 2mA

1 db 100nF kerámia kondenzátor (az áramellátás leválasztásához, közvetlenül a 74HC14 tápcsatlakozóinál)

Kenyeretábla vagy PCB prototípus

2 db 16 mm -es elektromos cső, hossza 65 mm

1 db fa, hossza 75 cm

Szövetbetétes ragasztószalag

Vezetékek

5. lépés: I/O lista

I/O lista
I/O lista

6. lépés: Az Aduino -kód

A test_Midi6 vázlat a NewPing könyvtárat használja, amelyet be kell vennie az Arduino programozási környezetébe a HC-SC04 ultrahangos érzékelő használatához. A vázlat dán nyelven van megjegyezve, elnézést. A vázlat jól strukturált megtartása érdekében a függvényeket a vázlat különböző logikai részeire pótolják, és a globális változókat többnyire kerülik. A programfolyamatot a MIDI vezérlő folyamatábrája mutatja be pdf.

// 2017. 05. 15-i verzió: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette program udgør and simple MIDI controller som kan styre and extern MIDI enhed, f.eks en softsynt på en PC. // MIDI controlleren kan sende toneanslag (megjegyzés a kommandón) hhv. (megjegyzés ki kommando) for en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne trigges af en dobbelt LDR sensor, da der skal laves en sikker // detektering af både når hånden lander på brættet (note on), samt når hånden fjernes igen (note off). // MIDI kommandoerne "note on" og "note off" består hver af 3 byte som sendes på serial1 porten // vha det i hardver opbyggede MIDI interface. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin till trigger pin på ultrahangos szenzor #define ECHO_PIN 2 // Arduino pin til echo pin på ultrahangos érzékelő # define MAX_DISTANCE 100 // Maximum afstand for 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); // NewPing objektum létrehozása. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Øverste LDR2 føler byte MIDIByte2; // Variabel deklaration for 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); // érzékelő bemenet pinMode (Senspin2, INPUT); // érzékelő bemenet Serial1.begin (31250); // Serial1 bruges til MIDI kommunikation: 31250 bit/sekundt Serial.begin (9600); // soros monitor, til teszt} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - alsó LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - øverste LDR if (Sensor1 && klar_note_on) // hvis LDR1 aktiveret og klar til note on {byte Note_Byte = Hent_tonehojde (); // Hent tone højde via ultralyds sensor MIDIByte2 = Hent_MidiByte2 (Note_Byte); // MidByte2, MIDI jegyzet száma, 0xFF er a tartományon kívül 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 notes off kommando gøres det her.. {Send_Note_Off (MIDIByte2); // megjegyzés küldése 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; }} byte Hent_MidiByte2 (byte NoteByte) {// Denne funktion returnerer MIDI jegyzet száma, valgt ud fra NoteByte byte MIDIB2; switch (NoteByte) // a definíciói hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C; // tonen 'C'} break; 1. eset: {MIDIB2 = 0x3E; // tonen 'D'} break; 2. eset: {MIDIB2 = 0x40; // tonen 'E'} break; 3. eset: {MIDIB2 = 0x41; // tonen 'F'} break; 4. eset: {MIDIB2 = 0x43; // tonen 'G'} break; 5. eset: {MIDIB2 = 0x45; // tonen 'A'} break; 6. eset: {MIDIB2 = 0x47; // tonen 'B'} break; 7. eset: {MIDIB2 = 0x48; // tonen 'C'} break; alapértelmezett: {MIDIB2 = 0xFF; // tartományon kívül}} return MIDIB2; // returner MIDI note number} byte Hent_tonehojde () {// Denne funktion henter resultatet af 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, der ganges med 2 da tiden er summen af tiden frem og tilbage. Tid_uS = szonár.ping_medián (medián); // ping küldése, få tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = külső távolságtartomány) resultat = Afstand / 8; // Beregn resultat return resultat; // Returner resultat} void Send_Note_On (byte tonenr) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // Note on kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Soros1.írás (kommando); // megjegyzés küldése a kommandón Serial1.write (tonenr); // send tone nummer Serial1.write (volumen); // send volumen (sebesség)} void Send_Note_Off (byte tonenr) {// Denne funktion sender note off kommando på MIDI interfacet const byte kommando = 0x80; // Note off kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Soros1.írás (kommando); // megjegyzés küldése kommando Serial1.write (tonenr); // send tone nummer Serial1.write (volumen); // volumen (sebesség) küldése

7. lépés: A MIDI kommunikáció alapjai

A MIDI (Musical Instrument Digital Interface) egy univerzális soros kommunikációs protokoll elektronikus hangszerek és más eszközök összekapcsolására. Soros kommunikációt használnak (31250 bit/s, az átviteli közeg áramhurok, opto-szigetelt a vevő végén. 5 tűs DIN csatlakozókat használnak. 16 logikai kommunikációs csatorna lehetséges egy fizikai MIDI-kapcsolaton. A MIDI-ben sok parancs van definiálva szabványban két parancsot használok ebben a projektben, ezek a parancsok 3 bájtból állnak:

a) Megjegyzés a parancsra:

1. byte send = 0x90 jelentése megjegyzés a parancshoz a MIDI 1 csatornán

2. byte send = 0xZZ ZZ a jegyzet száma, én a 0x3C és 0x48 tartományt használom

3. byte send = 0xFF FF = 255, ami a maximális hangerőt jelenti, 0x00 és 0xFF között

b) Megjegyzés Ki parancs: 1. bájt küldés = 0x80, ami megjegyzi a MIDI 1 csatornán

2. byte send = 0xZZ ZZ a jegyzet száma, én a 0x3C és 0x48 tartományt használom

3. bájt küldés = 0xFF FF = 255, azaz maximális hangerő, 0x00 és 0xFF közötti tartomány

Ajánlott: