สารบัญ:
- ขั้นตอนที่ 1: วิดีโอสาธิต
- ขั้นตอนที่ 2: รายละเอียดของเซนเซอร์ตรวจจับแสง
- ขั้นตอนที่ 3: รายละเอียดของ HC-SR04 Ultrasonic Sensor
- ขั้นตอนที่ 4: วงจร Aduino
- ขั้นตอนที่ 5: รายชื่อ I/O
- ขั้นตอนที่ 6: รหัส Aduino
- ขั้นตอนที่ 7: พื้นฐานของการสื่อสาร MIDI
วีดีโอ: EAL - Arduino MIDI Controller: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
ผลิตโดย Søren Østergaard Petersen, OEAAM16EDA
คำแนะนำนี้อธิบายตัวควบคุม MIDI ที่ใช้ Arduino นี่เป็นโครงการของโรงเรียน ด้วยการใช้มือของคุณ คุณสามารถเล่นท่วงทำนองง่ายๆ ผ่านการเชื่อมต่อ MIDI และเครื่องดนตรี MIDI ที่เชื่อมต่ออยู่ (หรือในกรณีนี้คือโน้ตบุ๊กที่ใช้ซอฟต์แวร์ softsynth) คุณสามารถเล่นโน้ตจากมาตราส่วน C หลัก, c-d-e-f-g-a-b-c หากต้องการเชื่อมต่อตัวควบคุม MIDI กับโน้ตบุ๊ก คุณจะต้องใช้อินเทอร์เฟซ MIDI กับ USB เช่น m-audio Uno
ขั้นตอนที่ 1: วิดีโอสาธิต
เพิ่มระดับเสียงและสนุกได้เลย !
มันทำงานอย่างไร:
ตัวควบคุม MIDI ใช้บอร์ด Arduino MEGA 2560 เซ็นเซอร์วัดแสง (LDR) สองตัวที่ติดตั้งอยู่ในหลอดไฟฟ้าขนาด 16 มม. จะสร้างระบบเซ็นเซอร์คู่ และใช้สำหรับสร้างทริกเกอร์ที่เสถียรโดยไม่มีทริกเกอร์ซ้ำซ้อนใดๆ ไฟฉายกำลังสร้างลำแสง เมื่อลำแสงถูกขัดจังหวะโดยมือที่เล่นตัวควบคุม เซ็นเซอร์วัดแสงด้านล่างจะตรวจจับลำแสงที่หายไป และเซ็นเซอร์อัลตราโซนิก HC-SR04 จะวัดระยะห่างจากเซ็นเซอร์ถึงมือ
ระยะทางที่วัดได้ใช้ในโปรแกรม Arduino สำหรับการคำนวณและตั้งค่าหมายเลขบันทึกย่อที่เหมาะสมเพื่อบรรจุลงในข้อความ MIDI Note On และตัวส่งสัญญาณบนอินเทอร์เฟซ MIDI อินเทอร์เฟซเอาต์พุต MIDI ใช้อินเวอร์เตอร์ hex 74HC14 และเป็นวงจรมาตรฐานที่ค่อนข้างมาก การสื่อสาร MIDI ใช้ serial1 พอร์ตอนุกรมมาตรฐานใช้สำหรับการแก้ไขข้อบกพร่อง
เมื่อเข็มนาฬิกาเคลื่อนขึ้นตรงและออกจากลำแสง เซ็นเซอร์แสงด้านบนจะตรวจจับลำแสงอีกครั้ง และข้อความ MIDI Note Off จะถูกบรรจุและส่งสัญญาณไปที่เอาต์พุต MIDI
พื้นที่เล่นระหว่างเซ็นเซอร์อยู่ที่ประมาณ 63 ซม. และความยาวรวมของตัวควบคุม MIDI อยู่ที่ประมาณ 75 ซม.
ขั้นตอนที่ 2: รายละเอียดของเซนเซอร์ตรวจจับแสง
เซ็นเซอร์วัดแสงสองตัวติดตั้งอยู่ด้านบนของกันและกันเพื่อสร้างระบบเซ็นเซอร์คู่ ป้องกันการทริกเกอร์ที่ผิดพลาดเมื่อใช้อย่างถูกต้องในซอฟต์แวร์ เซ็นเซอร์วัดแสงแต่ละตัวประกอบด้วยโมดูลตัวต้านทานภาพถ่ายที่ติดตั้งในหลอดไฟฟ้ามาตรฐานขนาด 16 มม. สล็อตถูกสร้างขึ้นในแต่ละหลอดด้วยเลื่อยเลือยตัดโลหะและสามารถกด PCB ตัวต้านทานภาพถ่ายลงในสล็อตได้ เซ็นเซอร์ถูกติดเทปไว้ด้วยกันด้วยเทปพันสายไฟและยึดกับปลายไม้ด้านหนึ่งด้วย แสงจะต้องไม่สามารถเข้าถึงเซ็นเซอร์จากด้านหลังได้ เซ็นเซอร์วัดแสงมีตัวต้านทานแบบดึงขึ้น 10k ในตัว
ขั้นตอนที่ 3: รายละเอียดของ HC-SR04 Ultrasonic Sensor
เซ็นเซอร์อัลตราโซนิก HC-SR04 ได้รับการแก้ไขที่ปลายอีกด้านหนึ่งของตัวควบคุม MIDI ไฟฉายสว่างก็ถูกวางไว้ที่นี่เช่นกัน มันสร้างลำแสงที่จำเป็น
ขั้นตอนที่ 4: วงจร Aduino
วงจรเอาต์พุต MIDI นั้นเป็นอินเวอร์เตอร์ hex มาตรฐาน 74HC14 และตัวต้านทานสองสามตัวพร้อมขั้วต่อตัวเมีย DIN 5 พิน วงจร 74HC14 ขับเอาต์พุต MIDI และในขณะเดียวกันก็มีวิธีการป้องกันบอร์ด Arduino จาก "โลกแห่งความจริง" ที่เชื่อมต่อกับ MIDI out คุณลักษณะที่ใช้งานได้จริงเพิ่มเติมคือ LED กิจกรรม MIDI ที่ส่งสัญญาณเมื่อมีการส่งข้อมูล
ฉันใช้ PCB ต้นแบบที่เหมาะสมสำหรับฮาร์ดแวร์ของฉันเพราะฉันมีปัญหามากมายเกี่ยวกับการเชื่อมต่อที่ไม่ดีบนเขียงหั่นขนมของฉัน แผนผังนี้สร้างขึ้นใน Fritzing สามารถดาวน์โหลดสำเนา PDF ความละเอียดสูงได้โดยกดลิงก์ด้านล่าง ฉันชอบใช้โปรแกรมแผนผังที่เหมาะสม เช่น Kicad ฉันคิดว่า Fritzing ถูกจำกัดไว้สำหรับอะไรก็ได้ยกเว้นการทดลองที่ง่ายที่สุด
วัสดุที่ใช้:
1 ชิ้น Arduino MEGA 2560
ตัวต้านทานภาพถ่าย (LDR) 2 ชิ้นพร้อมตัวต้านทานดึงขึ้นในตัว (จากชุดเซ็นเซอร์ 37 ชุด)
1 ชิ้น HC-SR04 เซ็นเซอร์อัลตราโซนิก
1 ชิ้น 74HC14 hex inverting Schmitt trigger
ตัวต้านทาน 2 ชิ้น 220 โอห์ม 0.25W
ตัวต้านทาน 1 ชิ้น 1k โอห์ม 0.25W
1 ชิ้น LED กระแสไฟต่ำ 2mA
1 pcs 100nF ตัวเก็บประจุเซรามิก (สำหรับตัวแยกแหล่งจ่ายไฟโดยตรงที่หมุดจ่ายไฟของ 74HC14)
เขียงหั่นขนมหรือ PCB ต้นแบบ
หลอดไฟฟ้า 16 มม. 2 ชิ้น ยาว 65 มม.
ไม้ 1 ชิ้น ยาว 75 ซม.
เทปพันท่อ
สายไฟ
ขั้นตอนที่ 5: รายชื่อ I/O
ขั้นตอนที่ 6: รหัส Aduino
Sketch test_Midi6 ใช้ไลบรารี NewPing ซึ่งคุณต้องรวมไว้ในสภาพแวดล้อมการเขียนโปรแกรม Arduino ของคุณเพื่อใช้เซ็นเซอร์อัลตราโซนิก HC-SC04 ร่างนี้มีความคิดเห็นเป็นภาษาเดนมาร์ก ขออภัย.. เพื่อให้ร่างภาพร่างมีโครงสร้างที่ดี ฟังก์ชันแยกกันถูกสร้างขึ้นสำหรับส่วนตรรกะต่างๆ ของภาพร่าง และส่วนใหญ่จะหลีกเลี่ยงตัวแปรส่วนกลาง ผังโปรแกรมถูกแสดงเป็นภาพในผังงานตัวควบคุม MIDI pdf
// 15-05-2017 เวอร์ชัน: test_Midi6
// Søren Østergaard Petesen // Arduino MEGA 2560 // Dette โปรแกรม udgør en simpel MIDI controller และ en ekstern MIDI enhed, f.eks en softsynt på en PC. // MIDI controlleren kan sende toneanslag (หมายเหตุในคอมมานโด) hhv. (note off kommando) สำหรับ en oktav C-C, C dur skala // Der หก med en "คาราเต้ 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 (หมายเหตุ), samt når hånden fjernes igen (หมายเหตุ) // MIDI kommandoerne "note on" และ "note off" består hver af 3 bytes som sendes på serial1 porten // vha det i hardware opbyggede อินเทอร์เฟซ MIDI // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin til trigger pin สำหรับเซ็นเซอร์อัลตราโซนิก #define ECHO_PIN 2 // Arduino pin til echo pinå ultrasonic sensor # กำหนด MAX_DISTANCE 100 // ค่า afstand สูงสุดสำหรับ Ping #define ค่ามัธยฐาน 5 // Antal målinger der beregnes gennemsnit af สำหรับที่ få en sikker afstandsbestemmelse โซนาร์ NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // การสร้างวัตถุ NewPing int Senspin1 = 53; // Underste LDR1 føler int Senspin2 = 52; //Øverste LDR2 สำหรับไบต์ MIDIByte2; //การแยกตัวแปรสำหรับ MIDIByte2 bool klar_note_on = 1; //การแยกตัวแปรสำหรับ klar_note_on, styer afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0; // deklaration Varibel สำหรับ klar_note_off, styer afsendelse af note ปิดการตั้งค่า kommando void () {pinMode (Senspin1, INPUT); // ตั้งค่าเซ็นเซอร์อินพุต pinMode (Senspin2, INPUT); // เซ็นเซอร์อินพุต Serial1.begin(31250); // Serial1 bruges จนถึง MIDI kommunikation: 31250 bit/sekundt Serial.begin(9600); // มอนิเตอร์แบบอนุกรม til ทดสอบ } 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 til note on { ไบต์ Note_Byte = Hent_tonehojde (); //เฮ็นท์โทนผ่านเซ็นเซอร์ ultralyds MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, MIDI note number, værdien 0xFF er out of range Send_Note_On(MIDIByte2); // kald Send_Note_On funktion klar_note_on = 0; // der skal kun ส่ง en note บน kommando klar_note_off = 1; // næste kommando er note off } if (Sensor2 && !Sensor1 && klar_note_off) // Hvis der skal ส่งข้อความจาก kommando gøres det her.. { Send_Note_Off(MIDIByte2); // ส่งข้อความออก 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; } } ไบต์ Hent_MidiByte2 (ไบต์ NoteByte) {// หมายเลขบันทึก MIDI ของ Denne funktion returner, valgt ud fra NoteByte ไบต์ MIDIB2; สวิตช์ (NoteByte) // คำจำกัดความของเธอ hvilken værdi MIDIByte2 skal have ud fra værdien af Note_Byte { กรณี 0: { MIDIB2 = 0x3C; // โทน 'C' } แตก; กรณีที่ 1: { MIDIB2 = 0x3E; // โทน 'D' } แตก; กรณีที่ 2: { MIDIB2 = 0x40; // โทน 'E' } แตก; กรณีที่ 3: { MIDIB2 = 0x41; // โทน 'F' } แตก; กรณีที่ 4: { MIDIB2 = 0x43; // โทน 'G' } แตก; กรณีที่ 5: { MIDIB2 = 0x45; // โทน 'A' } แตก; กรณีที่ 6: { MIDIB2 = 0x47; // โทน 'B' } แตก; กรณีที่ 7: { MIDIB2 = 0x48; // โทน 'C' } แตก; ค่าเริ่มต้น: { MIDIB2 = 0xFF; // อยู่นอกช่วง } } ส่งคืน MIDIB2; // หมายเลขบันทึก MIDI ผู้ส่งคืน } ไบต์ Hent_tonehojde () {// Denne funktion henter resultatet af ultralydsmålingen unsigned int Tid_uS; // målt tid i uS byte Afstand; // beregnet ยอมรับ i cm byte resultat; // inddeling af การรั่วไหล område const float Omregningsfaktor = 58.3; // 2*(1/343 m/s)/100 = 58, 3uS/cm, มากกว่า ganges กับ 2 da tiden er summen af tiden frem og tilbage Tid_uS = sonar.ping_median (ค่ามัธยฐาน); // ส่ง ping, få tid retur i uS, gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor; // Omregn tid til afstand i cm (0 = ระยะนอกระยะ) resultat = Afstand / 8; //Beregn resultat ส่งคืน resultat; //Returner resultat } เป็นโมฆะ Send_Note_On (byte tonr) {// Denne funktion sender en note บน kommando på MIDI interfacet const byte kommando = 0x90; // หมายเหตุเกี่ยวกับ kommando på MIDI kanal 1 const byte volumen = 0xFF; // ปริมาตร / ความเร็ว = 127 Serial1.write (คอมมานโด); // ส่งข้อความไปที่ kommando Serial1.write(tonenr); //ส่งโทนเสียง Serial1.write(volumen); //send volumen (velocity) } เป็นโมฆะ Send_Note_Off (byte tonr) {// Denne funktion sender note off kommando på MIDI interfacet const byte kommando = 0x80; // จดบันทึก kommando på MIDI kanal 1 const byte volumen = 0xFF; // ปริมาตร / ความเร็ว = 127 Serial1.write (คอมมานโด); // ส่งข้อความไปที่ kommando Serial1.write(tonenr); //ส่งโทนเสียง Serial1.write(volumen); // ส่งปริมาตร (ความเร็ว) }
ขั้นตอนที่ 7: พื้นฐานของการสื่อสาร MIDI
MIDI (Musical Instrument Digital Interface) เป็นโปรโตคอลการสื่อสารแบบอนุกรมสากลสำหรับเชื่อมต่อเครื่องดนตรีอิเล็กทรอนิกส์และอุปกรณ์อื่นๆ ใช้การสื่อสารแบบอนุกรม (31250 บิต/วินาที สื่อส่งเป็นลูปปัจจุบัน แยกออปโตที่ปลายตัวรับสัญญาณ ใช้ตัวเชื่อมต่อ DIN 5 พิน ช่องการสื่อสารแบบลอจิคัล 16 ช่องเป็นไปได้ในการเชื่อมต่อ MIDI ทางกายภาพครั้งเดียว คำสั่งจำนวนมากถูกกำหนดไว้ใน MIDI มาตรฐาน ฉันใช้สองคำสั่งในโครงการนี้ คำสั่งเหล่านี้ประกอบด้วย 3 ไบต์:
ก) หมายเหตุเกี่ยวกับคำสั่ง:
1. ไบต์ส่ง = 0x90 หมายถึงบันทึกคำสั่งบนช่อง MIDI 1
2. byte send = 0xZZ ZZ เป็นเลขโน้ต ผมใช้ช่วง 0x3C ถึง 0x48
3. ไบต์ส่ง =0xFF FF = 255 หมายถึงปริมาณสูงสุด ช่วง 0x00 ถึง 0xFF
ข) คำสั่งปิดหมายเหตุ:1. ไบต์ส่ง = 0x80 หมายถึงคำสั่งปิดบันทึกบนช่อง MIDI 1
2. byte send = 0xZZ ZZ เป็นเลขโน้ต ผมใช้ช่วง 0x3C ถึง 0x48
3. ไบต์ส่ง =0xFF FF = 255 หมายถึงปริมาณสูงสุด ช่วง 0x00 ถึง 0xFF
แนะนำ:
DIY MIDI CONTROLLER USB Plug & Play (อัปเกรดวงแหวน NEOPIXEL): 12 ขั้นตอน
DIY MIDI CONTROLLER USB Plug & Play (UPGRADE NEOPIXEL RING): MAO ที่หลงใหลและดนตรีอิเล็กทรอนิกส์ แต่ยังเห็นว่าเป็นไปได้ที่จะสร้างอินเทอร์เฟซ Midi ในแบบของคุณ ฉันสร้างโพเทนชิโอมิเตอร์ 6 ตัวและปุ่ม 12 ปุ่ม (เปิด/ปิด) แต่เพื่อให้จุดนั้นยากขึ้น ที่มันเป็นแล้วฉันต้องการเพิ่ม visual indicat
MesoTune - Magnetic MIDI Controller: 16 ขั้นตอน (พร้อมรูปภาพ)
MesoTune - Magnetic MIDI Controller: หมายเหตุ: ฉันต้องการให้เครดิตกับโครงการนี้โดย Alex Bluhme โปรดตรวจสอบที่นี่ https://vimeo.com/171612791.คุณเป็นนักแต่งเพลง นักแต่งทำนอง นักซิมโฟนี หรือนักแต่งเพลงที่ชอบสร้างจังหวะของตัวเอง แต่เบื่อกับพวกปู
Microbit Midi CC Wireless Controller: 5 ขั้นตอน (พร้อมรูปภาพ)
Microbit Midi CC Wireless Controller: ในคู่มือนี้ เราจะสร้างคอนโทรลเลอร์ midi CC แบบไร้สาย ซึ่งช่วยให้คุณใช้ Microbit เป็นตัวควบคุม midi และเชื่อมต่อกับซอฟต์แวร์การผลิตเพลงโปรดของคุณ Midi CC คืออะไร CC มักจะย่อในขณะที่ คำที่ถูกต้องคือ "การควบคุม
MIDI 5V LED Strip Light Controller สำหรับ Spielatron หรือ MIDI Synth อื่นๆ: 7 ขั้นตอน (พร้อมรูปภาพ)
MIDI 5V LED Strip Light Controller สำหรับ Spielatron หรือ MIDI Synth อื่นๆ: คอนโทรลเลอร์นี้กะพริบไฟแถบ LED สามสีเป็นเวลา 50mS ต่อโน้ต สีน้ำเงินสำหรับ G5 ถึง D#6, สีแดงสำหรับ E6 ถึง B6 และสีเขียวสำหรับ C7 ถึง G7 คอนโทรลเลอร์เป็นอุปกรณ์ ALSA MIDI ดังนั้นซอฟต์แวร์ MIDI สามารถส่งออกไปยัง LED ได้ในเวลาเดียวกันกับอุปกรณ์สังเคราะห์ MIDI
NES Controller Shuffle (Nintendo Controller MP3, V3.0): 5 ขั้นตอน (พร้อมรูปภาพ)
NES Controller Shuffle (Nintendo Controller MP3, V3.0): ฉันลอก ryan97128 ออกจากการออกแบบของเขาสำหรับ Nintendo Controller MP3 เวอร์ชัน 2.0 และฉันได้ยินมาว่าเขาได้แนวคิดมาจาก Morte_Moya ที่ฉลาดทั้งหมด ดังนั้นฉันจึงรับเครดิตไม่ได้ อัจฉริยะทั้งหมดของพวกเขา ฉันแค่ต้องการเพิ่มความสะดวกสบายและเติมเงิน -