Բովանդակություն:
- Քայլ 1. Wat Heb Je Nodig?
- Քայլ 2: Կոդի մշակում
- Քայլ 3: Կոդ Arduino
- Քայլ 4: Հնձիչ
- Քայլ 5: Բեհուիզացում
- Քայլ 6: Էլեկտրոնիկա
- Քայլ 7: Medewerkers
Video: Retro Controller: 7 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
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?
Բաղադրիչ
- 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
/* Այս ծածկագիրը հիմնական ուրվագիծն է `Սերիայի միջոցով մշակման հետ հաղորդակցվելու համար:
Դա նախագիծ է, որում կարող եք տեղադրել ձեր սեփական կոճակների, պոտենցիոմետրերի կամ տվիչների համար նշված ձեր սեփական կոդը:
Այն ունի ձեռքսեղմում `համոզվելու համար, որ մենք շփվում ենք, և որոշվում է, թե ինչ ձևով ենք մենք շփվում
Կարևոր է հաղորդագրությունը կառուցել նույն կերպ, որպեսզի Պրոցեսինգը իմանա, թե ինչպես քանդել այն և ճիշտ 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
- Մայես Էլ Բաբա
- Առնո Գորիսեն
- Միշիել Դե Վանդելեր
Խորհուրդ ենք տալիս:
Retro Arcade - (Full Size Powered by Raspberry Pi) ՝ 8 քայլ
Retro Arcade - (Full Size Powered by Raspberry Pi). Սկզբում ուզում էի շնորհակալություն հայտնել ձեզ այս Retro Arcade համակարգի կառուցման ուղեցույցը դիտելու համար: Ես վերցնում եմ ավելի հին արկադային տուփ և տեղադրում այն առանձին կաբինետում ՝ 24 դյույմանոց լայն էկրանով մոնիտորով: Այս ուղեցույցի չափումները դժվար է տալ
Retro «Rayotron» գիշերային լույս (մաս 1) ՝ 16 քայլ
Retro «Rayotron» գիշերային լույս (մաս 1). Ներածություն 1956 թվականի դեկտեմբերին Atomic Laboratories– ը գովազդեց Rayotron– ը որպես «Առաջին ցածրարժեք էլեկտրաստատիկ գեներատոր և մասնիկների արագացուցիչ» ՝ բնագիտության ուսուցիչների և հոբբիստների համար [1]: Rayotron- ը գեր չափի, ռետինե ժապավենով լիցքավորված էր
Ձայնային թռիչք Arduino Uno- ի հետ Քայլ առ քայլ (8 քայլ) `8 քայլ
Ձայնային թռիչք Arduino Uno- ի հետ Քայլ առ քայլ (8 քայլ). Ուլտրաձայնային ձայնային փոխարկիչներ L298N Dc կանացի ադապտեր էներգիայի մատակարարում արական dc pin Arduino UNOBreadboard և անալոգային նավահանգիստներ ՝ կոդը փոխարկելու համար (C ++)
Հսկայական Retro Games Dancefloor Style Controller: 4 քայլ
Հսկայական Retro Games Dancefloor Style Controller: Այս տարվա մարտին մեր հարսանիքի համար մենք ցանկանում էինք Retro game themed ընդունելության երեկո, քանի որ մենք պարզապես մեծ երեխաներ ենք, և ես վստահ եմ, որ շատ այլ մարդիկ նույնպես: Այսպիսով, մի փոքր անց: MakeyMakey's- ի հետազոտություն Ես մտածեցի, որ հիանալի գաղափար կլինի գրկել
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- ից, այնպես որ ես չեմ կարող վարկ վերցնել դրա համար: նրանց բոլոր հանճարը: Ես պարզապես ուզում էի ավելացնել հարմարավետությունը և վերալիցքավորել