Isi kandungan:

Pengawal Retro: 7 Langkah
Pengawal Retro: 7 Langkah

Video: Pengawal Retro: 7 Langkah

Video: Pengawal Retro: 7 Langkah
Video: PENGAWAL ABADI YANG SUDAH HIDUP RATUSAN TAHUN 2024, September
Anonim
Pengawal Retro
Pengawal Retro

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

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 kaset, ons doel adalah om een controller yang dibuat oleh dat lijkt op een kaset.

Langkah 1: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Komponen

- 2 Butang;

- 2 meter Potentio;

- 2 weerstanden (1K elk);

- Arduino uno / nano

- Draadjes (skema zie elektronisch)

- Soldeerplaat

- Plak MDF

Alat

- Lasercutter

- Kniptang

- Striptang

- Soldeerbout (timah bertemu)

Program

- Ilustrator / reka bentuk (Tekenprogramma)

- Reaper

- Memproses

- Arduino

Langkah 2: Pemprosesan Kod

Pemprosesan Kod
Pemprosesan Kod

/**

* Sketsa asas untuk menerima pesanan bersiri dari Arduino * dan menerjemahkannya ke mesej OSC untuk Reaper * * Anda perlu menyesuaikan PARAMETER PENGGUNA * dan anda perlu memasang Perpustakaan: oscP5 * * dibuat untuk werkcollege AV&IT * oleh annoo bob eddi * okt 2017 * * / ///////////////////// PARAMETER PENGGUNA //////////////////// ////////

/ pastikan anda menggunakan kadar baud yang sama dalam lakaran Arduino akhir int baudRate = 115200;

// Pergi dan cari alamat IP di Reaper ketika menggunakan OSC // Ini adalah alamat yang dihantar oleh Pemprosesan dan Reaper mendengarkan. // Letakkan tali ini di remoteIP, di sini.

// final String remoteIP = "192.168.1.43"; // cth. "127.0.0.1";

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

// Perhatikan sendPort dan isikan di Reaper. // Ini adalah port yang dihantar Pemprosesan dan Reaper mendengarkan.

int akhir listenPort = 11000, sendPort = 12000;

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

// portNames ada di sini untuk debug juga.

port StringName akhir = "vul hier de portname in gevonden in Arduino";

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

///////////////////// TAMAT PARAMETER PENGGUNA ///////////////////////// ////

pemprosesan import.serial. *; import java.util. *;

import oscP5. *; import netP5. *;

OscP5 oscP5; NetAddress myRemoteLocation;

CommsPort bersiri; // Mesej boolean port bersiriArrive = false;

Rentetan masuk = "", IncomingOSCMessage = "";

char akhir startChar = '*', endChar = '#'; char akhir kenalanCharacter = '|';

// Untuk memastikan kami hanya menghantar parameter (nilai) yang berubah // pemboleh ubah global ini dihapus di sini tetapi tidak harus diinisialisasi di sini! HashMap oldParams, newParams, toSendParams;

// Kita perlu membagi mesej pada setiap proses koma batalIncoming () {String resVec = incoming.split (","); // kami mendapat nama + pasangan nilai // jadi untuk setiap nama (+2)… cubalah {untuk (int i = 0; i <resVec.length; i + = 2) {float value = Float.parseFloat (resVec [i + 1]); // masukkan mereka ke Hashtable newParams.put baru (resVec , nilai); }} // jika berlaku ralat, mari kita tunjukkan dan keluar. tangkapan (Pengecualian ex) {println ("Mesej Pengecualian:" + ex); printArray (resVec); jalan keluar (); }}

// Untuk menyaring mesej kami / * Kami memastikan hanya ada pesan keluar OSC ketika * mesej input (Serial) berubah * Maksudnya: jika kita menghidupkan / menekan butang dan ia berubah nilai. * Oleh itu, kami menyaring nilai masuk yang benar-benar berubah * nota: kami tidak akan mengelakkan nilai melompat * seperti yang datang dari mis. Pecutan atau sensor jarak * anda perlu melicinkannya sendiri di Arduino * / void filterParams () {toSendParams = baru HashMap (); untuk (kekunci rentetan: newParams.keySet ()) {// jika kunci sudah ada jika (oldParams.containsKey (kunci)) {// kunci hadir dan nilai tidak sama, kemudian kemas kini jika (! oldParams.get (kunci). sama (newParams.get (kunci))) {toSendParams.put (kunci, newParams.get (kunci)); }} kunci {// lain tidak terdapat dalam params lama, jadi letakkan! toSendParams.put (kunci, newParams.get (kunci)); } oldParams.put (kunci, newParams.get (kunci)); }}

batal makeOSC () {untuk (Kekunci rentetan: toSendParams.keySet ()) {OscMessage myMessage = OscMessage baru ("/" + kekunci); myMessage.add (toSendParams.get (kunci)); / * hantar mesej * / oscP5.send (myMessage, myRemoteLocation); }}

batal translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Ketika kita ingin mencetak ke jendela batal ShowIncoming () {// untuk melihat pesan masuk, seperti yang ditetapkan dalam teks HashMap ("Masuk dari Arduino", 20, 20); int y = 20; untuk (Kekunci rentetan: newParams.keySet ()) {y = y + 20; teks (kunci, 20, y); teks (newParams.get (kunci), 300, y); }}

batal showOsc () {teks (IncomeOSCMessage, 300, 200); IncomeOSCMessage = ""; }

persediaan kosong () {saiz (1000, 800); // Isi saiz pentas (255); latar belakang (0); oldParams = HashMap baru (); newParams = HashMap baru (); // printArray (Siri. senarai ()); commsPort = Serial baru (ini, portName, baudRate);

/ * mulakan oscP5, mendengar mesej masuk * / oscP5 = OscP5 baru (ini, listenPort);

/ * myRemoteLocation adalah NetAddress. a NetAddress mengambil 2 parameter, * alamat ip dan nombor port. myRemoteLocation digunakan sebagai parameter dalam * oscP5.send () ketika mengirim paket osc ke komputer, perangkat, * aplikasi lain. penggunaan lihat di bawah. untuk tujuan pengujian port pendengaran * dan port alamat lokasi jauh adalah sama, oleh itu anda akan * menghantar semula mesej ke lakaran ini. * / myRemoteLocation = NetAddress baru (remoteIP, sendPort); }

undian batal () {if (messageArrive) {latar belakang (0); translateMessage (); Tayangan Masuk (); messageArriv = palsu; } showOsc (); }

batal serialEvent (Serial commsPort) {// baca bait dari port bersiri: char inChar = commsPort.readChar (); tukar (inChar) {case contactCharacter: commsPort.write (contactCharacter); // minta lebih banyak println ("bermula …"); rehat; case startChar: masuk = ""; rehat; case endChar: messageArrive = benar; // println ("akhir msg"); rehat; lalai: masuk + = inChar; rehat; }}

/ * Mesej osc masuk diteruskan ke kaedah oscEvent. * / void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // dapatkan hujah osc pertama

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

Langkah 3: Kod Arduino

Kod Arduino
Kod Arduino

/ * Kod ini adalah lakaran asas untuk berkomunikasi dengan Pemprosesan melalui Serial.

Ini adalah cetak biru di mana anda boleh meletakkan kod anda sendiri yang ditentukan untuk butang, potensiometer atau sensor anda sendiri.

Ini memiliki jabat tangan untuk memastikan kita mempunyai hubungan dan format di mana kita berkomunikasi ditentukan

Penting untuk membina mesej dengan cara yang sama, sehingga Pemprosesan tahu bagaimana mendekonstruksinya dan menghantar mesej OSC yang betul ke DAW kami

dibuat untuk werkcollege AV&IT okt 2017

code smooothing dibuat 22 Apr 2007 oleh David A. Mellis diubah 9 Apr 2012 oleh Tom Igoe

*/

/ kadar baud const baudRate panjang = 115200;

// masa untuk menunggu di ms antara tinjauan ke pin const int loopPauseTime = 200; // mili saat

// nilai mula dan akhir untuk mesej yang dihantar pada Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; butang const intPin2 = 5; const int numReadings = 5; // kadarkan smoothing van

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

// pemboleh ubah global lain int buttonState1 = 0; butang intState2 = 0; // pemboleh ubah untuk membaca sensor tolakan status tekan butang Nilai1 = 0; sensor apunganValue2 = 0; sensor apunganValue3 = 0;

// melancarkan bacaan int [numReadings]; // bacaan dari input analog int readIndex3 = 0; // indeks bacaan semasa int total3 = 0; // rata-rata jumlah pengapungan berjalan3 = 0; // purata

// Kami memerlukan fungsi ini untuk menjalin hubungan dengan sketsa Pemprosesan // Simpan di sini kosongkan createContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // hantar char dan tunggu tindak balas… kelewatan (loopPauseTime); } Serial.read (); }

batal persediaan () {// tetapkan pinMode untuk semua pin pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// memulakan Serial comms Serial.begin (baudRate); sementara (! bersiri); // melicinkan untuk (int thisReading = 0; thisReading <numReadings; thisReading ++) {bacaan [thisReading] = 0; }

// tunggu tangan berjabat tanganContact (); }

gelung void () {// poll semua pin dan petakan bacaannya ke butang range yang sesuaiState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// memetakan nilai masuk ke nilai yang diperlukan sensorValue1 = peta (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 pelicin: total3 = total3 - bacaan [readIndex3]; // baca dari sensor: bacaan [readIndex3] = sensorValue3; // tambahkan bacaan ke jumlah: total3 = total3 + bacaan [readIndex3]; // maju ke kedudukan seterusnya dalam array: readIndex3 = readIndex3 + 1;

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

Serial.print (startString); // mulakan urutan mesej // tulis semua nama, pasangan nilai, dipisahkan dengan koma Serial.print ("potentio1"); Cetakan bersiri (","); Serial.print (sensorValue1); Cetakan bersiri (",");

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

Serial.print ("infra-sensor"); Cetakan bersiri (","); Cetakan bersiri (purata3 / 100); Cetakan bersiri (",");

Serial.print ("knop 1 in2 wit"); Cetakan bersiri (","); Serial.print (buttonState1); Cetakan bersiri (","); Serial.print ("knop2 in5 geel"); Cetakan bersiri (","); Serial.print (buttonState2);

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

// sila tunggu sebentar..

kelewatan (loopPauseTime); }

Langkah 4: Reaper

Reaper
Reaper

Stap 1: Ga bovenaan naar Pilihan> Pilihan

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

Stap 3: Mod permukaan kawalan Kies bij voor OSC (Open Sound Control)

Stap 4: Vul je nama peranti masuk, vink Terima di port aan en vul in wat er dalam memproses bij Sendport staat

Langkah 5: Kopieer de Host IP die je hier ziet en vul deze dalam Pemprosesan

LANGKAH 6: Druk op ok en de pengawal adalah bertemu dengan Reaper

Langkah 5: Berkurang

Berkurang
Berkurang

Breedte: 170 mm

Panjang: 90 mm

Hoogte 30 mm

Knoppen: 16 mm (diameter

Potentio meter: 3 mm (diameter)

Sensor hadapan: Breedte 2.9 mm

Panjang 0.8 mm

Bahan: MDF (3mm)

Langkah 6: Elektronica

Langkah 1:

Verbind de ground en 5 volt van Arduino bertemu papan roti

Langkah 2:

Verbind pin A0 met potentio 1

Verbind pin A1 bertemu potentio 2

Sensor infrarood pin Verbind pin A3 bertemu.

Verbind pin A2 met butang melekatkan de niet.

Butang Verbind pin A5 met de sticky.

Langkah 7: Pekerja Medew

Pekerja Medew
Pekerja Medew

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Disyorkan: