Სარჩევი:

რეტრო კონტროლერი: 7 ნაბიჯი
რეტრო კონტროლერი: 7 ნაბიჯი

ვიდეო: რეტრო კონტროლერი: 7 ნაბიჯი

ვიდეო: რეტრო კონტროლერი: 7 ნაბიჯი
ვიდეო: ლუკა და მარიამი 2024, ნოემბერი
Anonim
რეტრო კონტროლერი
რეტრო კონტროლერი

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

Samen hebben ჩვენ გვექნება 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 ვეგეტენი (1K elk);

- არდუინო უნო/ნანო

- Draadjes (zie elektronisch სქემა)

- Soldeerplaat

- MDF პლატა

ინსტრუმენტები

- ლაზერული საჭრელი

- კნიპტანგი

- სტრიპტანგი

- Soldeerbout (შეხვდა კალის)

პროგრამები

- ილუსტრატორი/ინდიზაინი (Tekenprogramma)

- მომკალი

- დამუშავება

- არდუინო

ნაბიჯი 2: კოდის დამუშავება

კოდის დამუშავება
კოდის დამუშავება

/**

* ძირითადი ესკიზი Arduino– სგან სერიული შეტყობინებების მისაღებად * და თარგმნის იმ OSC– შეტყობინებებს Reaper– ისთვის * * თქვენ დაგჭირდებათ USER PARAMETERS *-ის ადაპტირება და თქვენ დაგჭირდებათ ბიბლიოთეკის დაყენება: oscP5 * * დამზადებულია werkcollege AV&IT * მიერ annoo bob ედი * ოქტ 2017 * *///////////////////// USER PARAMETERS /////////////////// /////////

/ დარწმუნდით, რომ იყენებთ იგივე ბაუდს თქვენს Arduino ესკიზში საბოლოო int baudRate = 115200;

// წადით და მოძებნეთ IP მისამართი Reaper– ში OSC– ის გამოყენებისას // ეს არის მისამართი, რომელსაც უგზავნის დამუშავება და უსმენს Reaper. // ჩადეთ ეს სტრიქონი დისტანციურ IP– ში, აქ.

// საბოლოო სიმებიანი დისტანციური IP = "192.168.1.43"; //მაგალითად. "127.0.0.1";

საბოლოო სიმებიანი დისტანციური IP = "vul hier ip in gevonden in reaper";

// გაითვალისწინეთ sendPort და შეავსეთ ეს Reaper- ში. // ეს არის პორტი, რომელსაც უგზავნის დამუშავება და უსმენს Reaper.

საბოლოო int listenPort = 11000, sendPort = 12000;

// listenPort აქ არის აქტიურად გამართვის.

// პორტის სახელები აქაც არის გამართული.

საბოლოო სიმებიანი portName = "პორტალების სია არვუდოში";

// საბოლოო სიმებიანი portName = "COM6"; // "/dev/ttyUSB0";

////////////////////// USER PARAMETERS END /////////////////////// ////

იმპორტის დამუშავება. სერიალი.*; java.util.*;

იმპორტი oscP5.*; იმპორტი netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

სერიული commsPort; // სერიული პორტი ლოგიკური messageArrived = false;

სიმებიანი შემომავალი = "", IncomingOSCMessage = "";

საბოლოო char startChar = '*', endChar = '#'; საბოლოო char contactCharacter = '|';

// რათა დავრწმუნდეთ, რომ ჩვენ ვგზავნით მხოლოდ იმ პარამეტრებს (მნიშვნელობებს), რომლებიც იცვლება // ეს გლობალური ვარიაციები აქ არის ნაჩვენები, მაგრამ არ უნდა იყოს // ინიციალიზებული აქ! HashMap oldParams, newParams, toSendParams;

// ჩვენ უნდა გავყოთ შეტყობინება ყოველ მძიმით void 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 , მნიშვნელობა); }} // თუ შეცდომა მოხდება, დავიჭიროთ მისი ჩვენება და გასვლა. დაჭერა (გამონაკლისი ex) {println ("გამონაკლისის შეტყობინება:" + ყოფილი); printArray (resVec); გასვლა (); }}

// ჩვენი შეტყობინებების გასაფილტრავად/ * ჩვენ დარწმუნებულნი ვართ, რომ არსებობს მხოლოდ OSC- შეტყობინება, როდესაც * შეყვანის შეტყობინება (სერიული) იცვლება * ეს არის: თუ ჩვენ ვტრიალებთ/ვაჭერთ ღილაკს და ის ცვლის მნიშვნელობას. * ასე რომ, ჩვენ გავფილტროთ შემომავალი მნიშვნელობები, რომლებიც რეალურად იცვლება * შენიშვნა: ჩვენ არ ავიცილებთ თავიდან მნიშვნელობების გადახტომას * როგორც მაგ. აქსელერომეტრებიდან ან დისტანციის სენსორებიდან * თქვენ უნდა გაასწოროთ ის Arduino– ში */ void filterParams () {toSendParams = new HashMap (); for (სიმებიანი გასაღები: newParams.keySet ()) {// თუ გასაღები უკვე არის თუ (oldParams.containsKey (გასაღები)) {// გასაღები არის და მნიშვნელობა არ არის იგივე, შემდეგ განაახლეთ თუ (! oldParams.get (გასაღები). ტოლია (newParams.get (გასაღები))) {toSendParams.put (გასაღები, newParams.get (გასაღები)); }} სხვა {// გასაღები არ არის ძველ პარამებში, ასე რომ ჩაწერეთ! 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 ტექსტში ("შემომავალი არდუინოდან", 20, 20); int y = 20; for (სიმებიანი გასაღები: newParams.keySet ()) {y = y+20; ტექსტი (გასაღები, 20, y); ტექსტი (newParams.get (გასაღები), 300, y); }}

void showOsc () {text (შემომავალი OSCMessage, 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); }

void draw () {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 (); // მიიღეთ პირველი osc არგუმენტი

IncomingOSCMessage + = "\ n" + String.format ("### მიიღო osc შეტყობინება:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", მნიშვნელობა); println (შემომავალი OSCMessage); }

ნაბიჯი 3: კოდი Arduino

კოდი Arduino
კოდი Arduino

/* ეს კოდი არის ძირითადი ესკიზი დამუშავებასთან სერიალის საშუალებით.

ეს არის გეგმა, რომელშიც შეგიძლიათ განათავსოთ თქვენი საკუთარი კოდი, რომელიც მითითებულია თქვენი ღილაკების, პოტენომეტრების ან სენსორებისთვის.

მას აქვს ხელის ჩამორთმევა, რათა დავრწმუნდეთ, რომ ჩვენ გვაქვს კონტაქტი და ის ფორმატი, რომელშიც ჩვენ ვსაუბრობთ, გადაწყვეტილია

მნიშვნელოვანია გზავნილის ანალოგიურად აგება, რათა დამუშავებამ იცოდეს როგორ მოახდინოს მისი დეკონსტრუქცია და სწორი OSC შეტყობინებების გაგზავნა ჩვენს DAW– ში

დამზადებულია werkcollege AV&IT ოქტ 2017 -ისთვის

კოდი smooothing შეიქმნა 2007 წლის 22 აპრილს დავით ა. მელისმა შეიცვალა 2012 წლის 9 აპრილი ტომ იგოეს მიერ

*/

/ baud rate const long baudRate = 115200;

// დრო დაველოდოთ ms– ს გამოკითხვებს შორის pin int const loopPauseTime = 200; // მილი წამი

// სერიული 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 ღილაკი სახელმწიფო 2 = 0; // ცვლადი ღილაკის სტატუსის float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// int კითხვის შესუსტება [numReadings]; // წაკითხვა ანალოგური შეყვანიდან int readIndex3 = 0; // მიმდინარე კითხვის ინდექსი int total3 = 0; // გაშვებული მთლიანი float average3 = 0; // საშუალო

// ჩვენ გვჭირდება ეს ფუნქცია დამუშავების ესკიზთან კონტაქტის დასამყარებლად // შეინახეთ იგი აქ void estabContact () {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); ხოლო (! სერიული); // smoothing for (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// დაელოდეთ ხელის ჩამორთმევას հաստատვაContact (); }

void loop () {// გამოკითხეთ ყველა ქინძისთავები და მიუთითეთ კითხვა შესაბამის დიაპაზონში buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (ღილაკი Pin2); sensorValue1 = analogRead (pitchReading); 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); // შეტყობინებების მიმდევრობის დაწყება // ყველა სახელის, მნიშვნელობის წყვილების გამოყოფა, მძიმეებით გამოყოფილი 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: ჩაწერეთ პარამეტრები/კონტროლი/OSC/ვებ და დამატება

ნაბიჯი 3: Kies bij Control ზედაპირის რეჟიმი voor OSC (ღია ხმის კონტროლი)

სტეპი 4: Vul je მოწყობილობის სახელი, vink მიიღეთ პორტში aan en vul in wat er დამუშავების მიზნით Sendport staat

ნაბიჯი 5: დააკოპირეთ მასპინძელი IP და დაათვალიერეთ იგი დამუშავების პროცესში

ნაბიჯი 6: მართვის მოწმობა და კონტროლერი ვერ შეხვდა Reaper- ს

ნაბიჯი 5: ბეჰუიზინგი

ბეჰუიზინგი
ბეჰუიზინგი

ჯიში: 170 მმ

სიგრძე: 90 მმ

ჯოხი 30 მმ

კნუპენი: 16 მმ (დიამეტრი

პოტენციური მეტრი: 3 მმ (დიამეტრი)

Afstand სენსორი: Breedte 2.9 მმ

სიგრძე 0.8 მმ

მასალა: MDF (3 მმ)

ნაბიჯი 6: ელექტრონიკა

ნაბიჯი 1:

Verdind de ground en 5 ვოლტი Arduino შეხვდა hetboard

ნაბიჯი 2:

Verbind pin A0 შეხვდა potentio 1

Verbind pin A1 შეხვდა potentio 2

Verbind pin A3 შეხვდა ინფრაწითელი სენსორი.

Verbind pin A2 შეხვდა ძალიან წებოვან ღილაკს.

Verbind pin A5 შეხვდა წებოვან ღილაკს.

ნაბიჯი 7: მედვერი

მესაზღვრეები
მესაზღვრეები

- მაიეს ელ ბაბა

- არნო გორისენი

- მიჩიელ დე ვანდელაერი

გირჩევთ: