Tartalomjegyzék:
- 1. lépés: Bemutató videó
- 2. lépés: A fényérzékelők részletei
- 3. lépés: A HC-SR04 ultrahangos érzékelő részletei
- 4. lépés: Az Aduino áramkör
- 5. lépés: I/O lista
- 6. lépés: Az Aduino -kód
- 7. lépés: A MIDI kommunikáció alapjai
Videó: EAL - Arduino MIDI vezérlő: 7 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
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ó
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 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ő 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
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
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:
Érintés nélküli Midi vezérlő: 6 lépés (képekkel)
Érintés nélküli Midi Controller: Napjaink trendje volt, hogy a dolgokat érintésmentessé tegyük. Létrehoztam egy egyszerű midi vezérlőt az Arduino Pro micro és néhány IR-proximity detector kártya segítségével, amely beépített összehasonlítóval rendelkezik, ennek meglehetősen könnyűnek és olcsónak kell lennie. Ez a projekt kb
MesoTune - Mágneses MIDI vezérlő: 16 lépés (képekkel)
MesoTune - Mágneses MIDI vezérlő: Megjegyzés: Alex Bluhme munkáját szeretném elismerni ezzel a projekttel. Tehát kérjük, nézze meg itt: https://vimeo.com/171612791. Ön zenei zeneszerző, dallamíró, szimfonikus vagy dallamművész, aki szereti saját ütemeit létrehozni, de unja már ezeket a zenéket
Alternatív MIDI vezérlő létrehozása Makey-Makey és víz használatával: 6 lépés
Alternatív MIDI vezérlő létrehozása a Makey-Makey és a Water használatával: A Makey-Makey használata hihetetlenül egyszerű és kreatív bemenetek létrehozásához! Míg sokan, akik a hardvert használják, saját hangszereiket hozzák létre a Makey-Makey bemeneteinek használatával hangok vagy hangok kiváltására, úgy döntöttünk, hogy még ennél is többet tehetünk
Microbit Midi CC vezeték nélküli vezérlő: 5 lépés (képekkel)
Microbit Midi CC vezeték nélküli vezérlő: Ebben az útmutatóban egy vezeték nélküli midi CC vezérlőt hozunk létre, amely lehetővé teszi, hogy a Microbit -et midi -vezérlőként használja, és csatlakoztathassa kedvenc zeneszerző szoftveréhez. Mi az a Midi CC? Gyakran rövidítve CC, míg A helyes kifejezés: "Vezérlés
Óceánia midi vezérlő (zajcsillapításhoz 0 parton és egyéb szintetizátorokhoz): 6 lépés (képekkel)
Oceania Midi Controller (a Make Noise 0-Coast és egyéb szintetizátorokhoz): Az elmúlt években számos szintetizátorgyártó kiadta az " asztali félmoduláris " műszerek. Általában ugyanazt a formát veszik fel, mint az Eurorack moduláris szintetizátor formátuma, és a legtöbbet valószínűleg g