فهرست مطالب:

EAL - کنترل کننده MIDI آردوینو: 7 مرحله
EAL - کنترل کننده MIDI آردوینو: 7 مرحله

تصویری: EAL - کنترل کننده MIDI آردوینو: 7 مرحله

تصویری: EAL - کنترل کننده MIDI آردوینو: 7 مرحله
تصویری: 7 projects Build LED LCD Alarm Clock using DS1307 with Arduino | Lesson 105 2024, نوامبر
Anonim
EAL - کنترل کننده MIDI آردوینو
EAL - کنترل کننده MIDI آردوینو

ساخته شده توسط Søren Østergaard Petersen ، OEAAM16EDA

این دستورالعمل یک کنترل کننده MIDI مبتنی بر آردوینو را توصیف می کند. این یک پروژه مدرسه است. با استفاده از دست خود می توانید ملودی های ساده را از طریق اتصال MIDI و یک دستگاه MIDI متصل (یا در این مورد یک نوت بوک که از نرم افزار softsynth استفاده می کند) پخش کنید. می توانید نت ها را در مقیاس C عمده ، c-d-e-f-g-a-b-c پخش کنید. برای اینکه بتوانید کنترلر MIDI را به یک نوت بوک متصل کنید ، به رابط MIDI به USB مانند m-audio Uno نیاز دارید.

مرحله 1: فیلم نمایشی

Image
Image

صدا را بالا ببرید و لذت ببرید!

چگونه کار می کند:

کنترلر MIDI از برد Arduino MEGA 2560 استفاده می کند. دو سنسور نوری (LDR) که در لوله الکتریکی 16 میلی متری تعبیه شده اند ، یک سیستم سنسور دوگانه را تشکیل می دهند و برای ایجاد یک ماشه پایدار بدون هیچگونه ماشه دوگانه کاذب استفاده می شوند. یک چراغ قوه یک پرتو نور ایجاد می کند ، هنگامی که پرتو با دست کنترل کننده قطع می شود ، سنسور نور پایین پرتوی گم شده را حس می کند و یک سنسور اولتراسونیک HC-SR04 فاصله سنسور تا دست را اندازه گیری می کند.

فاصله اندازه گیری شده در برنامه آردوینو برای محاسبه و تنظیم مقدار شماره یادداشت مناسب برای بسته بندی در پیام MIDI Note On و ارسال بر روی رابط MIDI استفاده می شود. رابط خروجی MIDI از اینورتر hex 74HC14 استفاده می کند و تقریباً یک مدار استاندارد است. ارتباط MIDI از serial1 استفاده می کند ، پورت سریال استاندارد برای اشکال زدایی استفاده می شود.

هنگامی که دست مستقیما از بالا و پایین پرتو حرکت می کند ، سنسور نور فوقانی دوباره پرتو را حس می کند و یک پیام MIDI Note Off در خروجی MIDI بسته بندی و ارسال می شود.

منطقه بازی بین سنسورها در حدود 63 سانتی متر و طول کل کنترلر MIDI در حدود 75 سانتی متر است.

مرحله 2: جزئیات سنسورهای نور

جزئیات سنسورهای نور
جزئیات سنسورهای نور
جزئیات سنسورهای نور
جزئیات سنسورهای نور

این دو سنسور نور بر روی یکدیگر نصب شده اند تا یک سیستم حسگر دوگانه را تشکیل دهند. در صورت استفاده صحیح در نرم افزار ، از راه اندازی کاذب جلوگیری می کند. هر سنسور نور شامل یک ماژول مقاومت عکس است که در یک لوله الکتریکی استاندارد 16 میلی متری تعبیه شده است. یک اسلات در هر لوله با اره برقی ساخته می شود و PCB مقاومت عکس را می توان در شکاف فشار داد. سنسورها با نوار چسب به هم چسبانده می شوند و همچنین در یک سر یک تکه چوب ثابت می شوند. هیچ نوری نباید بتواند از پشت به سنسورها برسد. سنسورهای نور دارای مقاومت های کششی 10k ساخته شده است.

مرحله 3: جزئیات سنسور اولتراسونیک HC-SR04

جزئیات سنسور اولتراسونیک HC-SR04
جزئیات سنسور اولتراسونیک HC-SR04

سنسور فوق صوتی HC-SR04 در انتهای دیگر کنترلر MIDI ثابت شده است. یک چراغ قوه روشن نیز در اینجا قرار داده شده است ، پرتو نور لازم را ایجاد می کند.

مرحله 4: مدار Aduino

مدار آدوینو
مدار آدوینو
مدار آدوینو
مدار آدوینو

مدار خروجی MIDI اساساً یک اینورتر هگز هگز 74HC14 استاندارد و چند مقاومت بعلاوه یک کانکتور زن 5 پین DIN است. مدار 74HC14 خروجی MIDI را هدایت می کند و در عین حال برخی از وسایل حفاظتی را برای برد Arduino در برابر "دنیای واقعی" متصل به MIDI ایجاد می کند. یک ویژگی کاربردی دیگر LED فعالیت MIDI است که هنگام ارسال داده ها سیگنال می دهد.

من از یک نمونه اولیه PCB مناسب برای سخت افزار خود استفاده کرده ام زیرا مشکلات زیادی با اتصالات نامناسب در تخته نان خود داشتم. طرح کلی در Fritzing ساخته شده است ، یک کپی pdf با وضوح بالا را می توان با فشار دادن پیوند زیر بارگیری کرد. من ترجیح می دهم از یک برنامه شماتیک مناسب مانند Kicad استفاده کنم ، فکر می کنم Fritzing برای هر چیزی جز ساده ترین آزمایش ها محدود است.

مواد استفاده شده:

1 عدد آردوینو MEGA 2560

2 عدد مقاومت عکس (LDR) با مقاومت کششی داخلی (از کیت سنسور 37)

سنسور اولتراسونیک 1 عدد HC-SR04

1 عدد 74HC14 hex معکوس ماشه Schmitt

مقاومت 2 عدد 220 اهم 0.25 وات

مقاومت 1 عدد 1k اهم 0.25 وات

1 عدد LED جریان کم 2 میلی آمپر

1 عدد خازن سرامیکی 100nF (برای جداسازی منبع تغذیه ، مستقیماً در پین های برق 74HC14)

تخته نان یا نمونه اولیه PCB

2 عدد لوله برقی 16 میلی متری ، طول 65 میلی متر

1 عدد چوب ، طول 75 سانتی متر

نوار چسب

سیم ها

مرحله 5: فهرست ورودی/خروجی

لیست ورودی/خروجی
لیست ورودی/خروجی

مرحله 6: کد آدوینو

طرح test_Midi6 از کتابخانه NewPing استفاده می کند که برای استفاده از سنسور اولتراسونیک HC-SC04 باید در محیط برنامه نویسی Arduino خود قرار دهید. این طرح به زبان دانمارکی توضیح داده شده است ، متأسفم. جریان برنامه در pdf نمودار نمودار کنترلر MIDI تجسم می شود.

// 15-05-2017 نسخه: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // برنامه Dette به عنوان مثال می توانید کنترلر MIDI را با استفاده از MIDI ، f.eks و softsynt pc در رایانه خود اجرا کنید. // MIDI controlleren kan sende toneanslag (توجه به kommando) hhv. (توجه داشته باشید kommando) for en oktav C-C، C dur skala. // Der spilles med en "karate hånd" på et brædt // hvor sensorerne er monteret. MIDI kommandoerne با استفاده از حسگر LDR فعال می شود ، در صورت لزوم استفاده از آن می توانید // در صورت نیاز به تنظیمات مربوطه (توجه داشته باشید) ، در صورت نیاز ، توجه داشته باشید (توجه داشته باشید). // MIDI kommandoerne "note on" og "not off" består hver af 3 bytes soomeses på serial1 porten // وات و سخت افزار رابط کاربری MIDI سخت افزار. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin til trigger på sensor اولتراسونیک #سنسور ECHO_PIN 2 اولتراسونیک #پین آردوینو MAX_DISTANCE 100 // حداکثر ایستگاه برای پینگ #تعریف میانگین 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse NewPing sonar (TRIGGER_PIN، ECHO_PIN، MAX_DISTANCE)؛ // ایجاد شی NewPing. int Senspin1 = 53؛ // Underste LDR1 føler int Senspin2 = 52؛ // Øverste LDR2 føler byte MIDIByte2؛ // اعلام Variabel برای MIDIByte2 bool klar_note_on = 1؛ // اعلام Variabel برای klar_note_on، styrer afsendelse af note on kommando. Første kommando er en note on kommando bool klar_note_off = 0؛ // اعلامیه Variabel برای klar_note_off، styrer afsendelse af note off kommando void setup () {pinMode (Senspin1، INPUT)؛ // سنسور ورودی pinMode (Senspin2 ، INPUT) ؛ // sæt سنسور ورودی Serial1.begin (31250)؛ // Serial1 bruges تا MIDI kommunikation: 31250 bit/sekundt Serial.begin (9600)؛ // مانیتور سریال ، til test} 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 {{byte Note_Byte = Hent_tonehojde ()؛ // Hent tone از طریق سنسور ultralyds MIDIByte2 = Hent_MidiByte2 (Note_Byte) ؛ // Hent MidByte2 ، شماره یادداشت MIDI ، v 0rdien 0xFF خارج از محدوده Send_Note_On (MIDIByte2) ؛ // kald Send_Note_On funkion klar_note_on = 0؛ // der skal kun sendes en note on kommando klar_note_off = 1؛ // næste kommando er not off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sendes note 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، heånd er væk fra brædt {klar_note_on = 1؛ }} byte Hent_MidiByte2 (byte NoteByte) {// Denne funktion returnerer MIDI note note، valgt ud fra NoteByte byte MIDIB2؛ سوئیچ (NoteByte) // هرگونه تعریف MIDIByte2 skal have ud fra værdien af Note_Byte {case 0: {MIDIB2 = 0x3C؛ // تن "C"} break؛ مورد 1: {MIDIB2 = 0x3E؛ // تن "D"} break؛ مورد 2: {MIDIB2 = 0x40؛ // تن 'E'} break؛ مورد 3: {MIDIB2 = 0x41؛ // تن 'F'} break؛ مورد 4: {MIDIB2 = 0x43؛ // تن 'G'} break؛ مورد 5: {MIDIB2 = 0x45؛ // تن "A"} break؛ مورد 6: {MIDIB2 = 0x47؛ // تن "B"} break؛ مورد 7: {MIDIB2 = 0x48؛ // تن "C"} break؛ پیش فرض: {MIDIB2 = 0xFF؛ // خارج از محدوده}} بازگشت MIDIB2؛ // بازگشت شماره یادداشت MIDI} byte Hent_tonehojde () {// Denne funktion henter resultatet 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 (Median) ؛ // ارسال ping ، fid tid retur i uS ، gennemsint af Median målinger Afstand = Tid_uS / Omregningsfaktor؛ // Omregn tid taf afstand i cm (0 = خارج از محدوده فاصله) resultat = Afstand / 8؛ // Beregn resultat return resultat؛ // resultant resultat} void Send_Note_On (byte tonenr) {// Denne funktion فرستنده در یادداشت در kommando på MIDI interfacet const byte kommando = 0x90؛ // توجه به kommando på MIDI kanal 1 const byte volumen = 0xFF؛ // volumen / Velocity = 127 Serial1.write (kommando)؛ // ارسال یادداشت در kommando Serial1.write (tonenr)؛ // ارسال شماره nummer Serial1.write (volumen)؛ // ارسال حجم (سرعت)} void Send_Note_Off (byte tonenr) {// Denne funktion note send off kommando på MIDI interfacet const byte kommando = 0x80؛ // توجه داشته باشید kommando på MIDI kanal 1 const byte volumen = 0xFF؛ // volumen / Velocity = 127 Serial1.write (kommando)؛ // ارسال یادداشت kommando Serial1.write (tonenr)؛ // ارسال شماره nummer Serial1.write (volumen)؛ // ارسال حجم (سرعت)}

مرحله 7: اصول ارتباط MIDI

MIDI (رابط دیجیتالی ابزار موسیقی) یک پروتکل ارتباطی سریال جهانی برای ارتباط با آلات موسیقی الکترونیکی و سایر دستگاه ها است. از ارتباط سریال استفاده می شود (31250 بیت/ثانیه ، رسانه انتقال یک حلقه فعلی است ، در انتهای گیرنده بصورت اپتیکال جدا شده است. از اتصالات DIN 5 پین استفاده می شود. 16 کانال ارتباطی منطقی در یک اتصال MIDI فیزیکی امکان پذیر است. بسیاری از دستورات در MIDI تعریف شده است استاندارد ، من از دو دستور در این پروژه استفاده می کنم ، این دستورات شامل 3 بایت است:

الف) توجه به دستور:

1. بایت ارسال = 0x90 به معنی یادداشت در فرمان در کانال MIDI 1

2. ارسال بایت = 0xZZ ZZ شماره یادداشت است ، من از محدوده 0x3C تا 0x48 استفاده می کنم

3. ارسال بایت = 0xFF FF = 255 به معنی حداکثر حجم ، محدوده 0x00 تا 0xFF

ب) دستور Note Off: 1. بایت ارسال = 0x80 به معنی فرمان خاموش کردن در کانال MIDI 1

2. ارسال بایت = 0xZZ ZZ شماره یادداشت است ، من از محدوده 0x3C تا 0x48 استفاده می کنم

3. ارسال بایت = 0xFF FF = 255 به معنی حداکثر حجم ، محدوده 0x00 تا 0xFF

توصیه شده: