Isi kandungan:
- Langkah 1: Wat Heb Je Nodig?
- Langkah 2: Pemprosesan Kod
- Langkah 3: Kod Arduino
- Langkah 4: Reaper
- Langkah 5: Berkurang
- Langkah 6: Elektronica
- Langkah 7: Pekerja Medew
Video: Pengawal Retro: 7 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:12
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?
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
/**
* 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 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
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
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
- Mayes El Baba
- Arno Gorissen
- Michiel De Wandelaer
Disyorkan:
Cara Memasang, Menjalankan dan Menghubungkan Pengawal ke Emulator: 7 Langkah
Bagaimana Memasang, Menjalankan dan Menghubungkan Pengawal ke Emulator: Adakah anda pernah duduk dan mengingati masa kecil anda sebagai pemain permainan muda dan kadang-kadang berharap anda dapat melihat semula permata lama itu? Nah, ada aplikasi untuk itu …. lebih khusus lagi ada komuniti pemain yang membuat program
Pengawal Gaya Dancefloor Permainan Retro Besar: 4 Langkah
Pengawal Gaya Dancefloor Permainan Retro Besar: Untuk Perkahwinan kami pada bulan Mac tahun ini, kami menginginkan pesta resepsi bertema permainan Retro, kerana kami hanya kanak-kanak besar dan saya yakin banyak orang lain juga! Jadi setelah sedikit meneliti MakeyMakey, saya fikir ia adalah idea hebat untuk memeluk
Pengawal Permainan DIY Berasaskan Arduino - Pengawal Permainan Arduino PS2 - Bermain Tekken Dengan Gamepad Arduino DIY: 7 Langkah
Pengawal Permainan DIY Berasaskan Arduino | Pengawal Permainan Arduino PS2 | Bermain Tekken Dengan Gamepad Arduino DIY: Hai kawan-kawan, bermain permainan selalu menyeronokkan tetapi bermain dengan permainan peribadi DIY Controller anda lebih menggembirakan. Oleh itu, kami akan menjadikan Pengawal permainan menggunakan arduino pro micro dalam arahan ini
YABC - Namun Pengawal Blynk Lain - Pengawal Suhu dan Kelembapan Awan IoT, ESP8266: 4 Langkah
YABC - Namun Pengawal Blynk Yang Lain - Pengawal Suhu dan Kelembapan Awan IoT, ESP8266: Hai Pembuat, Saya baru-baru ini mula menanam cendawan di rumah, cendawan tiram, tetapi saya sudah mempunyai 3x pengawal ini di rumah untuk kawalan Suhu Fermenter untuk bir rumah saya, isteri juga melakukan perkara Kombucha ini sekarang, dan sebagai Termostat untuk Panas
OpenChord.org V0 - Bina Pengawal Gitar Sebenar Wira / Rock Band Pengawal: 10 Langkah
OpenChord.org V0 - Bangun Pengawal Wira Gitar Sebenar / Rock Band Pengawal: Kita semua suka Guitar Hero dan Rock Band. Kami juga tahu bahawa kami tidak akan pernah belajar bagaimana bermain gitar dengan bermain permainan ini. Tetapi bagaimana jika kita sekurang-kurangnya dapat membina alat kawalan Guitar Hero yang membolehkan kita menggunakan gitar sebenar? Itulah yang kami ada di OpenChord