Daftar Isi:
- Langkah 1: Wat Heb Je Nodig?
- Langkah 2: Pemrosesan Kode
- Langkah 3: Kode Arduino
- Langkah 4: Reaper
- Langkah 5: Behuizing
- Langkah 6: Elektronika
- Langkah 7: Medewerkers
Video: Pengendali Retro: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:58
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?
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
/**
* 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 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
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
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
- Mayes El Baba
- Arno Gorissen
-Michiel De Wandelaer
Direkomendasikan:
Pengendali Jarak Jauh Berbasis LoRa - Kontrol Peralatan Dari Jarak Jauh: 8 Langkah
Pengendali Jarak Jauh Berbasis LoRa | Mengontrol Peralatan Dari Jarak Jauh: Hai, apa kabar, Guys! Akarsh di sini dari CETech. Dalam proyek ini, kita akan membuat remote control yang dapat digunakan untuk mengontrol berbagai instrumen seperti LED, motor atau jika kita berbicara tentang kehidupan kita sehari-hari, kita dapat mengontrol aplikasi rumah kita
Cara Membuat Pengendali Arah Motor DC E-Bike: 4 Langkah
Cara Membuat Pengontrol Arah Motor DC E-Bike: Ini Adalah Pengontrol Arah Motor DC Untuk E-Bike Anda. Di Sirkuit Ini Saya Telah Menggunakan N-Channel MOSFET H Bridge Dan SR Latch. H Bridge Circuit Kontrol Arah Aliran Arus. Rangkaian Latch SR Memberikan Sinyal Positif Pada Rangkaian H Bridge. Komp
Papan Pengendali Jarak Jauh Lainnya: 7 Langkah
Namun Papan Pengendali Jarak Jauh Lain: بسم الله الرحمن الرحيم Papan dapat digunakan untuk mengendalikan robot sebagai contoh. Papan dapat ditenagai oleh 2 baterai Lipo 7.4 V. Papan ini mencakup fitur-fitur berikut: ATMega328Pb Pengontrol (ekosistem Arduino) MPU6050 a 3- sumbu giroskop
Rotary Encoder - Memahami dan Menggunakannya (Arduino/Pengendali lainnya): 3 Langkah
Rotary Encoder - Memahami dan Menggunakannya (Arduino/otherPengendali lainnya): Rotary encoder adalah perangkat elektro-mekanis yang mengubah gerakan rotasi menjadi informasi digital atau analog. Itu bisa berputar searah jarum jam atau berlawanan arah jarum jam. Ada dua jenis enkoder putar: enkoder absolut dan relatif (tambahan).Wh
Pengendali Motor Pompa Air Otomatis: 12 Langkah
Pengendali Motor Pompa Air Otomatis : Hai Sobat, Hari ini saya akan membuat rangkaian rangkaian pengendali motor pompa air otomatis menggunakan Transistor dan Relay 2N222. Mari kita mulai