Πίνακας περιεχομένων:

EAL - Arduino MIDI Controller: 7 Βήματα
EAL - Arduino MIDI Controller: 7 Βήματα

Βίντεο: EAL - Arduino MIDI Controller: 7 Βήματα

Βίντεο: EAL - Arduino MIDI Controller: 7 Βήματα
Βίντεο: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, Ιούλιος
Anonim
EAL - Arduino MIDI Controller
EAL - Arduino MIDI Controller

Κατασκευάστηκε από τον 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: Βίντεο επίδειξης

Image
Image

Αυξήστε την ένταση και απολαύστε!

Πως δουλεύει:

Ο ελεγκτής MIDI χρησιμοποιεί μια πλακέτα Arduino MEGA 2560. Δύο αισθητήρες φωτός (LDR) ενσωματωμένοι σε ηλεκτρικό σωλήνα 16mm σχηματίζουν ένα σύστημα διπλού αισθητήρα και χρησιμοποιούνται για τη δημιουργία μιας σταθερής σκανδάλης χωρίς ψευδή διπλή ενεργοποίηση. Ένας φακός δημιουργεί μια δέσμη φωτός, όταν η δέσμη διακόπτεται από το χέρι που παίζει το χειριστήριο, ο κάτω αισθητήρας φωτός ανιχνεύει την ακτίνα που λείπει και ένας υπερηχητικός αισθητήρας HC-SR04 μετρά την απόσταση από τον αισθητήρα στο χέρι.

Η μετρούμενη απόσταση χρησιμοποιείται στο πρόγραμμα Arduino για τον υπολογισμό και τη ρύθμιση της κατάλληλης τιμής αριθμού σημείωσης που θα συσκευαστεί σε ένα μήνυμα MIDI Σημείωση και μετάδοση στη διεπαφή MIDI. Η διεπαφή εξόδου MIDI χρησιμοποιεί έναν εξαγωνικό μετατροπέα 74HC14 και είναι σχεδόν ένα τυπικό κύκλωμα. Η επικοινωνία MIDI χρησιμοποιεί serial1, η τυπική σειριακή θύρα χρησιμοποιείται για εντοπισμό σφαλμάτων.

Όταν το χέρι μετακινείται ευθεία πάνω και μακριά από τη δέσμη φωτός, ο άνω αισθητήρας φωτός ανιχνεύει ξανά τη δέσμη φωτός και ένα μήνυμα MIDI Note Off συσκευάζεται και διαβιβάζεται στην έξοδο MIDI.

Ο χώρος παιχνιδιού μεταξύ των αισθητήρων είναι περίπου 63 εκατοστά και το συνολικό μήκος του χειριστηρίου MIDI είναι περίπου 75 εκατοστά.

Βήμα 2: Λεπτομέρειες για τους αισθητήρες φωτός

Λεπτομέρειες για τους αισθητήρες φωτός
Λεπτομέρειες για τους αισθητήρες φωτός
Λεπτομέρειες για τους αισθητήρες φωτός
Λεπτομέρειες για τους αισθητήρες φωτός

Οι δύο αισθητήρες φωτός είναι τοποθετημένοι ο ένας πάνω στον άλλο για να σχηματίσουν ένα σύστημα διπλού αισθητήρα. Αποτρέπει την ψευδή ενεργοποίηση όταν χρησιμοποιείται σωστά στο λογισμικό. Κάθε αισθητήρας φωτός αποτελείται από μια μονάδα αντίστασης φωτογραφίας ενσωματωμένη σε έναν τυπικό ηλεκτρικό σωλήνα 16 mm. Σε κάθε σωλήνα γίνεται μια σχισμή με πριόνι και το PCB της αντίστασης φωτογραφιών μπορεί να πιεστεί στην υποδοχή. Οι αισθητήρες είναι κολλημένοι μαζί με κολλητική ταινία και επίσης στερεώνονται στο ένα άκρο ενός ξύλου. Κανένα φως δεν πρέπει να μπορεί να φτάσει στους αισθητήρες από πίσω. Οι αισθητήρες φωτός έχουν ενσωματωμένες αντιστάσεις έλξης 10k.

Βήμα 3: Λεπτομέρειες για τον υπερηχητικό αισθητήρα HC-SR04

Λεπτομέρειες του υπερηχητικού αισθητήρα HC-SR04
Λεπτομέρειες του υπερηχητικού αισθητήρα HC-SR04

Ο υπερηχητικός αισθητήρας HC-SR04 είναι στερεωμένος στο άλλο άκρο του ελεγκτή MIDI. Ένας φωτεινός φακός τοποθετείται επίσης εδώ, δημιουργεί την απαραίτητη δέσμη φωτός.

Βήμα 4: Το κύκλωμα Aduino

Το κύκλωμα Aduino
Το κύκλωμα Aduino
Το κύκλωμα Aduino
Το κύκλωμα Aduino

Το κύκλωμα εξόδου MIDI είναι βασικά ένας τυπικός εξαγωνικός μετατροπέας 74HC14 και μερικές αντιστάσεις συν μια θηλυκή υποδοχή DIN 5 ακίδων. Το κύκλωμα 74HC14 οδηγεί την έξοδο MIDI και ταυτόχρονα παρέχει κάποια μέσα προστασίας για την πλακέτα Arduino έναντι του "πραγματικού κόσμου" που συνδέεται με το MIDI out. Ένα επιπλέον πρακτικό χαρακτηριστικό είναι το LED δραστηριότητας MIDI που σηματοδοτεί όταν αποστέλλονται δεδομένα.

Έχω χρησιμοποιήσει ένα κατάλληλο πρωτότυπο PCB για το υλικό μου επειδή είχα πολλά προβλήματα με κακές συνδέσεις στο ψωμί μου. Το σχήμα είναι φτιαγμένο στο Fritzing, μπορείτε να κατεβάσετε ένα αντίγραφο pdf υψηλής ανάλυσης πατώντας τον παρακάτω σύνδεσμο. Προτιμώ να χρησιμοποιώ ένα κατάλληλο πρόγραμμα σχηματικών σχεδίων όπως το Kicad, νομίζω ότι το Fritzing περιορίζεται σε οτιδήποτε άλλο εκτός από τα πιο απλά πειράματα.

Υλικά που χρησιμοποιούνται:

1 τεμ Arduino MEGA 2560

2 τεμ αντίσταση φωτογραφίας (LDR) με ενσωματωμένη αντίσταση έλξης (από κιτ αισθητήρων 37)

Αισθητήρας υπερήχων 1 τεμ. HC-SR04

1 τεμ. 74HC14 εξάγωνη αναστρέφοντας τη σκανδάλη Schmitt

Αντίσταση 2 τεμ 220 Ohm 0,25W

Αντίσταση 1 τεμ 1k Ohm 0,25W

1 τεμ LED χαμηλό ρεύμα 2mA

1 τεμ. Κεραμικός πυκνωτής 100nF (για αποσύνδεση τροφοδοσίας, απευθείας στις ακίδες τροφοδοσίας του 74HC14)

Breadboard ή πρωτότυπο PCB

2 τεμ ηλεκτρικός σωλήνας 16mm, μήκος 65mm

1 τεμ. Ξύλου, μήκος 75εκ

Κολλητική ταινία

Καλώδια

Βήμα 5: Λίστα I/O

Λίστα I/O
Λίστα I/O

Βήμα 6: Ο κώδικας Aduino

Το σκίτσο test_Midi6 χρησιμοποιεί τη βιβλιοθήκη NewPing την οποία πρέπει να συμπεριλάβετε στο περιβάλλον προγραμματισμού Arduino, για να χρησιμοποιήσετε τον αισθητήρα υπερήχων HC-SC04. Το σκίτσο σχολιάζεται στα δανικά, συγγνώμη. Η ροή προγράμματος εμφανίζεται στο pdf διάγραμμα ροής του ελεγκτή MIDI.

// 15-05-2017 έκδοση: test_Midi6

// Søren Østergaard Petesen // Arduino MEGA 2560 // Πρόγραμμα Dette μπορεί να χρησιμοποιηθεί σε απλό χειριστήριο MIDI, καθώς και σε MIDI, καθώς και σε softsynt σε υπολογιστή. // MIDI controlleren kan sende toneanslag (σημείωση στο kommando) hhv. (σημειώστε το kommando) για 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 "off off" består hver af 3 bytes soomeses på serial1 porten // vha det i hardware opbyggede MIDI interface. // Tonehøjden bestemmes vha ultralydssensor HC-SR04 #include // bibliotek til den anvendte ultralydssensor HC-SR04 #define TRIGGER_PIN 3 // Arduino pin til trigger på υπερηχητικός αισθητήρας #define ECHO_PIN 2 // arduino pinonic define MAX_DISTANCE 100 // Maximum standstand for Ping #define Median 5 // Antal målinger der beregnes gennemsnit af for at få en sikker afstandsbestemmelse NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Δημιουργία του NewPing Object. 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); // sæt αισθητήρα pinMode (Senspin2, INPUT); // s inputt αισθητήρα είσοδος Serial1.begin (31250); // Serial1 bruges til MIDI kommunikation: 31250 bit/sekundt Serial.begin (9600); // σειριακή οθόνη, μέχρι δοκιμής} 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 højde μέσω ultralyds sensor MIDIByte2 = Hent_MidiByte2 (Note_Byte); // Hent MidByte2, αριθμός σημείωσης MIDI, εκτός 0xFF εκτός εύρους Send_Note_On (MIDIByte2); // kald Send_Note_On funktion klar_note_on = 0; // der skal kun sendes en note on kommando klar_note_off = 1; // næste kommando er note off} if (Sensor2 &&! Sensor1 && klar_note_off) // Hvis der skal sendes note off 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; }} 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»} διάλειμμα. περίπτωση 1: {MIDIB2 = 0x3E? // τόνο 'D'} διάλειμμα. περίπτωση 2: {MIDIB2 = 0x40; // τόνο «Ε»} διάλειμμα. περίπτωση 3: {MIDIB2 = 0x41; // τόνο «F»} διάλειμμα. περίπτωση 4: {MIDIB2 = 0x43; // τόνο «G»} διάλειμμα. περίπτωση 5: {MIDIB2 = 0x45; // τόνο «Α»} διάλειμμα. περίπτωση 6: {MIDIB2 = 0x47; // τόνο «Β»} διάλειμμα. περίπτωση 7: {MIDIB2 = 0x48; // τόνο «C»} διάλειμμα. προεπιλογή: {MIDIB2 = 0xFF; // εκτός εμβέλειας}} επιστροφή MIDIB2; // επιστροφής MIDI αριθμός σημείωσης} 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 (Median); // Αποστολή ping, fid 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 return resultat? // Returner resultat} void Send_Note_On (byte tonenr) {// Denne funktion sender en note on 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); // αποστολή αριθμητικού τόνου Serial1.write (volumen); // send volumen (velocity)} 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); // αποστολή αριθμητικού τόνου Serial1.write (volumen); // αποστολή όγκου (ταχύτητα)}

Βήμα 7: Τα βασικά της επικοινωνίας MIDI

Το MIDI (Musical Instrument Digital Interface) είναι ένα καθολικό πρωτόκολλο σειριακής επικοινωνίας για διασύνδεση ηλεκτρονικών μουσικών οργάνων και άλλων συσκευών. Χρησιμοποιείται σειριακή επικοινωνία (31250 bit/s, το μέσο μετάδοσης είναι ένας βρόχος ρεύματος, οπτο-απομονωμένος στο άκρο του δέκτη. Χρησιμοποιούνται συνδετήρες 5pin DIN. 16 λογικά κανάλια επικοινωνίας είναι δυνατά σε μία φυσική σύνδεση MIDI. Πολλές εντολές ορίζονται στο MIDI στάνταρ, χρησιμοποιώ δύο εντολές σε αυτό το έργο, αυτές οι εντολές αποτελούνται από 3 byte:

α) Σημείωση σχετικά με την εντολή:

1. byte send = 0x90 που σημαίνει σημείωση κατά την εντολή στο κανάλι MIDI 1

2. byte send = 0xZZ ZZ είναι αριθμός σημείωσης, χρησιμοποιώ το εύρος 0x3C έως 0x48

3. byte send = 0xFF FF = 255 που σημαίνει μέγιστη ένταση, εύρος 0x00 έως 0xFF

β) Εντολή Off Off: 1. byte send = 0x80 που σημαίνει εντολή σημείωσης στο κανάλι MIDI 1

2. byte send = 0xZZ ZZ είναι αριθμός σημείωσης, χρησιμοποιώ το εύρος 0x3C έως 0x48

3. byte send = 0xFF FF = 255 που σημαίνει μέγιστη ένταση, εύρος 0x00 έως 0xFF

Συνιστάται: