Obsah:

Projekt Guitar Hero Arduino: 12 kroků (s obrázky)
Projekt Guitar Hero Arduino: 12 kroků (s obrázky)

Video: Projekt Guitar Hero Arduino: 12 kroků (s obrázky)

Video: Projekt Guitar Hero Arduino: 12 kroků (s obrázky)
Video: Minecraft Live 2022 2024, Červenec
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

Prohlédněte si Maarten Vrebos, Justin Cavanas a Wannes Stroobandt a studujeme multimediální a komunikační technologie. Váš hlavní audiovizuální a IT principy, zásady, návody, návody, návody, návody, návody, návody, návody, návody, návody Het was onze bedoeling om de bestaande knoppen op de gitaar intern te vervangen. Řídicí jednotka zapne všechny běžné a běžné normály. Aangezien weets hebben gehackt hebben we er niet veel extra materiaal in moeten verwerken.

Pokud jde o práci, můžete použít všechna schémata, která se budou týkat papírů, které vám pomohou s výrobou fotografií, ale také se setkáte s dalšími fotografiemi.

Naše největší nároky na projekt 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 tlačítek
  • 7 1kohm odpory
  • 1 gele LED 1
  • blauwe LED
  • 1 Arduino Uno R3
  • 1 groene LED
  • 2 jel LED
  • 1 schuifschakelaar
  • 1 prkénko
  • 1 potenciometr
  • 1 protobord
  • 1 gitaar Guitar Hero
  • Voldoende bedrading
  • Materiál pájky/dremelen/
  • Schroevendraaier

Krok 1: Componenten Verzamelen

Komponent Verzamelen
Komponent Verzamelen

Hlavní prototyp (opalovací lišta) hebben we volgende componenten gebruikt:

6 tlačítek

7 1kohm odpory

1 žlutá LED

1 modrá LED

1 Arduino Uno R3

1 zelená LED

2 Červená LED

1 Schuifschakelaar

1 prkénko

1 potenciometr

Krok 2: Prototyp Bouwen

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

Všichni jsme prototypem, který jsme si vybrali, že jsme si vybrali základní desku, kterou jsme vybrali, a také jsme testovací objekt zodat, že jsme se setkali s měřením počasí. Jak prototyp 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.

Více než 5 tlačítek se může pochlubit více než 5 tlačítky, která se spojí a spojí se s větším množstvím efektů, které způsobují zhoršení efektu audiovizuálního efektu a krizí. Různé LED diody mají různé možnosti ovládání a ovládání.

Krok 3: Prototyp kódu

Prototyp kódu
Prototyp kódu

Globale variabelen

V první řadě je inicializátorem globálních variabilních variant kolíků van arduino uno waar all all pushbuttons mee verbonden zijn.

// čísla pinů zet waar mainButton (snaar) en andere buttons aan verbonden zijn: const int mainButton = A1; // gitaar snaar const int lightSensor = A0; tlačítko 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 String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6};

Různé varianty kolíků a LED světel.

const int ledPin1 = 13; // číslo LED diody 13

const int ledPin2 = 12; // počet pinů LED 12 const int ledPin3 = 11; // počet pinů LED 11 const int ledPin4 = 10; // počet pinů LED 10 const int ledPin5 = 9; // počet pinů LED 9 const int potPin = A5; // počet LED diod A5

Globální variabilní variabilita dienů zahrnuje také různé typy senzorů (zijn de pushbuttons ingedrukt of niet? Poteniometer, lichtsensor).

// inicializátor 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;

Založit

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

Všechny funkce jsou komentáře, které vám pomohou najít konkrétní slovo. Extra uiteleg over watieen specificke functie concreet doet is te vinden in de arduino reference

neplatné nastavení () {// rychlost přenosu dat za sekundu (přenosová rychlost) nebo vyšší přenos dat Serial.begin (9600); // Inicializátor proměnných ledPin také jako výstup pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // všechna inicializační tlačítka jako 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ázdná funkce

Na de setup () funkce 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);

// všechny stavy tlačítek 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);

// deklarovat hlavní pole pole Stát jako standaard waarden 0 palců

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

// smyčka přes pole aantalKnoppen

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

Krok 4: Prototyp Uittesten

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

Video je tweede, což znamená, že potenciometr v ruce a potenciometr ve vašem počítači zhoršuje proces zpracování.

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

Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing

Všechny kódové kódy byly správné a prototyp zijn jsme se setkali s het "ontmantelen" van onze Guitar Hero-gitaar. We hebben de gitaar opengemaakt met een schroevendraaier en bekeken welke originele componenten we eventueel nog zouden kunnen hergebruiken voor onze controller. Pokud chcete, můžete vlastní tlačítka zapnout nebo vypnout. We hebben de tremolo ook gebruikt voor ons eindproduct en voor onze hoofdbutton (initiële button om als een combinationatie af te spelen) hebben we ook de originele twee buttons gebruikt (zie vierde foto). Naše LED diody mohou být označeny správným způsobem.

Krok 6: Werking Originele Buttons + Dremelen

Werking Originele Buttons + Dremelen
Werking Originele Buttons + Dremelen

Hlavní video je to, co se děje a jak se to projevuje, ale také to může mít za následek generování všech kombinací van knoppen.

Naše vlastní tlačítka se mohou pochlubit původními prvky, které se mohou lišit od našich původních uživatelů, kteří mají zájem o tuto fotografii.

Krok 7: Bedrading Solderen + Buttons Vastlijmen

Bedrading Solderen + knoflíky Vastlijmen
Bedrading Solderen + knoflíky Vastlijmen
Bedrading Solderen + knoflíky Vastlijmen
Bedrading Solderen + knoflíky Vastlijmen
Bedrading Solderen + knoflíky Vastlijmen
Bedrading Solderen + knoflíky Vastlijmen

Omdat we niet meer met een breadboard wereken moeten de draden gesoldeerd worner om zo de verschillende componenten met elkaar te verbinden. Nejvíce se nám líbí, že jsme si vybrali tlačítka, která vám pomohou při prohlížení fotografií. Eens dit gebeurd is kunnen we doorgaan naar de volgende stap.

Krok 8: Plaaty vytvořené v De Behuizing

Plaaty vytvořené v De Behuizing
Plaaty vytvořené v De Behuizing
Plaaty vytvořené v De Behuizing
Plaaty vytvořené v De Behuizing
Plaaty vytvořené v De Behuizing
Plaaty vytvořené 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. Z tohoto důvodu jsme se rozhodli prodat více, než kolikrát budeme plavat, než se vydáme na procházku. Více informací se dozvíte, když se dozvíte více, než se dozvíte více o tom, že jsme zemřeli, ale my jsme nejlepší, co jsme potřebovali. 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 buttons gaan omdat de gitaar anders niet meer te sluiten was. Naše foto se dozvíte, když jsme se dozvěděli více o tom, jak jsme se s Arduinem setkali, a tak jsme se dostali ke dveřím.

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šechny součásti se setkaly se všemi prvky, které jsme získali. To je vše, co je důležité pro vlastní práci, ale také pro efektivní práci. We hebben de bedrading aan het bordje gesoldeerd zoals te zien is op de derde foto. To vše se soustředí hlavně na to, jak se blížíte sami (foto 2).

Krok 10: Verstevigen

Verstevigen
Verstevigen

Konečným dotykem je také maximální stabilita. 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 dispozici v twee delen, het eerste deel is in de arduino IDE (interactive development enviroment) geschreven. Kód kódu můžete načíst arduino zelf en dient all all waarden van de sensor van de midi controller uit te lezen en door te sturen naar processing.

Zpracování je tweede gedeelte. Všechny kódy mohou obsahovat všechny druhy dveří a dveří a také dveře.

Arduino

/* Tento kód je základní skica pro komunikaci se zpracováním přes sériový port.

Je to plán, do kterého můžete vložit vlastní kód

určené pro vaše vlastní tlačítka, potenciometry nebo senzory.

Má to podání ruky, abychom se ujistili, že máme kontakt

a je rozhodnuto o formátu, ve kterém komunikujeme

Je důležité sestavit zprávu stejným způsobem, aby Processing věděl, jak jej dekonstruovat a odeslat správné zprávy OSC do našeho DAW

vyrobeno pro werkcollege AV&IT

října 2017

*

/ přenosová rychlost

konstantní přenosová rychlost = 115200;

// čas na čekání v ms mezi hlasováním na piny

const int loopPauseTime = 200; // milisekund

// počáteční a koncové hodnoty pro zprávu odeslanou na Serial

const Řetězec startString = "*", endString = "#";

const char contactCharacter = '|';

// PIN ID

// jiné globální proměnné

const int aantalKnoppen = 5; const Řetězec 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;

// senzory analogové

const int potPin = A5; // pin voor tremolo

// Tuto funkci potřebujeme k navázání kontaktu s náčrtem Zpracování

// Ponechte to zde neplatné zaveďteContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // pošlete znak a počkejte na odpověď… zpoždění (loopPauseTime); } Serial.read (); }

neplatné nastavení () {

// nastavení pinModes pro všechny piny pro (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // odkomentujte, pokud používáte senzory, které pracují na 3V místo na 5V // budete muset zapojit pin 'ext' také na 3,3V // analogReference (EXTERNAL);

// inicializace sériových komunikací

Serial.begin (baudRate); while (! Serial); // počkejte na handshake navázatContact (); }

prázdná smyčka () {

// KROK 1: TLAČÍTKA ČTENÍ // vyzvedněte všechny piny a namapujte čtení na pří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); for (int i = 0; i <aantalKnoppen; i ++) {buttonStates = digitalRead (knopPinnen ); } potValue = analogRead (potPin); // příklady: // float v0 = mapa (bpm, 0, 1023, 60, 250); // pokud chcete použít normalizovaný float (např. pro hlasitost) // float v1 = mapa (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;

// KROK 2: NAPIŠTE ZPRÁVU

Serial.print (startString); // spuštění posloupnosti zpráv pro (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)); // napište konec zprávy Serial.print (endString);

// Počkej chvíli..

zpoždění (loopPauseTime); }

zpracovává se

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

De volgende instructies moeten aangepast worden (indien nodig):

// Baudrate moet hetzelfde zijn zoals in de arduino sketch

konečná int baudRate = 115200;

// Zoek naar het IP address in reaper (zie screenshoty in bijlage)

// Zpracování stuurt naar dit andres en reaper luistert hier naar //

// final String remoteIP = "192.168.1.43"; //např. "127.0.0.1";

final String remoteIP = "10.3.209.60";

// Poznamenejte si sendPort a vyplňte jej v Reaper.

// Toto je port, na který Processing posílá a Reaper poslouchá.

finální int poslouchat Port = 12000, sendPort = 12000;

// ListPort zde slouží k aktivnímu ladění.

// názvy portů jsou zde také k ladění.

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

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

/////////////////////// KONEC UŽIVATELSKÝCH PARAMETRŮ ///////////////////////////// //////

zpracování 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 = '|';

// Abychom se ujistili, že odesíláme pouze parametry (hodnoty), které se mění

// tyto globální proměnné jsou zde odstraněny, ale neměly by // zde být inicializovány! HashMap oldParams, newParams, toSendParams;

// Zprávu musíme rozdělit na každou čárku

void processIncoming () {String resVec = incoming.split (","); // získáme páry název+hodnota // tedy pro každé jméno (+2) … zkuste {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // vložte je do nového Hashtable newParams.put (resVec , hodnota); }} // pokud dojde k chybě, pojďme ji zobrazit a ukončit. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); výstup(); }}

// Filtrování našich zpráv

/ * Zajistíme, aby existovala pouze zpráva OSC out, když * se změní vstupní zpráva (sériová) * To znamená: pokud otočíme/stiskneme tlačítko a změní hodnotu. * Odfiltrujeme tedy příchozí hodnoty, které se ve skutečnosti mění * poznámka: nevyhneme se skokovým hodnotám * pocházejícím např. Z akcelerometrů nebo snímačů vzdálenosti * budete je muset vyhladit sami v Arduinu */ 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 (klíč))) {toSendParams.put (klíč, newParams.get (klíč)); }} else {// klíč ve starých parametrech není, tak to řekněte! toSendParams.put (klíč, newParams.get (klíč)); } oldParams.put (klíč, newParams.get (klíč)); }}

zrušit makeOSC () {

for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (klíč)); / * poslat zprávu */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {

processIncoming (); filtrParams (); makeOSC (); } // Když chceme vytisknout do okna void ShowIncoming () {//, abychom viděli příchozí zprávu, jak je nastaveno v textu HashMap ("Příchozí z Arduina", 20, 20); int y = 20; pro (Klíč řetězce: newParams.keySet ()) {y = y+20; text (klíč, 20, y); text (newParams.get (klíč), 300, y); }}

void showOsc () {

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

neplatné nastavení () {

velikost (1000, 800); // výplň velikosti plochy (255); pozadí (0); oldParams = nový HashMap (); newParams = new HashMap (); // printArray (Serial.list ()); commsPort = new Serial (this, portName, baudRate);

/ * spusťte oscP5, poslouchejte příchozí zprávy */

oscP5 = nový OscP5 (this, listenPort);

/* myRemoteLocation je NetAddress. síťová adresa má 2 parametry, * IP adresa a číslo portu.myRemoteLocation se používá jako parametr v * oscP5.send () při odesílání paketů osc do jiného počítače, zařízení, * aplikace. použití viz níže. pro účely testování jsou naslouchací port * a port adresy vzdáleného umístění stejné, a proto budete * posílat zprávy zpět do této skici. */ myRemoteLocation = new NetAddress (remoteIP, sendPort); }

void draw () {

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

void serialEvent (Serial commsPort) {

// načtení bajtu ze sériového portu: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // požádejte o další println („začíná…“); přestávka; případ startChar: incoming = ""; přestávka; case endChar: messageArrived = true; // println ("konec msg"); přestávka; výchozí: příchozí += inChar; přestávka; }}

/* příchozí zprávy osc jsou předávány metodě oscEvent. */

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

IncomingOSCMessage += "\ n" +

String.format ("### přijal osc zprávu:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", hodnota); println (IncomingOSCMessage); }

Krok 12: Ovladač Uittesten

Nu alles is aangesloten, all all code is geschreven en alles is gedubbelcheckt is het eindelijk tijd om de controller z'n werk te laten doen. Podívejte se na více efektů z Reaper ve hře s voltooide Guitar Hero MIDI ovladačem!

Doporučuje: