Sadržaj:
- Korak 1: Komponenta Verzamelen
- Korak 2: Prototip Bouwen
- Korak 3: Prototip koda
- Korak 4: Prototip Uittesten
- Korak 5: Behuizing "ontmantelen" En Kijken Welke komponenta Gebruikt Gaan Worden
- Korak 6: Dugmad za rad Originele + Dremelen
- Korak 7: Spavaća soba Bedrading + Buttons Vastlijmen
- Korak 8: Pločice izrađene u De Behuizingu
- Korak 9: Bedrading Aansluiten Op Protobord
- Korak 10: Verstevigen
- Korak 11: Kôd za komunikaciju sa metrom
- Korak 12: Kontroler Uittesten
Video: Arduino projekt Guitar Hero: 12 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Wij zijn Maarten Vrebos, Justin Cavanas i Wannes Stroobandt i studente multimedijalna i komunikacijska tehnologija. Za jedan veliki projekt za audiovizuelne i IT principe koristite Guitar Hero-gitaar gehackt i gebruikt za bilo koji MIDI kontroler. Het was onze bedoeling om de bestaande knoppen op de gitaar intern te vervangen. Onze kontroler zal widegehouden en bespeeld worden als een normale gitaar. Aangezien we iets hebben gehackt hebben we er niet veel extra materialal in moeten verwerken.
U nastavku možete pronaći sve bolje sheme na papiru koji su prikazani kao eindprodukt jer ste moeten uitzien met daarnaast i fotografiju 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…
Benodigdheden za ovaj projekat
- 6 kleine tastera
- 7 1kohm otpornika
- 1 LED dioda 1
- blauwe LED
- 1 Arduino Uno R3
- 1 sijalica LED
- 2 LED diode
- 1 schuifschakelaar
- 1 osnova
- 1 potenciometar
- 1 protobord
- 1 Guitar Hero gitaar
- Voldoende bedrading
- Materijal om te solderen/dremelen/
- Schroevendraaier
Korak 1: Komponenta Verzamelen
Za vaš prototip (op. Ploču) upotrijebite komponente sa sljedećim sastavom:
6 tastera
7 1kohm otpornika
1 Žuta LED
1 plava LED dioda
1 Arduino Uno R3
1 zelena LED dioda
2 Crvena LED
1 Schuifschakelaar
1 Breadboard
1 Potenciometar
Korak 2: Prototip Bouwen
Svi oni prototipi koji su sadržani u sastavljanju komponenti koji stvaraju opštu ploču, postojeću matičnu ploču, kao i testobjekt, ne smiju nas podržati u radu. Na prototipu smo izradili gedigitaliseerd putem tinkercad.com, ali nismo htjeli pronaći više protokola na prototipu da bismo bili sigurni da je potrebno.
Ako pritisnete 5 kleine tastera, dodirnite fungeren ili 5 klika i pritisnite taster die u kombinaciji sa meerdere "snaren" mojom jedinicom za dodavanje efekta. Svetleće LED-lampe su opremljene gewoon-om i kontrolišu kontrolu nad zeker-om kako bi uspjele interakciju.
Korak 3: Prototip koda
Globale variabelen
In het eerste deel van de code initialiseer is globale variabelen for or pins van arduino uno waar allbuttons mee verbonden zijn.
// zet pin brojevi waar mainButton (snaar) i ostali gumbi i verbonden zijn: const int mainButton = A1; // gitaar snaar const int lightSensor = A0; const int buttonPin1 = 2; // broj van pushbutton1 const int buttonPin2 = 3; // broj van pushbutton2const int buttonPin3 = 4; // broj van pushbutton3const int buttonPin4 = 5; // broj tastera 4const int buttonPin5 = 6; // broj tipke van van5
To znači da su twee nizovi prilagođeni za namjenu pritiskanja tipki i brojčanika.
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};
I nove varijante za pinove sa LED dioda.
const int ledPin1 = 13; // broj LED pina 13
const int ledPin2 = 12; // broj LED pina 12 const int ledPin3 = 11; // broj LED pina 11 const int ledPin4 = 10; // broj LED pina 10 const int ledPin5 = 9; // broj LED pina 9 const int potPin = A5; // broj LED pina A5
Globalne varijable promjenjivih stanja država za senzore (pritisnuti tipke koje se nalaze na potenciometru, lichtsensor).
// Initialiseer buttonStates voor de knoppen (ingetrukt of niet) int mainButtonState = 0; int buttonState1 = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int buttonState5 = 0; int lightSensorState = 0; int potValue = 0; int lightValue = 0;
Postaviti
Nu voltt de void setup functie. Deze je van het type void (geeft geen waarde terug) en de instructions hierin worden maar 1 keer uitgevoerd.
Bij elke functie je komentarisan, ako je konkretan. Dodatni dodatak iznad specificirane funkcionalne betonske boje je vinden u de arduino referenci
void setup () {// brzina prijenosa podataka u sekundi (baud) za prijenos podataka po serijalu Serial.begin (9600); // Initialiseer de ledPin varira kao izlaz pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // inicijalizator svih tastera als input: pinMode (mainButton, INPUT); pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); pinMode (buttonPin5, INPUT); pinMode (potPin, INPUT); pinMode (lightSensor, INPUT); }
Void functie
Na setup () funkciji uključite petlju () functie, uputstva su vam na raspolaganju staan gaan herhaald uitgevoerd worden.
void loop () {// prikazuje stanje tipki uit (ingedrukt of niet) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);
// svi statusen tipke u een nizu
int buttonStates = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};
// najmanji napon sa potenciometrom i senzorom senzora
potValue = analogRead (potPin); lightValue = analogRead (lightSensor);
// deklarira een array mainStates en geef die de standaard waarden 0 in.
int mainStates = {0, 0, 0, 0, 0};
// petlja preko niza aantalKnoppen
for (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // inicijalizator za sve knopPinnen kao ulaz digitalRead (knopPinnen ); // preusmjeravamo sve stavke koje se ne primjenjuju // indien de mainswitch (snaar) ingedrukt is, ispisuje sve knopnamen, sve buttontates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}
Korak 4: Prototip Uittesten
Nadat het prototype gebouwd is volgens ons model and de code geschreven in Processing, is het tijd om het prototype in the testen. Op de video is te zien dat alle knoppen een reactie geven op de bijhorende ledjes en dat ook combinaties van knoppen mogelijk zijn.
U tweede videu je prikazano kako se pokreće tremolo, a ručno se nalazi potenciometar, a gitara je uklonjena i obrađena u procesu obrade.
Korak 5: Behuizing "ontmantelen" En Kijken Welke komponenta Gebruikt Gaan Worden
Ako je kôd ispravan, prototip je počeo sa sastavljanjem "omantile" van Guitar Hero-gitare. Mi smo napravili gitaar otvoreni mehanizam i provjerili smo da li su originalne komponente sastavni dio našeg eventueel nog zouden kunnen hergebruiken za onze kontroler. Molimo vas da uključite sopstvene tastere u dekretne tastere (zie volgende stap). Hebben de tremolo ook gebruikt for ons eindproduct en voor onze hoofdbutton (početno dugme za sve kombinacije nakon toga) hebben we ook de originele twee button gebruikt (zie vierde foto). De LEDjes zullen verdwijnen (deze waren enkel ter indicatie zodat we zagen dat all knoppen correct werkten.
Korak 6: Dugmad za rad Originele + Dremelen
Op de bijhorende video is de wijze te zien waarop from twee originele knoppen werken als een soort van schakelaar die wij gebruiken om een effect te genereren bij combinatie van knoppen.
Vlastita dugmad koja su izvorno postavljena i originalno su napisana u originalnoj verziji su originalni i mogu se koristiti samo za fotografije.
Korak 7: Spavaća soba Bedrading + Buttons Vastlijmen
Omdat we niet meer met een motherboard werken moeten de draden gesoldeerd worden om zo de verchillende components sa elkaar te verbinden. Nadat dit gebeurd is kunnen we de dugmad ogromne zoal te zien is op de foto's. Eens dit gebeurd is kunnen we doorgaan naar de volgende stap.
Korak 8: Pločice izrađene u De Behuizingu
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 onntstaat voor de bedrading in de gitaar. Omdat er overal in de binnenkant prepreke 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 is te zien da we in de achterkant van de gitaar een doorgang hebben gecreëerd voor de draden die naar de button gaan omdat de gitaar anders niet meer te sluiten was. En op de laatste foto is 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.
Korak 9: Bedrading Aansluiten Op Protobord
Sve komponente sastavljene od verbinden hebben we gebruik gemaakt van een protobord. To je een bordje dat eigenlijk op net dezelfde manier werkt als een breadbord, maar dan betrouwbaarder en efficiënter. We hebben de bedrading aan het bordje gesoldeerd zoals te zien is op de derde foto. Ovo mjesto je središnje mjesto gdje se nalazi putokaz sa sjedištem (slika 2).
Korak 10: Verstevigen
Završni dodir je i njegova potpuna stabilnost. Op deze foto is te zien hoe we het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan de button verstevigen met stukjes karton.
Korak 11: Kôd za komunikaciju sa metrom
Deze kôd je optedeeld u dva delena, ali je deer u arduino IDE (interaktivno razvojno okruženje). Ovaj kôd će se učitati na arduino zelf jedinstven način za sve vanjske senzore van midi kontrolera koji se nalaze na vratima na prirodnoj obradi.
Obrada je izrađena od tweede gedeelte. Ovaj kôd je dostupan svim arduinskim vratima na otvorenom i na vratima žetve.
Arduino
/* Ovaj kod je osnovna skica za komunikaciju sa Obrada putem serijskog broja.
To je nacrt u koji možete staviti vlastiti kôd
specificirano za vaše vlastite tipke, potenciometre ili senzore.
Ima rukovanje kako bi bili sigurni da imamo kontakt
i odlučuje se o formatu u kojem komuniciramo
Važno je konstruirati poruku na ovaj način, tako da Processing zna kako ga dekonstruirati i poslati ispravne OSC-poruke našem DAW-u
napravljeno za werkcollege AV&IT
oktobra 2017
*
/ brzina prijenosa
const long baudRate = 115200;
// vreme za čekanje u ms između anketa za pinove
const int loopPauseTime = 200; // mili sekundi
// početne i završne vrijednosti za poruku poslanu na Serial
const String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin ID -ovi
// druge globalne varijable
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 potValue = 0;
// analogni senzori
const int potPin = A5; // pin voor tremolo
// Ova funkcija nam je potrebna za uspostavljanje kontakta sa skicom Obrada
// Zadržite ga ovdje void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // šalje znak i čeka odgovor … kašnjenje (loopPauseTime); } Serial.read (); }
void setup () {
// postavljamo pinModes za sve pinove za (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // uklonite komentar ako koristite senzore koji rade na 3V umjesto na 5V // morat ćete spojiti i 'ext' pin na 3.3V // analogReference (EXTERNAL);
// inicijalizacija serijske komunikacije
Serial.begin (baudRate); while (! Serijski); // čekamo rukovanje installContact (); }
void loop () {{100} {101}
// 1. KORAK: PROČITAJ TIPKE // anketirajte sve pinove i preslikajte očitanje u odgovarajući raspon 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); // primjeri: // float v0 = map (bpm, 0, 1023, 60, 250); // ako želite koristiti normalizirani float (npr. za volumen) // float v1 = map (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;
// 2. KORAK: NAPIŠITE PORUKU
Serial.print (startString); // pokrećemo niz poruka za (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 (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }}} Serial.print (","); Serial.print ("tremolo"); Serial.print (","); Serial.print (mapa (potValue, 0, 1023, 0, 100)); // upisuje kraj poruke Serial.print (endString);
// sačekaj malo..
delay (loopPauseTime); }
Obrada
Izjava o odricanju odgovornosti: Ni kod nije obrađen skice staat hier u Geschreven, za volledige koda na ovom mjestu: ProcessingSoundControl_handout_v6_1.pde in bijlage
De volgende instructies moeten aangepast worden (indien nodig):
// Baudrate moet hetzelfde zijn zoals in de arduino skica
konačni int baudRate = 115200;
// Traži IP adresu u žetelici (zie snimke ekrana u bijlageu)
// Obrada stuurta naar dit andres en reaper luistert hier naar //
// završni niz stringIP = "192.168.1.43"; // npr. "127.0.0.1";
final String remoteIP = "10.3.209.60";
// Zabilježite sendPort i popunite ovo u Reaper -u.
// Ovo je port koji Processing šalje i Reaper sluša.
final int listenPort = 12000, sendPort = 12000;
// ListenPort ovdje služi za aktivno otklanjanje grešaka.
// portNames su tu i za otklanjanje grešaka.
// konačni niz stringName = "/dev/ttyACM0";
finalni niz portName = "COM5"; // "/dev/ttyUSB0";
/////////////////////// KRAJ KORISNIČKIH PARAMETRA /////////////////////////// ////
import processing.serial.*;
import java.util.*;
uvoz oscP5.*;
uvoz netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
Serial commsPort; // Serijski port
logička porukaArrived = false;
Dolazni niz = "", IncomingOSCMessage = "";
final char startChar = '*', endChar = '#'; final char contactCharacter = '|';
// Da bismo bili sigurni da šaljemo samo parametre (vrijednosti) koji se mijenjaju
// ove globalne varijable su ovdje uklonjene, ali // ne bi trebale biti inicijalizirane ovdje! HashMap oldParams, newParams, toSendParams;
// Moramo podijeliti poruku na svaki zarez
void processIncoming () {String resVec = incoming.split (","); // dobivamo parove ime+vrijednost // pa za svako ime (+2)… pokušajte {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // stavljamo ih u novu Hashtable newParams.put (resVec , vrijednost); }} // ako dođe do greške, hajde da je uočimo i izađemo. catch (Izuzetak ex) {println ("Poruka izuzetka:" + ex); printArray (resVec); Izlaz(); }}
// Za filtriranje naših poruka
/ * Uvjeravamo se da postoji samo poruka o izlazu s OSC-a kada se * promijeni ulazna poruka (serijska) * To jest: ako okrenemo/pritisnemo dugme i promijeni vrijednost. * Zato filtriramo ulazne vrijednosti koje se zapravo mijenjaju * napomena: nećemo izbjeći preskakanje vrijednosti * koje dolaze iz npr. Mjerača ubrzanja ili senzora udaljenosti * morat ćete ih sami izgladiti u Arduinu */ void filterParams () {toSendParams = new HashMap (); for (Ključ niza: newParams.keySet ()) {// ako je ključ već prisutan ako (oldParams.containsKey (ključ)) {// ključ prisutan i vrijednost nije ista, tada ažurirajte if (! oldParams.get (ključ).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// ključ nije prisutan u starim parama, pa to recite! toSendParams.put (ključ, newParams.get (ključ)); } oldParams.put (ključ, newParams.get (ključ)); }}
void makeOSC () {
for (String ključ: toSendParams.keySet ()) {OscMessage myMessage = novi OscMessage ("/"+ ključ); myMessage.add (toSendParams.get (ključ)); / * pošaljite poruku */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {
processIncoming (); filterParams (); makeOSC (); } // Kada želimo da odštampamo u prozoru void ShowIncoming () {// da vidimo dolaznu poruku, kako je postavljeno u tekstu HashMap -a ("Dolazni iz Arduina", 20, 20); int y = 20; for (Ključ niza: newParams.keySet ()) {y = y+20; tekst (ključ, 20, y); text (newParams.get (key), 300, y); }}
void showOsc () {
tekst (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
void setup () {
veličina (1000, 800); // Ispunjavanje veličine stupnja (255); pozadina (0); oldParams = novi HashMap (); newParams = novi HashMap (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);
/ * pokrenite oscP5, osluškujte dolazne poruke */
oscP5 = novi OscP5 (ovo, slušajPort);
/* myRemoteLocation je NetAddress. NetAddress uzima 2 parametra, * IP adresu i broj porta.myRemoteLocation se koristi kao parametar u * oscP5.send () pri slanju osc paketa na drugo računalo, uređaj, * aplikaciju. upotrebu pogledajte dole. za potrebe testiranja, port za slušanje * i port za adresu udaljene lokacije su isti, stoga ćete * slati poruke natrag na ovu skicu. */ myRemoteLocation = nova NetAddress (remoteIP, sendPort); }
void draw () {
if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {
// čitanje bajta sa serijskog porta: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // traži više println ("počinje…"); break; slučaj startChar: incoming = ""; break; case endChar: messageArrived = true; // println ("kraj poruke"); break; default: dolazni += inChar; break; }}
/* dolazne osc poruke prosljeđuju se oscEvent metodi. */
void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // dobivamo 1. osc argument
DolaznaOSCMessage += "\ n" +
String.format ("### je primio osc poruku:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", vrijednost); println (IncomingOSCMessage); }
Korak 12: Kontroler Uittesten
Nu alles is aangesloten, all code is geschreven en alles is gedubbelcheckt is het eindelijk tijd om de controller z'n werk te laten doen. Potražite najbolji učinak na Reaper -u i donesite voltooide Guitar Hero MIDI Controller!
Preporučuje se:
Korištenje gitare Hero Guitar za kontrolu zumiranja (samo za Windows): 9 koraka
Korištenje gitare Guitar Hero za kontrolu zumiranja (samo za Windows): Kako smo usred globalne pandemije, mnogi od nas zaglavili su u čišćenju kuće i pridružuju se sastancima na Zoomu. Nakon nekog vremena ovo može postati vrlo dosadno i zamorno. Prilikom čišćenja kuće našao sam staru gitaru Guitar Hero koja je bačena u
Guitar Hero with Arduino: 4 koraka
Guitar Hero with Arduino: Arduino omogućava korisnicima da prilagode gotovo sve što požele s malom količinom koda. Odlučio sam razviti Guitar Hero igru s podesivom brzinom, glasnoćom i više načina igre. Ovaj projekt također može raditi na 3 AA baterije, tako da
Guitar Hero Guitar Prekidanje veze: 5 koraka (sa slikama)
Guitar Hero Guitar Disconnecting Fix: Dakle, upravo ste kupili onu lijepu polovnu gitaru sa gitare na ebayu, a kada vam je stigla, jednostavno se nije mogla spojiti na taj USB dongle, pa mislite da ste samo potrošili 30 € niz odvod. Ali postoji popravak i ovaj će popravak najvjerojatnije uspjeti
Klon Guitar Hero: 7 koraka (sa slikama)
Guitar Hero Clone: Jeste li ikada željeli svirati Guitar Hero na svom računaru sa vlastitom gitarom? Spremite se za igru za manje od 10 dolara i malo strpljenja
Epski! Guitar Hero - Double Neck Guitar Neuspjeh: 7 koraka (sa slikama)
Epski! Guitar Hero - Double Neck Guitar … Neuspjeh: 2015. obilježava se 10 godina od pojave fenomena pop kulture Guitar Hero. Sjećate li se, video igra koja je postala popularnija od muzičkog instrumenta koji je samo maglovito uspio oponašati? Ima li boljeg načina za proslavu desetogodišnjice od