সুচিপত্র:

রেট্রো কন্ট্রোলার: 7 টি ধাপ
রেট্রো কন্ট্রোলার: 7 টি ধাপ

ভিডিও: রেট্রো কন্ট্রোলার: 7 টি ধাপ

ভিডিও: রেট্রো কন্ট্রোলার: 7 টি ধাপ
ভিডিও: How to run a burner? কিভাবে একটি বার্নার রান হয়? 2024, নভেম্বর
Anonim
রেট্রো কন্ট্রোলার
রেট্রো কন্ট্রোলার

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

সামেন হেববেন আমরা ইয়েন মিউজিক কন্ট্রোলার জেমাক্ট ডেট মুজিয়েক কান স্টার্টেন/স্টপপেন, ডি পিচ কান ভারহোজেন, কান টেরুগসপোলেন এন নোগ মীর।

Ons idee kwam van van een cassette, ons doel was om een controller te maken dat lijkt op een cassette।

ধাপ 1: ওয়াট হেব জে নডিগ?

ওয়াট হেব জে নডিগ?
ওয়াট হেব জে নডিগ?

কম্পোনেন্টেন

- 2 বোতাম;

- 2 Potentio মিটার;

- 2 ওয়েয়ারস্ট্যান্ডেন (1 কে এলক);

- Arduino uno/nano

- Draadjes (zie elektronisch স্কিমা)

- সোল্ডারপ্লেট

- MDF প্লেট

সরঞ্জাম

- লেজারকাটার

- নিপটাং

- স্ট্রিপ্টাং

- Soldeerbout (দেখা টিন)

প্রোগ্রামার

- ইলাস্ট্রেটর/ইন্ডিজাইন (টেকেনপ্রোগ্রামা)

- কাটার

- প্রক্রিয়াকরণ

- আরডুইনো

ধাপ 2: কোড প্রসেসিং

কোড প্রসেসিং
কোড প্রসেসিং

/**

* আরডুইনো থেকে সিরিয়াল মেসেজ পাওয়ার বেসিক স্কেচ * এবং সেগুলিকে ওএসসি-মেসেজে রিপারের জন্য অনুবাদ করে * * আপনাকে ইউজার প্যারামিটারগুলিকে মানিয়ে নিতে হবে * এবং আপনাকে লাইব্রেরি ইনস্টল করতে হবে: oscP5 * * ওয়ার্ককলেজের জন্য তৈরি করা হয়েছে eddi * oct 2017 * *//////////////////////// ব্যবহারকারী প্যারামিটার ///////////////////// ////////

/ আপনার Arduino স্কেচ চূড়ান্ত int baudRate = 115200 এ একই বড রেট ব্যবহার করুন তা নিশ্চিত করুন;

// যান এবং OSC ব্যবহার করার সময় Reaper এ IP- ঠিকানাটি সন্ধান করুন // এই ঠিকানাটি প্রসেসিং পাঠায় এবং Reaper শোনে। // এই স্ট্রিংটি রিমোট আইপি -তে রাখুন, এখানে।

// চূড়ান্ত স্ট্রিং remoteIP = "192.168.1.43"; // যেমন। "127.0.0.1";

চূড়ান্ত স্ট্রিং রিমোট আইপি = "ভিয়ার হায়ার আইপি ইন গেভন্ডেন ইন রেপার";

// সেন্ডপোর্টের নোট নিন এবং এটি রিপারে পূরণ করুন। // এই পোর্ট প্রসেসিং পাঠায় এবং Reaper শোনে।

চূড়ান্ত int listenPort = 11000, sendPort = 12000;

// এখানে শোনার পোর্টটি সক্রিয়ভাবে ডিবাগ করা।

// পোর্ট নামগুলিও ডিবাগ করার জন্য এখানে রয়েছে।

চূড়ান্ত স্ট্রিং পোর্ট নাম = "আরডুইনোতে গেভন্ডেনে ভুল হিয়ার ডি পোর্টনেম";

// চূড়ান্ত স্ট্রিং portName = "COM6"; // "/dev/ttyUSB0";

///////////////////// ব্যবহারকারী প্যারামিটারের সমাপ্তি /////////////////////////// ////

আমদানি প্রক্রিয়াকরণ সিরিয়াল।*; আমদানি java.util।*;

আমদানি oscP5।*; আমদানি netP5।*;

OscP5 oscP5; NetAddress myRemoteLocation;

সিরিয়াল commsPort; // সিরিয়াল পোর্ট বুলিয়ান বার্তা আগমন = মিথ্যা;

স্ট্রিং ইনকামিং = "", IncomingOSCMessage = "";

চূড়ান্ত চর startChar = '*', endChar = '#'; চূড়ান্ত চর পরিচিতি = '|';

// নিশ্চিত করার জন্য যে আমরা কেবলমাত্র প্যারামিটার (মান) পাঠাই যা পরিবর্তন করে // এই বৈশ্বিক বৈচিত্র্যগুলি এখানে সন্ধান করা হয়েছে কিন্তু এখানে // আরম্ভ করা উচিত নয়! হ্যাশম্যাপ পুরাতন প্যারামস, নতুন প্যারামস, টু সেন্ডপ্যারামস;

// আমাদের প্রতিটি কমা অকার্যকর প্রসেসে ইনকামিং () {স্ট্রিং resVec = incoming.split (",") বার্তা বিভক্ত করতে হবে; // আমরা নাম+মান জোড়া পাই // তাই প্রতিটি নামের জন্য (+2)… চেষ্টা করুন {for (int i = 0; i <resVec.length; i+= 2) {float value = float.parseFloat (resVec [i+ 1]); // তাদের নতুন হ্যাশটেবল newParams.put (resVec , মান) এ রাখুন; }} // যদি কোন ত্রুটি ঘটে, আসুন আমরা এটি প্রদর্শন করি এবং প্রস্থান করি। catch (Exception ex) {println ("ব্যতিক্রম বার্তা:" + ex); printArray (resVec); প্রস্থান (); }}

// আমাদের বার্তা ফিল্টার করার জন্য * তাই আমরা ইনকামিং মানগুলিকে ফিল্টার করে ফেলি যা আসলে পরিবর্তিত হয় * নোট: আমরা জাম্পিং মানগুলি এড়িয়ে যাব না * যেমন অ্যাকসিলরোমিটার বা দূরত্ব সেন্সর থেকে আসে * আপনাকে Arduino */ void filterParams () {toSendParams = নতুন হ্যাশ মানচিত্র(); জন্য (স্ট্রিং কী: newParams.keySet ()) {// যদি চাবি ইতিমধ্যেই উপস্থিত থাকে যদি (oldParams.containsKey (key)) {// key present and value not the same, then update if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} অন্যথায় {// কী পুরাতন প্যারামে নেই, তাই এটি রাখুন! toSendParams.put (কী, newParams.get (কী)); } oldParams.put (কী, newParams.get (কী)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = নতুন OscMessage ("/"+ কী); myMessage.add (toSendParams.get (কী)); / * বার্তা পাঠান */ oscP5.send (myMessage, myRemoteLocation); }}

অকার্যকর translateMessage () {processIncoming (); filterParams (); makeOSC (); } // যখন আমরা উইন্ডোতে অকার্যকর ShowIncoming () {// ইনকামিং মেসেজ দেখতে চাই, যেমন হ্যাশম্যাপ টেক্সটে সেট করা আছে ("Arduino থেকে ইনকামিং", 20, 20); int y = 20; জন্য (স্ট্রিং কী: newParams.keySet ()) {y = y+20; পাঠ্য (কী, 20, y); পাঠ্য (newParams.get (কী), 300, y); }}

অকার্যকর showOsc () {পাঠ্য (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }

অকার্যকর সেটআপ () {আকার (1000, 800); // স্টেজ সাইজ ফিল (255); পটভূমি (0); oldParams = নতুন হ্যাশম্যাপ (); newParams = নতুন হ্যাশম্যাপ (); // printArray (Serial.list ()); commsPort = নতুন সিরিয়াল (এই, portName, baudRate);

/ * শুরু oscP5, আগত বার্তাগুলির জন্য শোনা */ oscP5 = নতুন OscP5 (এই, ListenPort);

/* myRemoteLocation হল একটি NetAddress। একটি NetAddress 2 প্যারামিটার, * একটি আইপি ঠিকানা এবং একটি পোর্ট নম্বর নেয়। myRemoteLocation অন্য কম্পিউটার, ডিভাইস, * অ্যাপ্লিকেশনে osc প্যাকেট পাঠানোর সময় * oscP5.send () এ প্যারামিটার হিসেবে ব্যবহৃত হয়। ব্যবহার নীচে দেখুন। পরীক্ষার উদ্দেশ্যে শোনার পোর্ট * এবং দূরবর্তী অবস্থানের ঠিকানার পোর্ট একই, তাই আপনি * এই স্কেচে বার্তা পাঠাবেন। */ myRemoteLocation = নতুন NetAddress (remoteIP, sendPort); }

অকার্যকর ড্র () {যদি (messageArrived) {ব্যাকগ্রাউন্ড (0); অনুবাদ মেসেজ (); ShowIncoming (); বার্তা আগমন = মিথ্যা; } showOsc (); }

void serialEvent (Serial commsPort) {// সিরিয়াল পোর্ট থেকে একটি বাইট পড়ুন: char inChar = commsPort.readChar (); সুইচ (ইনচার) {ক্ষেত্রে contactCharacter: commsPort.write (contactCharacter); // আরো println জন্য জিজ্ঞাসা ("শুরু…"); বিরতি; কেস স্টার্টচার: ইনকামিং = ""; বিরতি; case endChar: messageArrived = true; // println ("msg এর শেষ"); বিরতি; ডিফল্ট: ইনকামিং += ইনচার; বিরতি; }}

/* আগত osc বার্তা oscEvent পদ্ধতিতে ফরওয়ার্ড করা হয়। */ অকার্যকর oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // 1 ম osc যুক্তি পান

IncomingOSCMessage + = "\ n" + String.format ("### একটি osc বার্তা পেয়েছেন:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", মান); println (IncomingOSCMessage); }

ধাপ 3: কোড আরডুইনো

কোড আরডুইনো
কোড আরডুইনো

/* এই কোডটি সিরিয়ালের মাধ্যমে প্রক্রিয়াকরণের সাথে যোগাযোগ করার জন্য একটি মৌলিক স্কেচ।

এটি একটি ব্লুপ্রিন্ট যেখানে আপনি আপনার নিজের বোতাম, পোটেন্টিওমিটার বা সেন্সরের জন্য নির্দিষ্ট কোড রাখতে পারেন।

আমাদের সাথে যোগাযোগ আছে কিনা তা নিশ্চিত করার জন্য এটি একটি হ্যান্ডশেক রয়েছে এবং আমরা যে ফর্ম্যাটে যোগাযোগ করছি তা ঠিক করা হয়েছে

বার্তাটি একইভাবে তৈরি করা গুরুত্বপূর্ণ, যাতে প্রসেসিং জানে কিভাবে এটি পুনonনির্মাণ করতে হবে এবং আমাদের DAW- এ সঠিক OSC- বার্তা পাঠাতে হবে

Werkcollege AV & IT অক্টোবর 2017 এর জন্য তৈরি

কোড স্মুথিং 22 এপ্রিল 2007 তৈরি করেছেন ডেভিড এ মেলিস 9 এপ্রিল 2012 সংশোধন করেছেন টম ইগো দ্বারা

*/

/ baud rate const long baudRate = 115200;

// পিন পয়েন্টের মধ্যে এমএস -তে অপেক্ষা করার সময় const int loopPauseTime = 200; // মিলি সেকেন্ড

// সিরিয়াল const স্ট্রিং startString = "*", endString = "#" এ পাঠানো বার্তার জন্য শুরু এবং শেষের মান;

const char contactCharacter = '|';

// পিন আইডি এর 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 buttonState2 = 0; // pushbutton স্ট্যাটাস ফ্লোট সেন্সরভ্যালু 1 = 0 পড়ার জন্য পরিবর্তনশীল; ভাসমান সেন্সর ভ্যালু 2 = 0; ভাসা সেন্সর ভ্যালু 3 = 0;

// মসৃণ int রিডিং [numReadings]; // এনালগ ইনপুট থেকে রিডিং int readIndex3 = 0; // বর্তমান পড়ার সূচক int total3 = 0; // চলমান মোট ভাসমান গড় 3 = 0; // গড়

// প্রসেসিং স্কেচের সাথে যোগাযোগ স্থাপনের জন্য আমাদের এই ফাংশনটি প্রয়োজন // এটি এখানে void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // একটি চর পাঠান এবং একটি প্রতিক্রিয়ার জন্য অপেক্ষা করুন… বিলম্ব (loopPauseTime); } সিরিয়াল.রিড (); }

অকার্যকর সেটআপ () {// সব পিন পিনমোডের জন্য pinModes সেট করুন (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); পিনমোড (পিচ রিডিং, ইনপুট); pinMode (speedReading, INPUT); পিনমোড (ইনফ্রা রিডিং, ইনপুট);

// Serial comms Serial.begin (baudRate) আরম্ভ করুন; যখন (! সিরিয়াল); // এর জন্য মসৃণকরণ (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// হ্যান্ডশেকের জন্য অপেক্ষা করুন installContact (); }

অকার্যকর লুপ () {// সমস্ত পিন পোল করুন এবং যথাযথ পরিসীমা buttonState1 = digitalRead (buttonPin1) তে পড়ার মানচিত্র করুন; buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// ইনকামিং মানগুলিকে প্রয়োজনীয় মান সেন্সরভ্যালু 1 = মানচিত্র (সেন্সরভ্যালু 1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = মানচিত্র (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = মানচিত্র (sensorValue3, 0, 700, 50, 100);

// স্মুথিং সেন্সর: মোট 3 = মোট 3 - রিডিং [readIndex3]; // সেন্সর থেকে পড়া: রিডিং [readIndex3] = sensorValue3; // মোট পড়ার যোগ করুন: মোট 3 = মোট 3 + রিডিং [readIndex3]; // অ্যারের পরবর্তী অবস্থানে অগ্রসর: readIndex3 = readIndex3 + 1;

// যদি আমরা অ্যারের শেষে থাকি… } // গড় গণনা করুন: গড় 3 = (মোট 3 / numReadings); // স্মুথিং সেন্সর

Serial.print (startString); // একটি বার্তা ক্রম শুরু করুন // সমস্ত নাম, মান জোড়া, কমা সিরিয়াল.প্রিন্ট ("potentio1") দ্বারা পৃথক করা; সিরিয়াল.প্রিন্ট (","); Serial.print (sensorValue1); সিরিয়াল.প্রিন্ট (",");

সিরিয়াল.প্রিন্ট ("potentio2"); সিরিয়াল.প্রিন্ট (","); Serial.print (sensorValue2); সিরিয়াল.প্রিন্ট (",");

সিরিয়াল.প্রিন্ট ("ইনফ্রা-সেন্সর"); সিরিয়াল.প্রিন্ট (","); সিরিয়াল.প্রিন্ট (গড় 3/100); সিরিয়াল.প্রিন্ট (",");

Serial.print ("knop 1 in2 wit"); সিরিয়াল.প্রিন্ট (","); Serial.print (buttonState1); সিরিয়াল.প্রিন্ট (","); Serial.print ("knop2 in5 geel"); সিরিয়াল.প্রিন্ট (","); Serial.print (buttonState2);

// মেসেজ সিরিয়াল.প্রিন্টের শেষ লিখুন (endString);

// কিসুক্ষণের জন্য অপেক্ষা কর..

বিলম্ব (loopPauseTime); }

ধাপ 4: কাটার

কাটার
কাটার

স্ট্যাপ 1: গা বভেনান নর অপশন> প্রেফারেন্স

স্ট্যাপ 2: প্রেফারেন্সের মধ্যে Ga naar Control/OSC/web en druk op Add

স্ট্যাপ 3: কিস বিজ কন্ট্রোল সারফেস মোড ওএসসি (ওপেন সাউন্ড কন্ট্রোল)

ধাপ 4: Vul je ডিভাইসের নাম

স্ট্যাপ 5: প্রসেসিংয়ে কপিয়ার ডি হোস্ট আইপি ডাই জে হায়ার জিয়েট এন ভুল ডিজে

স্ট্যাপ 6: ড্রুক অপ ওকে এন ডি কন্ট্রোলার হল নিউ ভার্বোডেন মেট রিপার

ধাপ 5: Behuizing

Behuizing
Behuizing

ব্রেড: 170 মিমি

দৈর্ঘ্য: 90 মিমি

হুগতে 30 মিমি

Knoppen: 16 মিমি (ব্যাস

সম্ভাব্য মিটার: 3 মিমি (ব্যাস)

আফস্ট্যান্ড সেন্সর: ব্রেডেট 2.9 মিমি

দৈর্ঘ্য 0.8 মিমি

উপাদান: MDF (3 মিমি)

ধাপ 6: ইলেক্ট্রোনিকা

স্ট্যাপ 1:

Verbind de ground en 5 volt van Arduino met het breadboard

স্ট্যাপ 2:

ভারবিন্ড পিন A0 মেট পোটেন্টিও 1

Verbind পিন A1 মেট potentio 2

ভারবিন্ড পিন A3 মেট ইনফ্রারুড সেন্সর।

Verbind pin A2 met de niet স্টিকি বাটন।

Verbind pin A5 met de sticky বাটন।

ধাপ 7: Medewerkers

মিডওয়াকাররা
মিডওয়াকাররা

- ময়েস এল বাবা

- আর্নো গোরিসেন

- মিশিয়েল ডি ওয়ান্ডেলিয়ার

প্রস্তাবিত: