Ελεγκτής USB MIDI στο Arduino Από το sandbox. Πύλη πληροφοριών ασφαλείας

Για άλλη μια φορά, παίζοντας κιθάρα και ελέγχοντας τον ήχο μέσω του Peavey ReValver και άλλων Amplitubes, σκέφτηκα να αγοράσω ένα χειριστήριο MIDI. Οι επώνυμες συσκευές, όπως το Guitar Rig Kontrol 3, κοστίζουν περίπου 13.000 ρούβλια και είναι μόνο στο δάπεδο. Δηλαδή, η γρήγορη αλλαγή των θέσεων πολλών ρυθμιστικών αρχών είναι πολύ προβληματική.

Διάφοροι ελεγκτές κατεύθυνσης DJ φαίνονταν πιο ενδιαφέροντες λόγω της αφθονίας των faders και των κωδικοποιητών. Αποφασίστηκε να συνδυάσω τις επιχειρήσεις με την ευχαρίστηση και να φτιάξω μόνος μου έναν ελεγκτή MIDI.

Αρχικές απαιτήσεις: 2-7 fader, ίδιος αριθμός περιστροφικών ποτενσιόμετρων/κωδικοποιητών, περίπου 10 κουμπιά, σύνδεση USB.

Στη συνέχεια άρχισα να επιλέγω εξαρτήματα. Επέλεξα το Arduino λόγω της διαθεσιμότητάς του καταρχήν, μπορείτε να χρησιμοποιήσετε το ίδιο ATmega32u4, STM ή άλλο ελεγκτή. Βρήκα τα faders και τα κουμπιά σε ένα τοπικό κατάστημα ραδιοφώνου. Ο κωδικοποιητής και τα ποτενσιόμετρα είχαν ήδη αγοραστεί κάποια στιγμή. Βρήκα τους διακόπτες εναλλαγής στο γκαράζ. Αποφάσισα να φτιάξω τη θήκη από το επάνω εξώφυλλο ενός DVD player.

Αξεσουάρ:

  • Arduino UNO R3 1 τεμ.
  • Faders sp3-25a 5 τεμ.
  • Στόμα. ποτενσιόμετρα 3 τεμ.
  • Κωδικοποιητής 1 τεμ.
  • Κουμπιά pbs-26b 16 τεμ.
  • Κάλυμμα DVD 1 τεμ.
  • Διακόπτες εναλλαγής 2 τεμ.

Πρώτα, λύγισα το σώμα και πριόνισα τρύπες σε αυτό με ένα τρυπάνι για τα fader:

Στη συνέχεια άνοιξα τις τρύπες για τους διακόπτες εναλλαγής και το στόμιο. ποτενσιόμετρα, σημείωσαν τη θέση των κουμπιών. Δεδομένου ότι δεν είχα τρυπάνι 19 χιλιοστών (ή ακόμη και αντίστοιχο τσοκ), άνοιξα τις τρύπες για τα κουμπιά στα 13 χιλιοστά και μετά τα μεγέθυναν με ένα σφουγγάρι.

Η βάση είναι έτοιμη, τώρα μπορείτε να σκεφτείτε πώς να συνδέσετε όλα αυτά τα πράγματα στο Arduino. Καθώς διάβαζα Αυτό το θέμαΒρήκα ένα υπέροχο έργο HIDUINO. Αυτό είναι το υλικολογισμικό για το ATmega16u2 στο Arduino, χάρη στο οποίο η συσκευή αναγνωρίζεται ως συσκευή USB-HID MIDI. Το μόνο που μπορούμε να κάνουμε είναι να στείλουμε δεδομένα MIDI μέσω UART στα 31250 baud. Για να μην γεμίσω τον πηγαίο κώδικα με ορισμούς με κωδικούς συμβάντων MIDI, χρησιμοποίησα αυτήν τη βιβλιοθήκη.

Επειδή χρησιμοποίησα το Arduino, αποφάσισα να φτιάξω μια ασπίδα στην οποία θα συνδέονται όλα τα περιφερειακά.
Σχέδιο ασπίδας:

Όπως μπορείτε να δείτε από το διάγραμμα, τα κουμπιά συνδέονται χρησιμοποιώντας ένα κύκλωμα μήτρας. Χρησιμοποιούνται οι ενσωματωμένες αντιστάσεις έλξης του ATmega328, επομένως η λογική είναι αντίστροφη.

Κουμπιά αρχικοποίησης

for(byte i = 0; i< COLS; i++){ //--Конфигурируем строки мтрчн клвтр как выходы pinMode(colPins[i], OUTPUT); //--подаём на них лог. 1 digitalWrite(colPins[i], HIGH); } for(byte i = 0; i < ROWS; i++){ //--Конфигурируем столбцы мтрчн клвтр как входы--------- pinMode(rowPins[i], INPUT); //--включаем встроенные в мк подтягивающие резисторы-- digitalWrite(rowPins[i], HIGH); }

Αξίες ανάγνωσης

for(byte i = 0; i< COLS; i++) //-Цикл чтения матричной клавиатуры----- { digitalWrite(colPins[i], LOW); //--На считываемый столбец выставляем 0--- for(byte j = 0; j < ROWS; j++) //--Построчно считываем каждый столбец-- { //--И при нажатой кнопке передаём ноту-- dval=digitalRead(rowPins[j]); if (dval == LOW && buttonState[i][j] == HIGH) MIDI.sendNoteOn(kpdNote[j][i],127,1); if (dval == HIGH && buttonState[i][j] == LOW) MIDI.sendNoteOff(kpdNote[j][i],127,1); buttonState[i][j] = dval; } digitalWrite(colPins[i], HIGH); }




Ξέχασα να τοποθετήσω διόδους στη σφραγίδα, έπρεπε να τις κολλήσω στα κουμπιά.

Τα ποτενσιόμετρα συνδέονται μέσω πολυπλέκτη 4052b στις εισόδους ADC.

Ανάγνωση θέσεων ποτενσιόμετρου

for(byte chn = 0; chn< 4; chn++) //-Цикл чтения значений потенциометров { set_mp_chn(chn); //--Задаём параметры мультиплексора val=analogRead(0) / 8; //--Считываем значение с канала X if (abs(val-PrVal) >5) //--Αν η τρέχουσα τιμή είναι ex. από το παρελθόν ( //-- περισσότερες από 5, στη συνέχεια στείλτε μια νέα τιμή MIDI.sendControlChange(chn,val,1); PrVal=val; ) val=analogRead(1) / 8; //--Διαβάστε την τιμή από το κανάλι Y με τον ίδιο τρόπο όπως το X εάν (abs(val-PrVal) > 5) ( MIDI.sendControlChange(chn+4,val,1); PrVal=val; ) )


Ο κωδικοποιητής ορίστηκε σε διακοπή υλικού.

Διαβάζοντας τον κωδικοποιητή

void enc() // Επεξεργασία κωδικοποιητή (currenttime=millis(); if (abs(ltime-currenttime)>50) // anti-bounce (b=digitalRead(4); if (b == HIGH && eval<=122) eval=eval+5; else if (b == LOW && eval>=5) eval=eval-5;


MIDI.sendControlChange(9,eval,1); ltime = millis();

) )



πλακέτα τυπωμένου κυκλώματος

απλώστε το σε διάταξη Sprint και στη συνέχεια το φτιάχνετε με το παλιό καλό LUT χρησιμοποιώντας αυτοκόλλητη μεμβράνη και χλωριούχο σίδηρο Η ποιότητα της συγκόλλησης πάσχει από τρομερή συγκόλληση. Έτοιμη ασπίδα:Για να ανεβάσω υλικολογισμικό στο ATmega32u4, βραχυκύκλωσα 2 ακίδες ICSP και μετά χρησιμοποίησα το Flip. Αργότερα σύνδεσα ένα κουμπί σε αυτές τις ακίδες.

  • Το υλικολογισμικό λειτουργεί, το μόνο που μένει είναι να βιδώσετε τους τοίχους και
  • πρόσοψη
  • . Δεδομένου ότι σημείωσα τα πάντα στη θέση τους, η σχεδίαση του πίνακα χρειάστηκε περισσότερο χρόνο από οτιδήποτε άλλο. Έμοιαζε έτσι:
  • 1. Ως φόντο της εικόνας χρησιμοποιήθηκε γραφικό χαρτί
  • 2. Σημειώθηκαν τρύπες
  • 3. Το αποτέλεσμα εκτυπώθηκε
  • 4. Όλες οι τρύπες κόπηκαν
  • 5. Όλα τα στοιχεία ξεβιδώθηκαν και αφαιρέθηκαν
6. Ο πίνακας εγκαταστάθηκε, όλα τα κουμπιά/ποτενσιόμετρα τοποθετήθηκαν στη θέση τους 7. Υπήρχαν ασυνέπειες μεταξύ του προτύπου και του σώματος 8. Πηγαίνετε στο βήμα 2 μέχρι να ταιριάζουν όλες οι τρύπες

Το πάνελ είναι κατασκευασμένο από PET χιλιοστού, καλυμμένο με τυπωμένη και πλαστικοποιημένη μεμβράνη, οι τρύπες κόβονται με λέιζερ σύμφωνα με

αρχείο cdr

. Από τους διαφημιστές του Ιρκούτσκ, όλα αυτά μου κόστισαν μόνο 240 ρούβλια.

  • Τα πλαϊνά τοιχώματα κόπηκαν από κόντρα πλακέ.
  • Τρέχων τύπος συσκευής:
  • Κόστος εξαρτημάτων:
  • Arduino UNO R3 RUR 320
  • Faders sp3-25a 5x9=45 r.
  • Στόμα. ποτενσιόμετρα + πόμολα 85 τρίψτε.
  • Κωδικοποιητής 15 rub.
  • Κουμπιά pbs-26b 16x19=304 τρίψιμο.
Πάνελ 240 τρίψτε.

Πολυπλέκτης 16 τρίψιμο.

Κόντρα πλακέ, textolite, διακόπτες εναλλαγής, θήκη DVD - στην περίπτωσή μου, δωρεάν.

Σύνολο: 1025 τρίψτε.

Μερικοί μουσικοί που γνωρίζουν ηλεκτρονικά ή ηλεκτρονικοί μηχανικοί που τους αρέσει να παίζουν μουσική, θα ήθελαν να συνδέσουν τη συσκευή MIDI τους στο Arduino, αλλά δεν ξέρουν πώς να το κάνουν σωστά. Αυτη η εργασιαθα σας βοηθήσει να κατανοήσετε αυτό το ζήτημα.


Αρχικά, ας καταλάβουμε λίγο τι είναι το MIDI. Το MIDI σημαίνει Ψηφιακή διεπαφή μουσικών οργάνων ή στα ρωσικά ψηφιακή διεπαφήμουσικά όργανα. Ο μεταδιδόμενος κώδικας αυτής της διεπαφής μπορεί να κρυπτογραφήσει τις παραμέτρους της έντασης, του πλήκτρου, του ρυθμού και άλλα χαρακτηριστικά των μουσικών οργάνων. Τα δεδομένα MIDI μεταδίδονται συνήθως μέσω διαύλων πέντε περασμάτων με στρογγυλές υποδοχές DIN 41524, επίσης με πέντε ακροδέκτες, όπως φαίνεται στο παρακάτω διάγραμμα. Τυπική ταχύτηταμετάδοση δεδομένων τέτοιων σειριακή διεπαφήείναι 31,25 kbit/s. Η μετάδοση είναι μονής κατεύθυνσης, δηλαδή, σε ένα σύστημα που συνδέεται με MIDI, τα μουσικά όργανα όπως τα συνθεσάιζερ μπορούν να μεταδώσουν δεδομένα μόνο σε μια κεντρική μονάδα, όπως έναν πίνακα ελέγχου ήχου surround ή έναν υπολογιστή. Να θυμάστε ότι τα δεδομένα MIDI δεν είναι ψηφιοποιημένος ήχος, αλλά εντολές και τιμές, όπως σημειώσεις, παράμετροι ήχου κ.λπ.


Απαιτούμενα εξαρτήματα

  • Υποδοχή DIN/MIDI 5 ακίδων – 1 τεμ.
  • Optocoupler 4n35 ή ισοδύναμο – 1 τεμ.
  • Δίοδος IN914 ή ισοδύναμο – 1 τεμ.
  • Αντίσταση 220 Ohm – 1 τεμ.
  • Αντίσταση 560 Ohm (πιθανό 220 και 230 στη σειρά) – 1 τεμ.
  • Πλάκα τοποθέτησης - 1 τεμ.
  • Arduino - 1 τεμ.
  • Καλώδιο MIDI - 1 τεμ.
  • Συσκευή MIDI – 1 τεμ.

Σχέδιο Συνδέσεις Arduinoσε συσκευές MIDI




Το διάγραμμα που δημιουργήθηκε με τη χρήση του fritzing δείχνει τις συνδέσεις των εξαρτημάτων με κάποια λεπτομέρεια. Όλα εδώ συνδέονται πολύ απλά και εύκολα. Στην καρδιά του κυκλώματος βλέπουμε ένα οπτικό τσιπ γαλβανική μόνωση. Αυτός ο οπτικός συζευκτήρας χρειάζεται για τη γαλβανική απομόνωση της γραμμής MIDI από Κυκλώματα Arduino. Χωρίς αυτό μπορείτε να καείτε Είσοδος Arduino. Σε αυτή την περίπτωση, λήφθηκε ένας οπτικός συζευκτήρας της σειράς 4n35, ο οποίος αποτελείται από ένα LED και ένα φωτοτρανζίστορ, ωστόσο, αντ' αυτού, οποιοσδήποτε άλλος οπτοζεύκτης έχει παρόμοια χαρακτηριστικά.


Προσέξτε όταν συνδέετε τη δίοδο, παρατηρήστε την πολικότητα. Αυτό το σχέδιοδημιουργήθηκε λαμβάνοντας υπόψη τα πρότυπα και τα χαρακτηριστικά της διεπαφής MIDI. Το αρχικό διάγραμμα κυκλώματος βρίσκεται εδώ http://www.midi.org/techspecs/electrispec.php


Κωδικός (σκίτσο για Arduino)


Αυτό είναι ένα απλό σενάριο αλληλεπίδρασης MIDI που χρησιμοποιεί τη βιβλιοθήκη MIDI.h (σενάριο MIDI CALLBACK). Ελέγχει αν έχει φτάσει το σήμα NoteOn (σημείωση) και μετακινείται στην κατάλληλη περιοχή επεξεργασίας. Μπορείτε να επικολλήσετε τον κωδικό σας σε αυτήν την περιοχή.


#περιλαμβάνω MIDI_CREATE_DEFAULT_INSTANCE(); void handleNoteOn (κανάλι byte, βήμα byte, ταχύτητα byte) ( // θέση για τον κώδικά σας όταν λαμβάνεται σήμα) void handleNoteOff (κανάλι byte, βήμα byte, ταχύτητα byte) ( // θέση για τον κώδικά σας όταν δεν υπάρχει σήμα) void setup() ( MIDI.setHandleNoteOn(handleNoteOn); MIDI.setHandleNoteOff(handleNoteOff); MIDI.begin(MIDI_CHANNEL_OMNI); ) void loop() ( MIDI.read; )

Ένδειξη πατήματος πλήκτρων

Χρησιμοποιούμε μια έγχρωμη λωρίδα LED για να υποδείξουμε τον αριθμό και τη δύναμη πατήματος ενός πλήκτρου συνθεσάιζερ.

Θα χρειαστείτε:

midi-ledStrip.ino #include #περιλαμβάνω #ifdef __AVR__ #include #τέλος εαν // Λωρίδα LED συνδεδεμένη στον ακροδέκτη 11#define PIN 11 // Αποτελείται από 50 LED#define NUMPIXELS 50 // Δημιουργία αντικειμένου για τον έλεγχο της ροής Adafruit_NeoPixel pixel = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800) ; // Δημιουργία αντικειμένου για επικοινωνία MIDI μέσω Serial1 MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, myMidi) ; // Βοηθητικές μεταβλητές int r, g, b, pitchPot; // Λειτουργία που μετατρέπει την απόχρωση σε RGB. // Λεπτομέρειες: http://site/projects:christmastree void f_HSV_to_RGB(int hue, int sat, int val) ( int base; if (sat == 0) ( r = val; g = val; b = val; ) other ( base = ((255 - sat) * val) >> 8 ; διακόπτης (απόχρωση / 60 ) (περίπτωση 0 : ( r = val; g = ((val - βάση) * απόχρωση) / 60 ) + βάση; b = βάση; σπάσιμο ; ) περίπτωση 1 : ( r = θήκη 3: ( r = βάση; g = (((val - βάση) * (60 - (απόχρωση % 60 ) ) ) / 60 ) + βάση; b = val; break ; ) περίπτωση 4: ( r = (((val - βάση) * (απόχρωση % 60 ) / 60 ) + g = val ) περίπτωση 5 : ( r = val ; b = ( val - base ; 60 - (απόχρωση % 60) ) / 60 ) + βάση 6 : (r = val; g = 0; b = βάση; σπάσιμο; )) // Πρόγραμμα χειρισμού συμβάντων NoteOn. Αυτή η λειτουργία θα κληθεί αυτόματα όταν // όταν λαμβάνετε ένα μήνυμα NoteOn μέσω εισόδου MIDI. void handleNoteOn (κανάλι byte, βήμα byte, ταχύτητα byte) ( // Η ταχύτητα κυμαίνεται από 0 έως 127 // Για να αποφύγετε τη μείωση του εύρους τιμών χρωματικής απόχρωσης (0-255), // μετατοπίζουμε προς τα αριστερά και πολλαπλασιάζουμε τη δύναμη πίεσης επί 2. byte doubleVelocity = ταχύτητα<< 1 ; // Μετατροπή της απόχρωσης σε RGB f_HSV_to_RGB(doubleVelocity, 255 , 255 ); // Ο αριθμός της σημείωσης έχει τιμή από 0 έως 127, // και υπάρχουν μόνο 50 LED έτσι ώστε η ταινία να εμφανίζει σημειώσεις // στο απαιτούμενο διάστημα, προσαρμόστε την ταινία στις επιθυμητές νότες χρησιμοποιώντας το ποτενσιόμετρο. // Η ανάγνωση της τιμής από το ποτενσιόμετρο εμφανίζεται στο loop(); int activePitch = pitch - pitchPot; // Ρυθμίστε το χρώμα LED στην επιθυμητή θέση... pixels.setPixelColor(activePitch, pixels.Color(r, g, b)); // ... και ανάψτε την ταινία. pixels.show(); ) // Πρόγραμμα χειρισμού συμβάντων NoteOff. Αυτή η λειτουργία θα κληθεί αυτόματα όταν // όταν λαμβάνετε ένα μήνυμα NoteOff μέσω εισόδου MIDI.// Περισσότερες λεπτομέρειες: http://arduinomidilib.fortyseveneffects.com/a00022.html void handleNoteOff (κανάλι byte, βήμα byte, ταχύτητα byte) (// Απενεργοποιήστε το LED που άναψε το NoteOn int activePitch = pitch - pitchPot; pixels.setPixelColor(activePitch, pixels.Color(0, 0, 0)); pixels.show();) void setup() ( // Εκκίνηση της λωρίδας LED... pixels.begin(); // ... και απενεργοποιήστε όλα τα LED pixels.show(); // Επισυνάψτε το πρόγραμμα χειρισμού συμβάντων NoteOn myMidi.setHandleNoteOn (handleNoteOn) ; // Επισυνάψτε το πρόγραμμα χειρισμού συμβάντων NoteOff myMidi.setHandleNoteOff (handleNoteOff) ;// Εκκινήστε τη διεπαφή MIDI για να ακούσετε όλους // Κανάλια MIDI. myMidi.begin(MIDI_CHANNEL_OMNI) ; ) void loop() (// Εδώ καλούμε απλώς το MIDI.read,

Για άλλη μια φορά, παίζοντας κιθάρα και ελέγχοντας τον ήχο μέσω του Peavey ReValver και άλλων Amplitubes, σκέφτηκα να αγοράσω ένα χειριστήριο MIDI. Οι επώνυμες συσκευές, όπως το Guitar Rig Kontrol 3, κοστίζουν περίπου 13.000 ρούβλια και είναι μόνο στο δάπεδο. Δηλαδή, η γρήγορη αλλαγή των θέσεων πολλών ρυθμιστικών αρχών είναι πολύ προβληματική.

Διάφοροι ελεγκτές κατεύθυνσης DJ φαίνονταν πιο ενδιαφέροντες λόγω της αφθονίας των faders και των κωδικοποιητών. Αποφασίστηκε να συνδυάσω τις επιχειρήσεις με την ευχαρίστηση και να φτιάξω μόνος μου έναν ελεγκτή MIDI.

Αρχικές απαιτήσεις: 2-7 fader, ίδιος αριθμός περιστροφικών ποτενσιόμετρων/κωδικοποιητών, περίπου 10 κουμπιά, σύνδεση USB.

Στη συνέχεια άρχισα να επιλέγω εξαρτήματα. Επέλεξα το Arduino λόγω της διαθεσιμότητάς του καταρχήν, μπορείτε να χρησιμοποιήσετε το ίδιο ATmega32u4, STM ή άλλο ελεγκτή. Βρήκα τα faders και τα κουμπιά σε ένα τοπικό κατάστημα ραδιοφώνου. Ο κωδικοποιητής και τα ποτενσιόμετρα είχαν ήδη αγοραστεί κάποια στιγμή. Βρήκα τους διακόπτες εναλλαγής στο γκαράζ. Αποφάσισα να φτιάξω τη θήκη από το επάνω εξώφυλλο ενός DVD player.

Αξεσουάρ:

  • Arduino UNO R3 1 τεμ.
  • Faders sp3-25a 5 τεμ.
  • Στόμα. ποτενσιόμετρα 3 τεμ.
  • Κωδικοποιητής 1 τεμ.
  • Κουμπιά pbs-26b 16 τεμ.
  • Κάλυμμα DVD 1 τεμ.
  • Διακόπτες εναλλαγής 2 τεμ.

Πρώτα, λύγισα το σώμα και πριόνισα τρύπες σε αυτό με ένα τρυπάνι για τα fader:

Στη συνέχεια άνοιξα τις τρύπες για τους διακόπτες εναλλαγής και το στόμιο. ποτενσιόμετρα, σημείωσαν τη θέση των κουμπιών. Δεδομένου ότι δεν είχα τρυπάνι 19 χιλιοστών (ή ακόμη και αντίστοιχο τσοκ), άνοιξα τις τρύπες για τα κουμπιά στα 13 χιλιοστά και μετά τα μεγέθυναν με ένα σφουγγάρι.

// η βιβλιοθήκη θα κάνει τα υπόλοιπα μόνη της

Επειδή χρησιμοποίησα το Arduino, αποφάσισα να φτιάξω μια ασπίδα στην οποία θα συνδέονται όλα τα περιφερειακά.
Σχέδιο ασπίδας:

Όπως μπορείτε να δείτε από το διάγραμμα, τα κουμπιά συνδέονται χρησιμοποιώντας ένα κύκλωμα μήτρας. Χρησιμοποιούνται οι ενσωματωμένες αντιστάσεις έλξης του ATmega328, επομένως η λογική είναι αντίστροφη.

Κουμπιά αρχικοποίησης

for(byte i = 0; i< COLS; i++){ //--Конфигурируем строки мтрчн клвтр как выходы pinMode(colPins[i], OUTPUT); //--подаём на них лог. 1 digitalWrite(colPins[i], HIGH); } for(byte i = 0; i < ROWS; i++){ //--Конфигурируем столбцы мтрчн клвтр как входы--------- pinMode(rowPins[i], INPUT); //--включаем встроенные в мк подтягивающие резисторы-- digitalWrite(rowPins[i], HIGH); }

Αξίες ανάγνωσης

for(byte i = 0; i< COLS; i++) //-Цикл чтения матричной клавиатуры----- { digitalWrite(colPins[i], LOW); //--На считываемый столбец выставляем 0--- for(byte j = 0; j < ROWS; j++) //--Построчно считываем каждый столбец-- { //--И при нажатой кнопке передаём ноту-- dval=digitalRead(rowPins[j]); if (dval == LOW && buttonState[i][j] == HIGH) MIDI.sendNoteOn(kpdNote[j][i],127,1); if (dval == HIGH && buttonState[i][j] == LOW) MIDI.sendNoteOff(kpdNote[j][i],127,1); buttonState[i][j] = dval; } digitalWrite(colPins[i], HIGH); }




Ξέχασα να τοποθετήσω διόδους στη σφραγίδα, έπρεπε να τις κολλήσω στα κουμπιά.

Τα ποτενσιόμετρα συνδέονται μέσω πολυπλέκτη 4052b στις εισόδους ADC.

Ανάγνωση θέσεων ποτενσιόμετρου

for(byte chn = 0; chn< 4; chn++) //-Цикл чтения значений потенциометров { set_mp_chn(chn); //--Задаём параметры мультиплексора val=analogRead(0) / 8; //--Считываем значение с канала X if (abs(val-PrVal) >5) //--Αν η τρέχουσα τιμή είναι ex. από το παρελθόν ( //-- περισσότερες από 5, στη συνέχεια στείλτε μια νέα τιμή MIDI.sendControlChange(chn,val,1); PrVal=val; ) val=analogRead(1) / 8; //--Διαβάστε την τιμή από το κανάλι Y με τον ίδιο τρόπο όπως το X εάν (abs(val-PrVal) > 5) ( MIDI.sendControlChange(chn+4,val,1); PrVal=val; ) )


Ο κωδικοποιητής ορίστηκε σε διακοπή υλικού.

Διαβάζοντας τον κωδικοποιητή

void enc() // Επεξεργασία κωδικοποιητή (currenttime=millis(); if (abs(ltime-currenttime)>50) // anti-bounce (b=digitalRead(4); if (b == HIGH && eval<=122) eval=eval+5; else if (b == LOW && eval>=5) eval=eval-5;


myMidi.read();

) )



πλακέτα τυπωμένου κυκλώματος

Το υλικολογισμικό λειτουργεί, το μόνο που μένει είναι να βιδώσετε τους τοίχους και τον μπροστινό πίνακα. Δεδομένου ότι σημείωσα τα πάντα στη θέση τους, η σχεδίαση του πίνακα χρειάστηκε περισσότερο χρόνο από οτιδήποτε άλλο. Έμοιαζε κάπως έτσι:

  • Το υλικολογισμικό λειτουργεί, το μόνο που μένει είναι να βιδώσετε τους τοίχους και
  • πρόσοψη
  • . Δεδομένου ότι σημείωσα τα πάντα στη θέση τους, η σχεδίαση του πίνακα χρειάστηκε περισσότερο χρόνο από οτιδήποτε άλλο. Έμοιαζε έτσι:
  • 1. Ως φόντο της εικόνας χρησιμοποιήθηκε γραφικό χαρτί
  • 2. Σημειώθηκαν τρύπες
  • 3. Το αποτέλεσμα εκτυπώθηκε
  • 4. Όλες οι τρύπες κόπηκαν
  • 5. Όλα τα στοιχεία ξεβιδώθηκαν και αφαιρέθηκαν
Το πάνελ είναι κατασκευασμένο από PET χιλιοστού, καλυμμένο με τυπωμένη και πλαστικοποιημένη μεμβράνη, οι τρύπες κόπηκαν με λέιζερ από αρχείο CDR. Από τους διαφημιστές του Ιρκούτσκ, όλα αυτά μου κόστισαν μόνο 240 ρούβλια.

Το πάνελ είναι κατασκευασμένο από PET χιλιοστού, καλυμμένο με τυπωμένη και πλαστικοποιημένη μεμβράνη, οι τρύπες κόβονται με λέιζερ σύμφωνα με

αρχείο cdr

. Από τους διαφημιστές του Ιρκούτσκ, όλα αυτά μου κόστισαν μόνο 240 ρούβλια.

  • Τα πλαϊνά τοιχώματα κόπηκαν από κόντρα πλακέ.
  • Τρέχων τύπος συσκευής:
  • Κόστος εξαρτημάτων:
  • Arduino UNO R3 RUR 320
  • Faders sp3-25a 5x9=45 r.
  • Στόμα. ποτενσιόμετρα + πόμολα 85 τρίψτε.
  • Κωδικοποιητής 15 rub.
  • Κουμπιά pbs-26b 16x19=304 τρίψιμο.
Πάνελ 240 τρίψτε.

Πολυπλέκτης 16 τρίψιμο.

Κόντρα πλακέ, textolite, διακόπτες εναλλαγής, θήκη DVD - στην περίπτωσή μου, δωρεάν.

Σύνολο: 1025 τρίψτε.

Για άλλη μια φορά, παίζοντας κιθάρα και ελέγχοντας τον ήχο μέσω του Peavey ReValver και άλλων Amplitubes, σκέφτηκα να αγοράσω ένα χειριστήριο MIDI. Οι επώνυμες συσκευές, όπως το Guitar Rig Kontrol 3, κοστίζουν περίπου 13.000 ρούβλια και είναι μόνο στο δάπεδο. Δηλαδή, η γρήγορη αλλαγή των θέσεων πολλών ρυθμιστικών αρχών είναι πολύ προβληματική.

Διάφοροι ελεγκτές κατεύθυνσης DJ φαίνονταν πιο ενδιαφέροντες λόγω της αφθονίας των faders και των κωδικοποιητών. Αποφασίστηκε να συνδυάσω τις επιχειρήσεις με την ευχαρίστηση και να φτιάξω μόνος μου έναν ελεγκτή MIDI.

Αρχικές απαιτήσεις: 2-7 fader, ίδιος αριθμός περιστροφικών ποτενσιόμετρων/κωδικοποιητών, περίπου 10 κουμπιά, σύνδεση USB.

Στη συνέχεια άρχισα να επιλέγω εξαρτήματα. Επέλεξα το Arduino λόγω της διαθεσιμότητάς του καταρχήν, μπορείτε να χρησιμοποιήσετε το ίδιο ATmega32u4, STM ή άλλο ελεγκτή. Βρήκα τα faders και τα κουμπιά σε ένα τοπικό κατάστημα ραδιοφώνου. Ο κωδικοποιητής και τα ποτενσιόμετρα είχαν ήδη αγοραστεί κάποια στιγμή. Βρήκα τους διακόπτες εναλλαγής στο γκαράζ. Αποφάσισα να φτιάξω τη θήκη από το επάνω εξώφυλλο ενός DVD player.

Αξεσουάρ:


  • Arduino UNO R3 1 τεμ.

  • Faders sp3-25a 5 τεμ.

  • Στόμα. ποτενσιόμετρα 3 τεμ.

  • Κωδικοποιητής 1 τεμ.

  • Κουμπιά pbs-26b 16 τεμ.

  • Κάλυμμα DVD 1 τεμ.

  • Διακόπτες εναλλαγής 2 τεμ.

Πρώτα, λύγισα το σώμα και πριόνισα τρύπες σε αυτό με ένα τρυπάνι για τα fader:

Στη συνέχεια άνοιξα τις τρύπες για τους διακόπτες εναλλαγής και το στόμιο. ποτενσιόμετρα, σημείωσαν τη θέση των κουμπιών. Δεδομένου ότι δεν είχα τρυπάνι 19 χιλιοστών (ή ακόμη και αντίστοιχο τσοκ), άνοιξα τις τρύπες για τα κουμπιά στα 13 χιλιοστά και μετά τα μεγέθυναν με ένα σφουγγάρι.

Η βάση είναι έτοιμη, τώρα μπορείτε να σκεφτείτε πώς να συνδέσετε όλα αυτά τα πράγματα στο Arduino. Μελετώντας αυτό το θέμα έπεσα πάνω σε ένα υπέροχο έργο. Αυτό είναι το υλικολογισμικό για το ATmega16u2 στο Arduino, χάρη στο οποίο η συσκευή ορίζεται ως συσκευή USB-HID MIDI. Το μόνο που μπορούμε να κάνουμε είναι να στείλουμε δεδομένα MIDI μέσω UART στα 31250 baud. Για να μην γεμίσω τον πηγαίο κώδικα με ορισμούς με κωδικούς συμβάντων MIDI, χρησιμοποίησα .

Επειδή χρησιμοποίησα το Arduino, αποφάσισα να φτιάξω μια ασπίδα στην οποία θα συνδέονται όλα τα περιφερειακά.
Σχέδιο ασπίδας:

Όπως μπορείτε να δείτε από το διάγραμμα, τα κουμπιά συνδέονται χρησιμοποιώντας ένα κύκλωμα μήτρας. Χρησιμοποιούνται οι ενσωματωμένες αντιστάσεις έλξης του ATmega328, επομένως η λογική είναι αντίστροφη.

for(byte i = 0; i< COLS; i++){ //--Конфигурируем строки мтрчн клвтр как выходы pinMode(colPins[i], OUTPUT); //--подаём на них лог. 1 digitalWrite(colPins[i], HIGH); } for(byte i = 0; i < ROWS; i++){ //--Конфигурируем столбцы мтрчн клвтр как входы--------- pinMode(rowPins[i], INPUT); //--включаем встроенные в мк подтягивающие резисторы-- digitalWrite(rowPins[i], HIGH); }

for(byte i = 0; i< COLS; i++) //-Цикл чтения матричной клавиатуры----- { digitalWrite(colPins[i], LOW); //--На считываемый столбец выставляем 0--- for(byte j = 0; j < ROWS; j++) //--Построчно считываем каждый столбец-- { //--И при нажатой кнопке передаём ноту-- dval=digitalRead(rowPins[j]); if (dval == LOW && buttonState[i][j] == HIGH) MIDI.sendNoteOn(kpdNote[j][i],127,1); if (dval == HIGH && buttonState[i][j] == LOW) MIDI.sendNoteOff(kpdNote[j][i],127,1); buttonState[i][j] = dval; } digitalWrite(colPins[i], HIGH); }




Ξέχασα να τοποθετήσω διόδους στη σφραγίδα, έπρεπε να τις κολλήσω στα κουμπιά.

Τα ποτενσιόμετρα συνδέονται μέσω πολυπλέκτη 4052b στις εισόδους ADC.

for(byte chn = 0; chn< 4; chn++) //-Цикл чтения значений потенциометров { set_mp_chn(chn); //--Задаём параметры мультиплексора val=analogRead(0) / 8; //--Считываем значение с канала X if (abs(val-PrVal) >5) //--Αν η τρέχουσα τιμή είναι ex. από το παρελθόν ( //-- περισσότερες από 5, στη συνέχεια στείλτε μια νέα τιμή MIDI.sendControlChange(chn,val,1); PrVal=val; ) val=analogRead(1) / 8; //--Διαβάστε την τιμή από το κανάλι Y με τον ίδιο τρόπο όπως το X εάν (abs(val-PrVal) > 5) ( MIDI.sendControlChange(chn+4,val,1); PrVal=val; ) )


Ο κωδικοποιητής ορίστηκε σε διακοπή υλικού.

void enc() // Επεξεργασία κωδικοποιητή (currenttime=millis(); if (abs(ltime-currenttime)>50) // anti-bounce (b=digitalRead(4); if (b == HIGH && eval<=122) eval=eval+5; else if (b == LOW && eval>=5) eval=eval-5;


Τοποθέτησα την πλακέτα τυπωμένου κυκλώματος σε διάταξη Sprint και μετά την έκανα με τον παλιό τρόπο χρησιμοποιώντας αυτοκόλλητη μεμβράνη και χλωριούχο σίδηρο. Η ποιότητα της συγκόλλησης υποφέρει από την τρομερή συγκόλληση.

) )



Για να ανεβάσω υλικολογισμικό στο ATmega32u4, βραχυκύκλωσα 2 ακίδες ICSP και μετά χρησιμοποίησα το . Αργότερα σύνδεσα ένα κουμπί σε αυτές τις ακίδες.

Το υλικολογισμικό λειτουργεί, το μόνο που μένει είναι να βιδώσετε τους τοίχους και τον μπροστινό πίνακα. Δεδομένου ότι σημείωσα τα πάντα στη θέση τους, η σχεδίαση του πίνακα χρειάστηκε περισσότερο χρόνο από οτιδήποτε άλλο. Έμοιαζε κάπως έτσι:


  • Το υλικολογισμικό λειτουργεί, το μόνο που μένει είναι να βιδώσετε τους τοίχους και

  • πρόσοψη

  • . Δεδομένου ότι σημείωσα τα πάντα στη θέση τους, η σχεδίαση του πίνακα χρειάστηκε περισσότερο χρόνο από οτιδήποτε άλλο. Έμοιαζε έτσι:

  • 1. Ως φόντο της εικόνας χρησιμοποιήθηκε γραφικό χαρτί

  • 5. Όλα τα στοιχεία ξετυλίχθηκαν και αφαιρέθηκαν

  • 3. Το αποτέλεσμα εκτυπώθηκε

  • 4. Όλες οι τρύπες κόπηκαν

  • 5. Όλα τα στοιχεία ξεβιδώθηκαν και αφαιρέθηκαν

Το πάνελ είναι κατασκευασμένο από PET χιλιοστού, καλυμμένο με τυπωμένη και πλαστικοποιημένη μεμβράνη, οι τρύπες κόπηκαν με λέιζερ από αρχείο CDR. Από τους διαφημιστές του Ιρκούτσκ, όλα αυτά μου κόστισαν μόνο 240 ρούβλια.

Το πάνελ είναι κατασκευασμένο από PET χιλιοστού, καλυμμένο με τυπωμένη και πλαστικοποιημένη μεμβράνη, οι τρύπες κόβονται με λέιζερ σύμφωνα με

αρχείο cdr

. Από τους διαφημιστές του Ιρκούτσκ, όλα αυτά μου κόστισαν μόνο 240 ρούβλια.


  • Τα πλαϊνά τοιχώματα κόπηκαν από κόντρα πλακέ.

  • Τρέχων τύπος συσκευής:

  • Κόστος εξαρτημάτων:

  • Arduino UNO R3 RUR 320

  • Faders sp3-25a 5x9=45 r.

  • Στόμα. ποτενσιόμετρα + πόμολα 85 τρίψτε.

  • Κωδικοποιητής 15 rub.

  • Κουμπιά pbs-26b 16x19=304 τρίψιμο.

Σύνολο: 1025 τρίψτε.

Πολυπλέκτης 16 τρίψιμο.

Κόντρα πλακέ, textolite, διακόπτες εναλλαγής, θήκη DVD - στην περίπτωσή μου, δωρεάν.

Σύνολο: 1025 τρίψτε.