Πίνακας περιεχομένων:
- Βήμα 1: Wat Heb Je Nodig;
- Βήμα 2: Επεξεργασία κώδικα
- Βήμα 3: Κωδικός Arduino
- Βήμα 4: Θεριστής
- Βήμα 5: Behuizing
- Βήμα 6: Elektronica
- Βήμα 7: Medewerkers
Βίντεο: Retro Controller: 7 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:38
Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.
Samen hebben we een muziek controller gemaakt dat muziek kan starten/stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.
Κατά την ιδέα της κασέτας, το ons doel ήταν ο καθένας από τον ελεγκτή που έκανε τη λειτουργία της κασέτας.
Βήμα 1: Wat Heb Je Nodig;
Componenten
- 2 κουμπιά.
- 2 μετρητές Potentio.
- 2 weerstanden (1K elk).
- Arduino uno/nano
- Draadjes (zie elektronisch σχήμα)
- Soldeerplaat
Πλάκα MDF
Εργαλεία
- Lasercutter
- Κνίπτανγκ
- Στριπτάνγκ
Soldeerbout (met tin)
Του προγράμματος
- Εικονογράφος/indesign (Tekenprogramma)
- θεριστής
- Επεξεργασία
- Arduino
Βήμα 2: Επεξεργασία κώδικα
/**
* Βασικό σκίτσο για τη λήψη σειριακών μηνυμάτων από το Arduino * και τα μεταφράζει σε μηνύματα OSC για Reaper * * Θα χρειαστεί να προσαρμόσετε τους ΠΑΡΑΜΕΤΡΟΥΣ ΧΡΗΣΤΗ * και θα χρειαστεί να εγκαταστήσετε μια Βιβλιοθήκη: oscP5 * * made for werkcollege AV&IT * by annoo bob eddi * οκτ 2017 * *///////////////////// ΠΑΡΑΜΕΤΡΟΙ ΧΡΗΣΤΗ //////////////////// /////////
/ βεβαιωθείτε ότι χρησιμοποιείτε τον ίδιο ρυθμό baud στο σκίτσο Arduino final int baudRate = 115200;
// Πηγαίνετε και αναζητήστε τη διεύθυνση IP στο Reaper όταν χρησιμοποιείτε OSC // Αυτή είναι η διεύθυνση στην οποία στέλνει η επεξεργασία και την οποία ακούει ο Reaper. // Βάλτε αυτήν τη συμβολοσειρά στο remoteIP, εδώ.
// τελικό String remoteIP = "192.168.1.43"; //π.χ. "127.0.0.1";
τελικό String remoteIP = "vul hier ip in gevonden in reaper";
// Σημειώστε το sendPort και συμπληρώστε το στο Reaper. // Αυτή είναι η θύρα που στέλνει η επεξεργασία και ακούει η Reaper.
τελικό int listenPort = 11000, sendPort = 12000;
// Το listenPort εδώ είναι ο ενεργός εντοπισμός σφαλμάτων.
// τα portNames είναι επίσης εδώ για να διορθώσετε σφάλματα.
τελικό String portName = "vul hier de portname in gevonden στο Arduino";
// τελικό String portName = "COM6"; // "/dev/ttyUSB0";
////////////////////// ΤΕΛΟΣ ΠΑΡΑΜΕΤΡΩΝ ΧΡΗΣΤΗ //////////////////////// ////
επεξεργασία εισαγωγής.σειρά.*; εισαγωγή java.util.*;
εισαγωγή oscP5.*; εισαγωγή netP5.*;
OscP5 oscP5; NetAddress myRemoteLocation;
Serial commsPort; // Η σειριακή θύρα boolean messageArrived = false;
String incoming = "", IncomingOSCMessage = "";
τελικό char startChar = '*', endChar = '#'; τελικό char contactCharacter = '|';
// Για να βεβαιωθείτε ότι στέλνουμε μόνο τις παραμέτρους (τιμές) που αλλάζουν // αυτές οι γενικές μεταβλητές εμφανίζονται εδώ αλλά δεν πρέπει // να αρχικοποιηθούν εδώ! HashMap oldParams, newParams, toSendParams;
// Πρέπει να χωρίσουμε το μήνυμα σε κάθε κόμμα void processIncoming () {String resVec = incoming.split (","); // παίρνουμε ζεύγη ονόματος+τιμών // έτσι για κάθε όνομα (+2)… δοκιμάστε {για (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // βάλτε τα στο νέο Hashtable newParams.put (resVec , value); }} // εάν παρουσιαστεί σφάλμα, ας το πιάσουμε να εμφανίζεται και να βγαίνουμε. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); έξοδος(); }}
// Για να φιλτράρουμε τα μηνύματά μας/ * Βεβαιωνόμαστε ότι υπάρχει μόνο ένα μήνυμα OSC-out όταν * το μήνυμα εισόδου (Serial) αλλάζει * Δηλαδή: αν γυρίσουμε/πατήσουμε το κουμπί και αλλάξει τιμή. * Έτσι φιλτράρουμε τις εισερχόμενες τιμές που πραγματικά αλλάζουν * σημείωση: δεν θα αποφύγουμε τις τιμές άλματος * όπως προέρχονται π.χ. από επιταχυνσιόμετρα ή αισθητήρες απόστασης * θα πρέπει να τις εξομαλύνετε μόνοι σας στο Arduino */ void filterParams () {toSendParams = new HashMap (); για (Κλειδί συμβολοσειράς: newParams.keySet ()) {// αν το κλειδί είναι ήδη αν). Equals (newParams.get (κλειδί))) {toSendParams.put (κλειδί, newParams.get (κλειδί)); }} else {// κλειδί δεν υπάρχει στα παλιά στοιχεία, οπότε θέστε το! toSendParams.put (κλειδί, newParams.get (κλειδί)); } oldParams.put (κλειδί, newParams.get (κλειδί)); }}
void makeOSC () {for (Κλειδί συμβολοσειράς: toSendParams.keySet ()) {OscMessage myMessage = νέο OscMessage ("/"+ κλειδί); myMessage.add (toSendParams.get (κλειδί)); / * στείλτε το μήνυμα */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Όταν θέλουμε να εκτυπώσουμε στο παράθυρο void ShowIncoming () {// για να δούμε το εισερχόμενο μήνυμα, όπως έχει οριστεί στο κείμενο του HashMap ("Εισερχόμενα από Arduino", 20, 20); int y = 20; για (Κλειδί συμβολοσειράς: newParams.keySet ()) {y = y+20; κείμενο (κλειδί, 20, y). κείμενο (newParams.get (κλειδί), 300, y); }}
void showOsc () {text (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
void setup () {μέγεθος (1000, 800); // Συμπλήρωση μεγέθους σκηνής (255). φόντο (0); oldParams = νέο HashMap (); newParams = νέο HashMap (); // printArray (Serial.list ()); commsPort = νέο Σειριακό (αυτό, portName, baudRate);
/ * εκκίνηση oscP5, ακρόαση εισερχόμενων μηνυμάτων */ oscP5 = νέο OscP5 (αυτό, listenPort);
/* myRemoteLocation είναι μια NetAddress. ένα NetAddress λαμβάνει 2 παραμέτρους, * μια διεύθυνση IP και έναν αριθμό θύρας. Το myRemoteLocation χρησιμοποιείται ως παράμετρος στο * oscP5.send () κατά την αποστολή πακέτων osc σε άλλο υπολογιστή, συσκευή, * εφαρμογή. χρήση δείτε παρακάτω. για σκοπούς δοκιμής, η θύρα ακρόασης * και η θύρα της απομακρυσμένης διεύθυνσης τοποθεσίας είναι οι ίδιες, επομένως * θα στείλετε μηνύματα πίσω σε αυτό το σκίτσο. */ myRemoteLocation = νέα NetAddress (remoteIP, sendPort); }
void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {// διαβάστε ένα byte από τη σειριακή θύρα: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // ζητήστε περισσότερα println ("εκκίνηση …"); Διακοπή; θήκη startChar: εισερχόμενη = ""; Διακοπή; υπόθεση endChar: messageArrived = true; // println ("τέλος μηνύματος"); Διακοπή; προεπιλογή: εισερχόμενη += inChar; Διακοπή; }}
/* τα εισερχόμενα μηνύματα osc προωθούνται στη μέθοδο oscEvent. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // λάβετε το 1ο όρισμα osc
IncomingOSCMessage + = "\ n" + String.format ("### έλαβε ένα μήνυμα osc:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", value); println (IncomingOSCMessage); }
Βήμα 3: Κωδικός Arduino
/* Αυτός ο κώδικας είναι ένα βασικό σκίτσο για την επικοινωνία με την Επεξεργασία μέσω σειριακού.
Είναι ένα σχέδιο στο οποίο μπορείτε να βάλετε τον δικό σας κωδικό που καθορίζεται για τα δικά σας κουμπιά, ποτενσιόμετρα ή αισθητήρες.
Έχει χειραψία για να βεβαιωθείτε ότι έχουμε επαφή και αποφασίζεται η μορφή με την οποία επικοινωνούμε
Είναι σημαντικό να κατασκευάσετε το μήνυμα με τον ίδιο τρόπο, έτσι ώστε η Επεξεργασία να γνωρίζει πώς να το αποδομήσει και να στείλει σωστά μηνύματα OSC στο DAW μας
φτιαγμένο για werkcollege AV&IT oct 2017
κωδικός smooothing δημιουργήθηκε 22 Απρ 2007 από τον David A. Mellis τροποποιήθηκε στις 9 Απριλίου 2012 από τον Tom Igoe
*/
/ baud rate const long baudRate = 115200;
// χρόνος αναμονής σε ms μεταξύ δημοσκοπήσεων προς τις ακίδες const int loopPauseTime = 200; // χιλιοστά του δευτερολέπτου
// τιμές έναρξης και λήξης για το μήνυμα που αποστέλλεται στο Serial const String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin id's const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // ισοτιμία λείανσης βαν
int pitchReading = A1; int speedReading = A2; int infraReading = A3;
// άλλες καθολικές μεταβλητές int buttonState1 = 0; int buttonState2 = 0; // μεταβλητή για την ανάγνωση του αισθητήρα επιπλεύσης κατάστασης του κουμπιού πίεσηςValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;
// εξομάλυνση int αναγνώσεων [numReadings]; // οι ενδείξεις από την αναλογική είσοδο int readIndex3 = 0; // ο δείκτης της τρέχουσας ανάγνωσης int total3 = 0; // ο συνολικός μέσος όρος float3 = 0; // ο μέσος όρος
// Χρειαζόμαστε αυτήν τη συνάρτηση για να δημιουργήσουμε επαφή με το σκίτσο επεξεργασίας // Διατηρήστε το εδώ άκυρο estabContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // στείλτε μια κάρτα και περιμένετε μια απάντηση… καθυστέρηση (loopPauseTime); } Serial.read (); }
void setup () {// set the pinModes for all the pin pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);
// αρχικοποίηση Serial comms Serial.begin (baudRate); ενώ (! Σειριακό)? // smoothing για (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }
// περιμένετε για χειραψία estabContact (); }
void loop () {// δημοσκοπήστε όλες τις καρφίτσες και χαρτογραφήστε την ανάγνωση στο κατάλληλο εύρος κουμπιούState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);
// αντιστοίχιση των εισερχόμενων τιμών στις απαραίτητες τιμές sensorValue1 = χάρτης (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = χάρτης (sensorValue2, 0, 1023, 0.0, 100)/100.0; sensorValue3 = χάρτης (sensorValue3, 0, 700, 50, 100);
// αισθητήρας εξομάλυνσης: total3 = total3 - μετρήσεις [readIndex3]; // ανάγνωση από τον αισθητήρα: αναγνώσεις [readIndex3] = sensorValue3; // προσθέστε την ένδειξη στο σύνολο: total3 = total3 + αναγνώσεις [readIndex3]; // προχωρήστε στην επόμενη θέση στον πίνακα: readIndex3 = readIndex3 + 1;
// αν βρισκόμαστε στο τέλος του πίνακα… if (readIndex3> = numReadings) {//… τυλίξτε στην αρχή: readIndex3 = 0; } // υπολογίστε το μέσο όρο: average3 = (total3 / numReadings); // αισθητήρας εξομάλυνσης
Serial.print (startString); // εκκίνηση μιας ακολουθίας μηνυμάτων // wirte όλα τα ονόματα, ζεύγη τιμών, χωρισμένα με κόμματα Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");
Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");
Serial.print ("υπέρ-αισθητήρας"); Serial.print (","); Serial.print (μέσος όρος3/100); Serial.print (",");
Serial.print ("knop 1 in2 wit"); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print ("knop2 in5 geel"); Serial.print (","); Serial.print (buttonState2);
// γράψτε το τέλος του μηνύματος Serial.print (endString);
// περίμενε για λίγο..
καθυστέρηση (loopPauseTime); }
Βήμα 4: Θεριστής
Βήμα 1: Επιλέξτε τις επιλογές> Προτιμήσεις
Βήμα 2: Ga στις προτιμήσεις naar Control/OSC/web και druk op Add
Βήμα 3: Kies bij Control surface mode voor OSC (Open Sound Control)
Βήμα 4: Όνομα συσκευής Vul je, vink Recieve on port aan en vul in wat er στην επεξεργασία bij Sendport staat
Βήμα 5: Kopieer de Host IP μπορεί να χρησιμοποιηθεί για επεξεργασία
Βήμα 6: Το χειριστήριο είναι εντάξει και ο ελεγκτής δεν γνωρίζει τον Reaper
Βήμα 5: Behuizing
Breedte: 170 mm
Μήκος: 90 mm
Αγκράφα 30 mm
Knoppen: 16 mm (διάμετρος
Μετρητές Potentio: 3 mm (διάμετρος)
Αισθητήρας Afstand: Breedte 2,9 mm
Μήκος 0,8 mm
Υλικό: MDF (3mm)
Βήμα 6: Elektronica
Βήμα 1:
Verbind de ground en 5 volt van Arduino met het breadboard
Βήμα 2:
Verbind pin A0 met potentio 1
Verbind pin A1 met potentio 2
Verbind pin A3 met infrarood sensor.
Verbind pin A2 met de niet κολλώδες κουμπί.
Verbind pin A5 met de sticky button.
Βήμα 7: Medewerkers
- Mayes El Baba
- Άρνο Γκόρισεν
- Michiel De Wandelaer
Συνιστάται:
Retro Arcade - (Full Size Powered by Raspberry Pi): 8 βήματα
Retro Arcade - (Full Size Powered by Raspberry Pi): Αρχικά ήθελα να σας ευχαριστήσω που ρίξατε μια ματιά στον οδηγό κατασκευής για αυτό το σύστημα Retro Arcade. Παίρνω ένα παλαιότερο κουτί arcade και το τοποθετώ σε ένα αυτόνομο ντουλάπι με οθόνη ευρείας οθόνης 24 ιντσών. Οι μετρήσεις σε αυτόν τον οδηγό είναι δύσκολο να σας δώσουν
Retro "Rayotron" Night Light (Part 1): 16 Βήματα
Ρετρό νυχτερινό φως "Rayotron" (Μέρος 1): Εισαγωγή Τον Δεκέμβριο του 1956, τα Atomic Laboratories διαφήμισαν το Rayotron ως την "πρώτη χαμηλού κόστους ηλεκτροστατική γεννήτρια και επιταχυντή σωματιδίων" για καθηγητές φυσικών επιστημών και χομπίστες [1]. Το Rayotron ήταν υπερμεγέθη, από καουτσούκ φορτισμένο με ζώνη
Arduino Based DIY Game Controller - Arduino PS2 Game Controller - Παίζοντας Tekken With DIY Arduino Gamepad: 7 Βήματα
Arduino Based DIY Game Controller | Arduino PS2 Game Controller | Παίζοντας Tekken With DIY Arduino Gamepad: Γεια σας παιδιά, το να παίζετε παιχνίδια είναι πάντα διασκεδαστικό, αλλά το παιχνίδι με το δικό σας προσαρμοσμένο χειριστήριο παιχνιδιών DIY είναι πιο διασκεδαστικό. Έτσι, θα κάνουμε έναν ελεγκτή παιχνιδιών χρησιμοποιώντας arduino pro micro σε αυτά τα εκπαιδευτικά
YABC - Another Another Blynk Controller - IoT Cloud Temperature and Humidity Controller, ESP8266: 4 βήματα
YABC - Another Another Blynk Controller - IoT Cloud Temperature and Humidity Controller, ESP8266: Hi Makers, άρχισα πρόσφατα να καλλιεργώ μανιτάρια στο σπίτι, μανιτάρια Oysters, αλλά έχω ήδη 3 από αυτούς τους ελεγκτές στο σπίτι για τον έλεγχο θερμοκρασίας Fermenter για το σπίτι μου, γυναίκα κάνει επίσης αυτό το πράγμα Kombucha τώρα και ως θερμοστάτης για θερμότητα
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, οπότε δεν μπορώ να πιστώσω όλη η ιδιοφυΐα τους. Απλώς ήθελα να προσθέσω την ευκολία και να επαναφορτίσω