Satura rādītājs:

EAL - Arduino MIDI kontrolieris: 7 soļi
EAL - Arduino MIDI kontrolieris: 7 soļi

Video: EAL - Arduino MIDI kontrolieris: 7 soļi

Video: EAL - Arduino MIDI kontrolieris: 7 soļi
Video: How to make a LED digital counter using 7- Segment Display 2024, Novembris
Anonim
EAL - Arduino MIDI kontrolieris
EAL - Arduino MIDI kontrolieris

Ražotājs Søren Østergaard Petersen, OEAAM16EDA

Šī pamācība apraksta uz arduino balstītu MIDI kontrolieri. Šis ir skolas projekts. Izmantojot roku, varat atskaņot vienkāršas melodijas, izmantojot MIDI savienojumu un pievienotu MIDI instrumentu (vai kā šajā gadījumā piezīmjdatoru, kurā darbojas softsynth programmatūra). Jūs varat atskaņot piezīmes no C dur skalas, c-d-e-f-g-a-b-c. Lai varētu savienot MIDI kontrolieri ar piezīmjdatoru, jums būs nepieciešama MIDI un USB saskarne, piemēram, m-audio Uno.

1. darbība: demonstrācijas video

Image
Image

Palieliniet skaļumu un izbaudiet!

Kā tas strādā:

MIDI kontrolieris izmanto Arduino MEGA 2560 plati. Divi gaismas (LDR) sensori, kas iebūvēti 16 mm elektriskajā caurulē, veido dubultu sensoru sistēmu un tiek izmantoti, lai izveidotu stabilu sprūdu bez viltus dubultās iedarbināšanas. Zibspuldze rada gaismas staru, kad staru kūlis pārtrauc roku, spēlējot kontrolieri, apakšējais gaismas sensors uztver trūkstošo staru, un HC-SR04 ultraskaņas sensors mēra attālumu no sensora līdz rokai.

Izmērītais attālums tiek izmantots Arduino programmā, lai aprēķinātu un iestatītu atbilstošu piezīmes numura vērtību, kas jāiepako MIDI piezīmes ziņojumā un jānosūta MIDI saskarnē. MIDI izvades saskarne izmanto 74HC14 sešstūra pārveidotāju un ir diezgan standarta ķēde. MIDI komunikācijā tiek izmantots seriāls1, atkļūdošanai tiek izmantots standarta seriālais ports.

Kad roka tiek virzīta taisni uz augšu un prom no gaismas staru kūļa, augšējais gaismas sensors atkal uztver gaismas staru, un MIDI piezīmes izslēgšanas ziņojums tiek iesaiņots un pārraidīts uz MIDI izvadi.

Spēles laukums starp sensoriem ir aptuveni 63 cm, un MIDI kontroliera kopējais garums ir aptuveni 75 cm.

2. solis: informācija par gaismas sensoriem

Sīkāka informācija par gaismas sensoriem
Sīkāka informācija par gaismas sensoriem
Sīkāka informācija par gaismas sensoriem
Sīkāka informācija par gaismas sensoriem

Abi gaismas sensori ir uzstādīti viens virs otra, veidojot dubultu sensoru sistēmu. Tas novērš nepatiesu iedarbināšanu, ja programmatūrā tiek izmantots pareizi. Katrs gaismas sensors sastāv no foto rezistora moduļa, kas iebūvēts 16 mm standarta elektriskā caurulē. Katrā mēģenē ar zāģi tiek izveidots slots, un slotā var iespiest fotorezistora PCB. Sensori ir salīmēti kopā ar līmlenti, kā arī piestiprināti pie koka gabala viena gala. Gaisma nedrīkst piekļūt sensoriem no aizmugures. Gaismas sensoros ir iebūvēti 10k pievilkšanas rezistori.

3. darbība: informācija par ultraskaņas sensoru HC-SR04

Sīkāka informācija par ultraskaņas sensoru HC-SR04
Sīkāka informācija par ultraskaņas sensoru HC-SR04

Īpaši skaņas sensors HC-SR04 ir fiksēts MIDI kontroliera otrā galā. Arī šeit ir ievietots spilgts lukturītis, tas rada nepieciešamo gaismas staru.

4. solis: Aduino ķēde

Aduino trase
Aduino trase
Aduino trase
Aduino trase

MIDI izejas ķēde būtībā ir standarta 74HC14 sešstūra pārveidotājs un daži rezistori, kā arī 5 kontaktu DIN savienotājs. Shēma 74HC14 virza MIDI izvadi un vienlaikus nodrošina zināmu Arduino plates aizsardzības līdzekli pret "reālo pasauli", kas savienota ar MIDI izeju. Papildu praktiska funkcija ir MIDI aktivitātes gaismas diode, kas signalizē, kad dati tiek nosūtīti.

Esmu izmantojis pareizu PCB prototipu savai aparatūrai, jo man bija daudz problēmu ar sliktiem savienojumiem uz maizes dēļa. Shēma ir veidota Fritzing, augstas izšķirtspējas pdf kopiju var lejupielādēt, nospiežot zemāk esošo saiti. Es labprātāk izmantoju pareizu shēmu programmu, piemēram, Kicad, es domāju, ka Fritzing ir ierobežots visam, izņemot vienkāršākos eksperimentus.

Izmantotie materiāli:

1 gab Arduino MEGA 2560

2 gab. Foto rezistors (LDR) ar iebūvētu pacelšanas rezistoru (no 37 sensoru komplekta)

1 gab. Ultraskaņas sensors HC-SR04

1 gab 74HC14 sešstūra apgriezts Schmitt sprūda

2 gab rezistors 220 omi 0,25W

1 gab rezistors 1k omi 0,25W

1 gab LED zema strāva 2mA

1 gab. 100nF keramikas kondensators (barošanas avota atvienošanai tieši pie 74HC14 strāvas tapām)

Maizes dēlis vai PCB prototips

2 gab. 16 mm elektriskā caurule, garums 65 mm

1 gab koka, garums 75cm

Santehnikas līmlente

Vadi

5. darbība: I/O saraksts

I/O saraksts
I/O saraksts

6. solis: Aduino kods

Skice test_Midi6 izmanto NewPing bibliotēku, kas jāiekļauj Arduino programmēšanas vidē, lai izmantotu ultraskaņas sensoru HC-SC04. Skice tiek komentēta dāņu valodā, atvainojiet. Lai skice būtu labi strukturēta, atsevišķas funkcijas tiek veidotas dažādām skices loģikas daļām, un lielākoties izvairās no globālajiem mainīgajiem. Programmu plūsma ir vizualizēta MIDI kontroliera blokshēmā pdf.

// 15.05.2017 versija: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette program udgør en simpel MIDI controller som kan styre and ekstern MIDI enhed, f.eks en softsynt på en PC. // MIDI controlleren kan sende toneanslag (piezīme par kommando) hhv. (piezīme off kommando) for okt okt C-C, C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne trigges af en dobbelt LDR sensor, da der skal laves en sikker // detektering af både når hånden lander på brættet (piezīme), samt når hånden fjernes igen (piezīme izslēgta). // 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ødden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin to trigger pin ultraskaņas sensors #define ECHO_PIN 2 // Arduino pin to echo pin på ultrasonic sensor # definēt MAX_DISTANCE 100 // Maksimālais pacelšanās laiks 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); // NewPing objekta izveide. int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; // Øverste LDR2 føler baits MIDIByte2; // Variabel deklarācija MIDIByte2 bool 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 deklaration for klar_note_off, styrer afsendelse af note off kommando void setup () {pinMode (Senspin1, INPUT); // sæt sensoru ievades pinMode (Senspin2, INPUT); // sæt sensoru ievade Serial1.begin (31250); // Serial1 bruges til MIDI communication: 31250 bit/sekundt Serial.begin (9600); // sērijas monitors, līdz testam} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - apakšā 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 sensors MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI piezīmes numurs, 0xFF er ārpus diapazona Send_Note_On (MIDIByte2); // kald Send_Note_On 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 nosūta piezīmi off 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; }} baits Hent_MidiByte2 (baits NoteByte) {// Denne funktion returnerer MIDI piezīmes numurs, valgt ud fra NoteByte baits MIDIB2; switch (NoteByte) // viņas definīcijas hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C; // tonen 'C'} break; 1. gadījums: {MIDIB2 = 0x3E; // tonen 'D'} break; 2. gadījums: {MIDIB2 = 0x40; // tonen 'E'} break; 3. gadījums: {MIDIB2 = 0x41; // tonen 'F'} break; 4. gadījums: {MIDIB2 = 0x43; // tonen 'G'} break; 5. gadījums: {MIDIB2 = 0x45; // tonen 'A'} break; 6. gadījums: {MIDIB2 = 0x47; // tonen 'B'} break; 7. gadījums: {MIDIB2 = 0x48; // tonen 'C'} break; noklusējums: {MIDIB2 = 0xFF; // ārpus diapazona}} atgriezt MIDIB2; // atgriešanās MIDI piezīmes numurs} baits Hent_tonehojde () {// Denne funktion henter resultatet af ultralydsmålingen unsigned int Tid_uS; // målt tid i uS baits Afstand; // beregnet afstand i cm baitu rezultāts; // 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 = sonārs.ping_mediāns (mediāna); // Send ping, få tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = ārpus attāluma diapazons) resultat = Afstand / 8; // Beregn resultat return resultat; // Atgriešanās rezultāts} void Send_Note_On (baitu toneris) {// Denne funktion sender en note on kommando på MIDI interfacet const byte kommando = 0x90; // Piezīme par MIDI kanal 1 const baitu tilpumu = 0xFF; // tilpums / ātrums = 127 Sērijas1.rakstīt (kommando); // sūtīt piezīmi par kommando Serial1.write (tonenr); // sūtīt signālu nummer Serial1.write (volumen); // sūtīt apjomu (ātrums)} void Send_Note_Off (baitu toners) {// Denne funktion sender note off kommando på MIDI interfacet const byte kommando = 0x80; // Piezīme izslēgta, izmantojot MIDI kanal 1 const baitu tilpumu = 0xFF; // tilpums / ātrums = 127 Sērijas1.rakstīt (kommando); // send note off kommando Serial1.write (tonenr); // sūtīt signālu nummer Serial1.write (volumen); // nosūtīt tilpumu (ātrumu)}

7. solis: MIDI komunikācijas pamati

MIDI (mūzikas instrumentu digitālais interfeiss) ir universāls sērijas sakaru protokols elektronisko mūzikas instrumentu un citu ierīču saskarnei. Tiek izmantota seriālā komunikācija (31250 biti/s, pārraides vide ir strāvas cilpa, opto-izolēta uztvērēja galā. Tiek izmantoti 5 kontaktu DIN savienotāji. Vienā fiziskā MIDI savienojumā ir iespējami 16 loģiski sakaru kanāli. Daudzas komandas ir definētas MIDI standarta, es šajā projektā izmantoju divas komandas, šīs komandas sastāv no 3 baitiem:

a) Piezīme par komandu:

1. baitu sūtīt = 0x90, kas nozīmē piezīmi par komandu MIDI 1. kanālā

2. baitu sūtīt = 0xZZ ZZ ir piezīmes numurs, es izmantoju diapazonu no 0x3C līdz 0x48

3. baitu sūtīšana = 0xFF FF = 255, kas nozīmē maksimālo skaļumu, diapazons no 0x00 līdz 0xFF

b) Piezīme Izslēgšanas komanda: 1. baitu sūtīt = 0x80, kas nozīmē piezīmi izslēgt komandu MIDI 1. kanālā

2. baitu sūtīt = 0xZZ ZZ ir piezīmes numurs, es izmantoju diapazonu no 0x3C līdz 0x48

3. baitu sūtīšana = 0xFF FF = 255, kas nozīmē maksimālo skaļumu, diapazons no 0x00 līdz 0xFF

Ieteicams: