Sisällysluettelo:

EAL - Arduino MIDI -ohjain: 7 vaihetta
EAL - Arduino MIDI -ohjain: 7 vaihetta

Video: EAL - Arduino MIDI -ohjain: 7 vaihetta

Video: EAL - Arduino MIDI -ohjain: 7 vaihetta
Video: 🎹 Делаем ПИАНИНО на ARDUINO (с 7 октавами) 2024, Heinäkuu
Anonim
EAL - Arduino MIDI -ohjain
EAL - Arduino MIDI -ohjain

Valmistaja Søren Østergaard Petersen, OEAAM16EDA

Tässä ohjeessa kuvataan arduino -pohjainen MIDI -ohjain. Tämä on kouluprojekti. Kädelläsi voit toistaa yksinkertaisia melodioita MIDI -liitännän ja siihen liitetyn MIDI -instrumentin (tai kuten tässä tapauksessa kannettavan tietokoneen, jossa on softsynth -ohjelmisto) kautta. Voit toistaa nuotteja C-duurista, c-d-e-f-g-a-b-c. Jotta voit liittää MIDI-ohjaimen Notebookiin, tarvitset MIDI-USB-liitännän, kuten m-audio Uno.

Vaihe 1: Esittelyvideo

Image
Image

Lisää äänenvoimakkuutta ja nauti!

Kuinka se toimii:

MIDI -ohjain käyttää Arduino MEGA 2560 -korttia. Kaksi valo (LDR) -anturia, jotka on rakennettu 16 mm: n sähköputkeen, muodostavat kaksoisanturijärjestelmän, ja niitä käytetään luomaan vakaa liipaisin ilman vääriä kaksoisliipaisimia. Taskulamppu luo valonsäteen, kun säde keskeytetään ohjainta toistavalla kädellä.

Mitattua etäisyyttä käytetään Arduino -ohjelmassa laskettaessa ja määritettäessä asianmukainen nuotin numeroarvo, joka pakataan MIDI Note On -viestiin ja lähetetään MIDI -liitännässä. MIDI -lähtöliitäntä käyttää 74HC14 -heksataajuusmuuttajaa ja on melko vakiopiiri. MIDI -tiedonsiirto käyttää sarjaa1, vakio -sarjaporttia käytetään virheenkorjaukseen.

Kun kättä siirretään suoraan ylöspäin ja poispäin valonsäteestä, ylempi valotunnistin tunnistaa valonsäteen uudelleen ja MIDI Note Off -viesti pakataan ja lähetetään MIDI -lähtöön.

Anturien välinen pelialue on noin 63 cm ja MIDI -ohjaimen kokonaispituus on noin 75 cm.

Vaihe 2: Valoanturien tiedot

Valoanturien tiedot
Valoanturien tiedot
Valoanturien tiedot
Valoanturien tiedot

Kaksi valoanturia on asennettu päällekkäin kaksoisanturijärjestelmän muodostamiseksi. Se estää väärän laukaisun, kun sitä käytetään oikein ohjelmistossa. Jokainen valoanturi koostuu valokuvavastusmoduulista, joka on sisäänrakennettu 16 mm: n vakiosähköputkeen. Kussakin putkessa on rako rautasahalla ja valokuvavastuspiirilevy voidaan painaa uraan. Anturit on teipattu yhteen teipillä ja kiinnitetty myös puukappaleen toiseen päähän. Valo ei saa päästä käsiksi antureihin takaa.

Vaihe 3: Tiedot HC-SR04-ultraäänianturista

HC-SR04-ultraäänianturin tiedot
HC-SR04-ultraäänianturin tiedot

Ultraääni-HC-SR04-anturi on kiinnitetty MIDI-ohjaimen toiseen päähän. Myös kirkas taskulamppu on sijoitettu tähän, se luo tarvittavan valonsäteen.

Vaihe 4: Aduino -piiri

Aduino Circuit
Aduino Circuit
Aduino Circuit
Aduino Circuit

MIDI -lähtöpiiri on pohjimmiltaan vakio 74HC14 -kuusioinvertteri ja muutama vastus sekä 5 -nastainen DIN -naarasliitin. 74HC14 -piiri ohjaa MIDI -lähtöä ja samalla suojaa Arduino -korttia "todellista maailmaa" vastaan, joka on kytketty MIDI -lähtöön. Ylimääräinen käytännöllinen ominaisuus on MIDI -toimintavalo, joka ilmoittaa, kun data lähetetään.

Olen käyttänyt laitteistolleni asianmukaista prototyyppipiirilevyä, koska minulla oli paljon ongelmia leipälevyn huonojen yhteyksien kanssa. Kaavio on tehty Fritzing -muodossa, korkean resoluution pdf -kopio voidaan ladata painamalla alla olevaa linkkiä. Käytän mieluummin oikeaa kaavio -ohjelmaa, kuten Kicad, mielestäni Fritzing on rajoitettu kaikkeen paitsi yksinkertaisimpiin kokeisiin.

Käytetyt materiaalit:

1 kpl Arduino MEGA 2560

2 kpl Valovastus (LDR), jossa sisäänrakennettu vetovastus (37 anturisarjasta)

1 kpl HC-SR04-ultraäänianturi

1 kpl 74HC14 hex -käänteinen Schmitt -liipaisin

2 kpl vastus 220 ohmia 0,25 W

1 kpl vastus 1k ohmia 0,25W

1 kpl LED -pienvirta 2mA

1 kpl 100nF keraaminen kondensaattori (virtalähteen irrotukseen, suoraan 74HC14: n virtalähteisiin)

Leipälevy tai piirilevyn prototyyppi

2 kpl 16mm sähköputki, pituus 65mm

1 kpl puuta, pituus 75 cm

Ilmastointiteippi

Johdot

Vaihe 5: I/O -luettelo

I/O -listaus
I/O -listaus

Vaihe 6: Aduino -koodi

Luonnos test_Midi6 käyttää NewPing-kirjastoa, joka sinun on sisällytettävä Arduino-ohjelmointiympäristöön, jotta voit käyttää HC-SC04-ultraäänianturia. Luonnos kommentoidaan tanskaksi, anteeksi.. Jotta luonnos pysyisi hyvin jäsenneltynä, luonnoksen eri loogisille osille tehdään erilliset toiminnot ja globaaleja muuttujia vältetään. Ohjelman kulku visualisoidaan MIDI -ohjaimen vuokaaviossa pdf.

// 15.5.2017 versio: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette -ohjelma, joka on yksinkertainen MIDI -ohjain som kan styre ja ulkoinen MIDI enhed, f.eks ja softsynt PC. // MIDI controlleren kan sende toneanslag (huomautus kommandossa) hhv. (huomautus pois kommandosta) for oktav C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne laukaisee LDB -anturin, da der skal laves en sikker // detektering af både når hånden lander på brættet (huomautus päällä), samt når hånden fjernes kyllä (huomautus pois). // MIDI kommandoerne "note on" og "note off" består hver af 3 bytes 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 ultrasonic sensor #define ECHO_PIN 2 // Arduino pin til echo pin på ultrasound sensor # define MAX_DISTANCE 100 // Pingin enimmäiskesto #define Median 5 // Antal målinger der beregnes gennemsnit af for få en sikker afstandsbestemmelse NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing -objektin luominen. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Øverste LDR2 føler byte MIDIByte2; // Variabel -ilmoitus MIDIByte2 -boolille 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 -ilmoitus klar_note_off, styrer afsendelse af note off kommando void setup () {pinMode (Senspin1, INPUT); // sæt sensor input pinMode (Senspin2, INPUT); // anturin tulo Serial1.begin (31250); // Serial1 bruges to MIDI communication: 31250 bit/sekundt Serial.begin (9600); // sarjamonitori, kunnes testi} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - undere 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 ultralyds -anturin kautta MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI -muistiinpanon numero, 0xFF er alueen ulkopuolella Send_Note_On (MIDIByte2); // kald Send_Note_On toiminto klar_note_on = 0; // der skal kun sendes en note on kommando klar_note_off = 1; // poista kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal lähettää muistiinpanon kommando gøres det her.. {Send_Note_Off (MIDIByte2); // lähetä muistiinpano 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; }} tavu Hent_MidiByte2 (tavu NoteByte) {// Denne -funktion palauttaja MIDI -muistiinpanon numero, valgt ud fra NoteByte -tavu MIDIB2; kytkin (NoteByte) // hänen määritelmät hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C; // tonen 'C'} tauko; tapaus 1: {MIDIB2 = 0x3E; // tonen 'D'} break; tapaus 2: {MIDIB2 = 0x40; // tonen 'E'} tauko; tapaus 3: {MIDIB2 = 0x41; // tonen 'F'} break; tapaus 4: {MIDIB2 = 0x43; // tonen 'G'} break; tapaus 5: {MIDIB2 = 0x45; // tonen 'A'} break; tapaus 6: {MIDIB2 = 0x47; // tonen 'B'} break; tapaus 7: {MIDIB2 = 0x48; // tonen 'C'} tauko; oletus: {MIDIB2 = 0xFF; // alueen ulkopuolella}} palauta MIDIB2; // returner MIDI note number} tavu Hent_tonehojde () {// Denne funktion henter resultatet af ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm tavu resultat; // inddeling af spille område const float Omregningsfaktor = 58,3; // 2*(1/343 m/s)/100 = 58, 3uS/cm, der medges med 2 da tiden er summen af tiden frem og tilbage. Tid_uS = sonar.ping_median (mediaani); // Lähetä ping, få tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = etäisyysalueen ulkopuolella) resultat = Afstand / 8; // Beregn resultat return resultat; // Palautustulos} void Send_Note_On (byte tonenr) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // Huomautus kommandosta på MIDI -kanava 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // lähetä huomautus kommandosta Serial1.write (tonenr); // lähetysäänen numero Serial1.write (volumen); // lähetä tilavuus (nopeus)} void Send_Note_Off (tavu toner) {// Denne -funktion lähettäjän huomautus pois kommando på MIDI interfacet const byte kommando = 0x80; // Note off kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // lähetä muistiinpano kommando Serial1.write (tonenr); // lähetysäänen numero Serial1.write (volumen); // lähetä tilavuus (nopeus)}

Vaihe 7: MIDI -viestinnän perusteet

MIDI (Musical Instrument Digital Interface) on universaali sarjaliikenneprotokolla elektronisten soittimien ja muiden laitteiden liittämiseen. Käytetään sarjaliikennettä (31250 bit/s, siirtoväline on virtasilmukka, optoeristetty vastaanottimen päässä. Käytetään 5-nastaisia DIN-liittimiä. Yhdessä fyysisessä MIDI-yhteydessä on mahdollista 16 loogista tiedonsiirtokanavaa. MIDI: ssä on monia komentoja standardi, käytän tässä projektissa kahta komentoa, nämä komennot koostuvat 3 tavusta:

a) Huomautus komennosta:

1. tavun lähetys = 0x90, joka tarkoittaa huomautusta MIDI -kanavan 1 komennosta

2. tavun lähetys = 0xZZ ZZ on muistiinpanon numero, käytän aluetta 0x3C - 0x48

3. tavun lähetys = 0xFF FF = 255, mikä tarkoittaa enimmäistilavuutta, alue 0x00 - 0xFF

b) Huomautus Pois -komento: 1. tavun lähetys = 0x80 merkitsee muistiinpanokomentoa MIDI -kanavalla 1

2. tavun lähetys = 0xZZ ZZ on muistiinpanon numero, käytän aluetta 0x3C - 0x48

3. tavun lähetys = 0xFF FF = 255, mikä tarkoittaa enimmäistilavuutta, alue 0x00 - 0xFF

Suositeltava: