Mục lục:

Bộ điều khiển Retro: 7 bước
Bộ điều khiển Retro: 7 bước

Video: Bộ điều khiển Retro: 7 bước

Video: Bộ điều khiển Retro: 7 bước
Video: Thịnh Kent chia sẻ bida online - Cách điều khiển lực khi retro gom- ngày 31/5/2021 2024, Tháng Chín
Anonim
Bộ điều khiển Retro
Bộ điều khiển Retro

Wij zijn eerste jaar studenten uit de opleiding Đa phương tiện & Giao tiếp (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.

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

Bước 1: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Thành phần

- 2 Nút;

- 2 máy đo Potentio;

- 2 con nai sừng tấm (1K nai sừng tấm);

- Arduino una / nano

- Draadjes (lược đồ zie elektronisch)

- Soldeerplaat

- Tấm ván MDF

Công cụ

- Lasercutter

- Kniptang

- Striptang

- Soldeerbout (gặp thiếc)

Programma's

- Ilustrator / indesign (Tekenprogramma)

- Máy cắt

- Xử lý

- Arduino

Bước 2: Xử lý mã

Xử lý mã
Xử lý mã

/**

* Phác thảo cơ bản để nhận các thông báo Serial từ Arduino * và dịch chúng thành các thông báo OSC cho Reaper * * Bạn sẽ cần điều chỉnh CÁC THÔNG SỐ NGƯỜI DÙNG * và bạn sẽ cần cài đặt Thư viện: oscP5 * * được tạo cho werkcollege AV&IT * của thông báo eddi * oct 2017 * * / ////////////////////////////////////////////////////////// ////////

/ đảm bảo rằng bạn sử dụng cùng một tốc độ truyền trong bản phác thảo cuối cùng của Arduino int baudRate = 115200;

// Đi và tìm địa chỉ IP trong Reaper khi sử dụng OSC // Đây là địa chỉ mà Process gửi đến và Reaper lắng nghe. // Đặt chuỗi này vào remoteIP, tại đây.

// final String remoteIP = "192.168.1.43"; //ví dụ. "127.0.0.1";

final String remoteIP = "vul hier ip trong gevonden trong máy gặt";

// Ghi lại sendPort và điền vào Reaper. // Đây là cổng mà Xử lý gửi đến và Reaper lắng nghe.

cuối cùng int nghePort = 11000, sendPort = 12000;

// NghePort ở đây là để gỡ lỗi tích cực.

// portNames cũng ở đây để gỡ lỗi.

final String portName = "vul hier de portname trong gevonden trong Arduino";

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

/////////////////////// HẾT THAM SỐ NGƯỜI DÙNG /////////////////////////// ////

nhập xử lý.serial. *; nhập java.util. *;

nhập oscP5. *; nhập netP5. *;

OscP5 oscP5; NetAddress myRemoteLocation;

Serial commsPort; // Cổng nối tiếp boolean messageArrived = false;

String incoming = "", IncomingOSCMessage = "";

cuối cùng char startChar = '*', endChar = '#'; cuối cùng char contactCharacter = '|';

// Để đảm bảo rằng chúng tôi chỉ gửi các tham số (giá trị) thay đổi // các biến thể chung này được xóa ở đây nhưng // không được khởi tạo ở đây! HashMap oldParams, newParams, toSendParams;

// Chúng ta cần tách thông báo tại mỗi dấu phẩy void processIncoming () {String resVec = incoming.split (","); // chúng ta nhận được các cặp tên + giá trị // vì vậy với mọi tên (+2)… hãy thử {for (int i = 0; i <resVec.length; i + = 2) {float value = Float.parseFloat (resVec [i + 1]); // đưa chúng vào Hashtable newParams.put (resVec , value); }} // nếu lỗi xảy ra, hãy bắt nó hiển thị và thoát. catch (Exception ex) {println ("Thông báo ngoại lệ:" + ex); printArray (resVec); lối ra(); }}

// Để lọc tin nhắn của chúng ta / * Chúng ta đảm bảo chỉ có tin nhắn OSC-out khi * thông báo đầu vào (Serial) thay đổi * Nghĩa là: nếu chúng ta vặn / ấn nút và nó thay đổi giá trị. * Vì vậy, chúng tôi lọc ra các giá trị đến thực sự thay đổi * lưu ý: chúng tôi sẽ không tránh các giá trị nhảy * đến từ ví dụ như cảm biến gia tốc hoặc cảm biến khoảng cách * bạn sẽ cần tự làm mịn các giá trị đó trong Arduino * / void filterParams () {toSendParams = new Bản đồ băm(); for (String key: newParams.keySet ()) {// nếu khóa đã có if (oldParams.containsKey (key)) {// key hiện tại và giá trị không giống nhau, sau đó cập nhật if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// khóa không có trong các tham số cũ, vì vậy hãy đặt nó! toSendParams.put (key, newParams.get (key)); } oldParams.put (key, newParams.get (key)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/" + key); myMessage.add (toSendParams.get (key)); / * gửi tin nhắn * / oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Khi chúng ta muốn in ra cửa sổ void ShowIncoming () {// để xem thông báo đến, như được thiết lập trong văn bản HashMap ("Incoming from Arduino", 20, 20); int y = 20; for (Khóa chuỗi: newParams.keySet ()) {y = y + 20; text (key, 20, y); text (newParams.get (key), 300, y); }}

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

void setup () {size (1000, 800); // Kích thước sân khấu fill (255); nền (0); oldParams = new HashMap (); newParams = new HashMap (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);

/ * khởi động oscP5, lắng nghe các tin nhắn đến * / oscP5 = new OscP5 (this, listeningPort);

/ * myRemoteLocation là một NetAddress. NetAddress nhận 2 tham số, * địa chỉ ip và số cổng. myRemoteLocation được sử dụng làm tham số trong * oscP5.send () khi gửi gói tin osc đến máy tính, thiết bị, ứng dụng * khác. cách sử dụng xem bên dưới. cho các mục đích thử nghiệm, cổng lắng nghe * và cổng của địa chỉ vị trí từ xa giống nhau, do đó bạn sẽ * gửi thông báo trở lại bản phác thảo này. * / myRemoteLocation = new NetAddress (remoteIP, sendPort); }

void draw () {if (messageArrived) {background (0); dịchMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }

void serialEvent (Serial commsPort) {// đọc một byte từ cổng nối tiếp: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // hỏi thêm println ("bắt đầu…"); nghỉ; case startChar: incoming = ""; nghỉ; case endChar: messageArrived = true; // println ("end of msg"); nghỉ; mặc định: incoming + = inChar; nghỉ; }}

/ * tin nhắn osc đến được chuyển tiếp đến phương thức oscEvent. * / void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // lấy đối số osc đầu tiên

IncomingOSCMessage + = "\ n" + String.format ("### đã nhận được tin nhắn osc:" + "addrpattern:" + theOscMessage.addrPattern () + ":% f", value); println (IncomingOSCMessage); }

Bước 3: Mã Arduino

Mã Arduino
Mã Arduino

/ * Mã này là một bản phác thảo cơ bản để giao tiếp với Xử lý thông qua Nối tiếp.

Đây là một bản thiết kế trong đó bạn có thể đặt mã của riêng mình được chỉ định cho các nút, chiết áp hoặc cảm biến của riêng bạn.

Nó có sự bắt tay để đảm bảo rằng chúng ta có liên hệ và định dạng mà chúng ta đang giao tiếp được quyết định

Điều quan trọng là phải xây dựng thông báo theo cách tương tự, để Xử lý biết cách giải cấu trúc nó và gửi các thông báo OSC chính xác đến DAW của chúng tôi

made for werkcollege AV&IT tháng 8 năm 2017

mã Smooothing được tạo ngày 22 tháng 4 năm 2007 bởi David A. Mellis được sửa đổi vào ngày 9 tháng 4 năm 2012 bởi Tom Igoe

*/

/ tốc độ truyền const long baudRate = 115200;

// thời gian chờ tính bằng ms giữa các lần thăm dò đến các chân const int loopPauseTime = 200; // mili giây

// giá trị bắt đầu và kết thúc cho thông báo được gửi trên Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// mã pin của const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // đánh giá làm mịn van

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

// các biến toàn cục khác int buttonState1 = 0; int buttonState2 = 0; // biến để đọc trạng thái nút nhấn float sensorValue1 = 0; cảm biến floatValue2 = 0; cảm biến phaoValue3 = 0;

// làm trơn các lần đọc int [numReadings]; // các bài đọc từ đầu vào tương tự int readIndex3 = 0; // chỉ số của lần đọc hiện tại int total3 = 0; // tổng đang chạy float average3 = 0; // Trung bình

// Chúng ta cần hàm này để thiết lập liên hệ với phác thảo Xử lý // Giữ nó ở đây void settingContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // gửi một ký tự và đợi phản hồi… delay (loopPauseTime); } Serial.read (); }

void setup () {// đặt mã pin cho tất cả các chân pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (tốc độ đọc, INPUT); pinMode (đọc hạ tầng, INPUT);

// khởi tạo Serial comms Serial.begin (baudRate); while (! nối tiếp); // làm trơn for (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// đợi bắt tay thành lậpContact (); }

void loop () {// thăm dò tất cả các chân và ánh xạ giá trị đọc đến phạm vi thích hợp buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (tốc độ đọc); sensorValue3 = analogRead (đọc hạ tầng);

// ánh xạ các giá trị đến thành các giá trị cần thiết sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0) / - 100.0; sensorValue2 = map (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = map (sensorValue3, 0, 700, 50, 100);

// cảm biến làm mịn: total3 = total3 - readings [readIndex3]; // đọc từ cảm biến: readings [readIndex3] = sensorValue3; // thêm bài đọc vào tổng số: total3 = total3 + bài đọc [readIndex3]; // chuyển đến vị trí tiếp theo trong mảng: readIndex3 = readIndex3 + 1;

// nếu chúng ta đang ở cuối mảng… if (readIndex3> = numReadings) {//… quấn quanh đầu: readIndex3 = 0; } // tính giá trị trung bình: average3 = (total3 / numReadings); // cảm biến làm mịn

Serial.print (startString); // bắt đầu một chuỗi thông báo // xóa tất cả các cặp tên, giá trị, được phân tách bằng dấu phẩy Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

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

Serial.print ("cảm biến hồng ngoại"); Serial.print (","); Serial.print (trung bình3 / 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);

// ghi kết thúc thông báo Serial.print (endString);

// chờ một lúc..

trì hoãn (loopPauseTime); }

Bước 4: Máy cắt

Reaper
Reaper

Stap 1: Ga bovenaan naar Tùy chọn> Prefrences

Stap 2: Ga in prefrences naar Control / OSC / web en druk op Add

Stap 3: Kies bij Chế độ bề mặt điều khiển voor OSC (Điều khiển âm thanh mở)

Stap 4: Vul je device name in, vink Recieve on port aan en vul in wat er in bij Sendport staat

Stap 5: Kopieer de Host IP die je hier ziet en vul deze in in Processing

Stap 6: Druk op ok en de controller is nu verbonden met Reaper

Bước 5: Chỉnh sửa

Behuizing
Behuizing

Giống: 170 mm

Chiều dài: 90 mm

Hoogte 30 mm

Knoppen: 16 mm (đường kính

Potentio mét: 3 mm (đường kính)

Cảm biến chân đế: Breedte 2,9 mm

Lengte 0,8 mm

Vật liệu: MDF (3mm)

Bước 6: Elektronica

Stap 1:

Verbind de ground en 5 volt van Arduino đáp ứng het breadboard

Stap 2:

Verbind pin A0 gặp potentio 1

Verbind pin A1 gặp potentio 2

Verbind pin A3 đã gặp cảm biến hồng ngoại.

Verbind pin A2 đã gặp nút dính.

Pin Verbind A5 gặp nút dính.

Bước 7: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Đề xuất: