Daftar Isi:
- Langkah 1: Komponen Verzamelen
- Langkah 2: Prototipe Bouwen
- Langkah 3: Prototipe Kode
- Langkah 4: Prototipe Uittesten
- Langkah 5: Mengubah "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden
- Langkah 6: Bekerja dengan Tombol Originele + Dremelen
- Langkah 7: Solder Bedding + Tombol Vastlijmen
- Langkah 8: Plaat Dibuat di De Behuizing
- Langkah 9: Melapisi Tempat Tidur Aansluiten Op Protobord
- Langkah 10: Verstevigen
- Langkah 11: Kode Voor Het Communiceren Met Reaper
- Langkah 12: Kontroler Uittesten
Video: Guitar Hero Arduino Project: 12 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:58
Wij zijn Maarten Vrebos, Justin Cavanas dan Wannes Stroobandt dalam mempelajari multimedia & teknologi komunikasi. Voor een groepsproject voor het vak Audiovisual & Prinsip IT hebben wij een Guitar Hero-gitaar gehackt en gebruikt als behuizing voor onze MIDI-controller. Dia sedang onze bedoeling om de bestaande knoppen op de gitaar intern te vervangen. Onze controller zal vastgehouden en bespeeld worden als een normale gitaar. Aangezien we iets hebben gehackt hebben we er niet veel materi tambahan di moeten verwerken.
Dalam de afbeelding kan u onze allereerste schets op papier zien van hoe het eindproduct er zou moeten uitzien met daarnaast een foto van de gitaar die als behuizing zal worden gebruikt.
Wij hebben ons voor dit project gebaseerd op volgende bronnen:
slapyak.wordpress.com/guitar-hero-midi-con…
www.instructables.com/id/Converting-a-rescu…
gizmodo.com/391834/turn-your-guitar-hero-g…
Proyek Benodigdheden voor dit
- 6 tombol kleine
- 7 resistor 1kohm
- 1 gel LED 1
- LED blauwe
- 1 Arduino Uno R3
- 1 groena LED
- 2 LED berkuda
- 1 schuifschakelaar
- 1 papan tempat memotong roti
- 1 potensiometer
- 1 protobord
- 1 Gitar Hero gitaar
- Tempat tidur Voldoende
- Bahan om te solderen/dremelen/
- Schroevendraaier
Langkah 1: Komponen Verzamelen
Prototipe Voor ons (op breadboard) hebben we volgende componenten gebruikt:
6 Tombol Tekan
7 Resistor 1kohm
1 LED Kuning
1 LED Biru
1 Arduino Uno R3
1 LED Hijau
2 LED Merah
1 Schuifschakelaar
1 papan tempat memotong roti
1 Potensiometer
Langkah 2: Prototipe Bouwen
Prototipe om ons te bouwen hebben we al onze componenten gebruikt op een breadboard, deze breadboard dient dan juga objek uji zodat we niet meteen in de behuizing te werk moeten gaan. Dit prototype hebben we dan ook gedigitaliseerd via tinkercad.com, op deze manier hadden we een duidelijk overzicht van ons prototype dat elk groepslid ook kon bewerken.
Er worden 5 kleine pushbuttons gebruikt die fungeren als 5 snaren en een grote pushbuttons die in combinatie met één of meerdere 'snaren' moet worden ingedrukt om een auditief effect te krijgen. Lampu-lampu LED yang berbeda-beda dienen gewoon al visuele controle om er zeker van te zijn dat de interaksi berhasil.
Langkah 3: Prototipe Kode
Variabel global
Dalam het eerste deel van de code initialiseer je globale variabelen voor de pins van arduino uno waar alle pushbuttons mee verbonden zijn.
// tentukan nomor pin waar mainButton(snaar) dan tombol-tombol lain aan verbonden zijn:const int mainButton = A1; // gitaar snaar const int lightSensor = A0; const int buttonPin1 = 2; // angka dari tombol tekan1 const int tombolPin2 = 3; // angka van pushbutton2const int buttonPin3 = 4; // angka van pushbutton3const int buttonPin4 = 5; // angka van pushbutton4const int buttonPin5 = 6; // nomor van tombol tekan5
Hierna worden er twee arrays aangemaakt voor de namen van de pushbuttons en hun pinnummer.
const int aantalKnoppen = 5;const String namenKnoppen[aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen[aantalKnoppen] = {2, 3, 4, 5, 6};
En dan nog variabelen voor de pins van de LED lichtjes.
const int ledPin1 = 13; // jumlah pin LED 13
const int ledPin2 = 12; // jumlah pin LED 12 const int ledPin3 = 11; // jumlah pin LED 11 const int ledPin4 = 10; // jumlah pin LED 10 const int ledPin5 = 9; // jumlah pin LED 9 const int potPin = A5; // jumlah pin LED A5
De laatste globale variabelen dienen als 'status' voor de sensor (tombol tekan ingedrukt dari niet? potensiometer, lichtsensor).
// initialiseer buttonStates voor de knoppen (ingedrukt dari niet)int mainButtonState = 0; int buttonState1 = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int buttonState5 = 0; int lightSensorState = 0; int nilaipot = 0; int lightValue = 0;
Mempersiapkan
Fungsi pengaturan batal. Deze is van het type void (geeft geen waarde terug) en de instruksi hierin worden maar 1 keer uitgevoerd.
Bij elke functie is commentaar geschreven wat er concreet gedaan wordt. Utilitas ekstra di atas wat een specifieke functie concreet doet is te vinden in de arduino reference
void setup() { // kecepatan data per detik (baud) untuk transmisi data serial Serial.begin(9600); // Inisialisasi variabel ledPin dan output pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(ledPin4, OUTPUT); pinMode(ledPin5, OUTPUT); // inisialisasi semua tombol tekan dan masukan: pinMode(mainButton, INPUT); pinMode(tombolPin1, INPUT); pinMode(tombolPin2, INPUT); pinMode(tombolPin3, INPUT); pinMode(tombolPin4, INPUT); pinMode(tombolPin5, INPUT); pinMode(potPin, INPUT); pinMode (sensor cahaya, INPUT); }
Fungsi batal
Untuk setup() fungsi volgt de loop() fungsi, instruksi yang akan diberikan.
void loop() { // lees de staat van de pushbuttons suit (ingedrukt dari niet) mainButtonState = digitalRead(mainButton); buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); buttonState3 = digitalRead(buttonPin3); buttonState4 = digitalRead(buttonPin4); buttonState5 = digitalRead(buttonPin5);
// semua status tombol tekan di een array
int buttonStates = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};
// leest de waarde uit van de potensiometer dan sensor licht
potValue = analogRead(potPin); lightValue = analogRead(lightSensor);
// deklarasi een array mainStates en geef die de standar waarden 0 in.
int mainStates = {0, 0, 0, 0, 0};
// mengulang de array aantalKnoppen
for(int i = 0; i < aantalKnoppen; i++){ pinMode(knopPinnen, INPUT); // inisialisasi semua knopPinnen als input digitalRead(knopPinnen); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt adalah, print alle knopnamen, alle buttonstates if(mainButtonState == HIGH){ Serial.print(namenKnoppen); Serial.print(", "); Serial.println(buttonStates); } }
Langkah 4: Prototipe Uittesten
Nadat het prototype gebouwd adalah volgens ons model en de code geschreven sedang dalam Proses, sedang dilakukan prototype uit te testen. Op de video adalah te zien dat alle knoppen een reactie geven op de bijhorende ledjes en dat ook combinaties van knoppen mogelijk zijn.
Dalam video de tweede adalah te zien hoe onze tremolo werkt aan de hand van een potensiometer di de gitaar en hoe de waardes worden uitgelezen di Processing.
Langkah 5: Mengubah "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden
Juga de kode yang benar dengan menggunakan prototipe zijn kita akan bertemu dengan "ontmantelen" van onze Guitar Hero-gitaar. Kami hebben de gitaar opengemaakt bertemu een schroevendraaier en bekeken welke originele componenten kami akhirnya nog zouden kunnen hergebruiken voor onze controller. Uiteindelijk hebben kami mengaktifkan tombol eigen di tombol de bestaande gekregen (zie volgende stap). We hebben de tremolo ook gebruikt voor ons eindproduct en voor onze hoofdbutton (tombol initile om als een combinatie af te spelen) hebben we ook de originele twee keys gebruikt(zie vierde foto). De LEDjes zullen verdwijnen (deze waren enkel ter indicatie zodat we zagen dat alle knoppen werkten.
Langkah 6: Bekerja dengan Tombol Originele + Dremelen
Video op de bijhorende adalah de wijze te zien waarop de twee originele knoppen wels een soort van schakelaar die wij gebruiken om een effect te genereren bij combinatie van knoppen.
Tombol om onze eigen te verwerken in de originele knoppen hebben we de binnenkant van de originelen er grotendeels uitgehaald zoals te zien adalah op de foto.
Langkah 7: Solder Bedding + Tombol Vastlijmen
Omdat we niet meer met een breadboard werken moeten de draden gesoldeerd worden om zo de verschillende componenten met elkaar te verbinden. Nadat dit gebeurd is kunnen we de keys vastlijmen zoals te zien is op de foto's. Eens dit gebeurd adalah kunnen we doorgaan naar de volgende stap.
Langkah 8: Plaat Dibuat di De Behuizing
Omdat dit Guitar Hero-model redelijk krap was om mee te werken hebben we extra plaats moeten maken d.m.v. dremelen. Zo hebben we uit de achterkant van de gitaar een hele strook verwijderd zodat er meer plaats ontstaat voor de bedrading in de gitaar. Omdat er overal in de binnenkant obstakels waren, waaronder veel buisjes om de vijzen in te bevestigen, hebben we die ook verwijderd om optimaal van de gegeven ruimte gebruik te kunnen maken. Op de vierde en vijfde foto adalah te zien dat we in de achterkant van de gitaar een doorgang hebben gecreëerd voor de draden die naar de keys gaan omdat de gitaar anders niet meer te sluiten was. En op de laatste foto adalah te zien dat we de draden die rechtstreeks verbonden worden met de Arduino door een gat in de onderkant van de gitaar de behuizing verlaten.
Langkah 9: Melapisi Tempat Tidur Aansluiten Op Protobord
Om alle componenten met elkaar te verbinden hebben we gebruik gemaakt van een protobord. Dit is een bordje dat eigenlijk op net dezelfde manier werkt als een breadbord, maar dan betrouwbaarder en efficiënter. Kami hebben de bedrading aan het bordje gesoldeerd zoals te zien is op de derde foto. Dit bord is het centrale punt van waaruit al onze verbindingen vertrekken en samenkomen(zie foto 2).
Langkah 10: Verstevigen
Sentuhan akhir juga sangat bagus. Op deze foto adalah te zien hoe we het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan de tombol verstevigen bertemu stukjes karton.
Langkah 11: Kode Voor Het Communiceren Met Reaper
Kode deze diopgedeeld di twee delen, het eerste deel ada di de arduino IDE (interactive development enviroment) geschreven. Die code wordt geüpload naar arduino zelf en dient om alle waarden van de sensor van de midi controller uit te lezen en door te sturen naar processing.
Pengolahannya adalah het tweede gedeelte. Deze code dient om alles wat arduino doorstuurt te ontvangen en door te sturen naar Reaper.
Arduino
/* Kode ini adalah sketsa dasar untuk berkomunikasi dengan Processing melalui Serial.
Ini adalah cetak biru di mana Anda dapat menempatkan kode Anda sendiri
ditentukan untuk tombol, potensiometer, atau sensor Anda sendiri.
Ini memiliki jabat tangan untuk memastikan kami memiliki kontak
dan format di mana kita berkomunikasi diputuskan
Penting untuk membangun 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
*
/ baud rate
const baudRate panjang = 115200;
// waktu untuk menunggu dalam ms antara polling ke pin
const int loopPauseTime = 200; // mili detik
// nilai awal dan akhir untuk pesan yang dikirim melalui Serial
const String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin id
// variabel global lainnya
const int aantalKnoppen = 5; const String namenKnoppen[aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen[aantalKnoppen] = {2, 3, 4, 5, 6}; const int mainButton = A1;
int mainButtonState = 0;
int nilaipot = 0;
// sensor analog
const int potPin = A5; // pin voor tremolo
// Kami 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(); }
batalkan pengaturan() {
// mengatur mode pin untuk semua pin untuk(int i = 0; i < aantalKnoppen; i++){ pinMode(knopPinnen, INPUT); } pinMode(Tombol utama, INPUT); // batalkan komentar jika Anda menggunakan sensor yang bekerja pada 3V alih-alih 5V // Anda harus menghubungkan pin 'ext' ke 3.3V juga // analogReference(EXTERNAL);
// inisialisasi komunikasi serial
Serial.begin(baudRate); while (!Serial); // tunggu jabat tangan buildContact(); }
lingkaran kosong() {
// LANGKAH 1: BACA TOMBOL // poll semua pin dan petakan pembacaan ke kisaran yang sesuai int buttonStates[aantalKnoppen]; /* buttonStates[0] = digitalRead(knopPinnen[0]); buttonStates[1] = digitalRead(knopPinnen[1]); buttonStates[2] = digitalRead(knopPinnen[2]); buttonStates[3] = digitalRead(knopPinnen[3]); buttonStates[4] = digitalRead(knopPinnen[4]); */ mainButtonState = digitalRead(mainButton); for(int i = 0; i < aantalKnoppen; i++){ buttonStates = digitalRead(knopPinnen); } potValue = analogRead(potPin); // contoh: // float v0 = peta(bpm, 0, 1023, 60, 250); // jika Anda ingin menggunakan float yang dinormalisasi (mis. untuk volume) // float v1 = map(analogRead(pin2), fromMin, fromMax, 0, 100) / 100.0;
// LANGKAH 2: TULIS PESAN
Serial.print(startString); // memulai urutan pesan untuk(int i = 0; i < aantalKnoppen; i++){ if(mainButtonState == HIGH){ Serial.print(namenKnoppen); Serial.print(", "); Serial.print(buttonStates); if(i < aantalKnoppen - 1){ Serial.print(", "); } }else{ buttonStates = 0; Serial.print(namaKnoppen); Serial.print(", "); Serial.print(buttonStates); if(i < aantalKnoppen - 1){ Serial.print(", "); } } } Serial.print(", "); Serial.print("tremolo"); Serial.print(", "); Serial.print(peta(potValue, 0, 1023, 0, 100)); // tulis akhir pesan Serial.print(endString);
// Tunggu sebentar..
penundaan (loopPauseTime); }
Pengolahan
Penafian: Semua kode van de processing sketch staat hier di geschreven, voor de volledige code zie het bestand: ProcessingSoundControl_handout_v6_1.pde in bijlage
De volgende menginstruksikan moeten aangepast worden (indien nodig):
// Baudrate moet hetzelfde zijn zoals in de arduino sketch
baudRate int akhir = 115200;
// Zoek naar het alamat IP di reaper (screenshot zie di bijlage)
// Memproses stuurt naar dit andres en reaper luistert hier naar //
//akhir String remoteIP = "192.168.1.43"; //misalnya. "127.0.0.1";
akhir String remoteIP = "10.3.209.60";
// Catat sendPort dan isi ini di Reaper.
// Ini adalah port yang dikirim oleh Processing dan didengarkan oleh Reaper.
int akhir listenPort = 12000, sendPort = 12000;
// ListenPort di sini adalah untuk melakukan debug secara aktif.
// portNames juga ada di sini untuk debug.
//akhir String portName = "/dev/ttyACM0";
akhir String portName = "COM5"; // "/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 = "", PesanOSCM Masuk = "";
akhir char startChar = '*', endChar = '#'; karakter akhir kontakCharacter = '|';
// Untuk memastikan kami hanya mengirim parameter (nilai) yang berubah
// variabel global ini dihapus di sini tetapi seharusnya // tidak diinisialisasi di sini! HashMap oldParams, newParams, toSendParams;
// Kita perlu membagi pesan di setiap koma
void processIncoming() { String resVec = masuk.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 kami
/* Kami memastikan hanya ada pesan OSC-out ketika * pesan input (Serial) berubah * Yaitu: jika kami 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)); } }
batal makeOSC() {
for (String key: toSendParams.keySet()) { OscMessage myMessage = new OscMessage("/"+ key); myMessage.add(toSendParams.get(kunci)); /* kirim pesan */ oscP5.send(myMessage, myRemoteLocation); } }
batalkan 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); } }
batal showOsc() {
teks(Pesan OSC Masuk, 300, 200); PesanOSCM Masuk =""; }
batalkan pengaturan() {
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);
/* mulai oscP5, mendengarkan pesan masuk */
oscP5 = new OscP5(ini, listenPort);
/* myRemoteLocation adalah NetAddress. sebuah 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); }
batal menggambar() {
if (pesan Tiba) { 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
PesanOSCM Masuk += "\n" +
String.format("### menerima pesan osc: " + " addrpattern: " + theOscMessage.addrPattern() + ": %f", nilai); println(Pesan OSCM Masuk); }
Langkah 12: Kontroler Uittesten
Nu alles adalah aangesloten, alle code adalah geschreven en alles is gedubbelcheckt is het eindelijk tijd om de controller z'n werk te laten doen. Zoek een paar leuke effecten op Reaper en geniet van de voltooide Guitar Hero MIDI Controller!
Direkomendasikan:
Menggunakan Guitar Hero Guitar untuk Mengontrol Zoom (Hanya Windows): 9 Langkah
Menggunakan Guitar Hero Guitar untuk Mengontrol Zoom (Khusus Windows): Saat kita berada di tengah pandemi global, banyak dari kita terjebak di rumah membersihkan dan mengikuti rapat di Zoom. Setelah beberapa saat, ini bisa menjadi sangat hambar dan membosankan. Saat membersihkan rumah saya, saya menemukan sebuah gitar Guitar Hero tua yang terlempar ke
Guitar Hero Guitar Disconnecting Fix: 5 Langkah (dengan Gambar)
Guitar Hero Guitar Disconnecting Fix: Jadi, Anda baru saja membeli gitar hero bekas yang bagus dari ebay, dan ketika sampai di tangan Anda, itu tidak dapat terhubung ke dongle USB itu, jadi Anda pikir Anda hanya membuang-buang 30€ kedalam selokan. Tetapi ada perbaikan, dan perbaikan ini kemungkinan besar akan berhasil
Guitar Hero dan Headphone Holster/holder: 5 Langkah
Guitar Hero dan Headphone Holster/holder: Bosan dengan Tumpukan, gantung headphone dan pengontrol GH itu dan simpan tepat di ujung jari Anda
Guitar Hero Guitar Dengan Built-in Speaker: 8 Langkah
Guitar Hero Guitar With Built-in Speaker: Pada dasarnya, saya membuka pengontrol Guitar Hero dan bertanya-tanya apa yang bisa saya muat di dalamnya. Tampaknya ringan jadi saya pikir ada banyak ruang. Benar saja, ada banyak. Awalnya saya berencana untuk meletakkan iPod Shuffle di leher gitar dan
Epik! Guitar Hero - Gitar Leher Ganda Gagal: 7 Langkah (dengan Gambar)
Epik! Guitar Hero - Double Neck Guitar… Fail: 2015 menandai peringatan 10 tahun fenomena budaya pop Guitar Hero. Anda ingat, video game yang menjadi lebih populer dari alat musik itu hanya samar-samar berhasil ditiru? Apa cara yang lebih baik untuk merayakan sepuluh tahun selain