Kazalo:

EAL - MIDI krmilnik Arduino: 7 korakov
EAL - MIDI krmilnik Arduino: 7 korakov

Video: EAL - MIDI krmilnik Arduino: 7 korakov

Video: EAL - MIDI krmilnik Arduino: 7 korakov
Video: ошибка [レッドゾーン] 2024, November
Anonim
EAL - MIDI krmilnik Arduino
EAL - MIDI krmilnik Arduino

Izdelal Søren Østergaard Petersen, OEAAM16EDA

Ta navodila opisujejo MIDI krmilnik, ki temelji na arduinu. To je šolski projekt. Z roko lahko predvajate preproste melodije prek povezave MIDI in priključenega instrumenta MIDI (ali kot v tem primeru prenosnega računalnika s programsko opremo za mehko uporabo). Predvajate lahko note iz C-dura, c-d-e-f-g-a-b-c. Če želite krmilnik MIDI priključiti na prenosni računalnik, potrebujete vmesnik MIDI-USB, kot je m-audio Uno.

1. korak: predstavitveni video

Image
Image

Povečajte glasnost in uživajte!

Kako deluje:

MIDI krmilnik uporablja ploščo Arduino MEGA 2560. Dva svetlobna senzorja (LDR), vgrajena v 16 -milimetrsko električno cev, tvorita dvojni senzorski sistem in se uporabljata za ustvarjanje stabilnega sprožilca brez lažnega dvojnega sproženja. Svetilka ustvarja svetlobni žarek, ko roko, ki igra krmilnik, prekine žarek, senzor spodnje svetlobe zazna manjkajoči žarek, ultrazvočni senzor HC-SR04 pa meri razdaljo od senzorja do roke.

Izmerjena razdalja se v programu Arduino uporablja za izračun in nastavitev ustrezne vrednosti številke note, ki jo je treba zapakirati v sporočilo MIDI Note On in oddajnik na vmesniku MIDI. Izhodni vmesnik MIDI uporablja šesterokotni pretvornik 74HC14 in je precej standardno vezje. MIDI komunikacija uporablja serijo1, standardna serijska vrata se uporabljajo za odpravljanje napak.

Ko roko premaknete naravnost navzgor in stran od svetlobnega snopa, zgornji svetlobni senzor spet zazna svetlobni žarek in sporočilo MIDI Note Off je zapakirano in poslano na izhod MIDI.

Območje za igranje med senzorji je približno 63 cm, skupna dolžina MIDI krmilnika pa okoli 75 cm.

2. korak: Podrobnosti o svetlobnih senzorjih

Podrobnosti o svetlobnih senzorjih
Podrobnosti o svetlobnih senzorjih
Podrobnosti o svetlobnih senzorjih
Podrobnosti o svetlobnih senzorjih

Dva svetlobna senzorja sta nameščena drug na drugega in tvorita dvojni senzorski sistem. Preprečuje lažno sproženje, če se pravilno uporablja v programski opremi. Vsak svetlobni senzor je sestavljen iz modula za foto upor, vgrajenega v 16 mm standardno električno cev. V vsaki cevi je z nožno žago narejena reža, tiskano vezje s foto uporom pa je mogoče pritisniti v režo. Tipala so pritrjena z lepilnim trakom in pritrjena na en konec lesa. Senzorji ne smejo priti do senzorjev od zadaj. Senzorji svetlobe imajo vgrajene 10 k vlečnih uporov.

3. korak: Podrobnosti o ultrazvočnem senzorju HC-SR04

Podrobnosti o ultrazvočnem senzorju HC-SR04
Podrobnosti o ultrazvočnem senzorju HC-SR04

Ultrazvočni senzor HC-SR04 je pritrjen na drugem koncu krmilnika MIDI. Tudi tu je postavljena svetla svetilka, ki ustvarja potreben svetlobni žarek.

4. korak: Aduino vezje

Aduino vezje
Aduino vezje
Aduino vezje
Aduino vezje

Izhodno vezje MIDI je v osnovi standardni šestkotni pretvornik 74HC14 in nekaj uporov ter 5 -polni ženski konektor DIN. Vezje 74HC14 poganja izhod MIDI in hkrati zagotavlja nekaj sredstev za zaščito plošče Arduino pred "resničnim svetom", povezanim z izhodom MIDI. Dodatna praktična funkcija je LED -lučka aktivnosti MIDI, ki signalizira, ko se pošiljajo podatki.

Za strojno opremo sem uporabil ustrezen prototip tiskanega vezja, ker sem imel veliko težav s slabimi povezavami na plošči. Shema je narejena v Fritzingu, kopijo pdf v visoki ločljivosti pa lahko prenesete s pritiskom na spodnjo povezavo. Raje uporabljam ustrezen shematski program, kot je Kicad, mislim, da je Fritzing omejen na karkoli, razen na najpreprostejše poskuse.

Uporabljeni materiali:

1 kos Arduino MEGA 2560

2 kosa foto upora (LDR) z vgrajenim uporovnim uporom (od 37 senzorskega kompleta)

1 kos ultrazvočnega senzorja HC-SR04

1 kos Schmittov sprožilec s šestnajstim obračanjem 74HC14

2 kos upora 220 Ohm 0,25W

1 kos upor 1k Ohm 0,25W

1 kos LED z nizkim tokom 2mA

1 kos keramičnega kondenzatorja 100nF (za ločitev napajanja, neposredno na napajalnih zatičih 74HC14)

Ogledna plošča ali prototip tiskanega vezja

2 kosa 16 mm električne cevi, dolžine 65 mm

1 kos lesa, dolžina 75 cm

Lepilni trak

Žice

5. korak: I/O seznam

I/O seznam
I/O seznam

Korak 6: Koda Aduino

Skica test_Midi6 uporablja knjižnico NewPing, ki jo morate vključiti v programsko okolje Arduino, za uporabo ultrazvočnega senzorja HC-SC04. Skica je komentirana v danščini, oprostite. Da bo skica dobro strukturirana, so ločene funkcije sestavljene za različne logične dele skice, globalnim spremenljivkam pa se večinoma izognemo. Potek programa je prikazan v diagramu poteka MIDI krmilnika pdf.

// 15.05.2017 različica: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette program udgør en simpli MIDI kontroler kot so stili in zunanji MIDI enhed, f.eks in softsynt på en PC. // MIDI kontroler lahko pošlje tonsko oznako (opomba o kommandu) hhv. (opomba 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 kommandoerne sproži af en dobbelt LDR sensor, da der skal laves en sikker // detekting af både når hånden lander på brættet (note on), samt når hånden fjernes igen (note off). // MIDI zapovednik "note on" og "note off" najbolje od 3 bajtov, ki so poslani na serijski1 porten // v strojni opremi vmesnik MIDI strojne opreme. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin do sprožilca pin na ultrazvočni senzor #define ECHO_PIN 2 // Arduino pin til echo pin på ultrasonic # define MAX_DISTANCE 100 // Največja vzdržljivost 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); // Ustvarjanje predmeta NewPing. int Senspin1 = 53; // Spodnji LDR1 føler int Senspin2 = 52; // prehodni bajt LDR2 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; // Variabel deklaration for klar_note_off, styler afsendelse af note off kommando void setup () {pinMode (Senspin1, INPUT); // vhod pinMode senzorskega senzorja (Senspin2, INPUT); // vhod senzorskega senzorja Serial1.begin (31250); // Serial1 bruges do komunikacije MIDI: 31250 bit/sekundt Serial.begin (9600); // serijski monitor, do testa} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - spodnji LDR bool senzor2 = digitalno branje (Senspin2); // læs LDR2 - preusmeritev LDR if (Sensor1 && klar_note_on) // hvis LDR1 aktiveret og klar til note on {byte Note_Byte = Hent_tonehojde (); // Hent zvok prek ultrazvočnega senzorja MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Poslal MidByte2, številko zapiska MIDI, vidno 0xFF je izven območja Send_Note_On (MIDIByte2); // kald Send_Note_On function klar_note_on = 0; // der skal kun pošlje en opombo o kommando klar_note_off = 1; // næste kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal pošilja opombo off kommando gøres det her.. {Send_Note_Off (MIDIByte2); // pošlji opombo 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 povratna številka zapiska MIDI, pomembna pod frazo NoteByte bajt MIDIB2; stikalo (NoteByte) // njena definicija je zapisana v MIDIByte2 skali, ki je vpisana v Note_Byte {primer 0: {MIDIB2 = 0x3C; // tonen 'C'} prelom; primer 1: {MIDIB2 = 0x3E; // tonen 'D'} prelom; primer 2: {MIDIB2 = 0x40; // tonen 'E'} prelom; primer 3: {MIDIB2 = 0x41; // tonen 'F'} prelom; primer 4: {MIDIB2 = 0x43; // tonen 'G'} prelom; primer 5: {MIDIB2 = 0x45; // tonen 'A'} prelom; primer 6: {MIDIB2 = 0x47; // tonen 'B'} prelom; primer 7: {MIDIB2 = 0x48; // tonen 'C'} prelom; privzeto: {MIDIB2 = 0xFF; // izven dosega}} return MIDIB2; // povratna številka zapiska MIDI} bajt Hent_tonehojde () {// Denne funkcijske podatke o rezultatu ultralydsmålingen brez podpisa int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm byte resultat; // zapiranje 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); // Pošlji ping, få tid return i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = zunanje območje razdalje) rezultat = Afstand / 8; // Beregn resultat return resultat; // Rezultat vračila} void Send_Note_On (byte tonenr) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // Opomba o kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // pošljite opombo na kommando Serial1.write (tonenr); // pošlji številko tona Serial1.write (volumen); // pošlji volumen (hitrost)} void Send_Note_Off (byte tonenr) {// Opomba pošiljatelja Denne funkcije pošiljatelja off kommando på MIDI vmesnik const byte kommando = 0x80; // Zabeleži kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // pošlji opombo kommando Serial1.write (tonenr); // pošlji številko tona Serial1.write (volumen); // pošlji količino (hitrost)}

7. korak: Osnove komunikacije MIDI

MIDI (digitalni vmesnik za glasbene instrumente) je univerzalni serijski komunikacijski protokol za povezovanje elektronskih glasbil in drugih naprav. Uporablja se serijska komunikacija (31250 bit/s, oddajni medij je trenutna zanka, opto-izolirana na koncu sprejemnika. Uporabljajo se 5pin DIN konektorji. V eni fizični MIDI povezavi je možno 16 logičnih komunikacijskih kanalov. V MIDI je definiranih veliko ukazov standardno, v tem projektu uporabljam dva ukaza, ti ukazi so sestavljeni iz 3 bajtov:

a) Opomba ob ukazu:

1. byte send = 0x90 pomeni opombo o ukazu na MIDI kanalu 1

2. pošiljanje bajtov = 0xZZ ZZ je številka opombe, uporabljam območje od 0x3C do 0x48

3. pošiljanje bajtov = 0xFF FF = 255, kar pomeni največjo prostornino, razpon 0x00 do 0xFF

b) Opomba Ukaz za izklop: 1. byte send = 0x80 pomeni ukaz za izklop opombe na kanalu MIDI 1

2. pošiljanje bajtov = 0xZZ ZZ je številka opombe, uporabljam območje od 0x3C do 0x48

3. pošiljanje bajtov = 0xFF FF = 255, kar pomeni največjo prostornino, razpon 0x00 do 0xFF

Priporočena: