Cuprins:
- Pasul 1: Wat Heb Je Nodig?
- Pasul 2: Procesarea codului
- Pasul 3: Cod Arduino
- Pasul 4: secerător
- Pasul 5: Behuizing
- Pasul 6: Elektronica
- Pasul 7: Medewerkers
Video: Controler retro: 7 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
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 idee kwam van van een cassette, ons doel was om een controller te maken dat lijkt op een cassette.
Pasul 1: Wat Heb Je Nodig?
Componenten
- 2 butoane;
- 2 contoare Potentio;
- 2 înțelegeri (1K elk);
- Arduino uno / nano
- Draadjes (schema zie elektronisch)
- Soldeerplaat
- Placă MDF
Instrumente
- Lasercutter
- Kniptang
- Striptang
- Soldeerbout (met staniu)
Programele
- Ilustrator / indesign (Tekenprogramma)
- Secerător
- Prelucrare
- Arduino
Pasul 2: Procesarea codului
/**
* Schiță de bază pentru a primi mesaje seriale de la Arduino * și le traduce în mesaje OSC pentru Reaper * * Va trebui să adaptați PARAMETRII UTILIZATORULUI * și va trebui să instalați o Bibliotecă: oscP5 * * făcută pentru werkcollege AV&IT * de annoo bob eddi * oct 2017 * * / ///////////////////// PARAMETRI UTILIZATORI ////////////////////// ////////
/ asigurați-vă că utilizați aceeași rată baud în schița dvs. Arduino final int baudRate = 115200;
// Du-te și caută adresa IP în Reaper când folosești OSC // Aceasta este adresa de procesare pe care o trimite și Reaper o ascultă. // Puneți acest șir în remoteIP, aici.
// final String remoteIP = "192.168.1.43"; //de exemplu. "127.0.0.1";
final String remoteIP = "vul hier ip in gevonden in reaper";
// Ia act de sendPort și completează acest lucru în Reaper. // Acesta este portul pe care procesarea îl trimite și Reaper îl ascultă.
final int listenPort = 11000, sendPort = 12000;
// ListenPort aici este pentru a depana în mod activ.
// portNames sunt aici pentru a depana, de asemenea.
final String portName = "vul hier de portname in gevonden in Arduino";
// final String portName = "COM6"; // "/ dev / ttyUSB0";
///////////////////// END OF PARAMETERS USER ////////////////////////// ////
procesare import.serial. *; import java.util. *;
import oscP5. *; import netP5. *;
OscP5 oscP5; NetAddress myRemoteLocation;
Serial commsPort; // Portul serial mesaj boolean Sosit = fals;
String incoming = "", IncomingOSCMessage = "";
final char startChar = '*', endChar = '#'; final char contactCharacter = '|';
// Pentru a ne asigura că trimitem doar parametrii (valorile) care se schimbă // aceste variabile globale sunt delcarate aici, dar nu ar trebui // inițializate aici! HashMap oldParams, newParams, toSendParams;
// Trebuie să împărțim mesajul la fiecare virgulă processIncoming () {String resVec = incoming.split (","); // obținem perechi nume + valoare // deci pentru fiecare nume (+2) … încercați {pentru (int i = 0; i <resVec.length; i + = 2) {float value = Float.parseFloat (resVec [i + 1]); // puneți-le în noul Hashtable newParams.put (resVec , valoare); }} // dacă apare o eroare, să o prindem afișată și ieșită. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); Ieșire(); }}
// Pentru a ne filtra mesajele / * Ne asigurăm că există doar un mesaj OSC-out atunci când * mesajul de intrare (Serial) se schimbă * Adică: dacă rotim / apăsăm butonul și schimbă valoarea. * Deci, filtrăm valorile de intrare care se modifică efectiv * notă: nu vom evita sărirea valorilor *, deoarece provin de la accelerometre sau senzori de distanță * va trebui să le netezi singur în Arduino * / void filterParams () {toSendParams = new HashMap (); for (Cheie șir: newParams.keySet ()) {// dacă cheia este deja prezentă dacă (vechiParams.containsKey (cheie)) {// cheie prezentă și valoarea nu este aceeași, atunci actualizați dacă (! oldParams.get (cheie).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// cheia nu este prezentă în parametrii vechi, așa că puneți-o! toSendParams.put (cheie, newParams.get (cheie)); } oldParams.put (cheie, newParams.get (cheie)); }}
void makeOSC () {for (Cheie șir: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/" + cheie); myMessage.add (toSendParams.get (cheie)); / * trimite mesajul * / oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Când vrem să tipărim în fereastră nul ShowIncoming () {// pentru a vedea mesajul primit, așa cum este setat în textul HashMap („Incoming from Arduino”, 20, 20); int y = 20; pentru (Cheie șir: newParams.keySet ()) {y = y + 20; text (cheie, 20, y); text (newParams.get (cheie), 300, y); }}
void showOsc () {text (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
setare nulă () {dimensiune (1000, 800); // Umplerea dimensiunii etapei (255); fundal (0); oldParams = new HashMap (); newParams = new HashMap (); // printArray (Serial.list ()); commsPort = serial nou (this, portName, baudRate);
/ * pornește oscP5, ascultând mesajele primite * / oscP5 = OscP5 nou (acesta, listenPort);
/ * myRemoteLocation este un NetAddress. un NetAddress are 2 parametri, * o adresă IP și un număr de port. myRemoteLocation este utilizat ca parametru în * oscP5.send () la trimiterea pachetelor osc către alt computer, dispozitiv, * aplicație. utilizare vezi mai jos. în scopul testării, portul de ascultare * și portul adresei locației la distanță sunt aceleași, prin urmare, veți * trimite mesaje înapoi la această schiță. * / myRemoteLocation = new NetAddress (remoteIP, sendPort); }
void draw () {if (messageArrived) {fundal (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {// citește un octet din portul serial: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // cere mai multe println („pornind …”); pauză; case startChar: incoming = ""; pauză; case endChar: messageArrived = true; // println ("sfârșitul mesajului"); pauză; implicit: incoming + = inChar; pauză; }}
/ * mesajele osc primite sunt redirecționate către metoda oscEvent. * / void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // obține primul argument OSC
IncomingOSCMessage + = "\ n" + String.format ("### a primit un mesaj osc:" + "addrpattern:" + theOscMessage.addrPattern () + ":% f", valoare); println (IncomingOSCMessage); }
Pasul 3: Cod Arduino
/ * Acest cod este o schiță de bază pentru a comunica cu Procesarea prin Serial.
Este un plan în care puteți pune propriul cod specificat pentru propriile butoane, potențiometre sau senzori.
Are o strângere de mână pentru a ne asigura că avem contact și este decis formatul în care comunicăm
Este important să construim mesajul în același mod, astfel încât Processing să știe cum să-l deconstruiască și să trimită mesaje OSC corecte către DAW-ul nostru
făcut pentru werkcollege AV&IT oct 2017
cod smooothing creat la 22 aprilie 2007 de David A. Mellis modificat la 9 aprilie 2012 de Tom Igoe
*/
/ baud rate const long baudRate = 115200;
// timpul de așteptare în ms între sondaje la pinii const int loopPauseTime = 200; // milli secunde
// valori de început și de sfârșit pentru mesajul trimis pe Serial const String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin ID's const int buttonPin1 = 2; butonul const intPin2 = 5; const int numCitiri = 5; // evaluează netezirea vanului
int pitchReading = A1; int speedReading = A2; int infraCitire = A3;
// alte variabile globale int buttonState1 = 0; int buttonState2 = 0; // variabilă pentru citirea senzorului plutitor de stare al butonului Valoare1 = 0; senzor plutitor Valoare2 = 0; senzor plutitor Valoare3 = 0;
// netezirea citirilor int [numReadings]; // citirile din intrarea analogică int readIndex3 = 0; // indicele citirii curente int total3 = 0; // media float totală executată3 = 0; // media
// Avem nevoie de această funcție pentru a stabili contactul cu schița de procesare // Păstrați-l aici nul establizațiContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // trimiteți un caracter și așteptați un răspuns … întârziere (loopPauseTime); } Serial.read (); }
void setup () {// setează pinMode-urile pentru toate pin-urile pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);
// inițializează Serial comms Serial.begin (baudRate); while (! Serial); // netezire pentru (int thisReading = 0; thisReading <numReadings; thisReading ++) {lecturi [thisReading] = 0; }
// așteptați strângerea de mână, stabilițiContact (); }
void loop () {// sondează toți pinii și mapează citirea la intervalul corespunzător buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraCitire);
// maparea valorilor primite la valorile necesare sensorValue1 = map (senzorValue1, 0, 1023, 0, 100.0) / - 100.0; sensorValue2 = hartă (sensorValue2, 0, 1023, 0,0, 100) /100,0; sensorValue3 = hartă (sensorValue3, 0, 700, 50, 100);
// senzor de netezire: total3 = total3 - citiri [readIndex3]; // citit de la senzor: lecturi [readIndex3] = sensorValue3; // adaugă citirea la total: total3 = total3 + citiri [readIndex3]; // avansați la următoarea poziție din matrice: readIndex3 = readIndex3 + 1;
// dacă suntem la sfârșitul matricei … if (readIndex3> = numReadings) {// … încheie la început: readIndex3 = 0; } // calculați media: medie3 = (total3 / numCitiri); // senzor de netezire
Serial.print (startString); // începe o secvență de mesaje // introduceți toate numele, perechile de valori, separate prin virgule Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");
Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");
Serial.print ("infra-senzor"); Serial.print (","); Serial.print (medie3 / 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);
// scrie sfârșitul mesajului Serial.print (endString);
// așteptați un timp..
întârziere (loopPauseTime); }
Pasul 4: secerător
Etapa 1: Opțiuni> Preferențe
Etapa 2: Ga în preferații naar Control / OSC / web en druk op Add
Etapa 3: Kies bij Modul suprafeței de control pentru OSC (Open Sound Control)
Etapa 4: Vul je numele dispozitivului în, vink Primiți pe portul în vul în apă în procesarea bi Sendport staat
Etapa 5: Copiază de Host IP este în stare de lucru în procesare
Stap 6: Druk op ok en de controller is nu verbonden met Reaper
Pasul 5: Behuizing
Breedte: 170 mm
Lungime: 90 mm
Hoogte 30 mm
Knoppen: 16 mm (diametru
Potentio metri: 3 mm (diametru)
Senzor afstand: Breedte 2,9 mm
Lungime 0,8 mm
Materiale: MDF (3mm)
Pasul 6: Elektronica
Etapa 1:
Verbind de ground în 5 volt van Arduino met het breadboard
Etapa 2:
Verbind pin A0 met potentio 1
Verbind pin A1 și potentio 2
Pinul verbal A3 a întâlnit senzorul infraroșu.
Verbind pin A2 met de niet buton lipicios.
Verbind pin A5 și butonul lipicios.
Pasul 7: Medewerkers
- Mayes El Baba
- Arno Gorissen
- Michiel De Wandelaer
Recomandat:
Cum se instalează, se execută și se conectează un controler la un emulator: 7 pași
Cum să instalați, să rulați și să conectați un controler la un emulator: v-ați așezat vreodată și vă amintiți copilăria ca jucător tânăr și, uneori, ați dorit să puteți revedea acele pietre vechi ale trecutului? Ei bine, există o aplicație pentru asta … mai exact există o comunitate de jucători care fac program
Construiți un controler MIDI Arduino: 5 pași (cu imagini)
Construiți un controler MIDI Arduino: Bună tuturor! În acest instructiv vă voi arăta cum să vă construiți propriul controler MIDI alimentat de Arduino. MIDI înseamnă Music Instrument Digital Interface și este un protocol care permite computerelor, instrumentelor muzicale și alt hardware să comunice
Controler de alimentare CCTV - Raspberry Pi: 3 pași
Controler de alimentare CCTV - Raspberry Pi: Bună tuturor, bine ați venit la un alt instructabil de Scientify Inc.! Acest proiect optimizează ceea ce înregistrează o cameră CCTV utilizând detectarea încorporată a mișcării utilizând diferența medie pătrată (RMS) între două imagini consecutive. Acest lucru ajută la crearea fluxului CCTV
Controler de joc DIY bazat pe Arduino - Controler de joc Arduino PS2 - Jucând Tekken cu DIY Arduino Gamepad: 7 pași
Controler de joc DIY bazat pe Arduino | Controler de joc Arduino PS2 | Jucând Tekken cu DIY Arduino Gamepad: Bună, băieți, jocul este întotdeauna distractiv, dar jocul cu propriul controler personalizat DIY este mai distractiv
YABC - încă un controler Blynk - controler de temperatură și umiditate în cloud IoT, ESP8266: 4 pași
YABC - încă un alt controler Blynk - controler de temperatură și umiditate în cloud IoT, ESP8266: Bună ziua, producători, am început recent să cultiv ciuperci acasă, ciuperci de stridii, dar am deja 3x din aceste controlere acasă pentru controlul temperaturii fermentatorului pentru berea mea de acasă, soție face, de asemenea, acest lucru Kombucha acum și ca termostat pentru căldură