Innholdsfortegnelse:
- Trinn 1: Componenten Verzamelen
- Trinn 2: Prototype Bouwen
- Trinn 3: Kodeprototype
- Trinn 4: Prototype Uittesten
- Trinn 5: Behuizing "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden
- Trinn 6: Arbeide Originele -knapper + Dremelen
- Trinn 7: Bedrading Solderen + Knapper Vastlijmen
- Trinn 8: Plater laget i De Behuizing
- Trinn 9: Bedrading Aansluiten Op Protobord
- Trinn 10: Verstevigen
- Trinn 11: Code Voor Het Communiceren Met Reaper
- Trinn 12: Kontroller Uittesten
Video: Guitar Hero Arduino Project: 12 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
Vi er Maarten Vrebos, Justin Cavanas og Wannes Stroobandt og vi studerer multimedia og kommunikasjonsteknologi. For et gruppeprosjekt for det audiovisuelle og IT-prinsippene har vi en Guitar Hero-gitaar som kan brukes og brukes som behandling for vår MIDI-kontroller. Det var vår mening om de eksisterende knappene på gitaren intern å erstatte. Vår kontroller vil bli oppbevart og vist som en vanlig gitar. Vi må ikke ha noe ekstra materiale som vi må arbeide med.
I bildet kan du bruke våre generelle oppskrifter på papir for å se hvordan produktet skulle slutte å bli sett med et foto av gitaren som også vil bli brukt.
Vi har et prosjekt basert på følgende bronner:
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 små trykknapper
- 7 1kohm motstander
- 1 gele LED 1
- blå LED
- 1 Arduino Uno R3
- 1 grønn LED
- 2 rode LED -er
- 1 schuifschakelaar
- 1 brødbrett
- 1 potensiometer
- 1 protobord
- 1 Guitar Hero gitaar
- Voldoende sengeplass
- Materiale om solderen/dremelen/
- Schroevendraaier
Trinn 1: Componenten Verzamelen
For vår prototype (på brødbrett) har vi følgende komponenter brukt:
6 Trykknapper
7 1kohm motstander
1 gul LED
1 blå LED
1 Arduino Uno R3
1 grønn LED
2 rød LED
1 Schuifschakelaar
1 brødbrett
1 potensiometer
Trinn 2: Prototype Bouwen
Om vår prototype å bygge har vi alle våre komponenter som brukes på et brødbrett, dette brødbrettet skal kunne testes og testes så vi ikke kan mete i hvordan vi skal arbeide. Denne prototypen har vi også kunnet digitalisere via tinkercad.com, på denne måten hadde vi en tydelig oversikt over prototypen for at alle grupper også kan arbeide.
Det er 5 små trykknapper som brukes som funksjoner som 5 versjoner og en stor trykknapp som kan kombineres med én eller flere 'snarer' må brukes for å få en auditiv effekt. De forskjellige LED-lampene kan bare brukes som visuell kontroll for å sikre at interaksjonen lykkes.
Trinn 3: Kodeprototype
Globale variabelen
I den første delen av koden initialiseres globale variabler for pinnene fra arduino for alle trykknapper som jeg verbonden er.
// zet pin numbers waar mainButton (snaar) og andre knapper til verbonden er: const int mainButton = A1; // gitaar snaar const int lightSensor = A0; const int buttonPin1 = 2; // nummer av trykknapp1 const int buttonPin2 = 3; // nummer av pushbutton2const int buttonPin3 = 4; // nummer av pushbutton3const int buttonPin4 = 5; // nummer van pushbutton4const int buttonPin5 = 6; // nummer av trykknapp 5
Her blir det to matriser som kan brukes for å navngi trykknapper og har pinnummer.
const int aantalKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [antallKnoppen] = {2, 3, 4, 5, 6};
En annen variabel for pinner av LED -lys.
const int ledPin1 = 13; // nummeret på LED -pinnen 13
const int ledPin2 = 12; // antall LED -pinner 12 const int ledPin3 = 11; // antall LED -pinne 11 const int ledPin4 = 10; // antall LED -pinner 10 const int ledPin5 = 9; // antall LED -pinner 9 const int potPin = A5; // antall LED -pinner A5
De siste globale variabelen dienen som 'tilstander' for sensorer.
// initialize 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;
Oppsett
Nå følger det ugyldige oppsettfunksjonen. Denne er av den ugyldige typen (gir ingen verdi tilbake) og instruksjonene blir ikke gjentatt én gang.
Ved hver funksjon er kommentaren skrevet hva som er konkret gjort. Ekstra utseende over hva en spesiell funksjon konkrete gjør er å finne i den arduino referansen
void setup () {// datahastighet per sekund (baud) for seriell dataoverføring Serial.begin (9600); // Initialiser de ledPin variabelen as output pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // initialiser alle trykknapper som 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); }
Ugyldig funksjon
Etter oppsett () funksjon følger loop () funksjon, instruksjonene som vil stå her vil bli utført.
void loop () {// les de state of the pushbuttons uit (ingedrukt of niet) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);
// alle trykknappstatuser i en matrise
int buttonStates = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};
// leest the waarde uit van the potentiometer en de lichtsensor
potValue = analogRead (potPin); lightValue = analogRead (lightSensor);
// erklærer en rekke mainStates og gir standardverdien 0 tommer.
int mainStates = {0, 0, 0, 0, 0};
// loop over the array numberKnoppen
for (int i = 0; i <antallKnoppen; i ++) {pinMode (knopPinnen , INPUT); // initialize alle knopPinnen as input digitalRead (knopPinnen ); // les de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt is, print alle knopnamen, alle buttonstates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}
Trinn 4: Prototype Uittesten
Etter at prototypen ble bygget etter modellen og koden som er skrevet i behandling, er det tid for prototypen å teste. På videoen kan du se at alle knoppene reagerer på de tilhørende ledningene og at de også kan kombineres.
I den andre videoen kan vi se hvordan tremoloen vår fungerer for å håndtere et potensiometer i gitaren og hvordan de blir utgitt i behandling.
Trinn 5: Behuizing "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden
Når vi koder riktig for prototypen, begynner vi med den "konstruksjonen" av vår Guitar Hero-gitaar. Vi har åpnet oppgaven med en skrutekniker og kjenner hvilke originale komponenter vi eventuelt ikke kan bruke for vår kontroller. Vi har vanligvis våre egne trykknapper i de eksisterende knappene som er registrert (se følgende stap). Vi har også brukt tremoloen for vårt sluttprodukt og for hovedknappen (den opprinnelige knappen for en kombinasjon av å spille) og vi har også brukt de to andre knappene (se fire bilder). LEDene vil bli verdwijnen (disse var enkle indikasjoner, slik at vi kan bruke alle de riktige virkningene.
Trinn 6: Arbeide Originele -knapper + Dremelen
På den tilhørende videoen kan du se hvordan de to opprinnelige knappene fungerer som en slags skabelon som vi kan bruke til å generere en kombinasjon av knapper.
Om våre egne knapper kan vi opprette de originale knappene.
Trinn 7: Bedrading Solderen + Knapper Vastlijmen
Fordi vi ikke trenger mer med et brødbrett, må vi laste det sammen for å dele de forskjellige komponentene med hverandre. Etter at dette kan skje, kan vi vise knapper som å se på bilder. Eens dit gebeurd can we wegaangaan to the following stap.
Trinn 8: Plater laget i De Behuizing
Fordi dette Guitar Hero-modellen redelik krap var om jeg skulle arbeide, har vi et ekstra sted for å lage d.m.v. dremelen. Så vi har fjernet hele baksiden av gitaren, slik at vi kan få mer plass til staten for bedrading i gitaar. Fordi det er overordnet i de innvendige objektene, kan vi også fjerne flere av de beste plassene vi kan bruke. På de vierde og femde fotoene kan du se at vi i de bakkant av gitaren en dørgang har kontrollert for at de kan trykke på knappene fordi gitaren ellers ikke er mer å slukke. En av de siste bildene er å se at vi kan bruke den direkte kontakt med Arduino til en gat i en kant av gitaren for å behandle forlater.
Trinn 9: Bedrading Aansluiten Op Protobord
Om alle komponentene med hverandre har vi brukt en protobord. Dette er et bord som har en egen på samme måte som et brødbord, men det er en betjening og effektivitet. Vi har bedrading til det bordet gesoldeerd som du kan se er på tredje foto. Dette er et sentralt punkt for informasjon om våre forbindelser og sammenkomster (se foto 2).
Trinn 10: Verstevigen
Som prikken over i -en er det svært godt å forstå deler for ekstra stabilitet. På dette bildet kan vi se hvordan vi har delt at vi har opphørt d.m.v. dremelen achteraan de buttons verstevigen with piecesjes karton.
Trinn 11: Code Voor Het Communiceren Met Reaper
Denne koden er oppgitt i to deler, den første delen er i arduino IDE (interaktiv utviklingsmiljø) skrevet. Koden blir lastet opp til selvstendig bruk og må betjene alle sensorene til midi -kontrolleren for å kunne laste ned og behandle.
Behandlingen er den andre delen. Denne koden trenger alt du trenger for å motta en dør for å lese til Reaper.
Arduino
/* Denne koden er en grunnleggende skisse for å kommunisere med Processing through Serial.
Det er en blåkopi der du kan sette din egen kode
spesifisert for dine egne knapper, potensiometre eller sensorer.
Den har et håndtrykk for å sikre at vi har kontakt
og formatet vi kommuniserer i er bestemt
Det er viktig å konstruere budskapet på samme måte, slik at Processing vet hvordan de skal dekonstruere det og sende riktige OSC-meldinger til vår DAW
laget for werkcollege AV&IT
oktober 2017
*
/ baud rate
const long baudRate = 115200;
// tid til å vente i ms mellom meningsmålinger til pinnene
const int loopPauseTime = 200; // milli sekunder
// start- og sluttverdier for meldingen sendt på Serial
const String startString = "*", endString = "#";
const char contactCharacter = '|';
// pin -ID -er
// andre globale variabler
const int antallKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [antallKnoppen] = {2, 3, 4, 5, 6}; const int mainButton = A1;
int mainButtonState = 0;
int potValue = 0;
// analoge sensorer
const int potPin = A5; // pin for tremolo
// Vi trenger denne funksjonen for å etablere kontakt med behandlingsskissen
// Hold det her ugyldig etablereContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // send en røye og vent på svar … forsinkelse (loopPauseTime); } Serial.read (); }
ugyldig oppsett () {
// angi pinModes for alle pinnene for (int i = 0; i <antallKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // uncomment hvis du bruker sensorer som fungerer på 3V i stedet for 5V // må du også koble 'ext' pin til 3.3V // analogReference (EXTERNAL);
// initialiser Serial comms
Serial.begin (baudRate); mens (! Seriell); // vent på håndtrykk etablerContact (); }
void loop () {
// TRINN 1: LES KNAPPER // poll alle pinnene og kartlegg avlesningen til det aktuelle området int buttonStates [antallKnoppen]; /* 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); // eksempler: // float v0 = map (bpm, 0, 1023, 60, 250); // hvis du vil bruke en normalisert float (f.eks. for volum) // float v1 = map (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;
// TRINN 2: SKRIV MELDING
Serial.print (startString); // start en meldingsrekkefølge for (int i = 0; i <antallKnoppen; i ++) {if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <antallKnoppen - 1) {Serial.print (","); }} else {buttonStates = 0; Serial.print (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <antallKnoppen - 1) {Serial.print (","); }}} Serial.print (","); Serial.print ("tremolo"); Serial.print (","); Serial.print (kart (potValue, 0, 1023, 0, 100)); // skriv slutten av meldingen Serial.print (endString);
// vent en stund..
forsinkelse (loopPauseTime); }
Behandling
Ansvarsfraskrivelse: Ikke alle koder for bearbeiding kan skisseres her for å se koden for fullstendig kode: ProcessingSoundControl_handout_v6_1.pde i bijlage
De følgende instruksjonene må tilpasses:
// Baudrate må det samme som i arduino -skissen
siste int baudRate = 115200;
// Søk etter IP -adressen i reaper (se skjermbilder i bijlage)
// Behandler sendt til dit andres en reaper lytt hier to //
// final String remoteIP = "192.168.1.43"; // f.eks. "127.0.0.1";
final String remoteIP = "10.3.209.60";
// Legg merke til sendPort og fyll ut dette i Reaper.
// Dette er porten Processing sender til og Reaper lytter til.
siste int listenPort = 12000, sendPort = 12000;
// ListenPort her er for å feilsøke aktivt.
// portnavnene er også her for å feilsøke.
// final String portName = "/dev/ttyACM0";
final String portName = "COM5"; // "/dev/ttyUSB0";
//////////////////////// END OF USER PARAMETERS //////////////////////// ////
import behandling. serie.*;
import java.util.*;
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
Seriell commsPort; // Seriell port
boolsk meldingArrived = false;
Innkommende streng = "", IncomingOSCMessage = "";
final char startChar = '*', endChar = '#'; final char contactCharacter = '|';
// For å være sikker på at vi bare sender parametrene (verdiene) som endres
// disse globale variablene delcares her, men bør // ikke initialiseres her! HashMap oldParams, newParams, toSendParams;
// Vi må dele meldingen ved hvert komma
void processIncoming () {String resVec = incoming.split (","); // vi får navn+verdi par // så for hvert navn (+2) … prøv {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // legg dem i den nye Hashtable newParams.put (resVec , verdi); }} // // hvis det oppstår en feil, la oss få den vist og gå ut. catch (Unntak eks) {println ("Unntaksmelding:" + eks); printArray (resVec); exit(); }}
// For å filtrere meldingene våre
/ * Vi sørger for at det bare er en OSC-utmelding når * inndatameldingen (seriell) endres * Det vil si: hvis vi snur/trykker på knappen og den endrer verdi. * Så vi filtrerer ut de innkommende verdiene som faktisk endres * merk: vi vil ikke unngå hoppverdier * som kommer fra f.eks. Akselerometre eller avstandssensorer * du må glatte dem selv i Arduino */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// hvis nøkkelen allerede er til stede hvis (oldParams.containsKey (key)) {// key present and value not the same, then update if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// nøkkelen er ikke tilstede i gamle params, så si det! toSendParams.put (key, newParams.get (key)); } oldParams.put (nøkkel, newParams.get (nøkkel)); }}
ugyldig makeOSC () {
for (String key: toSendParams.keySet ()) {OscMessage myMessage = ny OscMessage ("/"+ nøkkel); myMessage.add (toSendParams.get (nøkkel)); / * send meldingen */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {
processIncoming (); filterParams (); makeOSC (); } // Når vi vil skrive ut til vinduet, ugyldig ShowIncoming () {// for å se innkommende melding, som angitt i HashMap -teksten ("Incoming from Arduino", 20, 20); int y = 20; for (strengnøkkel: newParams.keySet ()) {y = y+20; tekst (nøkkel, 20, y); tekst (newParams.get (nøkkel), 300, y); }}
void showOsc () {
tekst (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
ugyldig oppsett () {
størrelse (1000, 800); // Fylling av scenestørrelse (255); bakgrunn (0); oldParams = nytt HashMap (); newParams = nytt HashMap (); // printArray (Serial.list ()); commsPort = new Serial (dette, portnavn, baudRate);
/ * start oscP5, lytt etter innkommende meldinger */
oscP5 = ny OscP5 (dette, listenPort);
/* myRemoteLocation er en NetAddress. en NetAddress tar to parametere, * en ip -adresse og et portnummer.myRemoteLocation brukes som parameter i * oscP5.send () når du sender osc -pakker til en annen datamaskin, enhet, * applikasjon. bruk se nedenfor. For testformål er lytteporten * og porten til den eksterne posisjonsadressen den samme, derfor vil du * sende meldinger tilbake til denne skissen. */ myRemoteLocation = ny NetAddress (remoteIP, sendPort); }
ugyldig trekning () {
if (messageArrived) {bakgrunn (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {
// les en byte fra den serielle porten: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // be om mer println ("starter …"); gå i stykker; case startChar: incoming = ""; gå i stykker; case endChar: messageArrived = true; // println ("end of msg"); gå i stykker; standard: innkommende += inChar; gå i stykker; }}
/* innkommende osc -melding videresendes til oscEvent -metoden. */
void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // få det første osc -argumentet
IncomingOSCMessage += "\ n" +
String.format ("### mottok en osc -melding:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", verdi); println (IncomingOSCMessage); }
Trinn 12: Kontroller Uittesten
Alle ting er angesloten, alle koder er skrevet og alt er gjort for å være en endelig tid for kontrolleren. Finn en par morsomme effekter på Reaper og nyt av voltooide Guitar Hero MIDI -kontrolleren!
Anbefalt:
Enklere Guitar Hero Clone Controller !: 10 trinn (med bilder)
Enklere Guitar Hero Clone Controller !: Dette er inspirert av Realities 'glimrende idé, men jeg brukte en PC -kontroller i stedet for et tastatur kretskort, og eliminerte behovet for en forseggjort flipper -konstruksjon
Guitar Hero Guitar Disconnecting Fix: 5 trinn (med bilder)
Guitar Hero Guitar Disconnecting Fix: Så, du har nettopp kjøpt den fine brukte gitarheltgitaren fra ebay, og da den kom til deg, ville den bare ikke koble til den USB -dongelen, så du tror du har kastet bort 30 og euro; i vasken. Men det er en løsning, og denne løsningen vil mest sannsynlig fungere
Guitar Hero Clone: 7 Steps (med bilder)
Guitar Hero Clone: Har du noen gang ønsket å spille Guitar Hero på datamaskinen din med din egen hjemmelagde gitar? Gjør deg klar til å spille for mindre enn 10 dollar og litt tålmodighet
Guitar Hero-gitar med innebygd høyttaler: 8 trinn
Guitar Hero Guitar With Built-in Speaker: I utgangspunktet åpnet jeg en Guitar Hero-kontroller og lurte på hva jeg kunne få plass til inni. Det virket lett, så jeg tenkte at det var mye plass. Visst, det var nok. Opprinnelig planla jeg å sette en iPod Shuffle i nakken på gitaren og
Episk! Guitar Hero - Double Neck Guitar Fail: 7 Steps (with Pictures)
Episk! Guitar Hero - Double Neck Guitar … Fail: 2015 markerer 10 -årsjubileet for popkulturfenomenet Guitar Hero. Husker du, videospillet som ble mer populært enn musikkinstrumentet det bare vagt lyktes å etterligne? Hvilken bedre måte å feire sitt tiår på enn å