Mục lục:

EAL - Bộ điều khiển Arduino MIDI: 7 bước
EAL - Bộ điều khiển Arduino MIDI: 7 bước

Video: EAL - Bộ điều khiển Arduino MIDI: 7 bước

Video: EAL - Bộ điều khiển Arduino MIDI: 7 bước
Video: How to Build Arduino MIDI Controllers - The Complete Guide 2024, Tháng bảy
Anonim
EAL - Bộ điều khiển Arduino MIDI
EAL - Bộ điều khiển Arduino MIDI

Thực hiện bởi Søren Østergaard Petersen, OEAAM16EDA

Hướng dẫn này mô tả một bộ điều khiển MIDI dựa trên arduino. Đây là một dự án trường học. Bằng cách sử dụng tay, bạn có thể chơi các giai điệu đơn giản thông qua kết nối MIDI và một nhạc cụ MIDI được kết nối (hoặc trong trường hợp này là một máy tính xách tay chạy phần mềm softsynth). Bạn có thể chơi các nốt từ âm giai trưởng C, c-d-e-f-g-a-b-c. Để có thể kết nối bộ điều khiển MIDI với máy tính xách tay, bạn sẽ cần giao diện MIDI với USB như m-audio Uno.

Bước 1: Video trình diễn

Image
Image

Tăng âm lượng và tận hưởng!

Làm thế nào nó hoạt động:

Bộ điều khiển MIDI sử dụng bảng Arduino MEGA 2560. Hai cảm biến ánh sáng (LDR) được tích hợp trong ống điện 16mm tạo thành một hệ thống cảm biến kép và được sử dụng để tạo ra bộ kích hoạt ổn định mà không có bất kỳ kích hoạt kép giả nào. Đèn pin đang tạo ra một chùm ánh sáng, khi tay chơi bộ điều khiển ngắt chùm tia, cảm biến ánh sáng bên dưới sẽ cảm nhận được chùm tia bị thiếu và cảm biến siêu âm HC-SR04 đo khoảng cách từ cảm biến đến tay.

Khoảng cách đo được được sử dụng trong chương trình Arduino để tính toán và thiết lập giá trị số nốt thích hợp được đóng gói vào một thông báo MIDI Note On và bộ truyền trên giao diện MIDI. Giao diện đầu ra MIDI sử dụng biến tần 74HC14 hex và là một mạch tiêu chuẩn. Giao tiếp MIDI sử dụng serial1, cổng nối tiếp tiêu chuẩn được sử dụng để gỡ lỗi.

Khi bàn tay được di chuyển thẳng lên và ra khỏi chùm sáng, cảm biến ánh sáng phía trên sẽ cảm nhận lại chùm sáng và thông báo MIDI Note Off được đóng gói và truyền trên đầu ra MIDI.

Khu vực phát giữa các cảm biến là khoảng 63cm và tổng chiều dài của bộ điều khiển MIDI là khoảng 75cm.

Bước 2: Chi tiết về cảm biến ánh sáng

Chi tiết về cảm biến ánh sáng
Chi tiết về cảm biến ánh sáng
Chi tiết về cảm biến ánh sáng
Chi tiết về cảm biến ánh sáng

Hai cảm biến ánh sáng được gắn chồng lên nhau để tạo thành một hệ thống cảm biến kép. Nó ngăn chặn kích hoạt sai khi được sử dụng đúng trong phần mềm. Mỗi cảm biến ánh sáng bao gồm một mô-đun quang điện trở được tích hợp trong một ống điện tiêu chuẩn 16 mm. Trong mỗi ống có một khe cắm với cưa sắt và điện trở quang PCB có thể được ấn vào khe. Các cảm biến được dán với nhau bằng băng keo và cũng được cố định vào một đầu của miếng gỗ. Không có ánh sáng nào có thể tiếp cận các cảm biến từ phía sau. Cảm biến ánh sáng được tích hợp điện trở kéo lên 10k.

Bước 3: Chi tiết của cảm biến siêu âm HC-SR04

Chi tiết của cảm biến siêu âm HC-SR04
Chi tiết của cảm biến siêu âm HC-SR04

Cảm biến siêu âm HC-SR04 được cố định ở đầu kia của bộ điều khiển MIDI. Một đèn pin sáng cũng được đặt ở đây, nó tạo ra chùm ánh sáng cần thiết.

Bước 4: Mạch Aduino

Mạch Aduino
Mạch Aduino
Mạch Aduino
Mạch Aduino

Mạch đầu ra MIDI về cơ bản là một biến tần hex 74HC14 tiêu chuẩn và một vài điện trở cộng với đầu nối 5 chân DIN cái. Mạch 74HC14 điều khiển đầu ra MIDI và đồng thời cung cấp một số phương tiện bảo vệ cho bảng Arduino chống lại "thế giới thực" được kết nối với MIDI ra. Một tính năng thực tế bổ sung là đèn LED hoạt động MIDI báo hiệu khi dữ liệu được gửi.

Tôi đã sử dụng một PCB nguyên mẫu thích hợp cho phần cứng của mình vì tôi đã gặp rất nhiều vấn đề với các kết nối kém trên bảng mạch của mình. Sơ đồ được thực hiện bằng Fritzing, bạn có thể tải xuống bản sao pdf có độ phân giải cao bằng cách nhấn vào liên kết bên dưới. Tôi thích sử dụng một chương trình sơ đồ thích hợp như Kicad, tôi nghĩ Fritzing là giới hạn cho bất cứ điều gì ngoại trừ các thí nghiệm đơn giản nhất.

Vật liệu sử dụng:

1 cái Arduino MEGA 2560

2 chiếc Điện trở quang (LDR) với điện trở kéo lên tích hợp (từ bộ cảm biến 37)

1 bộ cảm biến siêu âm HC-SR04

1 bộ kích hoạt Schmitt đảo ngược lục giác 74HC14

2 chiếc điện trở 220 Ohm 0,25W

1 chiếc điện trở 1k Ohm 0,25W

1 đèn LED dòng điện thấp 2mA

1 tụ điện gốm 100nF (để tách nguồn điện, trực tiếp tại chân nguồn của 74HC14)

Breadboard hoặc PCB nguyên mẫu

2 ống điện 16mm, chiều dài 65mm

1 chiếc gỗ, dài 75cm

Băng keo

Dây điện

Bước 5: Danh sách I / O

Danh sách I / O
Danh sách I / O

Bước 6: Mã Aduino

Thử nghiệm phác thảo_Midi6 sử dụng thư viện NewPing mà bạn phải đưa vào môi trường lập trình Arduino của mình, để sử dụng cảm biến siêu âm HC-SC04. Bản phác thảo được nhận xét bằng tiếng Đan Mạch, xin lỗi.. Để giữ cho bản phác thảo có cấu trúc tốt, các hàm riêng biệt được tạo thành cho các phần logic khác nhau của bản phác thảo và hầu như tránh được các biến toàn cục. Quy trình chương trình được hiển thị trong pdf lưu đồ bộ điều khiển MIDI.

// Phiên bản 15-05-2017: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Phát hiện chương trình udgør en simpel Bộ điều khiển MIDI som kan styre en ekstern MIDI enhed, f.eks en softsynt på en PC. // MIDI controlleren kan sende toneanslag (ghi chú trên kommando) hhv. (ghi chú kommando) cho en oktav C-C, C dur skala. // Der tràn 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 (ghi chú trên), samt når hånden fjernes igen (ghi chú tắt). // MIDI kommandoerne "ghi chú trên" og "ghi chú tắt" består hver af 3 byte som sendes på serial1 porten // vha det i giao diện MIDI opbyggede phần cứng. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek Til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Cảm biến siêu âm chân Arduino đến chân kích hoạt på cảm biến siêu âm #define ECHO_PIN 2 // Cảm biến siêu âm Arduino pin tới chân echo på xác định MAX_DISTANCE 100 // Tiêu chuẩn tối đa cho Ping #define Trung vị 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Tạo đối tượng NewPing. int Senspin1 = 53; // Dấu gạch dưới LDR1 føler int Senspin2 = 52; // Øverste LDR2 byte føler MIDIByte2; // Khai báo biến thể cho MIDIByte2 bool klar_note_on = 1; // Khai báo biến thể cho klar_note_on, styrer afsendelse af ghi chú trên kommando. Første kommando er en note trên kommando bool klar_note_off = 0; // Khai báo biến thể cho klar_note_off, styrer afsendelse af ghi chú tắt kommando void setup () {pinMode (Senspin1, INPUT); // sæt ngõ vào cảm biến pinMode (Senspin2, INPUT); // đầu vào cảm biến sæt Serial1.begin (31250); // Serial1 bầm dập cho đến khi MIDI kommunikation: 31250 bit / sekundt Serial.begin (9600); // màn hình nối tiếp, kiểm tra đến khi} void loop () {bool Sensor1 = digitalRead (Senspin1); // Læs LDR1 - underte LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - øverste LDR if (Sensor1 && klar_note_on) // hvis LDR1 aktiveret og klar tới ghi chú trên {byte Note_Byte = Hent_tonehojde (); // Hent âm højde qua cảm biến ultralyds MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, số nốt MIDI, værdien 0xFF ở ngoài phạm vi Send_Note_On (MIDIByte2); // kald Gửi_Note_On funktion klar_note_on = 0; // der skal kun gửi ghi chú trên kommando klar_note_off = 1; // næste kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal gửi ghi chú kommando gøres det her.. {Send_Note_Off (MIDIByte2); // gửi ghi chú đi 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; }} byte Hent_MidiByte2 (byte NoteByte) {// Từ chối số ghi chú MIDI của người trả về funktion, valgt ud fra NoteByte byte MIDIB2; switch (NoteByte) // her defineres hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C; // tonen 'C'} break; trường hợp 1: {MIDIB2 = 0x3E; // tonen 'D'} break; trường hợp 2: {MIDIB2 = 0x40; // tonen 'E'} break; trường hợp 3: {MIDIB2 = 0x41; // tonen 'F'} break; trường hợp 4: {MIDIB2 = 0x43; // tonen 'G'} break; trường hợp 5: {MIDIB2 = 0x45; // tonen 'A'} break; trường hợp 6: {MIDIB2 = 0x47; // tonen 'B'} break; trường hợp 7: {MIDIB2 = 0x48; // tonen 'C'} break; mặc định: {MIDIB2 = 0xFF; // ngoài dải ô}} return MIDIB2; // số ghi chú MIDI trả về} byte Hent_tonehojde () {// Denne funktion henter resultatet af ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet afstand i cm byte resultat; // 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 (Trung vị); // Gửi ping, få tid return i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid đến afstand i cm (0 = khoảng cách bên ngoài) resultat = Afstand / 8; // Beregn resultat return resultat; // Kết quả trả về} void Send_Note_On (byte tonenr) {// Từ chối người gửi funktion trong ghi chú trên kommando på MIDI interfacet const byte kommando = 0x90; // Lưu ý về kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // gửi ghi chú trên kommando Serial1.write (tonenr); // gửi âm số Serial1.write (volumen); // gửi volumen (vận tốc)} void Send_Note_Off (byte tonenr) {// Từ chối ghi chú người gửi funktion tắt kommando på MIDI interfacet const byte kommando = 0x80; // Lưu ý tắt kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // gửi ghi chú tắt kommando Serial1.write (tonenr); // gửi âm số Serial1.write (volumen); // gửi volumen (tốc độ)}

Bước 7: Cơ bản về giao tiếp MIDI

MIDI (Giao diện kỹ thuật số cho nhạc cụ) là một giao thức truyền thông nối tiếp phổ quát để giao tiếp các nhạc cụ điện tử và các thiết bị khác. Giao tiếp nối tiếp được sử dụng (31250 bit / s, phương tiện truyền dẫn là vòng lặp hiện tại, được cách ly quang ở đầu thu. Sử dụng đầu nối DIN 5 chân. Có thể sử dụng 16 kênh giao tiếp logic trong một kết nối MIDI vật lý. Nhiều lệnh được xác định trong MIDI tiêu chuẩn, tôi sử dụng hai lệnh trong dự án này, các lệnh này bao gồm 3 byte:

a) Lưu ý Trên lệnh:

1. byte gửi = 0x90 nghĩa là ghi chú trên lệnh trên kênh MIDI 1

2. byte gửi = 0xZZ ZZ là số ghi chú, tôi sử dụng phạm vi 0x3C đến 0x48

3. byte gửi = 0xFF FF = 255 nghĩa là khối lượng tối đa, phạm vi 0x00 đến 0xFF

b) Lưu ý Lệnh tắt: 1. byte send = 0x80 nghĩa là lệnh tắt ghi chú trên kênh MIDI 1

2. byte gửi = 0xZZ ZZ là số ghi chú, tôi sử dụng phạm vi 0x3C đến 0x48

3. byte gửi = 0xFF FF = 255 nghĩa là khối lượng tối đa, phạm vi 0x00 đến 0xFF

Đề xuất: