Mục lục:
- Bước 1: Video trình diễn
- Bước 2: Chi tiết về cảm biến ánh sáng
- Bước 3: Chi tiết của cảm biến siêu âm HC-SR04
- Bước 4: Mạch Aduino
- Bước 5: Danh sách I / O
- Bước 6: Mã Aduino
- Bước 7: Cơ bản về giao tiếp MIDI
Video: EAL - Bộ điều khiển Arduino MIDI: 7 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
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
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
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
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 đầ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
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:
Ô tô được điều khiển từ xa - Được điều khiển bằng Bộ điều khiển Xbox 360 không dây: 5 bước
Ô tô được điều khiển từ xa - Được điều khiển bằng Bộ điều khiển Xbox 360 không dây: Đây là các hướng dẫn để tạo ô tô được điều khiển từ xa của riêng bạn, được điều khiển bằng bộ điều khiển Xbox 360 không dây
ESP8266 RGB LED STRIP Điều khiển WIFI - NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi - Điều khiển điện thoại thông minh RGB LED STRIP: 4 bước
ESP8266 RGB LED STRIP Điều khiển WIFI | NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi | Điều khiển bằng điện thoại thông minh RGB LED STRIP: Xin chào các bạn trong hướng dẫn này, chúng ta sẽ học cách sử dụng gật đầu hoặc esp8266 làm điều khiển từ xa IR để điều khiển dải LED RGB và Nodemcu sẽ được điều khiển bằng điện thoại thông minh qua wifi. Vì vậy, về cơ bản bạn có thể điều khiển DÂY CHUYỀN LED RGB bằng điện thoại thông minh của mình
Tự làm bộ điều khiển bay điều khiển đa hệ điều khiển Arduino: 7 bước (có hình ảnh)
Tự làm bộ điều khiển máy bay đa năng điều khiển Arduino: Dự án này là tạo ra một bảng logic máy bay không người lái đa năng linh hoạt nhưng tùy chỉnh dựa trên Arduino và Multiwii
Bộ vi điều khiển AVR. Điều chế độ rộng xung. С bộ điều khiển động cơ DC và cường độ ánh sáng LED.: 6 bước
Bộ vi điều khiển AVR. Điều chế độ rộng xung. Bộ điều khiển của Động cơ DC và Cường độ ánh sáng LED: Xin chào mọi người! Điều chế độ rộng xung (PWM) là một kỹ thuật rất phổ biến trong viễn thông và điều khiển điện năng. nó thường được sử dụng để điều khiển công suất cấp cho thiết bị điện, cho dù đó là động cơ, đèn LED, loa, v.v. Về cơ bản, nó là một modu
Điều khiển các thiết bị điện của bạn bằng Điều khiển từ xa Tv (Điều khiển từ xa) với Màn hình nhiệt độ và độ ẩm: 9 bước
Điều khiển thiết bị điện của bạn bằng Điều khiển từ xa Tv (Điều khiển từ xa) Có Hiển thị nhiệt độ và độ ẩm: xin chào, tôi là Abhay và đây là blog đầu tiên của tôi về Các thiết bị điện và hôm nay tôi sẽ hướng dẫn bạn cách điều khiển các thiết bị điện bằng điều khiển từ xa bằng cách xây dựng cái này dự án đơn giản. cảm ơn atl lab đã hỗ trợ và cung cấp tài liệu