İçindekiler:
- Adım 1: Bileşen Verzamelen
- Adım 2: Prototip Bouwen
- Adım 3: Kod Prototipi
- Adım 4: Prototip Uittesten
- Adım 5: "Ontmantelen"i Behuizing En Kijken Welke Componenten Gebruikt Gaan Worden
- Adım 6: Orijinal Originele Düğmeleri + Dremelen
- Adım 7: Lehimleme Lehimleri + Düğmeler Vastlijmen
- Adım 8: De Behuizing'de Yapılan Plaatlar
- Adım 9: Aansluiten Op Protobord'u Bedrading
- Adım 10: Verstevigen
- Adım 11: Code Voor Het Communiceren Met Reaper
- Adım 12: Denetleyici Uittesten
Video: Guitar Hero Arduino Projesi: 12 Adım (Resimli)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
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
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
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
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
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
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
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
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
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
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
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:
Yakınlaştırmayı Kontrol Etmek için Guitar Hero Guitar Kullanma (Yalnızca Windows): 9 Adım
Yakınlaştırmayı Kontrol Etmek İçin Bir Guitar Hero Gitar Kullanma (Yalnızca Windows): Küresel bir pandeminin ortasında olduğumuzdan, çoğumuz ev temizliğine ve Zoom'daki toplantılara katılmaya çalışıyoruz. Bir süre sonra, bu çok yumuşak ve sıkıcı olabilir. Evimi temizlerken suya atılmış eski bir Guitar Hero gitar buldum
Arduino Otomatik Gölgelik Perde Projesi için Step Motor ve Sürücü Seçimi: 12 Adım (Resimli)
Arduino Otomatik Gölge Ekran Projesi için Step Motor ve Sürücü Seçme: Bu Eğitilebilir Kitapta, bir prototip Otomatik Gölge Ekran projesi için bir Step Motor ve Sürücü seçmek için attığım adımları inceleyeceğim. Gölgelik perdeler, popüler ve ucuz Coolaroo elle kranklı modellerdir ve ben bunu değiştirmek istedim
Guitar Hero Guitar Bağlantı Kesme Düzeltmesi: 5 Adımda (Resimlerle)
Guitar Hero Guitar Disconnecting Fix: Yani, ebay'den o güzel kullanılmış gitar kahraman gitarını satın aldınız ve size geldiğinde o USB dongle'a bağlanmayacak, bu yüzden 30€ drenaj aşağı. Ancak bir düzeltme var ve bu düzeltme büyük olasılıkla işe yarayacak
Dahili Hoparlörlü Guitar Hero Guitar: 8 Adım
Dahili Hoparlörlü Guitar Hero Guitar: Temel olarak, bir Guitar Hero denetleyicisini açtım ve içine ne sığabileceğimi merak ettim. Hafif görünüyordu, bu yüzden bir sürü yer olduğunu düşündüm. Tabii ki bol miktarda vardı. İlk başta gitarın boynuna bir iPod Shuffle takmayı planlamıştım ve
Epik! Guitar Hero - Double Neck Guitar Fail: 7 Steps (Resimli)
Epik! Guitar Hero - Double Neck Guitar… Başarısız: 2015, popüler kültür fenomeni Guitar Hero'nun 10. yıl dönümü. Hatırlarsanız, sadece belli belirsiz taklit etmeyi başardığı müzik aletinden daha popüler hale gelen video oyunu? Yıldönümünü kutlamanın daha iyi bir yolu