Sadržaj:

EAL - Arduino MIDI kontroler: 7 koraka
EAL - Arduino MIDI kontroler: 7 koraka

Video: EAL - Arduino MIDI kontroler: 7 koraka

Video: EAL - Arduino MIDI kontroler: 7 koraka
Video: (ARDUINO UNO) CONTROLADOR DJ básico MIDI USB (HIDUINO) VIRTUAL DJ "7 & 8" [MEJORADO] (parte 2) 2024, Studeni
Anonim
EAL - Arduino MIDI kontroler
EAL - Arduino MIDI kontroler

Proizvođač Søren Østergaard Petersen, OEAAM16EDA

Ova instrukcija opisuje MIDI kontroler zasnovan na arduinu. Ovo je školski projekt. Rukom možete reproducirati jednostavne melodije putem MIDI veze i spojenog MIDI instrumenta (ili kao u ovom slučaju prijenosnog računala sa softverskim softverom). Možete svirati note iz C-dur ljestvice, c-d-e-f-g-a-b-c. Da biste mogli spojiti MIDI kontroler na prijenosno računalo, trebat će vam MIDI na USB sučelje poput m-audio Uno.

Korak 1: Demonstracijski video

Image
Image

Pojačajte zvuk i uživajte!

Kako radi:

MIDI kontroler koristi Arduino MEGA 2560 ploču. Dva svjetlosna senzora (LDR) ugrađena u 16 mm električnu cijev tvore dvostruki senzorski sustav i koriste se za stvaranje stabilnog okidača bez lažnog dvostrukog okidanja. Svjetiljka stvara svjetlosni snop, kada snop prekine ruka koja igra s kontrolerom, donji senzor osvjetljenja osjeti nedostajući snop, a HC-SR04 ultrazvučni senzor mjeri udaljenost od senzora do ruke.

Izmjerena udaljenost koristi se u programu Arduino za izračun i postavljanje odgovarajuće vrijednosti bilješke koja se pakira u poruku MIDI Note On i odašilje na MIDI sučelju. MIDI izlazno sučelje koristi šesterokutni pretvarač 74HC14 i prilično je standardni krug. MIDI komunikacija koristi serial1, standardni serijski port se koristi za ispravljanje pogrešaka.

Kad se ruka pomakne ravno prema gore i dalje od svjetlosnog snopa, gornji svjetlosni senzor ponovno osjeti svjetlosni snop i poruka MIDI Note Off je zapakirana i prenesena na MIDI izlaz.

Područje za igru između senzora je oko 63 cm, a ukupna duljina MIDI kontrolera je oko 75 cm.

Korak 2: Pojedinosti o svjetlosnim senzorima

Pojedinosti o svjetlosnim senzorima
Pojedinosti o svjetlosnim senzorima
Pojedinosti o svjetlosnim senzorima
Pojedinosti o svjetlosnim senzorima

Dva svjetlosna senzora montirana su jedan na drugi kako bi tvorili dvostruki senzorski sustav. Sprječava lažno aktiviranje ako se pravilno koristi u softveru. Svaki svjetlosni senzor sastoji se od fotootpornog modula ugrađenog u standardnu električnu cijev od 16 mm. U svakoj cijevi s nožicom je napravljen prorez, a foto otpornik PCB može se utisnuti u utor. Senzori su zalijepljeni ljepljivom trakom i pričvršćeni na jedan kraj komada drveta. Svjetlo ne smije doprijeti do senzora s leđa. Senzori svjetla imaju ugrađene 10k pull-up otpornika.

Korak 3: Pojedinosti o ultrazvučnom senzoru HC-SR04

Pojedinosti o ultrazvučnom senzoru HC-SR04
Pojedinosti o ultrazvučnom senzoru HC-SR04

Ultrazvučni senzor HC-SR04 učvršćen je na drugom kraju MIDI kontrolera. I ovdje je postavljena jaka svjetiljka koja stvara potreban snop svjetlosti.

Korak 4: Krug Aduino

Krug Aduino
Krug Aduino
Krug Aduino
Krug Aduino

MIDI izlazni krug u osnovi je standardni šesterokutni pretvarač 74HC14 i nekoliko otpornika plus 5 -polni ženski DIN konektor. Krug 74HC14 pokreće MIDI izlaz i istovremeno pruža neka sredstva zaštite za Arduino ploču od "stvarnog svijeta" spojenog na MIDI izlaz. Dodatna praktična značajka je LED za MIDI aktivnost koji signalizira kada se šalju podaci.

Koristio sam odgovarajući prototip PCB -a za svoj hardver jer sam imao dosta problema sa lošim vezama na ploči. Shema je izrađena u Fritzingu, pdf kopiju visoke razlučivosti možete preuzeti pritiskom na donju vezu. Više volim koristiti odgovarajući program za sheme poput Kicada, mislim da je Fritzing ograničen na sve osim na najjednostavnije eksperimente.

Korišteni materijali:

1 kom Arduino MEGA 2560

2 kom. Foto otpornik (LDR) s ugrađenim otpornikom na izvlačenje (od 37 senzorskih kompleta)

1 kom HC-SR04 ultrazvučni senzor

1 kom 74HC14 šesterokutni Schmittov okidač

2 kom otpornika 220 Ohm 0,25W

1 kom otpornik 1k Ohm 0,25W

1 kom LED slaba struja 2mA

1 kom keramički kondenzator 100nF (za odvajanje napajanja, izravno na priključcima za napajanje 74HC14)

Oglasna ploča ili prototip PCB -a

2 kom 16 mm električne cijevi, duljine 65 mm

1 komad drveta, duljine 75 cm

Ljepljiva traka

Žice

Korak 5: I/O popis

I/O popis
I/O popis

Korak 6: Aduino kod

Skica test_Midi6 koristi biblioteku NewPing koju morate uključiti u svoje programsko okruženje Arduino za korištenje ultrazvučnog senzora HC-SC04. Skica je komentirana na danskom, oprostite. Kako bi skica bila dobro strukturirana, zasebne funkcije se sastoje od različitih logičkih dijelova skice, a globalne varijable se uglavnom izbjegavaju. Tok programa vizualiziran je u dijagramu toka toka MIDI kontrolera u pdf -u.

// 15.05.2017 verzija: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette program udgør en simpli MIDI controller som can can styre and extern MIDI enhed, f.eks and softsynt på en PC. // MIDI kontroler može poslati tonanslag (napomena o kommandu) hhv. (napomena off kommando) za en oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI komandno upravljanje aktivira en dobbelt LDR senzor, da der skal laves en sikker // detekcija af både når hånden lander på brættet (napomena na), samt når hånden fjernes igen (napomena isključena). // MIDI komandno "bilješka o" og "bilješka isključena" najbolje od 3 bajta poslana na serijski1 prijenos // u hardverskom opbyggede MIDI sučelju. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin do okidača pin na ultrazvučni senzor #define ECHO_PIN 2 // Arduino pin til echo pin på ultrasonic senzor # define MAX_DISTANCE 100 // Maksimalno držanje za 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); // Stvaranje NewPing objekta. int Senspin1 = 53; // Donji LDR1 føler int Senspin2 = 52; // Øverste LDR2 bajt baterija MIDIByte2; // Variabel deklaracija za MIDIByte2 bool klar_note_on = 1; // Variabel deklaration for klar_note_on, styler afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Varijabel deklaracija za klar_note_off, styler nakon dodavanja bilješke isključeno kommando void setup () {pinMode (Senspin1, INPUT); // sæt osjetnik ulaza pinMode (Senspin2, INPUT); // sæt senzorski ulaz Serial1.begin (31250); // Serial1 bruges do MIDI komunikacije: 31250 bit/sekundt Serial.begin (9600); // serijski monitor, do testa} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - ispod LDR bool senzora2 = digitalRead (Senspin2); // nalazi LDR2 - premjesti LDR ako (Sensor1 && klar_note_on) // hvis LDR1 aktivan i oglavljen do bilješke na {byte Note_Byte = Hent_tonehojde (); // Poslali ton højde putem ultralyds senzora MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Poslao MidByte2, broj MIDI bilješke, 0xFF izvan raspona Send_Note_On (MIDIByte2); // kald Send_Note_On function klar_note_on = 0; // der skal kun šalje en bilješku o kommandu klar_note_off = 1; // næste kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sendes note off kommando gøres det her.. {Send_Note_Off (MIDIByte2); // šalje bilješku 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; }} bajt Hent_MidiByte2 (bajt NoteByte) {// Denne funkcija vraća MIDI broj bilješke, valgt ud fra NoteByte bajt MIDIB2; switch (NoteByte) // njezino definiranje hvilken værdi MIDIByte2 skal ima ud fra værdien af Note_Byte {slučaj 0: {MIDIB2 = 0x3C; // tonen 'C'} prekid; slučaj 1: {MIDIB2 = 0x3E; // tonen 'D'} break; slučaj 2: {MIDIB2 = 0x40; // tonen 'E'} break; slučaj 3: {MIDIB2 = 0x41; // tonen 'F'} prekid; slučaj 4: {MIDIB2 = 0x43; // tonen 'G'} prekid; slučaj 5: {MIDIB2 = 0x45; // tonen 'A'} prekid; slučaj 6: {MIDIB2 = 0x47; // tonen 'B'} prekid; slučaj 7: {MIDIB2 = 0x48; // tonen 'C'} prekid; zadano: {MIDIB2 = 0xFF; // izvan dometa}} return MIDIB2; // povrat MIDI bilješke broj} bajt Hent_tonehojde () {// Denne funkcije dostavljaju rezultate dobivene od ultralydsmålingen nepotpisanog 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 = sonar.ping_median (medijan); // Pošalji ping, få tid return i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid till afstand i cm (0 = izvan udaljenosti) resultat = Afstand / 8; // Beregn resultat return resultat; // Rezultat povratnika} void Send_Note_On (byte tonenr) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // Bilješka o kommando på MIDI kanalu 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // šalje bilješku o kommando Serial1.write (tonenr); // šalje broj tona Serial1.write (volumen); // slanje volumena (velocity)} void Send_Note_Off (byte tonenr) {// Denne funkcija pošiljatelja napomena isključena komanda på MIDI sučelje const byte kommando = 0x80; // Bilješka o kommando på MIDI kanalu 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // pošalji bilješku off kommando Serial1.write (tonenr); // šalje broj tona Serial1.write (volumen); // slanje volumena (brzina)}

Korak 7: Osnove MIDI komunikacije

MIDI (digitalno sučelje glazbenih instrumenata) univerzalni je serijski komunikacijski protokol za povezivanje elektroničkih glazbenih instrumenata i drugih uređaja. Koristi se serijska komunikacija (31250 bit/s, prijenosni medij je strujna petlja, opto izolirana na kraju prijemnika. Koriste se 5pin DIN konektori. Moguće je 16 logičkih komunikacijskih kanala u jednoj fizičkoj MIDI vezi. Mnoge naredbe definirane su u MIDI standardno, u ovom projektu koristim dvije naredbe, ove naredbe se sastoje od 3 bajta:

a) Napomena o naredbi:

1. slanje bajtova = 0x90 što znači napomenu o naredbi na MIDI kanalu 1

2. slanje bajtova = 0xZZ ZZ je broj bilješke, koristim raspon od 0x3C do 0x48

3. slanje bajtova = 0xFF FF = 255 što znači maksimalni volumen, raspon 0x00 do 0xFF

b) Napomena Naredba za isključivanje: 1. byte send = 0x80 što znači naredba note off na MIDI kanalu 1

2. slanje bajtova = 0xZZ ZZ je broj bilješke, koristim raspon od 0x3C do 0x48

3. slanje bajtova = 0xFF FF = 255 što znači maksimalni volumen, raspon 0x00 do 0xFF

Preporučeni: