Daftar Isi:

Pengendali Retro: 7 Langkah
Pengendali Retro: 7 Langkah

Video: Pengendali Retro: 7 Langkah

Video: Pengendali Retro: 7 Langkah
Video: PENJELASAN LENGKAP! CARA MENDAPATKAN BUILDER KE 6 TERBARU SETELAH UPDATE BUILDER 2.0 | COC INDONESIA 2024, November
Anonim
Pengendali Retro
Pengendali Retro

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.

Kaset ons idee kwam van van een, ons doel adalah pengontrol om een yang dibuat untuk lijkt op een kaset.

Langkah 1: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Komponen

- 2 Tombol;

- 2 Potensi meter;

- 2 weerstanden (1K rusa);

-Arduino uno/nano

- Draadjes (skema zie elektronisch)

- Solderplaat

- Plat MDF

Peralatan

- Pemotong laser

- Kniptang

- Striptang

- Solderbout (bertemu timah)

program

- Ilustrator/indesign (Tekenprogramma)

- Reaper

- Pemrosesan

- Arduino

Langkah 2: Pemrosesan Kode

Pemrosesan Kode
Pemrosesan Kode

/**

* Sketsa dasar untuk menerima pesan Serial dari Arduino * dan menerjemahkannya ke pesan OSC untuk Reaper * * Anda perlu menyesuaikan PARAMETER PENGGUNA * dan Anda perlu menginstal Perpustakaan: oscP5 * * dibuat untuk werkcollege AV&IT * oleh annoo bob eddi * okt 2017 * */ //////////////////// PARAMETER PENGGUNA /////////////////// ////////

/ pastikan Anda menggunakan baud rate yang sama di Arduino sketch final int baudRate = 115200;

// Pergi dan cari alamat IP di Reaper saat menggunakan OSC // Ini adalah alamat yang dikirim oleh Processing dan didengarkan oleh Reaper. // Letakkan string ini di remoteIP, di sini.

//akhir String remoteIP = "192.168.1.43"; //misalnya. "127.0.0.1";

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

// Catat sendPort dan isi ini di Reaper. // Ini adalah port yang dikirim oleh Processing dan didengarkan oleh Reaper.

int akhir listenPort = 11000, sendPort = 12000;

// ListenPort di sini adalah untuk melakukan debug secara aktif.

// portNames juga ada di sini untuk debug.

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

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

///////////////////// AKHIR PARAMETER PENGGUNA //////////////////////// ////

import processing.serial.*; impor java.util.*;

impor oscP5.*; impor netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Port komunikasi serial; // Port serial boolean messageArrived = false;

String masuk = "", IncomingOSCMessage = "";

akhir char startChar = '*', endChar = '#'; karakter akhir kontakCharacter = '|';

// Untuk memastikan kita hanya mengirim parameter (nilai) yang berubah // variabel global ini dihapus di sini tetapi harus // tidak diinisialisasi di sini! HashMap oldParams, newParams, toSendParams;

// Kita perlu membagi pesan di setiap koma void processIncoming() { String resVec = incoming.split(", "); // kita mendapatkan pasangan nama + nilai // jadi untuk setiap nama (+2)… try{ for (int i = 0; i< resVec.length; i+=2) { float value = Float.parseFloat(resVec[i+ 1]); // letakkan di Hashtable newParams.put(resVec, value); } } // jika terjadi kesalahan, mari kita tangkap tampilannya dan keluar. catch(Exception ex){ println("Pesan Pengecualian: " + ex); printArray(resVec); keluar(); } }

// Untuk memfilter pesan kita /* Kami memastikan hanya ada pesan OSC-out ketika * pesan input (Serial) berubah * Yaitu: jika kita memutar/menekan tombol dan nilainya berubah. * Jadi kami menyaring nilai masuk yang benar-benar berubah * catatan: kami tidak akan menghindari nilai lompatan * yang berasal dari misalnya akselerometer atau sensor jarak * Anda perlu menghaluskannya sendiri di Arduino */ void filterParams () { toSendParams = new HashMap(); for (String key: newParams.keySet()) { // jika key sudah ada if (oldParams.containsKey(key)) { // key present dan value tidak sama, maka update if (!oldParams.get(key).equals(newParams.get(key))) { toSendParams.put(key, newParams.get(key)); } } else{ // kunci tidak ada di params lama, jadi taruhlah! toSendParams.put(kunci, newParams.get(kunci)); } oldParams.put(kunci, newParams.get(kunci)); } }

void makeOSC() { for (String key: toSendParams.keySet()) { OscMessage myMessage = new OscMessage("/"+ key); myMessage.add(toSendParams.get(kunci)); /* kirim pesan */ oscP5.send(myMessage, myRemoteLocation); } }

void translateMessage() { prosesMasuk(); filterParams(); makeOSC(); } // Ketika kita ingin mencetak ke jendela void ShowIncoming() { // untuk melihat pesan masuk, seperti yang diatur dalam teks HashMap("Incoming from Arduino", 20, 20); int y = 20; for (String key: newParams.keySet()) { y = y+20; teks(kunci, 20, y); teks(params baru.get(kunci), 300, y); } }

void showOsc() { teks(IncomingOSCMessage, 300, 200); PesanOSCM Masuk =""; }

void setup() { ukuran(1000, 800); // Isi ukuran panggung(255); latar belakang(0); oldParams = new HashMap(); newParams = HashMap baru(); //printArray(Serial.list()); commsPort = Serial baru (ini, portName, baudRate);

/* start oscP5, mendengarkan pesan masuk */ oscP5 = new OscP5(this, listenPort);

/* myRemoteLocation adalah NetAddress. a NetAddress membutuhkan 2 parameter, * alamat ip dan nomor port. myRemoteLocation digunakan sebagai parameter dalam * oscP5.send() saat mengirim paket osc ke komputer lain, perangkat, * aplikasi. penggunaan lihat di bawah. untuk tujuan pengujian port mendengarkan * dan port alamat lokasi jauh adalah sama, maka Anda akan * mengirim pesan kembali ke sketsa ini. */ myRemoteLocation = NetAddress baru(IP jarak jauh, sendPort); }

void draw() { if (pesan sudah sampai) { background(0); menerjemahkanPesan(); tampilkan masuk(); pesan Tiba = salah; } showOsc(); }

void serialEvent(Serial commsPort) { // membaca satu byte dari port serial: char inChar = commsPort.readChar(); switch (inChar) { case contactCharacter: commsPort.write(contactCharacter); // minta lebih banyak println("mulai…"); merusak; case startChar: masuk = ""; merusak; case endChar: messageArrived = true; //println("akhir pesan"); merusak; default: masuk += inChar; merusak; } }

/* pesan osc yang masuk diteruskan ke metode oscEvent. */ void oscEvent(OscMessage theOscMessage) { nilai float = theOscMessage.get(0).floatValue(); // dapatkan argumen osc pertama

IncomingOSCMessage += "\n" + String.format("### menerima pesan osc: " + " addrpattern: " + theOscMessage.addrPattern() + ": %f", nilai); println(Pesan OSCM Masuk); }

Langkah 3: Kode Arduino

Kode Arduino
Kode Arduino

/* Kode ini adalah sketsa dasar untuk berkomunikasi dengan Processing melalui Serial.

Ini adalah cetak biru di mana Anda dapat menempatkan kode Anda sendiri yang ditentukan untuk tombol, potensiometer, atau sensor Anda sendiri.

Ini memiliki jabat tangan untuk memastikan kami memiliki kontak dan format di mana kami berkomunikasi diputuskan

Penting untuk menyusun pesan dengan cara yang sama, sehingga Pemrosesan tahu cara mendekonstruksinya dan mengirim pesan OSC yang benar ke DAW kami

dibuat untuk werkcollege AV&IT Oktober 2017

code smoothing dibuat 22 Apr 2007 oleh David A. Mellis dimodifikasi 9 Apr 2012 oleh Tom Igoe

*/

/ baud rate const panjang baudRate = 115200;

// waktu untuk menunggu dalam ms antara polling ke pin const int loopPauseTime = 200; // mili detik

// nilai awal dan akhir untuk pesan yang dikirim pada Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id const int buttonPin1 = 2; const int buttonPin2 = 5; const int numBacaan = 5; //nilai penghalusan van

int pitchMembaca = A1; int kecepatanMembaca = A2; int infraMembaca = A3;

// variabel global lainnya int buttonState1 = 0; int buttonState2 = 0; // variabel untuk membaca status tombol tekan float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

//memperhalus pembacaan int[numReadings]; // pembacaan dari input analog int readIndex3 = 0; // indeks pembacaan saat ini int total3 = 0; // total float rata-rata berjalan3 = 0; // rata-rata

// Kita membutuhkan fungsi ini untuk membuat kontak dengan sketsa Pemrosesan // Simpan di sini void buildContact() { while (Serial.available() <= 0) { Serial.print(contactCharacter); // kirim karakter dan tunggu tanggapan… delay(loopPauseTime); } Serial.baca(); }

void setup() { // mengatur pinModes untuk semua pin pinMode(buttonPin1, INPUT); pinMode(tombolPin2, INPUT); pinMode(Membaca pitch, INPUT); pinMode (membaca kecepatan, INPUT); pinMode (pembacaan infra, INPUT);

// inisialisasi komunikasi Serial Serial.begin(baudRate); while (!Serial); //smoothing for (int thisReading = 0; thisReading < numReadings; thisReading++) { readings[thisReading] = 0; }

// tunggu jabat tangan buildContact(); }

void loop() { // poll semua pin dan memetakan pembacaan ke rentang yang sesuai buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); sensorValue1 = analogRead (membaca pitch); sensorValue2 = analogRead (membaca kecepatan); sensorValue3 = analogRead (infraReading);

//memetakan nilai yang masuk ke nilai yang diperlukan sensorValue1 = map(sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = peta(sensorValue2, 0, 1023, 0.0, 100)/100.0; sensorValue3 = peta(sensorValue3, 0, 700, 50, 100);

// sensor pemulusan: total3 = total3 - pembacaan[readIndex3]; // membaca dari sensor: pembacaan[readIndex3] = sensorValue3; // tambahkan bacaan ke total: total3 = total3 + bacaan[readIndex3]; // maju ke posisi berikutnya dalam array: readIndex3 = readIndex3 + 1;

// jika kita berada di akhir array… if (readIndex3 >= numReadings) { // …membungkus ke awal: readIndex3 = 0; } // hitung rata-rata: average3 = (total3 / numReadings); // sensor pemulusan

Serial.print(startString); // memulai urutan pesan // menulis semua nama, pasangan nilai, dipisahkan dengan koma Serial.print("potentio1"); Serial.print(", "); Serial.print(sensorValue1); Serial.print(", ");

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

Serial.print("sensor infra"); Serial.print(", "); Serial.print(rata-rata3/100); Serial.print(", ");

Serial.print("knop 1 in2 dengan"); Serial.print(", "); Serial.print(buttonState1); Serial.print(", "); Serial.print("knop2 in5 gel"); Serial.print(", "); Serial.print(buttonState2);

// tulis akhir pesan Serial.print(endString);

// Tunggu sebentar..

penundaan (loopPauseTime); }

Langkah 4: Reaper

Mesin penuai
Mesin penuai

Langkah 1: Ga bovenaan naar Pilihan>Prefrences

Langkah 2: Prefrences dengan Control/OSC/web dan druk op Add

Langkah 3: Kies bij Kontrol mode permukaan voor OSC (Kontrol Suara Terbuka)

Langkah 4: Vul je device name in, vink Recieve on port aan en vul in water in processing bij Sendport staat

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

Langkah 6: Druk op ok en de controller adalah nu verbonden bertemu Reaper

Langkah 5: Behuizing

Behuizing
Behuizing

Breedte: 170 mm

Panjang: 90 mm

Hoogte 30 mm

Knoppen: 16 mm (diameter

Potensi meter: 3 mm (diameter)

Sensor Afstand: Breedte 2,9 mm

Panjang 0,8 mm

Bahan: MDF (3mm)

Langkah 6: Elektronika

Langkah 1:

Verbind de ground en 5 volt van Arduino bertemu dengan papan tempat memotong roti

Langkah 2:

Pin Verbind A0 bertemu potensio 1

Pin Verbind A1 bertemu potensio 2

Pin Verbind A3 bertemu dengan sensor infra merah.

Pin Verbind A2 bertemu dengan tombol lengket de niet.

Pin Verbind A5 bertemu dengan tombol lengket.

Langkah 7: Medewerkers

medewerker
medewerker

- Mayes El Baba

- Arno Gorissen

-Michiel De Wandelaer

Direkomendasikan: