Obsah:

Projekt Guitar Hero Arduino: 12 krokov (s obrázkami)
Projekt Guitar Hero Arduino: 12 krokov (s obrázkami)

Video: Projekt Guitar Hero Arduino: 12 krokov (s obrázkami)

Video: Projekt Guitar Hero Arduino: 12 krokov (s obrázkami)
Video: Массимо Банци: Как Arduino пробуждает воображение 2024, November
Anonim
Projekt Guitar Hero Arduino
Projekt Guitar Hero Arduino
Projekt Guitar Hero Arduino
Projekt Guitar Hero Arduino
Projekt Guitar Hero Arduino
Projekt Guitar Hero Arduino

Vyberte si jednu z nasledujúcich kategórií: Justin Cavanas a Wannes Stroobandt, kde študujeme multimédiá a komunikačnú technológiu. Váš Groepsproject obsahuje množstvo audiovizuálnych a IT princípov, ktoré nájdete v hlavnom článku Gitara-hlavná hra s veľkým počtom MIDI ovládačov. Hore sa pohyboval po celom svete. Väčšina ovládačov sa líši od bežných noriem. Aangezien weets hebben gehackt hebben we er niet veel extra materiaal in moeten verwerken.

In bebeelding can un allereerste schets op paper zien van hoe het eindproduct er zou moeten uitzien met daarnaast een foto van de gitaar die ass behuizing zal worden gebruikt.

Teraz môžete začať s ďalším projektom, ktorý by mohol mať nasledujúci rozsah:

slapyak.wordpress.com/guitar-hero-midi-con…

www.instructables.com/id/Converting-a-rescu…

gizmodo.com/391834/turn-your-guitar-hero-g…

Projekt Benodigdheden voor dit

  • 6 tlačidiel Kleine
  • 7 1kohm odpory
  • 1 dióda LED 1
  • blauwe LED
  • 1 Arduino Uno R3
  • 1 Groene LED
  • 2 jazdené LED diódy
  • 1 schuifschakelaar
  • 1 chlebník
  • 1 potenciometer
  • 1 protobord
  • 1 gitaar Guitar Hero
  • Voldoende posteľné obliečky
  • Materiál spájky/dremelen/
  • Schroevendraaier

Krok 1: Súčasti Verzamelen

Súčasti Verzamelen
Súčasti Verzamelen

Väčšina prototypov (na chlebových doskách), ktoré sú k dispozícii, majú nasledujúce komponenty:

6 tlačidiel

7 1kohm odpory

1 žltá LED dióda

1 modrá LED dióda

1 Arduino Uno R3

1 zelená LED dióda

2 Červená LED dióda

1 Schuifschakelaar

1 Breadboard

1 potenciometer

Krok 2: Prototyp Bouwen

Prototyp Bouwen
Prototyp Bouwen
Prototyp Bouwen
Prototyp Bouwen
Prototyp Bouwen
Prototyp Bouwen

Naše prototypy môžu obsahovať rôzne prvky, ako sú napríklad dosky na chlieb, testovacie objekty a ďalšie testovacie objekty, z ktorých sme zisťovali počet meteorov pri hľadaní. Pozrite sa na prototyp projektu, ktorý nájdete na webovej stránke tinkercad.com, pričom si môžete najskôr pozrieť jeho prototyp a prototyp.

Viac ako 5 tlačidiel tlačí všetky tlačidlá, ako napríklad, spájajú všetky tlačidlá, ktoré kombinujú jeden z najdôležitejších „chrapľavých“tlačidiel, ktoré zhoršujú štruktúru audia. Naše rôzne LED diódy môžu ovládať alebo ovládať všetky svoje interakcie.

Krok 3: Prototyp kódu

Prototyp kódu
Prototyp kódu

Globale variabelen

Inicializácia všetkých kódov inicializátora je globálna variabilita vašich kolíkov od dodávateľov, ktorí používajú všetky tlačidlá, ako tlačiť.

// čísla pinov zet waar mainButton (snaar) en andere buttons aan verbonden zijn: const int mainButton = A1; // gitaar snaar const int lightSensor = A0; tlačidlo const intPin1 = 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 pushbutton5

Hierna worden er twee arrays aangemaakt voor de namen van de pushbuttons en hun pinnummer.

const int aantalKnoppen = 5; const Reťazec namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6};

Môžete si vybrať z rôznych variantov LED diód.

const int ledPin1 = 13; // číslo kolíka LED 13

const int ledPin2 = 12; // počet pinov LED 12 const int ledPin3 = 11; // počet pinov LED 11 const int ledPin4 = 10; // počet pinov LED 10 const int ledPin5 = 9; // počet pinov LED 9 const int potPin = A5; // počet LED kolíkov A5

Globálne variabilné variabilné diódy sú tiež k dispozícii vo všetkých štátoch (ako sú tlačidlá vybavené štruktúrou malého potenciometra, lichtsensor).

// tlačidlo inicializátoraStavy 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;

Nastaviť

Nulové možnosti nastavenia. Deze is van het type neplatné (geeft geen waarde terug) en de instructies hierin worden maar 1 keer uitgevoerd.

Všetky funkcie sú komentáre, ktoré sú stručné a zreteľné. Extra uitleg over watieen functie concreet doet is te vinden in de arduino reference

void setup () {// rýchlosť prenosu dát za sekundu (prenosová rýchlosť) alebo vyššia prenosová rýchlosť dát Serial.begin (9600); // Inicializátor premenných LEDPin môže tiež mať výstup pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // všetky inicializačné tlačidlá ako vstup: pinMode (mainButton, INPUT); pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); pinMode (buttonPin5, INPUT); pinMode (potPin, INPUT); pinMode (lightSensor, INPUT); }

Prázdna funkcia

Na základe nastavenej () funkcie voľnej smyčky () funkcie, pokyny k hierarchickej situácii, ako sa zhoršujú.

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);

// všetky stavy tlačidiel v poli

int buttonStates = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};

// leest de waarde uit van de potenciometer en de lichtsensor

potValue = analogRead (potPin); lightValue = analogRead (lightSensor);

// deklarovať hlavné pole Štáty, ktoré majú za následok nedostatok 0 palcov.

int mainStates = {0, 0, 0, 0, 0};

// slučka nad poľom aantalKnoppen

pre (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // inicializátor všetkých knopPinnen ako vstup digitalRead (knopPinnen ); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt is, print all all knopnamen, all all buttonstates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}

Krok 4: Prototyp Uittesten

Nasledujúci prototyp gebouwd je volgens ons model en de code geschreven is in Processing, is het tijd om het prototyp uit te testen. Op de video is you zien dat all all knoppen een reactie geven op de bijhorende ledjes en dat ook combinationaties van knoppen mogelijk zijn.

In tweede video is you zien hoe onze tremolo werkt aan de hand van een poteniometer in de gitaar en hoe de waardes worden uitgelezen in Processing.

Krok 5: Behuizing „ontmantelen“En Kijken Welke Componenten Gebruikt Gaan Worden

Behuizácia
Behuizácia
Behuizácia
Behuizácia
Behuizácia
Behuizácia
Behuizácia
Behuizácia

Tiež sú správne kódované prototypy prototypov, ktoré sme začali stretávať s ďalšími "gitarovými hrdinami". Viac informácií nájdete v hlavnom článku pôvodných komponentov, z ktorých si môžete vybrať, či chcete, alebo nie. Niektoré z našich tlačidiel zapíname vlastnými tlačidlami gekregen (zie volgende stap). Viac informácií nájdete v hlavnom článku (prvé tlačidlo na kombináciu rôznych tlačidiel), kliknite na pôvodné tlačidlá geotextu (zie vierde foto). Podľa toho, ako sa správame, čítame všetky potrebné informácie, aby sme zistili všetky správne chyby.

Krok 6: Werking Originele Buttons + Dremelen

Werking Originele Buttons + Dremelen
Werking Originele Buttons + Dremelen

Nasledujúce video je k dispozícii vo všetkých pôvodných verziách, ktorých súčasťou je tiež široké spektrum efektov, ktoré môžete kombinovať s kombináciou dodávok.

Viac informácií o pôvodných tlačidlách získate z pôvodného počtu pôvodných výrobcov, dodávateľov a dodávateľov, ktorí môžu zoologickú záhradu navštíviť.

Krok 7: Bedrading Solderen + Buttons Vastlijmen

Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen

Všetko, čo sa stretávame, je, že sme narazili na rôzne dosky. Pozrite sa, ako tlačíme veľké množstvo zoologických záhrad v Ziene a op foto. Eens dit gebeurd is kunnen we doorgaan naar de volgende stap.

Krok 8: Plaaty vyrobené v De Behuizing

Plaaty vyrobené v De Behuizing
Plaaty vyrobené v De Behuizing
Plaaty vyrobené v De Behuizing
Plaaty vyrobené v De Behuizing
Plaaty vyrobené v De Behuizing
Plaaty vyrobené v De Behuizing

Omdat dit Guitar Hero-model redelijk krap was om mee te werken hebben we extra plaats moeten maken d.m.v. dremelen. Pozrite sa, ako to dopadne, keď sa pozrieme na to, ako sme sa presťahovali. Viac informácií o všetkých prekážkach upozorňujeme, že budeme musieť začať pracovať, pretože v dôsledku toho zomrieme. Op d vierde en vijfde foto is you zien dat we in de achterkant van de gitaar een doorgang hebben gecreëerd voor de draden die naar de buttons gaan omdat de gitaar anders niet meer te sluiten was. Fotografie, ktoré sa oplatí vidieť, sa odvíjajú od začiatku, keď sa stretnete s dverami Arduina, kde nájdete množstvo zaujímavých faktov.

Krok 9: Bedrading Aansluiten Op Protobord

Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord

Všetky tieto komponenty sa stretnú s veľkým počtom hlavných protagonistov. To je všetko, čo je dôležité pre efektívnu prácu. Ponúkame viac fotografií zo zoologickej záhrady, ktoré môžete vidieť. Väčšina z nich sa sústreďuje na najdôležitejšiu časť hry (zie foto 2).

Krok 10: Verstevigen

Verstevigen
Verstevigen

Dokončovací dotyk je tiež veľmi stabilný. Op deze foto is te zien hoe we het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan de buttons verstevigen met stukjes karton.

Krok 11: Code Voor Het Communiceren Met Reaper

Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper

Deze kód je k dispozícii v dvoch verziách, zatiaľ čo ostatné sú k dispozícii v IDE (interaktívne vývojové prostredie). Zadajte kód, aby ste mohli načítať arduino zelf en dient all all waarden van de brands van de midi controller uit te lezen en door to sturen naar processing.

Spracovanie je tweede gedeelte. Všetky kódy môžu obsahovať všetky druhy dverí a dverí a otvárať dvere Reaper.

Arduino

/* Tento kód je základným náčrtkom na komunikáciu so sériovým spracovaním.

Je to plán, do ktorého môžete vložiť svoj vlastný kód

určené pre vaše vlastné tlačidlá, potenciometre alebo senzory.

Má to podanie ruky, aby sme sa uistili, že sme v kontakte

a je rozhodnuté o formáte, v ktorom komunikujeme

Je dôležité zostaviť správu rovnakým spôsobom, aby Processing vedel, ako ho dekonštruovať a odosielať správne správy OSC do nášho DAW

vyrobené pre werkcollege AV&IT

október 2017

*

/ prenosová rýchlosť

konštantná prenosová rýchlosť = 115200;

// čas čakania v ms medzi hlasovaniami na piny

const int loopPauseTime = 200; // milisekundy

// počiatočné a koncové hodnoty pre správu odoslanú na Serial

const Reťazec startString = "*", endString = "#";

const char contactCharacter = '|';

// identifikátory pinov

// ostatné globálne premenné

const int aantalKnoppen = 5; const Reťazec 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;

// analoge senzory

const int potPin = A5; // pin voor tremolo

// Túto funkciu potrebujeme na nadviazanie kontaktu so skice spracovania

// Ponechajte to tu neplatné estabContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // odoslanie znaku a čakanie na odpoveď … zdržanie (loopPauseTime); } Serial.read (); }

neplatné nastavenie () {

// nastavenie pinModes pre všetky piny pre (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // odkomentujte, ak použijete senzory, ktoré pracujú na 3V namiesto 5V // budete musieť zapojiť pin 'ext' aj na 3,3V // analogReference (EXTERNAL);

// inicializácia sériových komunikácií

Serial.begin (baudRate); while (! Serial); // pockaj na handshake zavedenieContact (); }

prázdna slučka () {

// KROK 1: TLAČIDLÁ PREČÍTAJTE // vyzvite všetky piny a namapujte čítanie na príslušný rozsah 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); pre (int i = 0; i <aantalKnoppen; i ++) {buttonStates = digitalRead (knopPinnen ); } potValue = analogRead (potPin); // príklady: // float v0 = mapa (bpm, 0, 1023, 60, 250); // ak chcete použiť normalizovaný float (napr. pre hlasitosť) // float v1 = mapa (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;

// KROK 2: NAPÍŠTE SPRÁVU

Serial.print (startString); // spustenie sekvencie správ pre (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)); // napíšte koniec správy Serial.print (endString);

// počkajte chvíľu..

oneskorenie (loopPauseTime); }

Spracovanie

Disclaimer: Niet alle code van de processing sketch staat hier in geschreven, voor de volledige code zie het bestand: ProcessingSoundControl_handout_v6_1.pde in bijlage

Naše pokyny môžu zhoršiť (indien nodig):

// Baudrate moet hetzelfde zijn zoals in de arduino sketch

konečná int baudRate = 115200;

// Zoar naar IP address in reaper (zie screenshoty in bijlage)

// Spracovanie vzoriek je veľmi rozsiahle //

// final String remoteIP = "192.168.1.43"; // napr. "127.0.0.1";

final String remoteIP = "10.3.209.60";

// Poznačte si sendPort a zadajte ho do Reaper.

// Toto je port, na ktorý Processing odosiela a Reaper ho počúva.

konečné int počúvaťPort = 12000, sendPort = 12000;

// ListPort tu má aktívne ladiť.

// názvy portov sú tu aj na ladenie.

// final String portName = "/dev/ttyACM0";

final String portName = "COM5"; // "/dev/ttyUSB0";

/////////////////////// KONIEC UŽÍVATEĽSKÝCH PARAMETROV // ///////////////////////////// ////

spracovanie importu.sériové.*;

import java.util.*;

import oscP5.*;

import netP5.*;

OscP5 oscP5;

NetAddress myRemoteLocation;

Sériový komunikačný port; // Sériový port

boolean messageArrived = false;

String incoming = "", IncomingOSCMessage = "";

final char startChar = '*', endChar = '#'; final char contactCharacter = '|';

// Aby sme sa uistili, že odosielame iba parametre (hodnoty), ktoré sa zmenia

// tieto globálne premenné sú tu vymazané, ale nemali by // sa tu inicializovať! HashMap oldParams, newParams, toSendParams;

// Správu musíme rozdeliť na každú čiarku

neplatný processIncoming () {String resVec = incoming.split (","); // dostaneme páry meno+hodnota // takže pre každé meno (+2) … skúste {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // vložte ich do nového Hashtable newParams.put (resVec , hodnota); }} // ak sa vyskytne chyba, zachytíme ju a ukončíme. catch (Exception ex) {println ("Správa o výnimke:" + ex); printArray (resVec); východ(); }}

// Na filtrovanie našich správ

/ * Zaisťujeme, aby existovala iba správa s výstupom OSC, keď sa * zmení vstupná správa (sériová) * To znamená: ak otočíme/stlačíme tlačidlo a zmení sa hodnota. * Odfiltrujeme teda prichádzajúce hodnoty, ktoré sa v skutočnosti menia * poznámka: nevyhneme sa skokovým hodnotám *, ktoré pochádzajú napr. Od akcelerometrov alebo senzorov vzdialenosti * budete ich musieť vyhladiť sami v Arduino */ void filterParams () {toSendParams = nový HashMap (); for (String key: newParams.keySet ()) {// if the key is already present if (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 {// kľúč nie je v starých parametroch, tak ho dajte! toSendParams.put (kľúč, newParams.get (kľúč)); } oldParams.put (kľúč, newParams.get (kľúč)); }}

zrušiť makeOSC () {

for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (kľúč)); / * poslať správu */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {

processIncoming (); filterParams (); makeOSC (); } // Keď chceme vytlačiť do okna neplatné ShowIncoming () {//, aby sme videli prichádzajúcu správu, ako je nastavené v texte HashMap („Prichádzajúce z Arduina“, 20, 20); int y = 20; pre (Kľúč reťazca: newParams.keySet ()) {y = y+20; text (kľúč, 20, y); text (newParams.get (kľúč), 300, y); }}

neplatné showOsc () {

text (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }

neplatné nastavenie () {

veľkosť (1000, 800); // výplň veľkosti pódia (255); pozadie (0); oldParams = nový HashMap (); newParams = nový HashMap (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);

/ * spustite oscP5, počúvajte prichádzajúce správy */

oscP5 = nový OscP5 (this, listenPort);

/* myRemoteLocation je NetAddress. sieťová adresa má 2 parametre, * IP adresa a číslo portu.myRemoteLocation sa používa ako parameter v * oscP5.send () pri odosielaní paketov osc do iného počítača, zariadenia, * aplikácie. použitie viď nižšie. na testovacie účely sú počúvací port * a port adresy vzdialeného umiestnenia rovnaké, a preto budete * posielať správy späť na tento náčrt. */ myRemoteLocation = nová sieťová adresa (remoteIP, sendPort); }

void draw () {

if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }

void serialEvent (Serial commsPort) {

// načítanie bajtu zo sériového portu: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // požiadajte o viac println („začína …“); prestávka; prípad startChar: incoming = ""; prestávka; case endChar: messageArrived = true; // println ("koniec spravy"); prestávka; predvolené: prichádzajúce += inChar; prestávka; }}

/* prichádzajúce správy osc sú preposlané na metódu oscEvent. */

void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // získajte 1. argument osc

IncomingOSCMessage += "\ n" +

String.format ("### prijal správu osc:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", hodnota); println (IncomingOSCMessage); }

Krok 12: Ovládač 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. Pozrite sa na niekoľko efektov, ktoré ponúka Reaper s veľkým výberom MIDI ovládača Guitar Hero!

Odporúča: