İçindekiler:

Guitar Hero Arduino Projesi: 12 Adım (Resimli)
Guitar Hero Arduino Projesi: 12 Adım (Resimli)

Video: Guitar Hero Arduino Projesi: 12 Adım (Resimli)

Video: Guitar Hero Arduino Projesi: 12 Adım (Resimli)
Video: Elimi kestim. Demir kanaması deneyi #kimya #shorts 2024, Kasım
Anonim
Gitar Kahraman Arduino Projesi
Gitar Kahraman Arduino Projesi
Gitar Kahraman Arduino Projesi
Gitar Kahraman Arduino Projesi
Gitar Kahraman Arduino Projesi
Gitar Kahraman Arduino Projesi

Wij zijn Maarten Vrebos, Justin Cavanas ve Wannes Stroobandt ve multimedya ve iletişim teknolojisini inceliyoruz. Görsel-işitsel ve BT İlkeleri'ni kullanarak Gitar Kahraman Gitar'ı ve MIDI denetleyicisini geliştirin. Gitaar'da stajyer olarak çalışıyordu. Onze denetleyicisi zal vastgehouden en iyi şekilde yazılmış kelimelerle normale gitaar. Aangezien biz iets hebben gehackt hebben biz er niet veel ekstra malzeme içinde moeten verwerken.

Daha fazla bilgi için bkz. zal worden gebruikt.

Wij hebben ons voor dit proje 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 projesi

  • 6 kleine buton
  • 7 1kohm direnç
  • 1 jel LED 1
  • blauwe LED'i
  • 1 Arduino Uno R3
  • 1 groen LED'i
  • 2 sürüş LED'i
  • 1 schuifschakelaar
  • 1 ekmek tahtası
  • 1 potansiyometre
  • 1 protokol
  • 1 Gitar Kahramanı gitaar
  • Voldoende yatak örtüsü
  • Malzeme om te lehim/dremelen/
  • Schroevendraaier

Adım 1: Bileşen Verzamelen

Bileşen Verzamelen
Bileşen Verzamelen

Voor ons prototipi (op breadboard) hebben we volgende componenten gebruikt:

6 Buton

7 1kohm Dirençler

1 Sarı LED

1 Mavi LED

1 Arduino Uno R3

1 Yeşil LED

2 Kırmızı LED

1 Schuifschakelaar

1 ekmek tahtası

1 Potansiyometre

Adım 2: Prototip Bouwen

Prototip Bouwen
Prototip Bouwen
Prototip Bouwen
Prototip Bouwen
Prototip Bouwen
Prototip Bouwen

Om ons prototipi bouwen hebben, breadboard bileşenlerini, breadboard'u tasarladık ve nesneleri test ettik. Dit prototip hebben tinkercad.com aracılığıyla biz dan ook gedigitaliseerd, op deze manier hadden biz een duidelijk overzicht van ons prototip dat geyik groepslid de bakınız kon bewerken.

5 kleine butonları 5 kleine butonları 5 snaren en een grote buton kalıp birleşimlerinde kalıp, meerdere 'snaren' moet worden edrukt om een işitsel efekt te krijgen ile bir araya geldi. Gelişmiş LED lambalar, dienen gewoon als görsel kontrol ve om er zeker van te zijn dat de interaksiyon başarısı başarılı.

Adım 3: Kod Prototipi

Kod Prototipi
Kod Prototipi

küresel değişken

Tüm butonlar için tüm butonlar, tüm butonlar için globale değişkenlik gösterebilir.

// zet pin numaraları waar mainButton(snaar) en andere butonlar aan ayrıntılı 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 buton5

Tüm pinnummer'da butonlar için kelime dizileri.

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

LED'lerin en büyük değişkenleri.

const int ledPin1 = 13; // LED pin numarası 13

const int ledPin2 = 12; // LED pin sayısı 12 const int ledPin3 = 11; // LED pin sayısı 11 const int ledPin4 = 10; // LED pin sayısı 10 const int ledPin5 = 9; // LED pin sayısı 9 const int potPin = A5; // LED pin A5 sayısı

De laatste globale değişken dienen als 'durumlar' vor de sensörler (niet? potansiyometre, lichtsensor zijn de butonlar).

// başlatıcı buttonStates voor de knoppen (niet'in tanımı)int mainButtonState = 0; int düğmeDurum1 = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int buttonState5 = 0; int lightSensorState = 0; int potDeğeri = 0; int lightValue = 0;

Kurmak

Boş kurulum işlevi yok. Deze, van het tipi geçersizdir (geeft geen waarde terrug) ve yönergeler, daha fazla bilgi içerir.

Bij elke işlevi, yorum geschreven su er beton gedaan wordt. arduino referansında te vinden is te vinden is t e vinden is een specifieke functie concreet doet üzerinde ekstra uitleg

void setup() { // saniye başına veri hızı (baud) ve seri veri aktarımı Serial.begin(9600); // ledPin değişkeni çıkış pinMode(ledPin1, OUTPUT); pinMode(ledPin2, ÇIKIŞ); pinMode(ledPin3, ÇIKIŞ); pinMode(ledPin4, OUTPUT); pinMode(ledPin5, ÇIKIŞ); // başlatıcı tüm butonlar giriş: pinMode(mainButton, INPUT); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); pinMode(buttonPin3, INPUT); pinMode(buttonPin4, INPUT); pinMode(buttonPin5, INPUT); pinMode(potPin, INPUT); pinMode(lightSensor, INPUT); }

geçersiz fonksiyon

Na de setup() işlevi, döngü() işlevi, yönergeleri, her bir kelimenin tam anlamıyla ve kalıcı olarak ifade edilir.

void loop() { // butonlar uit (niet'in tanımı) mainButtonState = digitalRead(mainButton); buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); buttonState3 = digitalRead(buttonPin3); buttonState4 = digitalRead(buttonPin4); buttonState5 = digitalRead(buttonPin5);

// een dizisindeki tüm buton durumu

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

// lichtsensor en de potansiyometre aracını kullan

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

// dekleran een dizi mainStates en geef die de standart waarden 0 in.

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

// aantalKnoppen dizisi üzerinde döngü

for(int i = 0; i < aantalKnoppen; i++){ pinMode(knopPinnen, INPUT); // başlatıcı alle knopPinnen als girişi digitalRead(knopPinnen); // ana şalterin bağımsız anahtarı (snaar) ingedrukt, tüm düğme durumlarını yazdır, tüm düğme durumlarını if(mainButtonState == HIGH){ Serial.print(namenKnoppen); Seri.print(", "); Serial.println(buttonStates); } }

Adım 4: Prototip Uittesten

Nadat het prototip gebouwd, volgens ons modelidir ve kod geschreven İşleniyor, prototip uit te testen het tijd om het. Op de video, her şey dahil olmak üzere en iyi tepkiler için geçerlidir.

De tweede videosunda, Processing'de uitgelezen worden uitgelezen de gitaar ve de gitaar içinde el van een tremolo werkt aan de hand van een potansiyometre vardır.

Adım 5: "Ontmantelen"i Behuizing En Kijken Welke Componenten Gebruikt Gaan Worden

Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing

Als de code right werkte op het prototip zijn het "ontmantelen" van onze Guitar Hero-gitaar ile tanıştık. Başlangıç bileşenleriyle en iyi şekilde tanıştık. Uiteindelijk hebben biz gekregen (zie volgende stap) düğmelerinde öz butonları onze ediyoruz. Buton düğmesini (başlangıç düğmesi ve diğer tüm kombinasyonlar) orijinal ürün düğmelerine bakıyoruz. De LEDjes zullen verdwijnen (deze waren enkel ter indicatie zodat we zagen dat alle knoppen doğru werkten.

Adım 6: Orijinal Originele Düğmeleri + Dremelen

Werking Originele Düğmeler + Demelen
Werking Originele Düğmeler + Demelen

Op de bijhorende video, orijini ve knoppen werken als een soort van schakelaar die wij gebruiken om een efekt te jeneren bij kombinasyonlar van knoppen için en geniş kapsamlı videodur.

Om onze öz düğmeler, orijinal knoppen hebben'de, grotendeels uitgehaald zoals'ı ve op de foto'yu destelendirdik.

Adım 7: Lehimleme Lehimleri + Düğmeler Vastlijmen

Yatak Lehimleme + Düğmeler Vastlijmen
Yatak Lehimleme + Düğmeler Vastlijmen
Yatak Lehimleme + Düğmeler Vastlijmen
Yatak Lehimleme + Düğmeler Vastlijmen
Yatak Lehimleme + Düğmeler Vastlijmen
Yatak Lehimleme + Düğmeler Vastlijmen

Omdat, daha önce bir araya geldi, bir breadboard werken, draden gesoldeerd worden om zo de verschillende, bir araya geldi elkaar te verbinden. Nadat dit gebeurd kunnen biz de butonlar genişlijmen zoals te zien op de foto's. Eens dit gebeurd is kunnen we doorgaan naar de volgende stap.

Adım 8: De Behuizing'de Yapılan Plaatlar

De Behuizing'de Yapılan Plaats
De Behuizing'de Yapılan Plaats
De Behuizing'de Yapılan Plaats
De Behuizing'de Yapılan Plaats
De Behuizing'de Yapılan Plaats
De Behuizing'de Yapılan Plaats

Omdat dit Guitar Hero-model redelijk krap om mee te werken hebben biz ekstra plaklar moeten yapılmış d.m.v. dremelen. En iyi yatak takımları için en uygun yatak takımlarını kullanıyoruz. Omdat er genel olarak binnenkant obstekels waren, te bevestigen içinde om de vijzen om de vijzen, hebben biz öldük en iyi van de gegeven ruimte gebruik te kunnen yapılmış. Fotoğrafları en iyi şekilde görüntüle, en iyi günlerden birinde, en son teknolojiye sahip olmak için düğmeye bastı. En op de laatste foto, en son fotoğraflara bakıyoruz, daha fazla bilgi için, Arduino'nun kapısından içeri girdik.

Adım 9: Aansluiten Op Protobord'u Bedrading

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

Om alle componenten bir araya geldi elkaar te verbinden hebben biz gebruik gemaakt van een protobord. Bu, en verimli şekilde kullanılabilir. Yatak örtüleri ve yatak örtüleri için bir fotoğraf seçiyoruz. Sınır, merkezi bir noktadır.

Adım 10: Verstevigen

Verstevigen
Verstevigen

Als son rötuş het verstandig om de Lose delen te verstevigen voor ekstra stabilitedir. Op deze foto is zien hoe is het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan de düğmeleri verstevigen bir araya geldi stukjes karton.

Adım 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 kodu twee delen'de, het eerste deel de arduino IDE (interaktif geliştirme ortamı) geschreven'de. Die code wordt geüpload naar arduino zelf en dient om alle waarden van de sensörler van de midi kontrol cihazı uit te lezen en kapı te sturen naar işleme.

İşleme het tweede gedeelte. Reaper'ın tüm arduino kapılarını kapsıyor.

Arduino

/* Bu kod, Seri üzerinden İşleme ile iletişim kurmak için temel bir çizimdir.

Kendi kodunuzu koyabileceğiniz bir plandır.

kendi düğmeleriniz, potansiyometreleriniz veya sensörleriniz için belirtilmiştir.

İletişim kurduğumuzdan emin olmak için bir el sıkışması var.

ve iletişim kurduğumuz formata karar verildi

Mesajı aynı şekilde oluşturmak önemlidir, böylece İşleme, onu nasıl bozacağını ve DAW'ımıza doğru OSC mesajlarını nasıl göndereceğini bilir.

werkcollege AV&IT için üretildi

ekim 2017

*

/ baud hızı

const uzun baudHızı = 115200;

// pinlere yapılan anketler arasında ms cinsinden bekleme süresi

const int loopPauseTime = 200; // mili saniye

// Serial üzerinden gönderilen mesajın başlangıç ve bitiş değerleri

const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin kimlikleri

// diğer global değişkenler

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 potDeğeri = 0;

// analog sensörler

const int potPin = A5; // tremoloyu sabitle

// Processing taslağı ile temas kurmak için bu fonksiyona ihtiyacımız var

// Onu burada tut void createContact() { while (Serial.available() <= 0) { Serial.print(contactCharacter); // bir karakter gönder ve yanıt bekle… delay(loopPauseTime); } Seri.read(); }

geçersiz kurulum() {

// tüm pinler için pinMode'ları ayarla for(int i = 0; i < aantalKnoppen; i++){ pinMode(knopPinnen, INPUT); } pinMode(mainButton, INPUT); // 5V yerine 3V üzerinde çalışan sensörler kullanıyorsanız yorum yapmayın // 'ext' pinini de 3.3V'a bağlamanız gerekecek // analogReference(EXTERNAL);

// Seri iletişimleri başlat

Serial.begin(baudHızı); while (!Seri); // tokalaşma için beklekurumContact(); }

boşluk döngüsü () {

// ADIM 1: OKUMA DÜĞMELERİ // tüm pinleri yokla ve okumayı uygun aralığa eşleyin 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); // örnekler: // float v0 = map(bpm, 0, 1023, 60, 250); // normalleştirilmiş bir şamandıra kullanmak istiyorsanız (örn. hacim için) // float v1 = map(analogRead(pin2), fromMin, fromMax, 0, 100) / 100.0;

// ADIM 2: MESAJ YAZIN

Serial.print(startString); // for(int i = 0; i < aantalKnoppen; i++){ if(mainButtonState == HIGH){ Serial.print(namenKnoppen); için bir mesaj dizisi başlat Seri.print(", "); Serial.print(buttonStates); if(i < aantalKnoppen - 1){ Serial.print(", "); } }else{ buttonStates = 0; Serial.print(nameKnoppen); Seri.print(", "); Serial.print(buttonStates); if(i < aantalKnoppen - 1){ Serial.print(", "); } } } Serial.print(", "); Serial.print("tremolo"); Seri.print(", "); Serial.print(harita(potValue, 0, 1023, 0, 100)); // Serial.print(endString) mesajının sonunu yaz;

// biraz bekle..

gecikme (loopPauseTime); }

İşleme

Sorumluluk Reddi: Geschreven'de tüm kodlar için taslak kod işleme, en iyi ve en iyi kod: ProcessingSoundControl_handout_v6_1.pde in bijlage

De volgende şu talimatı verir:

// de arduino eskizinde Baudrate moet hetzelfde zijn zoals

nihai int baudHızı = 115200;

// Reaper'da Zoek naar het IP adresi (bijlage'de zie ekran görüntüleri)

// stuurt naar dit andres en reaper luistert hier naar işleniyor //

//son Dize remoteIP = "192.168.1.43"; //Örneğin. "127.0.0.1";

final String remoteIP = "10.3.209.60";

// sendPort'u not edin ve bunu Reaper'da doldurun.

// Bu, İşleme'nin gönderdiği ve Reaper'ın dinlediği bağlantı noktasıdır.

son int listenPort = 12000, sendPort = 12000;

// Buradaki listenPort aktif olarak hata ayıklamak içindir.

// portAdları da hata ayıklamak için burada.

//son Dize portAdı = "/dev/ttyACM0";

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

//////////////////// KULLANICI PARAMETRELERİNİN SONU /////////////////////// ////

işleme.serisini içe aktar.*;

java.util.* dosyasını içe aktarın;

oscP5.* içe aktar;

netP5.* içe aktar;

OscP5 oscP5;

NetAddress myRemoteLocation;

Seri comsPort; // seri bağlantı noktası

boolean messageArrived = false;

Gelen dize = "", GelenOSCMessage = "";

son karakter startChar = '*', endChar = '#'; son karakter contactCharacter = '|';

// Yalnızca değişen parametreleri (değerleri) gönderdiğimizden emin olmak için

// bu global değişkenler burada belirtilir ama // burada başlatılmamalıdır! HashMap oldParams, newParams, toSendParams;

// Mesajı her virgülde bölmemiz gerekiyor

void processIncoming () { String resVec = incoming.split(", "); // isim + değer çiftleri alıyoruz // yani her isim için (+2)… try{ for (int i = 0; i< resVec.length; i+=2) { float değer = Float.parseFloat(resVec[i+ 1]); // onları yeni Hashtable'a koy newParams.put(resVec, value); } } // bir hata oluşursa onu yakalayalım ve çıkalım. catch(ex.ex){ println("İstisna Mesajı: " + ex); printArray(resVec); çıkış(); } }

// Mesajlarımızı filtrelemek için

/* Giriş mesajı (Seri) değiştiğinde yalnızca bir OSC-out mesajı olduğundan emin oluruz * Yani: butonu çevirir/basarsak ve değeri değişirse. * Bu nedenle, gerçekte değişen gelen değerleri filtreleriz * not: örneğin ivmeölçerlerden veya mesafe sensörlerinden gelen atlama değerlerinden kaçınmayacağız * bunları Arduino'da kendiniz düzeltmeniz gerekecek */ void filterParams () { toSendParams = new HashMap(); for (String key: newParams.keySet()) { // anahtar zaten mevcutsa if (oldParams.containsKey(key)) { // anahtar mevcut ve değer aynı değilse, if (!oldParams.get(key) güncelleyin).equals(newParams.get(key))) { toSendParams.put(key, newParams.get(key)); } } else{ // eski paramlarda anahtar yok, o yüzden koy! toSendParams.put(anahtar, newParams.get(anahtar)); } oldParams.put(anahtar, newParams.get(anahtar)); } }

geçersiz makeOSC() {

for (String key: toSendParams.keySet()) { OscMessage myMessage = new OscMessage("/"+ key); myMessage.add(toSendParams.get(anahtar)); /* mesajı gönder */ oscP5.send(myMessage, myRemoteLocation); } }

void translateMessage() {

processIncoming(); filtreParams(); makeOSC(); } // Pencereye yazdırmak istediğimizde void ShowIncoming() { // gelen mesajı görmek için HashMap metninde belirtildiği gibi("Incoming from Arduino", 20, 20); int y = 20; for (String key: newParams.keySet()) { y = y+20; metin(anahtar, 20, y); text(newParams.get(key), 300, y); } }

geçersiz showOsc() {

metin(GelenOSCMesaj, 300, 200); GelenOSCMessage =""; }

geçersiz kurulum() {

boyut(1000, 800); // Sahne alanı doldurma(255); arkaplan(0); oldParams = new HashMap(); newParams = new HashMap(); //printArray(Serial.list()); commsPort = new Serial(bu, portName, baudRate);

/* oscP5'i başlat, gelen mesajları dinleyerek */

oscP5 = yeni OscP5(bu, listenPort);

/* myRemoteLocation bir NetAddress'dir. bir NetAddress 2 parametre alır, * bir ip adresi ve bir port numarası.myRemoteLocation, osc paketlerini başka bir bilgisayara, cihaza, * uygulamaya gönderirken * oscP5.send() içinde parametre olarak kullanılır. kullanım aşağıya bakın. test amacıyla, dinleme bağlantı noktası * ve uzak konum adresinin bağlantı noktası aynıdır, dolayısıyla bu çizime * mesajlar göndereceksiniz. */ myRemoteLocation = new NetAddress(remoteIP, sendPort); }

geçersiz beraberlik() {

if (messageArrived) { background(0); çevirMesaj(); Geleni Göster(); mesajArrived=yanlış; } showOsc(); }

void serialEvent(Serial commsPort) {

// seri porttan bir bayt oku: char inChar = commsPort.readChar(); switch (inChar) { case contactCharacter: commsPort.write(contactCharacter); // daha fazlasını iste println("başlıyor…"); kırmak; case startChar: gelen = ""; kırmak; case endChar: messageArrived = true; //println("mesajın sonu"); kırmak; varsayılan: gelen += inChar; kırmak; } }

/* gelen osc mesajı oscEvent yöntemine iletilir. */

void oscEvent(OscMessage theOscMessage) { float değeri = theOscMessage.get(0).floatValue(); // 1. osc argümanını al

GelenOSCMessage += "\n" +

String.format("### bir osc mesajı aldı: " + " addrpattern: " + theOscMessage.addrPattern() + ": %f", değer); println(GelenOSCMessage); }

Adım 12: Denetleyici Uittesten

Nu alles aangeslotendir, alle code geschreven ve alles geubbelcheckt is het eindelijk tijd om de controller z'n werk te laten doen. Reaper ve Reaper en hızlı şekilde Guitar Hero MIDI Controller!

Önerilen: