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: Модули MIDI для Arduino. Создавай и объединяй музыкальные инструменты. Железки Амперки 2024, Juli
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 projekat. Rukom možete reproducirati jednostavne melodije putem MIDI veze i povezanog MIDI instrumenta (ili kao u ovom slučaju prijenosnog računara sa softverskim softverom). Možete svirati note iz C-dura, 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: Video demonstracije

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 čine dvostruki senzorski sistem 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 se koristi u programu Arduino za izračunavanje i postavljanje odgovarajuće vrijednosti bilješke koja se pakira u poruku MIDI Note On i odašiljač na MIDI sučelju. MIDI izlazno sučelje koristi šesterokutni pretvarač 74HC14 i prilično je standardno kolo. MIDI komunikacija koristi serial1, standardni serijski port se koristi za otklanjanje grešaka.

Kada se ruka pomakne ravno prema gore i dalje od svjetlosnog snopa, gornji svjetlosni senzor ponovo osjeća snop svjetlosti i poruka MIDI Note Off se pakuje i prenosi na MIDI izlaz.

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

Korak 2: Detalji o svjetlosnim senzorima

Detalji o svjetlosnim senzorima
Detalji o svjetlosnim senzorima
Detalji o svjetlosnim senzorima
Detalji o svjetlosnim senzorima

Dva svjetlosna senzora montirana su jedan preko drugog kako bi formirali dvostruki senzorski sistem. Sprječava lažno aktiviranje ako se pravilno koristi u softveru. Svaki svjetlosni senzor sastoji se od fotootpornog modula ugrađenog u 16 mm standardnu električnu cijev. 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. Senzori sa stražnje strane ne smiju doprijeti do svjetla. Senzori za svjetlo imaju ugrađene 10k pull-up otpornike.

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

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

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

Korak 4: Aduino kolo

Aduino kolo
Aduino kolo
Aduino kolo
Aduino kolo

MIDI izlazni krug je u osnovi 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 matičnoj ploči. Shema je napravljena u Fritzingu, pdf kopiju visoke rezolucije 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.

Upotrebljeni materijali:

1 kom Arduino MEGA 2560

2 kom. Foto otpornik (LDR) sa 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 slabe struje 2mA

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

Matična ploča ili prototip PCB -a

2 kom 16 mm električne cijevi, dužine 65 mm

1 komad drveta, dužine 75 cm

Ljepljiva traka

Žice

Korak 5: I/O listanje

I/O listing
I/O listing

Korak 6: Aduino kod

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

// 15.05.2017 verzija: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Preuzmite program na jednostavan MIDI kontroler kako biste mogli stilizirati i eksterno MIDI enhed, f.eks i softverski na računaru. // MIDI kontroler može poslati tonske oznake (napomena o komandi) hhv. (Napomena 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 LOB senzor na dobbelt -u, da der skalira laves i sikker // detekcija både når hånden lander på brættet (napomena na), sam niti nånd fjernes igen (napomena isključena). // MIDI komandna naredba "bilješka o" ili "napomena isključena" najbolje nakon 3 bajta poslana na serijski1 porton // u hardverskom opbyggede MIDI sučelju. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // biblioteka do anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin do pin okidača na ultrazvučnom senzoru #define ECHO_PIN 2 // Arduino pin do echo pin na ultrazvučni senzor # definirati 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); // Kreiranje NewPing objekta. int Senspin1 = 53; // Donja LDR1 kartica int Senspin2 = 52; // Obrni LDR2 bajt veći od MIDIByte2; // Variabel deklaracija za MIDIByte2 bool klar_note_on = 1; // Varijabel deklaracija za klar_note_on, styler nakon dodavanja bilješke na komandu. Prijemjerite komandu i zabilježite na komandnoj bool klar_note_off = 0; // Varijabel deklaracija za klar_note_off, styler nakon dodavanja napomene isključuje kommando void setup () {pinMode (Senspin1, INPUT); // provjerava pinMode senzora (Senspin2, INPUT); // sset senzorski ulaz Serial1.begin (31250); // Serial1 je dostupan do MIDI komunikacije: 31250 bit/sekunda Serial.begin (9600); // serijski monitor, do testa} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - ispod LDR bool senzora2 = digitalRead (Senspin2); // sadrži LDR2 - premjesti LDR ako (Sensor1 && klar_note_on) // hvis LDR1 aktivan i klar u bilješci na {byte Note_Byte = Hent_tonehojde (); // Poslali ton preko ultrazvučnog senzora MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Poslali MidByte2, broj bilješke MIDI, 0xFF izvan raspona Send_Note_On (MIDIByte2); // kald Send_Note_On function klar_note_on = 0; // der skal kun šalje bilješku o komandi klar_note_off = 1; // najnovije komande su napomene isključene} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal šalje notu 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) // njen glavni kôd do najnovije bilješke o kommandu, 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, vrijedi za NoteByte bajt MIDIB2; switch (NoteByte) // njena definicija uključuje MIDIByte2 skalu koja sadrži frazu Note_Byte {slučaj 0: {MIDIB2 = 0x3C; // ton "C"} break; slučaj 1: {MIDIB2 = 0x3E; // ton "D"} break; slučaj 2: {MIDIB2 = 0x40; // ton "E"} break; slučaj 3: {MIDIB2 = 0x41; // tonn 'F'} prekid; slučaj 4: {MIDIB2 = 0x43; // ton "G"} break; slučaj 5: {MIDIB2 = 0x45; // ton "A"} break; slučaj 6: {MIDIB2 = 0x47; // ton "B"} break; slučaj 7: {MIDIB2 = 0x48; // ton "C"} break; zadano: {MIDIB2 = 0xFF; // izvan dometa}} return MIDIB2; // povratni broj MIDI bilješke} bajt Hent_tonehojde () {// Denne funkcije pronalaze rezultate kao rezultat ultralydsmålingen nepotpisanog int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm byte resultat; // poništavanje igara område const float Omregningsfaktor = 58,3; // 2*(1/343 m/s)/100 = 58, 3uS/cm, der ganges med 2 da tiden er summes off tiden frem og tilbage. Tid_uS = sonar.ping_median (srednji); // Pošaljite ping, ako se ne vratite u SAD, gennemsint iz srednjeg prosjeka Podijeli = Tid_uS / Omregningsfaktor; // Omregn tid do visine i cm (0 = vanjski raspon udaljenosti) rezultat = Afstand / 8; // Beregn resultat return resultat; // Rezultat povratnika} void Send_Note_On (byte tonenr) {// Denne funkcija pošiljatelja i bilješka o komandama na MIDI sučelju 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 na MIDI sučelju const byte kommando = 0x80; // Bilješka o kommando på MIDI kanalu 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // šalje bilješku kommando Serial1.write (tonenr); // šalje broj tona Serial1.write (volumen); // slanje volumena (brzina)}

Korak 7: Osnove MIDI komunikacije

MIDI (digitalni interfejs za muzičke instrumente) je univerzalni serijski komunikacijski protokol za povezivanje elektronskih muzičkih 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 Na komandu:

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

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

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

b) Napomena Komanda za isključivanje: 1. byte send = 0x80 znači naredba za isključivanje bilješke na MIDI kanalu 1

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

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

Preporučuje se: