תוכן עניינים:

EAL - בקר MIDI Arduino: 7 שלבים
EAL - בקר MIDI Arduino: 7 שלבים

וִידֵאוֹ: EAL - בקר MIDI Arduino: 7 שלבים

וִידֵאוֹ: EAL - בקר MIDI Arduino: 7 שלבים
וִידֵאוֹ: Настройка 3D-принтера с помощью MKS sGen L v1.0 2024, יולי
Anonim
EAL - בקר MIDI Arduino
EAL - בקר MIDI Arduino

תוצרת 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 מודד את המרחק מחיישן ליד.

המרחק הנמדד משמש בתוכנית Arduino לחישוב והגדרת ערך מספר ההערה המתאים לארוז בהודעת MIDI Note On ומשדר בממשק MIDI. ממשק הפלט MIDI משתמש בממיר 74 hex14 hex והוא פחות או יותר מעגל סטנדרטי. תקשורת MIDI משתמשת ב- serial1, היציאה הטורית הסטנדרטית משמשת לאיתור באגים.

כאשר היד מועברת ישר למעלה ומתרחק מקרן האור, חיישן האור העליון מרגיש שוב את קרן האור והודעת MIDI Note Off ארוזה ומשודרת על פלט ה- MIDI.

אזור המשחק בין החיישנים הוא סביב 63 ס"מ, והאורך הכולל של בקר MIDI הוא סביב 75 ס"מ.

שלב 2: פרטים על חיישני האור

פרטים על חיישני האור
פרטים על חיישני האור
פרטים על חיישני האור
פרטים על חיישני האור

שני חיישני האור מותקנים זה על גבי זה ויוצרים מערכת חיישנים כפולה. הוא מונע הפעלת שווא כאשר משתמשים בו נכון בתוכנה. כל חיישן אור מורכב ממודול נגד צילום מובנה בתוך צינור חשמלי סטנדרטי בגודל 16 מ מ. מיוצר חריץ בכל צינור עם מסור פתיחה וניתן ללחוץ את הלוח הנגד של הלוח אל תוך החריץ. החיישנים מודבקים יחד עם סרט דביק ומתקנים גם לקצה אחד של פיסת עץ. אף אור לא חייב להיות מסוגל להגיע לחיישנים מאחור. חיישני האור בנויים נגדי משיכה של 10k.

שלב 3: פרטי החיישן האולטרא סאונד HC-SR04

פרטי החיישן האולטרא סאונד HC-SR04
פרטי החיישן האולטרא סאונד HC-SR04

החיישן האולטרה קולי HC-SR04 קבוע בקצה השני של בקר MIDI. פנס בהיר מונח גם כאן, הוא יוצר את קרן האור הדרושה.

שלב 4: מעגל Aduino

מעגל Aduino
מעגל Aduino
מעגל Aduino
מעגל Aduino

מעגל הפלט MIDI הוא בעצם מהפך משושה 74HC14 סטנדרטי וכמה נגדים בתוספת מחבר נקבה DIN 5 פינים. מעגל 74HC14 מניע את יציאת MIDI ובמקביל מספק כמה אמצעי הגנה ללוח הארדואינו מפני "העולם האמיתי" המחובר ל- MIDI החוצה. תכונה פרקטית נוספת היא נורית הפעילות של MIDI המסמנת כאשר נתונים נשלחים.

השתמשתי באב -טיפוס מתאים עבור החומרה שלי מכיוון שהיו לי הרבה בעיות עם חיבורים גרועים בלוח הלחם שלי. הסכימה נעשית ב- Fritzing, ניתן להוריד עותק pdf ברזולוציה גבוהה על ידי לחיצה על הקישור למטה. אני מעדיף להשתמש בתוכנית סכמטיות מתאימה כמו Kicad, אני חושב שפריצה מוגבלת לכל דבר מלבד הניסויים הפשוטים ביותר.

חומרים המשמשים:

1 יח 'Arduino MEGA 2560

נגד צילום 2 יחידות (LDR) עם נגד משיכה מובנה (מ- 37 ערכות חיישנים)

1 יחידות חיישן קולי HC-SR04

1 יחידות 74HC14 הקס הפוך של שמיט

נגד 2 יחידות 220 אוהם 0.25W

נגד 1 יחידות 1 k Ohm 0.25W

1 יחידות LED זרם נמוך 2mA

קבל קרמיקה 1 יח '100nF (לניתוק אספקת החשמל, ישירות בסיכות החשמל של 74HC14)

לוח לחם או אב טיפוס PCB

2 יח 'צינור חשמלי 16 מ"מ, אורך 65 מ"מ

1 יחידות עץ, אורך 75 ס מ

סרט דביק

חוטים

שלב 5: רישום קלט/פלט

רישום I/O
רישום I/O

שלב 6: קוד Aduino

הסקיצה test_Midi6 משתמשת בספריית NewPing שעליך לכלול בסביבת התכנות שלך בארדואינו, כדי להשתמש בחיישן האולטרסוני HC-SC04. הסקיצה מופיעה בדנית, סליחה.. כדי לשמור על הסקיצה מובנית היטב, פונקציות נפרדות מורכבות מחלקים הגיוניים שונים של המערכון ולרוב נמנעים ממשתנים גלובליים. זרימת התוכנית מובחנת בתרשים הזרימה של בקר MIDI pdf.

// גרסת 15-05-2017: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // תוכנת תוכנה זו מאפשרת בקר בקר MIDI פשוט שיכול להוביל יחידות MIDI יחידות, כמו למשל תוכנות PC. // בקרת MIDI יכולה לשלוח toneanslag (הערה על kommando) hhv. (הערה מחוץ לקומנדו) עבור en oktav 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 double LDR sensor, da der skal laves en safe // detektering of both when handen lander on brættet (note on), samt when handen fjernes igen (note off). // MIDI kommandoerne "note on" og "note off" מורכב מכל 3 בתים ששולחים על ממשק סידורי 1 // ומכילים ממשק MIDI של חומרה. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek for den שימושים ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin to trigger pin on sensor ultrasonic #define ECHO_PIN 2 // Arduino pin to echo pin on sensor ultrasonic # הגדר MAX_DISTANCE 100 // מרחק מקסימלי עבור פינג #חציון הגדרה #הגדרת מספר 5 // מספר מטלנגרים לפי יחס ממוצע על מנת להשיג ובטוח מרחוק את הסונר NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // יצירת אובייקט NewPing. int Senspin1 = 53; // Underste LDR1 מרגיש int Senspin2 = 52; // Øverste LDR2 מרגיש בייט MIDIByte2; // אישור משתנה עבור 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; // הסרת משתנים עבור klar_note_off, שליטה על העברת הודעה על הגדרת kommando void setup () {pinMode (Senspin1, INPUT); // sæt pin קלט חיישן sæt (Senspin2, INPUT); // קלט חיישן sæt Serial1.begin (31250); // Serial1 ברוגז עד תקשורת MIDI: 31250 bit/sekundt Serial.begin (9600); // צג טורי, לבדיקה} לולאת חלל () {bool Sensor1 = digitalRead (Senspin1); // Read LDR1 - Underte LDR bool Sensor2 = digitalRead (Senspin2); // læs LDR2 - העליונה LDR if (Sensor1 && klar_note_on) // אם LDR1 aktiveret og klar til note on {byte Note_Byte = Hent_tonehojde (); // Hent tone højde באמצעות חיישן ultralyds MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, מספר פתק MIDI, ערכים 0xFF מחוץ לטווח Send_Note_On (MIDIByte2); // kald Send_Note_On function klar_note_on = 0; // der skal kun sendes en note on kommando klar_note_off = 1; // הבא kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // אם יש לשלוח הודעה מהקומנדו עושה את זה.. {Send_Note_Off (MIDIByte2); // שלח הערה מ- kommando klar_note_off = 0; // der skal kun sendes an note off kommando} if (! Sensor1 &&! Sensor2) // her gøres klar for ny note on kommando, hånd er away fra brædt {klar_note_on = 1; }}} בתים Hent_MidiByte2 (byte NoteByte) {// Denne פונקציה מחזיר מספר הערה MIDI, שנבחר ud fra NoteByte בייט MIDIB2; switch (NoteByte) // הגדרותיה איזה ערך MIDIByte2 צריך להיות בעל ערך מן Note_Byte {מקרה 0: {MIDIB2 = 0x3C; // tonen 'C'} הפסקה; מקרה 1: {MIDIB2 = 0x3E; // tonen 'D'} הפסקה; מקרה 2: {MIDIB2 = 0x40; // tonen 'E'} הפסקה; מקרה 3: {MIDIB2 = 0x41; // tonen 'F'} הפסקה; מקרה 4: {MIDIB2 = 0x43; // tonen 'G'} הפסקה; מקרה 5: {MIDIB2 = 0x45; // tonen 'A'} הפסקה; מקרה 6: {MIDIB2 = 0x47; // tonen 'B'} הפסקה; מקרה 7: {MIDIB2 = 0x48; // tonen 'C'} הפסקה; ברירת מחדל: {MIDIB2 = 0xFF; // מחוץ לטווח}} החזר MIDIB2; // מספר חוזר MIDI note} בייט Hent_tonehojde () {// Denne פונקציה הונחה תוצאות על אולטרלידsmålingen unsigned int Tid_uS; // ארוחות tid i uS byte Afstand; // beregnet distance i cm byte result; // חלוקה לפי משחק אזור 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 (חציון); // Send ping, få tid retur i uS, מידע על Median målinger Afstand = Tid_uS / Omregningsfaktor; // אומרים זמן עד מרחק i ס"מ (0 = טווח מרחק מחוץ) תוצאה = Afstand / 8; // תוצאות החזרה Beregn; // Returner result} void Send_Note_On (byte tonenr) {// Denne פונקציה שולח והערה על kommando på ממשק MIDI const byte kommando = 0x90; // הערה לגבי kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // שלח הערה על kommando Serial1.write (tonenr); // שלח טון מספר Serial1.write (נפח); // send volumen (velocity)} void Send_Note_Off (byte tonenr) {// Denne פונקציית שולח הערה כבוי kommando på MIDI ממשק const byte kommando = 0x80; // הערה על kommando på MIDI kanal 1 const byte volumen = 0xFF; // volumen / Velocity = 127 Serial1.write (kommando); // שלח פתק מ- kommando Serial1.write (tonenr); // שלח מספר צליל Serial1.write (נפח); // שלח נפח (מהירות)}

שלב 7: היסודות של תקשורת MIDI

MIDI (Musical Instrument Digital Interface) הוא פרוטוקול תקשורת סדרתי אוניברסלי לממשק כלי נגינה אלקטרוניים והתקנים אחרים. נעשה שימוש בתקשורת סדרתית (31250 סיביות/שניות, אמצעי השידור הוא לולאה נוכחית, מבודד אופטי בקצה המקלט. משמשים מחברי 5 פינים. 16 ערוצי תקשורת לויים אפשריים בחיבור MIDI פיזי אחד. פקודות רבות מוגדרות ב- MIDI סטנדרטי, אני משתמש בשתי פקודות בפרויקט זה, פקודות אלה מורכבות מ -3 בתים:

א) הערה בפקודה:

1. בייט שלח = 0x90 כלומר הערה בפקודה בערוץ MIDI 1

2. בייט שלח = 0xZZ ZZ הוא מספר הערה, אני משתמש בטווח 0x3C עד 0x48

3. שלח בתים = 0xFF FF = 255 כלומר נפח מרבי, טווח 0x00 עד 0xFF

ב) הערה כבוי פקודה: 1. שלח בתים = 0x80 כלומר הערה כבוי בפקודה בערוץ MIDI 1

2. בייט שלח = 0xZZ ZZ הוא מספר הערה, אני משתמש בטווח 0x3C עד 0x48

3. שלח בתים = 0xFF FF = 255 כלומר נפח מרבי, טווח 0x00 עד 0xFF

מוּמלָץ: