Sadržaj:
- Korak 1: Sastavite 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: Radni gumbi Originele + Dremelen
- Korak 7: Spavaća soba Bedrading + Gumbi 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 sastankom
- Korak 12: Kontroler Uittesten
Video: Arduino projekt Guitar Hero: 12 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Wij zijn Maarten Vrebos, Justin Cavanas i Wannes Stroobandt i mi studente multimedia & communicatietechnologie. Kako biste pronašli veliki projekt za audiovizualna i informatička načela, potrebno je koristiti Guitar Hero-gitaar gehackt i koristiti ga za MIDI-kontroler. Het je 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 materiaal in moeten verwerken.
In 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…
Benodigdheden voor dit project
- 6 kleine tipki
- 7 1kohm otpornika
- 1 LED dioda 1
- blauwe LED
- 1 Arduino Uno R3
- 1 sijalica LED
- 2 LED diode
- 1 schuifschakelaar
- 1 matična ploča
- 1 potenciometar
- 1 protobord
- 1 Guitar Hero gitaar
- Voldoende bedrading
- Materijal om te solderen/dremelen/
- Schroevendraaier
Korak 1: Sastavite Verzamelen
Voor ons prototype (op breadboard) hebben we volgende componentsnten gebruikt:
6 tipki
7 1kohm otpornika
1 Žuta LED
1 plava LED dioda
1 Arduino Uno R3
1 zelena LED dioda
2 crvena LED
1 Schuifschakelaar
1 Oglasna ploča
1 Potenciometar
Korak 2: Prototip Bouwen
Om ons prototype te bouwen hebben we al onze componentsnten gebruikt op een breadboard, deze breadboard dient dan als testobject zodat we niet meteen in de behuizing te werk moeten gaan. Od prototipa smo vidjeli ook gedigitaliseerd putem tinkercad.com, op deze manier hadden we een duidelijk overzicht van ons prototip dat elk groepslid ook kon bewerken.
Er worden 5 kleine pushbuttons gebruikt die fungeren als 5 snaren en een grote pushbutton die in combinatie met één of meerdere 'snaren' moet worden ingedrukt om een auditief effect te krijgen. De verschillende LED-lampjes dienen gewoon als visuele controle om er zeker van te zijn dat de interactie succesvol werkt.
Korak 3: Prototip koda
Globale variabelen
In het eerste deel van de code initialiseer je globale variabelen voor de pins van arduino uno waar alle pushbuttons mee verbonden zijn.
// zet pin brojevi waar mainButton (snaar) en andere gumbi aan verbonden zijn: const int mainButton = A1; // gitaar snaar const int lightSensor = A0; const int buttonPin1 = 2; // nummer van pushbutton1 const int buttonPin2 = 3; // nummer van pushbutton2const int buttonPin3 = 4; // nummer van pushbutton3const int buttonPin4 = 5; // nummer van pushbutton4const int buttonPin5 = 6; // nummer van button5
Više riječi i twee nizovi su prilagođeni za namjenu van gumba i guma.
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; // 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 pin A5
De laatste globale variabelen dienen als 'states' for senzori (zijn de pushbuttons ingedrukt of niet? Potenciometer, lichtsensor).
// Initialiseer buttonStates voor de knoppen (ingedrukt 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 volgt de void setup functie. Deze je van het type void (geeft geen waarde terug) en de instructies hierin worden maar 1 keer uitgevoerd.
Bij elke functie is commentaar geschreven wat er concreet gedaan wordt. Dodatni utilleg nad wat een specifieke functie concreet doet is te vinden in de arduino referenca
void setup () {// brzina prijenosa podataka u sekundi (baud) za seriele prijenos podataka Serial.begin (9600); // Initialiseer de ledPin varira ili je izlaz pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // inicijalizator svih tipki als input: pinMode (mainButton, INPUT); pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); pinMode (buttonPin5, INPUT); pinMode (potPin, INPUT); pinMode (svjetlosni senzor, ULAZ); }
Funkcija ništa
Na de setup () functie volgt de loop () functie, de instructies die hierin staan gaan herhaald uitgevoerd worden.
void loop () {// lees de staat van de pushbuttons 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};
// leest de waarde uit van de potenciometer en de lichtsensor
potValue = analogRead (potPin); lightValue = analogno čitanje (svjetlosni senzor);
// deklarira een niz mainStates en geef die de standaard waarden 0 in.
int mainStates = {0, 0, 0, 0, 0};
// petlja preko de array aantalKnoppen
for (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // inicijalizator all knopPinnen kao ulaz digitalRead (knopPinnen ); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt is, print alle knopnamen, all buttontates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}
Korak 4: Prototip Uittesten
Nadat het prototype gebouwd is volgens ons model en de code geschreven is in Processing, is het tijd om het prototype uit te 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.
In de tweede video is te zien hoe onze tremolo werkt aan de hand van een potenciometer in de gitaar en hoe de waardes worden uitgelezen in Processing.
Korak 5: Behuizing "ontmantelen" En Kijken Welke komponenta Gebruikt Gaan Worden
Ako je kod ispravan, radi se o prototipu koji smo započeli s "ontmantelen" van onze Guitar Hero-gitarom. We hebben de gitaar opengemaakt met een schroevendraaier en bekeken welke originele componentsnten we eventueel nog zouden kunnen hergebruiken voor onze controller. Uiteindelijk hebben we onze eigen pushbuttons in de bestaande buttons gekregen (zie volgende stap). We hebben de tremolo ook gebruikt voor ons eindproduct en voor onze hoofdbutton (Initiële button om als een combinatie af te spelen) hebben we ook de originele twee buttons gebruikt (zie vierde foto). De LEDjes zullen verdwijnen (deze waren enkel ter indicatie zodat we zagen dat alle knoppen pravilno werkten.
Korak 6: Radni gumbi Originele + Dremelen
Op de bijhorende video is de wijze te zien waarop de twee originele knoppen werken als een soort van schakelaar die wij gebruiken om een effect te genereren bij combinatie van knoppen.
Om onze eigen Buttons te verwerken in de originele knoppen hebben we de binnenkant van de originelen er grotendeels uitgehaald zoals te zien is op de foto.
Korak 7: Spavaća soba Bedrading + Gumbi Vastlijmen
Omdat we niet meer met een breadboard werken moeten de draden gesoldeerd worden om zo de verschillende componentsnten met elkaar te verbinden. Nadat dit gebeurd is kunnen we de Buttons widelijmen zoals 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 ontstaat voor de bedrading in de gitaar. Omdat er overal in de binnenkant preprekels 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 dat 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 su od 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. We 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).
Korak 10: Verstevigen
Završni dodir je het verstandig om de losse delen te verstevigen voor extra stabiliteit. 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 sastankom
Deze kod je optedeeld u twee delen, ali on je u de arduino IDE -u (interaktivno razvojno okruženje). Die code wordt geüpload naar arduino zelf en dient om alle waarden van de sensors van de midi controller uit te lezen en door te sturen naar processing.
Obrada je od tweede gedeelte. Deze code dient om alles wat arduino doorstuurt te ontvangen en door te sturen naar Reaper.
Arduino
/* Ovaj kôd je osnovna skica za komunikaciju s Obrada putem serijskog.
To je nacrt u koji možete staviti vlastiti kôd
specificirano za vaše vlastite tipke, potenciometre ili senzore.
Ima rukovanje kako bismo bili sigurni da imamo kontakt
te se odlučuje o formatu u kojem komuniciramo
Važno je poruku konstruirati 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
listopada 2017
*
/ brzina prijenosa
const long baudRate = 115200;
// vrijeme čekanja u ms između anketa za pinove
const int loopPauseTime = 200; // mili sekundi
// početne i završne vrijednosti za poruku poslanu na serijskom broju
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 nam je funkcija potrebna za uspostavljanje kontakta sa skicom Obrada
// Zadržite ga ovdje void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // poslati znak i čekati odgovor … kašnjenje (loopPauseTime); } Serial.read (); }
void setup () {
// postavljamo pinMode 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);
// inicijaliziranje serijskih komunikacija
Serial.begin (baudRate); while (! Serijski); // čekati rukovanje installContact (); }
void loop () {{100} {101}
// 1. KORAK 1: Č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: // plutamo v0 = karta (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 (karta (potValue, 0, 1023, 0, 100)); // upis kraja poruke Serial.print (endString);
// Čekaj malo..
kašnjenje (loopPauseTime); }
Obrada
Odricanje od odgovornosti: Ni kôd nije objavljen kod obrade skice u državi Geschreven, za kôd volledige koda u ovom slučaju: 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;
// Potražite IP adresu u žetelici (zie snimke zaslona u bijlageu)
// Obrada stuurta naar dit andres en reaper luistert hier naar //
// final String remoteIP = "192.168.1.43"; // npr. "127.0.0.1";
final String remoteIP = "10.3.209.60";
// Uzmite u obzir sendPort i ispunite ovo u Reaper -u.
// Ovo je port koji Processing šalje i Reaper sluša.
konačni int ListenPort = 12000, sendPort = 12000;
// ListenPort ovdje služi za aktivno ispravljanje pogrešaka.
// portNames su tu i za ispravljanje pogrešaka.
// završni niz PortName = "/dev/ttyACM0";
finalni niz portName = "COM5"; // "/dev/ttyUSB0";
/////////////////////// KRAJ KORISNIČKIH PARAMETRA /////////////////////////// ////
uvoz obrada.serial.*;
uvoz java.util.*;
uvoz oscP5.*;
uvoz netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
Serijski commsPort; // Serijski port
logička porukaArrived = false;
Dolazni niz = "", DolaznaOSCMessage = "";
final char startChar = '*', endChar = '#'; final char contactCharacter = '|';
// Kako bismo bili sigurni da šaljemo samo parametre (vrijednosti) koji se mijenjaju
// ove globalne varijable su ovdje uklonjene, ali // ne smiju se ovdje inicijalizirati! 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 pogreške, uhvatimo je na ekranu i izađimo. catch (Izuzetak ex) {println ("Poruka iznimke:" + 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 gumb i promijeni vrijednost. * Stoga filtriramo dolazne 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 (String key: newParams.keySet ()) {// ako je ključ već prisutan ako (oldParams.containsKey (key)) {// ključ prisutan i vrijednost nije ista, tada ažurirajte if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// ključ nije prisutan u starim parama, pa to recite! toSendParams.put (key, newParams.get (key)); } oldParams.put (ključ, newParams.get (ključ)); }}
void makeOSC () {
for (Ključni niz: toSendParams.keySet ()) {OscMessage myMessage = novi OscMessage ("/"+ ključ); myMessage.add (toSendParams.get (ključ)); / * pošaljite poruku */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {
processIncoming (); filterParams (); makeOSC (); } // Kad želimo ispisati u prozor void ShowIncoming () {// da vidimo dolaznu poruku, kako je postavljeno u tekstu HashMap -a ("Dolazno s Arduina", 20, 20); int y = 20; for (Ključni niz: newParams.keySet ()) {y = y+20; tekst (ključ, 20, y); text (newParams.get (key), 300, y); }}
void showOsc () {
tekst (DolaznaOSCMessage, 300, 200); DolaznaOSCMessage = ""; }
void setup () {
veličina (1000, 800); // Ispunjavanje veličine stupnja (255); pozadina (0); oldParams = novi HashMap (); newParams = novi HashMap (); // printArray (Serial.list ()); commsPort = novi serijski (ovaj, naziv porta, 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 koristi se kao parametar u * oscP5.send () pri slanju osc paketa na drugo računalo, uređaj, * aplikaciju. korištenje vidi dolje. 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žiti više println ("pokretanje …"); pauza; case startChar: incoming = ""; pauza; slučaj endChar: messageArrived = true; // println ("kraj poruke"); pauza; zadano: dolazni += inChar; pauza; }}
/* dolazne osc poruke prosljeđuju se oscEvent metodi. */
void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // dobiti 1. osc argument
DolaznaOSCMessage += "\ n" +
String.format ("### je primio osc poruku:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", vrijednost); println (DolaznaOSCMessage); }
Korak 12: Kontroler Uittesten
Nu alles is aangesloten, alle code is 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!
Preporučeni:
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živanju sastancima na Zoomu. Nakon nekog vremena ovo može postati vrlo dosadno i zamorno. Čišćenjem kuće našao sam staru gitaru Guitar Hero koja je bačena u
Guitar Hero s Arduinom: 4 koraka
Guitar Hero With Arduino: Arduino omogućuje korisnicima da prilagode gotovo sve što požele s malom količinom koda. Odlučio sam razviti igru Guitar Hero s podesivom brzinom, glasnoćom i više načina igre. Ovaj projekt također može raditi na 3 AA baterije, pa
Guitar Hero Guitar Prekidanje veze: 5 koraka (sa slikama)
Guitar Hero Guitar Disconnecting Fix: Dakle, upravo ste kupili onu lijepu rabljenu gitaru gitaru s ebaya, a kad vam je stigla, jednostavno se ne bi spojila na taj USB dongle, pa mislite da ste samo potrošili 30 € niz odvod. Ali postoji popravak i ovaj će popravak najvjerojatnije uspjeti
Guitar Hero Guitar s ugrađenim zvučnikom: 8 koraka
Guitar Hero Guitar s ugrađenim zvučnikom: U osnovi sam otvorio Guitar Hero kontroler i pitao se što mogu staviti unutra. Činilo mi se lagano pa sam zaključio da ima puno mjesta. Naravno, bilo je dosta. Prvotno sam planirao staviti iPod Shuffle u vrat gitare i ro
Ep! Guitar Hero - Double Neck Guitar Neuspjeh: 7 koraka (sa slikama)
Ep! Guitar Hero - Double Neck Guitar … Neuspjeh: 2015. obilježava se 10 godina od fenomena pop kulture Guitar Hero. Sjećate li se, video igra koja je postala popularnija od glazbenog instrumenta koji je samo maglovito uspio oponašati? Ima li boljeg načina za proslavu desetogodišnjice od