Talaan ng mga Nilalaman:

Retro Controller: 7 Hakbang
Retro Controller: 7 Hakbang

Video: Retro Controller: 7 Hakbang

Video: Retro Controller: 7 Hakbang
Video: Начало работы с QLC+ Управление цветомузыкой с компьютера. Как управлять светом. 2024, Setyembre
Anonim
Retro Controller
Retro Controller

Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.

Samen hebben we een muziek controller gemaakt dat muziek para starten / stoppen, de pitch para verhogen, para sa terugspoelen en nog meer.

Sa pamamagitan ng iyong van van een cassette, ons doel ay ang tagapagtanggol upang makagawa ng datos sa cassette.

Hakbang 1: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Componenten

- 2 Mga Pindutan;

- 2 Potentio metro;

- 2 weerstanden (1K elk);

- Arduino uno / nano

- Draadjes (zie elektronisch schema)

- Soldeerplaat

- MDF plaat

Mga kasangkapan

- Lasercutter

- Kniptang

- Striptang

- Soldeerbout (nakilala ang lata)

Programma's

- Ilustrator / indesign (Tekenprogramma)

- Reaper

- Pagproseso

- Arduino

Hakbang 2: Pagpoproseso ng Code

Pagproseso ng Code
Pagproseso ng Code

/**

* Pangunahing sketch upang makatanggap ng mga Serial na mensahe mula sa Arduino * at isinalin ang mga iyon sa mga OSC-message para sa Reaper * * Kakailanganin mong iakma ang USER PARAMETERS * at kakailanganin mong mag-install ng isang Library: oscP5 * * na ginawa para sa werkcollege AV&IT * ni Annoo bob eddi * oct 2017 * * / // // ///. // ///

/ tiyaking gumagamit ka ng parehong rate ng baud sa iyong Arduino sketch final int baudRate = 115200;

// Pumunta at hanapin ang IP-address sa Reaper kapag gumagamit ng OSC // Ito ang address na ipinapadala ng Pagproseso at nakikinig si Reaper. // Ilagay ang string na ito sa remoteIP, dito.

// final String remoteIP = "192.168.1.43"; // hal. "127.0.0.1";

pangwakas na String remoteIP = "vul hier ip in gevonden in ani";

// Take note of the sendPort at punan ito sa Reaper. // Ito ang port na Pinapadala ng Pagproseso at nakikinig si Reaper.

pangwakas na int makinigPort = 11000, sendPort = 12000;

// Ang listenPort dito ay upang aktibong i-debug.

// ang mga portNames ay narito upang mag-debug din.

huling String portName = "vul hier de portname sa gevonden sa Arduino";

// final String portName = "COM6"; // "/ dev / ttyUSB0";

// ///. // //

pagproseso ng pag-import.serial. *; import java.util. *;

i-import ang oscP5. *; i-import ang netP5. *;

OscP5 oscP5; NetAddress myRemoteLocation;

Serial commsPort; // The serial port boolean messageArrived = false;

Papasok na string = "", PapasokOSCMessage = "";

huling char startChar = '*', endChar = '#'; pangwakas na char contactCharacter = '|';

// Upang matiyak na ipinapadala lamang namin ang mga parameter (halaga) na nagbabago // ang mga pandaigdigang variabl na ito ay na-delcared dito ngunit hindi dapat // hindi naisimulan dito! HashMap oldParams, newParams, toSendParams;

// Kailangan naming hatiin ang mensahe sa bawat proseso ng walang bisa na proseso Pagdating () {String resVec = papasok.split (","); // nakukuha namin ang mga pares ng pangalan + halaga // kaya para sa bawat pangalan (+2)… subukan {para (int i = 0; i <resVec.length; i + = 2) {float value = Float.parseFloat (resVec [i + 1]); // ilagay ang mga ito sa bagong Hashtable newParams.put (resVec , halaga); }} // kung may naganap na error, abangan natin itong ipakita at lumabas. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); exit (); }}

// Upang ma-filter ang aming mga mensahe / * Tinitiyak namin na mayroon lamang isang mensahe ng OSC-out kapag * nagbabago ang input message (Serial) * Iyon ay: kung pipihitin natin / itulak ang pindutan at binago nito ang halaga. * Kaya sinala namin ang mga papasok na halaga na talagang nagbabago * tala: hindi namin maiiwasan ang mga paglukso na halaga * na nagmula sa hal. Mga accelerometro o distansya sensor * kakailanganin mong pakinisin ang iyong sarili sa Arduino * / void filterParams () {toSendParams = bago HashMap (); para sa (String key: newParams.keySet ()) {// kung ang key ay naroroon kung (oldParams.containsKey (key)) {// key na naroroon at ang halaga ay hindi pareho, pagkatapos ay i-update kung (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} iba pa {// key ay wala sa mga lumang param, kaya't ilagay ito! toSendParams.put (key, newParams.get (key)); } oldParams.put (key, newParams.get (key)); }}

void makeOSC () {para sa (String key: toSendParams.keySet ()) {OscMessage myMessage = bagong OscMessage ("/" + key); myMessage.add (toSendParams.get (key)); / * ipadala ang mensahe * / oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Kapag nais naming i-print sa window na walang bisa ang ShowIncoming () {// upang makita ang papasok na mensahe, tulad ng nakatakda sa teksto ng HashMap ("Papasok mula sa Arduino", 20, 20); int y = 20; para sa (String key: newParams.keySet ()) {y = y + 20; teksto (susi, 20, y); teksto (newParams.get (key), 300, y); }}

void showOsc () {text (IncomingOSCMessage, 300, 200); PapasokOSCMessage = ""; }

walang bisa ang pag-setup () {laki (1000, 800); // Punan ang laki ng entablado (255); background (0); oldParams = bagong HashMap (); newParams = bagong HashMap (); // printArray (Serial.list ()); commsPort = bagong Serial (ito, portName, baudRate);

/ * simulan ang oscP5, pakikinig para sa papasok na mga mensahe * / oscP5 = bagong OscP5 (ito, listenPort);

/ * myRemoteLocation ay isang NetAddress. ang isang NetAddress ay tumatagal ng 2 mga parameter, * isang ip address at isang numero ng port. Ang myRemoteLocation ay ginagamit bilang parameter sa * oscP5.send () kapag nagpapadala ng mga osc packet sa isa pang computer, aparato, * application. paggamit tingnan sa ibaba. para sa mga layuning pansubok ang pakikinig port * at ang port ng malayuang lokasyon ng address ay pareho, samakatuwid ay * magpapadala ka ng mga mensahe pabalik sa sketch na ito. * / myRemoteLocation = bagong NetAddress (remoteIP, sendPort); }

void draw () {if (messageArrived) {background (0); translateMessage (); Ipakita ang Papasok (); messageArrived = false; } showOsc (); }

void serialEvent (Serial commsPort) {// basahin ang isang byte mula sa serial port: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // ask for more println ("simula…"); pahinga; case startChar: papasok = ""; pahinga; case endChar: messageArrived = true; // println ("katapusan ng msg"); pahinga; default: papasok + = inChar; pahinga; }}

/ * Ang papasok na mensahe ng osc ay naipasa sa pamamaraang oscEvent. * / void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // makuha ang 1st osc argument

IncomingOSCMessage + = "\ n" + String.format ("natanggap ang isang osc message:" + "addrpattern:" + theOscMessage.addrPattern () + ":% f", halaga); println (PapasokOSCMessage); }

Hakbang 3: Code Arduino

Code Arduino
Code Arduino

/ * Ang code na ito ay isang pangunahing sketch upang makipag-usap sa Pagproseso sa pamamagitan ng Serial.

Ito ay isang blueprint kung saan maaari mong ilagay ang iyong sariling code na tinukoy para sa iyong sariling mga pindutan, potentiometers o sensor.

Mayroon itong isang handshake upang matiyak na mayroon kaming contact at ang format na kung saan kami nakikipag-usap ay napagpasyahan

Mahalagang buuin ang mensahe sa parehong paraan, upang malaman ng Pagproseso kung paano ito deconstruct at magpadala ng mga tamang mensahe ng OSC sa aming DAW

ginawa para sa werkcollege AV&IT oct 2017

code smooothing nilikha noong Abril 22, 2007 ni David A. Mellis binago noong 9 Abril 2012 ni Tom Igoe

*/

/ baud rate const long baudRate = 115200;

// oras upang maghintay sa ms sa pagitan ng mga botohan sa mga pin const int loopPuseTime = 200; // milli segundo

// mga halaga ng pagsisimula at pagtatapos para sa mensahe na ipinadala sa Serial const String startString = "*", endString = "#";

Const char contactCharacter = '|';

// pin id's int int buttonPin1 = 2; Const int buttonPin2 = 5; const int numReadings = 5; // rate van smoothing

int pitchReading = A1; int speedReading = A2; int infraReading = A3;

// other global variable variable button buttonState1 = 0; int buttonState2 = 0; // variable para sa pagbabasa ng pushbutton status float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// smoothing int readings [numReadings]; // the readings from the analog input int readIndex3 = 0; // ang index ng kasalukuyang pagbabasa int total3 = 0; // the running total float average3 = 0; // ang karaniwan

// Kailangan namin ang pagpapaandar na ito upang maitaguyod ang pakikipag-ugnay sa Pagproseso ng sketch // Panatilihin ito dito na walang bisa ang establishContact () {habang (Serial.available () <= 0) {Serial.print (contactCharacter); // magpadala ng char at maghintay para sa isang tugon… pagkaantala (loopPauseTime); } Serial.read (); }

void setup () {// itakda ang mga pinMode para sa lahat ng mga pin pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// initialize Serial comms Serial.begin (baudRate); habang (! Serial); // smoothing for (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// wait for handshake establishContact (); }

void loop () {// poll lahat ng mga pin at mapa ang pagbabasa sa naaangkop na button buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// maping ang mga papasok na halaga sa kinakailangang mga halaga sensorValue1 = mapa (sensorValue1, 0, 1023, 0, 100.0) / - 100.0; sensorValue2 = mapa (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = mapa (sensorValue3, 0, 700, 50, 100);

// smoothing sensor: total3 = total3 - readings [readIndex3]; // read from the sensor: readings [readIndex3] = sensorValue3; // idagdag ang pagbabasa sa kabuuan: total3 = total3 + readings [readIndex3]; // advance sa susunod na posisyon sa array: readIndex3 = readIndex3 + 1;

// kung nasa dulo kami ng array … kung (readIndex3> = numReadings) {// … balot sa umpisa: readIndex3 = 0; } // kalkulahin ang average: average3 = (total3 / numReadings); // smoothing sensor

Serial.print (startString); // simulan ang isang pagkakasunud-sunod ng mensahe // wirte ang lahat ng mga pangalan, mga pares ng halaga, na pinaghihiwalay ng mga kuwit na Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");

Serial.print ("infra-sensor"); Serial.print (","); Serial.print (average3 / 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);

// isulat ang katapusan ng mensahe Serial.print (endString);

// teka sandali..

antala (loopPauseTime); }

Hakbang 4: Reaper

Reaper
Reaper

Stap 1: Ga bovenaan naar Mga Pagpipilian> Mga Prefrence

Stap 2: Ga sa prefrences naar Control / OSC / web at idagdag ang Magdagdag

Stap 3: Kies bij Control ibabaw mode voor OSC (Buksan ang Sound Control)

Stap 4: Pangalan ng aparatong aparato sa, vink Recieve sa port aan en vul sa wat er sa pagproseso ng Sendport staat

Stap 5: Ang Kopieer de Host IP ay namatay sa pamamagitan ng pag-proseso sa Pagproseso

Stap 6: Ang Druk op ok en de controller ay ang verbonden na nakilala ang Reaper

Hakbang 5: Behuizing

Behuizing
Behuizing

Breedte: 170 mm

Lengte: 90 mm

Hoogte 30 mm

Knoppen: 16 mm (diameter

Potentio metro: 3 mm (diameter)

Afstand sensor: Breedte 2.9 mm

Lengte 0.8 mm

Materiaal: MDF (3mm)

Hakbang 6: Elektronica

Stap 1:

Ang Verbind de ground en 5 volt van Arduino ay nakilala ang het breadboard

Stap 2:

Ang Verbind pin A0 ay nakilala ang potentio 1

Ang Verbind pin A1 ay nakilala potentio 2

Nakilala ng Verbind pin A3 ang infrarood sensor.

Ang pandikit na pin na A2 ay nakilala ang malagkit na pindutan.

Ang Verbind pin A5 ay nakilala ang de sticky button.

Hakbang 7: Mga Medewerker

Mga manggagamot
Mga manggagamot

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Inirerekumendang: