Sisukord:

EAL - Arduino MIDI kontroller: 7 sammu
EAL - Arduino MIDI kontroller: 7 sammu

Video: EAL - Arduino MIDI kontroller: 7 sammu

Video: EAL - Arduino MIDI kontroller: 7 sammu
Video: Arduino midi controller (все просто 🎛️) 2024, Juuli
Anonim
EAL - Arduino MIDI kontroller
EAL - Arduino MIDI kontroller

Tootja Søren Østergaard Petersen, OEAAM16EDA

See juhend kirjeldab arduino -põhist MIDI -kontrollerit. See on kooliprojekt. Käega saate mängida lihtsaid meloodiaid MIDI -ühenduse ja ühendatud MIDI -instrumendi (või nagu sel juhul sülearvuti, millel on softsynth tarkvara) kaudu. Saate mängida noote C-duuri skaalal, c-d-e-f-g-a-b-c. MIDI-kontrolleri sülearvutiga ühendamiseks vajate MIDI-USB-liidest, näiteks m-audio Uno.

1. samm: tutvustav video

Image
Image

Suurendage helitugevust ja nautige!

Kuidas see töötab:

MIDI -kontroller kasutab Arduino MEGA 2560 plaati. Kaks valgusdioodi (LDR), mis on sisse ehitatud 16 mm elektritorusse, moodustavad kahekordse andurisüsteemi ja neid kasutatakse stabiilse päästiku loomiseks ilma vale kahekordse käivitamiseta. Taskulamp loob valgusvihu, kui valgusvihu katkestab kontrollerit mängiv käsi, alumine valgusandur tuvastab puuduva valgusvihu ja ultraheli HC-SR04 mõõdab kaugust andurist käeni.

Mõõdetud vahemaad kasutatakse Arduino programmis sobiva noodinumbri väärtuse arvutamiseks ja seadistamiseks, mis pakitakse MIDI Note On sõnumisse ja edastatakse MIDI liideses. MIDI väljundliides kasutab 74HC14 kuuskantmuundurit ja on üsna tavaline vooluahel. MIDI -side kasutab jada1, silumiseks kasutatakse standardset jadaporti.

Kui käsi liigutatakse otse üles ja valgusvihust eemale, tunneb ülemine valgusandur uuesti valgusvihku ning MIDI märkus välja lülitatud teade on pakitud ja edastatud MIDI väljundile.

Andurite vaheline mänguala on umbes 63 cm ja MIDI -kontrolleri kogupikkus on umbes 75 cm.

2. samm: valgussensorite üksikasjad

Valgusandurite üksikasjad
Valgusandurite üksikasjad
Valgusandurite üksikasjad
Valgusandurite üksikasjad

Kaks valgusandurit on paigaldatud üksteise peale, moodustades kahekordse andurisüsteemi. See hoiab ära vale käivitamise, kui seda kasutatakse tarkvaras õigesti. Iga valgusandur koosneb fototakisti moodulist, mis on ehitatud 16 mm standardse elektritorusse. Igasse torusse tehakse rauasaega pesa ja fototakisti trükkplaadi saab pesasse vajutada. Andurid kleepitakse kleeplindiga kokku ja kinnitatakse ka puutüki ühe otsa külge. Ükski valgus ei tohi anduritele tagant ligi pääseda. Valgusanduritel on sisseehitatud 10k tõmbetakistid.

Samm: ultraheli anduri HC-SR04 üksikasjad

Ultraheli anduri HC-SR04 üksikasjad
Ultraheli anduri HC-SR04 üksikasjad

Ultraheli andur HC-SR04 on fikseeritud MIDI-kontrolleri teises otsas. Ka siia on paigutatud ere taskulamp, see loob vajaliku valgusvihu.

4. samm: Aduino ring

Aduino ringrada
Aduino ringrada
Aduino ringrada
Aduino ringrada

MIDI väljundahel on põhimõtteliselt tavaline 74HC14 kuuskantmuundur ja mõned takistid ning 5 -kontaktiline DIN -pistik. Ahel 74HC14 juhib MIDI -väljundit ja pakub samal ajal teatud kaitset Arduino plaadile MIDI -väljundiga ühendatud "reaalse maailma" eest. Täiendav praktiline funktsioon on MIDI aktiivsuse LED, mis annab märku andmete saatmisel.

Olen oma riistvara jaoks kasutanud korralikku prototüüpi trükkplaati, kuna mul oli palju probleeme leivaplaadi halbade ühendustega. Skeem on koostatud Fritzingis, kõrge resolutsiooniga pdf -koopia saab alla laadida, vajutades allolevat linki. Ma eelistan kasutada korralikku skeemiprogrammi nagu Kicad, ma arvan, et Fritzing on piiratud kõigeks, välja arvatud kõige lihtsamad katsed.

Kasutatud materjalid:

1 tk Arduino MEGA 2560

2 tk fototakisti (LDR) koos sisseehitatud tõmbetakistusega (37 andurikomplektist)

1 tk ultraheli HC-SR04

1 tk 74HC14 kuusnurkne inverteeriv Schmitti päästik

2 tk takisti 220 oomi 0,25W

1 tk takisti 1k oom 0,25W

1 tk LED nõrkvool 2mA

1 tk 100nF keraamiline kondensaator (toiteallika lahtiühendamiseks otse 74HC14 toitepistikute juures)

Leivaplaat või PCB prototüüp

2 tk 16 mm elektritoru, pikkus 65 mm

1 tk puitu, pikkus 75cm

Kleeplint

Juhtmed

Samm 5: I/O loend

Sisendite/väljundite loend
Sisendite/väljundite loend

6. samm: Aduino kood

Eskiis test_Midi6 kasutab NewPingi teeki, mille peate lisama oma Arduino programmeerimiskeskkonda, et kasutada ultraheli andurit HC-SC04. Visandit kommenteeritakse taani keeles, vabandust. Et visand oleks hästi struktureeritud, moodustatakse visandi erinevate loogiliste osade jaoks eraldi funktsioonid ja enamasti välditakse globaalseid muutujaid. Programmivoog on visualiseeritud MIDI -kontrolleri vooskeemis pdf.

// 15.05.2017 versioon: 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 (märkus kommando kohta) hhv. (märkus välja kommando) jaoks okt okt C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne käivitab eneses LDB anduri, da der skal laves en sikker // detektering af både når hånden lander på brættet (märkus on), samt når hånden fjernes igen (märkus välja). // MIDI kommandoerne "note on" og "note off" består hver af 3 byte som sendes på serial1 porten // vha det i hardware opbyggede MIDI interface. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin to trigger pin in ultrasonic sensor #define ECHO_PIN 2 // Arduino pin to echo pin på ultrasound sensor # define MAX_DISTANCE 100 // Pingi maksimaalne afstand #define Median 5 // Antal målinger der beregnes gennemsnit af for få en sikker afstandsbestemmelse NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPingi objekti loomine. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Øverste LDR2 føler bait MIDIByte2; // Variabel deklaratsioon MIDIByte2 bool jaoks klar_note_on = 1; // Variabel deklaratsioon for klar_note_on, styrer afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // Variabel deklaratsioon klar_note_off, styrer afsendelse af note off kommando void setup () {pinMode (Senspin1, INPUT); // anduri sisendi pinMode (Senspin2, INPUT); // anduri sisend Serial1.begin (31250); // Serial1 Bruges kuni MIDI kommunikatsioon: 31250 bit/sekundt Serial.begin (9600); // jadamonitor, kuni test} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - alt 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); // Hent MidByte2, MIDI märkme number, 0xFF er vahemikust väljas Send_Note_On (MIDIByte2); // kald Send_Note_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 saadab märkuse kommando gøres det her.. {Send_Note_Off (MIDIByte2); // send note 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; }} bait Hent_MidiByte2 (bait NoteByte) {// Denne funktion returnerer MIDI note number, valgt ud fra NoteByte byte MIDIB2; lüliti (NoteByte) // tema määratlused hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C; // tonen 'C'} break; juhtum 1: {MIDIB2 = 0x3E; // toon "D"} break; juhtum 2: {MIDIB2 = 0x40; // tonen 'E'} break; juhtum 3: {MIDIB2 = 0x41; // toon "F"} break; juhtum 4: {MIDIB2 = 0x43; // tonen 'G'} break; juhtum 5: {MIDIB2 = 0x45; // tonen 'A'} break; juhtum 6: {MIDIB2 = 0x47; // toon "B"} break; juhtum 7: {MIDIB2 = 0x48; // tonen 'C'} break; vaikimisi: {MIDIB2 = 0xFF; // vahemikust väljas}} tagastama MIDIB2; // tagastaja MIDI märkme number} bait Hent_tonehojde () {// Denne funktion henter resultatet af ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm baidi tulemus; // 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 (mediaan); // Send ping, få tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = väljaspool kaugust) tulemus = Afstand / 8; // Beregn resultat return result; // Returner resultat} void Send_Note_On (byte tonenr) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // Märkus kommenteerimise kohta MIDI kanal 1 const bait volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // saata märkus kommando Serial1.write (tonenr); // saata tooni nummer Serial1.write (volumen); // send volumen (kiirus)} void Send_Note_Off (bait tonenr) {// Denne funktion sender note off kommando på MIDI interfacet const byte kommando = 0x80; // Märkus välja kommenteerimata MIDI kanal 1 const bait volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // send note off kommando Serial1.write (tonenr); // saata tooni nummer Serial1.write (volumen); // saatke maht (kiirus)}

7. samm: MIDI -kommunikatsiooni põhitõed

MIDI (Musical Instrument Digital Interface) on universaalne jadaühenduse protokoll elektrooniliste muusikariistade ja muude seadmete ühendamiseks. Kasutatakse jadaühendust (31250 bit/s, edastusmeedium on vooluahel, vastuvõtja otsas optiliselt isoleeritud. Kasutatakse 5-pin DIN-pistikuid. Ühes füüsilises MIDI-ühenduses on võimalik 16 loogilist sidekanalit. Paljud käsud on määratletud MIDI-s standard, kasutan selles projektis kahte käsku, need käsud koosnevad 3 baidist:

a) Märkus käsu kohta:

1. baitide saatmine = 0x90, mis tähendab märget käsu kohta MIDI kanalil 1

2. bait send = 0xZZ ZZ on märkme number, ma kasutan vahemikku 0x3C kuni 0x48

3. baitide saatmine = 0xFF FF = 255, mis tähendab maksimaalset helitugevust, vahemik 0x00 kuni 0xFF

b) Märkus Väljas käsk: 1. bait saatmine = 0x80, mis tähendab märkme väljalülitamise käsku MIDI kanalil 1

2. bait send = 0xZZ ZZ on märkme number, ma kasutan vahemikku 0x3C kuni 0x48

3. baitide saatmine = 0xFF FF = 255, mis tähendab maksimaalset helitugevust, vahemik 0x00 kuni 0xFF

Soovitan: