Բովանդակություն:

Retro Controller: 7 քայլ
Retro Controller: 7 քայլ

Video: Retro Controller: 7 քայլ

Video: Retro Controller: 7 քայլ
Video: 1. Q Light Controller + Սկսել QLC +- ով: Արշավներ եւ գործառույթներ 2024, Նոյեմբեր
Anonim
Ռետրո վերահսկիչ
Ռետրո վերահսկիչ

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.

Ի սկզբանե, ինչպես նաև այս կամ այն ձայներիզով, դա այն էր, ինչ վերահսկիչն էր, որը պատրաստ էր այդ ձայներիզը:

Քայլ 1. Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Բաղադրիչ

- 2 կոճակ;

- 2 հզորության մետր;

- 2 weerstanden (1K elk);

- Արդուինո ունո/նանո

- Draadjes (zie elektronisch սխեմա)

- Soldeerplaat

- MDF ափսե

Գործիքներ

- լազերահատ

- Կնիպտանգ

- Ստրիպտանգ

- Soldeerbout (met tin)

Maրագրերի

- Պատկերազարդող/ինդիզայն (Tekenprogramma)

- հնձվոր

- վերամշակում

- Արդուինո

Քայլ 2: Կոդի մշակում

Կոդի մշակում
Կոդի մշակում

/**

* Հիմնական ուրվագիծ Arduino- ից * Սերիական հաղորդագրություններ ստանալու համար և դրանք թարգմանում է Reaper- ի համար OSC- հաղորդագրություններ * * Դուք պետք է հարմարեցնեք ՕԳՏԱԳՈՐՈՄՆԵՐԻ * և պետք է տեղադրեք Գրադարան. eddi * oct 2017 * *///////////////////// Օգտվողի պարամետրեր //////////////////// /////////

/ համոզվեք, որ դուք օգտագործում եք նույն բաուդ արագությունը ձեր Arduino էսքիզում final int baudRate = 115200;

// Գնացեք և OSC- ն օգտագործելիս փնտրեք IP հասցեն Reaper- ում // Սա այն հասցեն է, որը Processing- ը ուղարկում է և Reaper- ը լսում է: // Տեղադրեք այս տողը remoteIP- ում, այստեղ:

// վերջնական լարային հեռավոր IP = "192.168.1.43"; // օրինակ. «127.0.0.1»;

final String remoteIP = "vul hier ip in gevonden in reaper";

// Ուշադրություն դարձրեք sendPort- ին և լրացրեք այն Reaper- ում: // Սա այն նավահանգիստն է, որը Processing- ը ուղարկում և լսում է Reaper- ը:

վերջնական int listenPort = 11000, sendPort = 12000;

// ListenPort- ն այստեղ ակտիվ վրիպազերծումն է:

// portNames- ը այստեղ նույնպես կարգաբերելու համար է:

վերջնական լարային portName = "vul hier de portname in gevonden in Arduino";

// վերջնական լարային portName = "COM6"; // "/dev/ttyUSB0";

////////////////////// Օգտվողի պարամետրերի վերջ /////////////////////// ////

ներմուծման մշակում. սերիա:*; ներմուծել java.util.*;

ներմուծել oscP5.*; ներմուծել netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Սերիական commsPort; // Սերիական նավահանգիստ բուլյան հաղորդագրությունArrived = false;

Մուտքային տող = "", IncomingOSCMessage = "";

վերջնական նշան startChar = '*', endChar = '#'; վերջնական նշան contactCharacter = '|';

// Համոզված լինելու համար, որ մենք ուղարկում ենք միայն այն պարամետրերը (արժեքները), որոնք փոխվում են: HashMap oldParams, newParams, toSendParams;

// Մենք պետք է բաժանենք հաղորդագրությունը յուրաքանչյուր ստորակետով անվավեր processIncoming () {String resVec = incoming.split (","); // մենք ստանում ենք անուն+արժեքների զույգեր // այնպես որ յուրաքանչյուր անվան համար (+2)… փորձեք {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // տեղադրել դրանք նոր Hashtable newParams.put- ում (resVec , արժեք); }} // եթե սխալ է տեղի ունենում, եկեք բռնենք, որ այն ցուցադրվի և դուրս գանք: catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); ելք (); }}

// Մեր հաղորդագրությունները զտելու համար/ * Մենք համոզվում ենք, որ կա միայն OSC- հաղորդագրություն, երբ * մուտքային հաղորդագրությունը (Սերիալ) փոխվում է * Այսինքն. Եթե մենք շրջում/սեղմում ենք կոճակը և այն փոխում է արժեքը: * Այսպիսով, մենք զտում ենք մուտքային արժեքները, որոնք իրականում փոխվում են HashMap (); for (Լարային բանալին ՝ newParams.keySet ()) {// եթե բանալին արդեն առկա է, եթե (oldParams.containsKey (key)) {// բանալին ներկա է և արժեքը նույնը չէ, ապա թարմացրեք if (! oldParams.get (բանալի).հավասար (newParams.get (բանալին))) {toSendParams.put (բանալին, newParams.get (բանալին)); }} else {// բանալին հին պարամետրերում չկա, այնպես որ դրեք այն: toSendParams.put (բանալին, newParams.get (բանալին)); } oldParams.put (բանալին, newParams.get (բանալին)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (բանալին)); / * ուղարկել հաղորդագրություն */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Երբ մենք ցանկանում ենք տպել պատուհանում void ShowIncoming () {// ՝ մուտքային հաղորդագրությունը տեսնելու համար, ինչպես նշված է HashMap տեքստում («Ներգնա Arduino- ից», 20, 20); int y = 20; for (Լարային բանալին ՝ 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 (հեռավոր IP, sendPort); }

դատարկ վիճակահանություն () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = կեղծ; } showOsc (); }

void serialEvent (Serial commsPort) {// կարդալ սերիական նավահանգստից բայթ ՝ char inChar = commsPort.readChar (); անջատիչ (inChar) {case contactCharacter: commsPort.write (contactCharacter); // խնդրեք ավելի շատ տպագիր («սկսած …»); ընդմիջում; գործ startChar: մուտքային = ""; ընդմիջում; գործ endChar: messageArrived = true; // println ("ավարտը msg"); ընդմիջում; կանխադրված ՝ մուտքային += inChar; ընդմիջում; }}

/* մուտքային osc հաղորդագրությունը փոխանցվում է oscEvent մեթոդին: */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // ստացեք 1 -ին osc փաստարկը

IncomingOSCMessage + = "\ n" + String.format ("### ստացել է osc հաղորդագրություն." + "Addrpattern:" + theOscMessage.addrPattern () + ": %f", արժեք); println (IncomingOSCMessage); }

Քայլ 3: Կոդ Arduino

Կոդ Arduino
Կոդ Arduino

/* Այս ծածկագիրը հիմնական ուրվագիծն է `Սերիայի միջոցով մշակման հետ հաղորդակցվելու համար:

Դա նախագիծ է, որում կարող եք տեղադրել ձեր սեփական կոճակների, պոտենցիոմետրերի կամ տվիչների համար նշված ձեր սեփական կոդը:

Այն ունի ձեռքսեղմում `համոզվելու համար, որ մենք շփվում ենք, և որոշվում է, թե ինչ ձևով ենք մենք շփվում

Կարևոր է հաղորդագրությունը կառուցել նույն կերպ, որպեսզի Պրոցեսինգը իմանա, թե ինչպես քանդել այն և ճիշտ OSC- հաղորդագրություններ ուղարկել մեր DAW- ին

պատրաստված է werkcollege AV&IT oct 2017- ի համար

smooothing ծածկագիրը ստեղծվել է 2007 թ. ապրիլի 22 -ին ՝ David A. Mellis- ի կողմից, փոփոխվել է 2012 թ. ապրիլի 9 -ին ՝ Tom Igoe- ի կողմից

*/

/ baud rate const long baudRate = 115200;

// ժամանակը սպասելու ժամանակ ms- ում հարցումների միջև մինչև pins 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 կոճակ State2 = 0; // փոփոխական `կոճակի կարգավիճակի բոց sensorValue1 = 0 ընթերցելու համար: float sensorValue2 = 0; float sensorValue3 = 0;

// int ընթերցումների հարթեցում [numReadings]; // անալոգային մուտքից ընթերցումներ int readIndex3 = 0; // ընթացիկ ընթերցման ինդեքս int total3 = 0; // հոսող ընդհանուր բոց միջին 3 = 0; // միջինը

// Մեզ անհրաժեշտ է այս գործառույթը `մշակման ուրվագծի հետ կապ հաստատելու համար // Պահեք այստեղ void հաստատել Կոնտակտ () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // ուղարկեք նշան և սպասեք պատասխանի… հետաձգում (loopPauseTime); } Serial.read (); }

void setup () {// սահմանել pinModes- ը բոլոր կապում pinMode- ի համար (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// սկզբնականացնել Serial comms Serial.begin (baudRate); իսկ (! Սերիա); // հարթեցում (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// սպասեք ձեռքսեղմման հաստատմանըContact (); }

void loop () {// հարցում բոլոր կապում և ընթերցման քարտեզագրում համապատասխան տիրույթում կոճակ StateState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (կոճակ Pin2); sensorValue1 = analogRead (սկիպիդար ընթերցում); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (ինֆրակարդում);

// մուտքային արժեքների անհրաժեշտ արժեքներին համապատասխանեցնելը 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. Նախապատվությունների մեջ Control/OSC/web և druk op Add

Քայլ 3. Kies bij Control մակերևույթի ռեժիմ կամ OSC (Բաց ձայնային հսկողություն)

Քայլ 4: Vul je սարքի անվանումը, vink Ստացեք նավահանգստում aan en vul in wat er in processing in bij Sendport staat

Քայլ 5. Կապի սերվերի IP հասցեն կարող է մշակվել մշակման մեջ

Քայլ 6: Druk op ok en de controller is not verbondenen met Reaper

Քայլ 5: Բեհուիզացում

Բեհուիզացում
Բեհուիզացում

Breedte: 170 մմ

Երկարություն `90 մմ

Օղակ 30 մմ

Նոպոպեն ՝ 16 մմ (տրամագիծը

Պոտենցիալ մետր ՝ 3 մմ (տրամագիծ)

Afstand ցուցիչ ՝ Breedte 2.9 մմ

Երկարություն 0,8 մմ

Նյութը ՝ MDF (3 մմ)

Քայլ 6: Էլեկտրոնիկա

Քայլ 1:

Verbind de ground en 5 volt van Arduino met hetboard

Քայլ 2:

Verbind pin A0- ը հանդիպեց ուժ 1 -ին

Verbind pin A1- ը հանդիպեց պոտենցիալ 2 -ին

Verbind pin A3 met infrarood sensor.

Verbind pin A2- ը հանդիպեց կպչուն կոճակին:

Verbind pin A5- ը հանդիպեց կպչուն կոճակին:

Քայլ 7: Medewerkers

Medewerkers
Medewerkers

- Մայես Էլ Բաբա

- Առնո Գորիսեն

- Միշիել Դե Վանդելեր

Խորհուրդ ենք տալիս: