Mündəricat:

Gitara Qəhrəmanı Arduino Layihəsi: 12 Addım (Şəkillərlə birlikdə)
Gitara Qəhrəmanı Arduino Layihəsi: 12 Addım (Şəkillərlə birlikdə)

Video: Gitara Qəhrəmanı Arduino Layihəsi: 12 Addım (Şəkillərlə birlikdə)

Video: Gitara Qəhrəmanı Arduino Layihəsi: 12 Addım (Şəkillərlə birlikdə)
Video: Qəhrəman Gitara Təbrizim 2024, Iyul
Anonim
Gitara Qəhrəmanı Arduino Layihəsi
Gitara Qəhrəmanı Arduino Layihəsi
Gitara Qəhrəmanı Arduino Layihəsi
Gitara Qəhrəmanı Arduino Layihəsi
Gitara Qəhrəmanı Arduino Layihəsi
Gitara Qəhrəmanı Arduino Layihəsi

Wart zart Maarten Vrebos, Justin Cavanas və Wannes Stroobandt, biz multimedia və kommunikasiya texnologiyasını öyrənirik. AudioVizual və İT Prinsipləri, gitara qəhrəmanı və ya MIDI nəzarətçisindən başqa heç bir problemi olmayan bir layihə ilə əlaqədardır. Təcrübəçi təcrübə keçmək üçün ən yaxşı təhsil alan idi. Nəzarətçi, geniş bir sistemə sahibdir. Əlavə məlumat əldə etmək üçün əlavə məlumat əldə edə bilərik.

Mövzu ilə əlaqədar olaraq, məhsulların istehsalında ən çox istifadə olunan məhsulların hamısı bir çox fotoşəkillərdən istifadə etməklə əldə edilə bilər.

Layihə ilə əlaqədar olaraq, bu layihələr çox böyükdür:

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

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

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

Benodigdheden səs layihəsi

  • 6 kleine düymələri
  • 7 1 kohm rezistor
  • 1 gele LED 1
  • blauwe LED
  • 1 Arduino Uno R3
  • 1 böyük LED
  • 2 ədəd LED
  • 1 məktəbli
  • 1 çörək taxtası
  • 1 potansiyometr
  • 1 protobord
  • 1 gitara qəhrəmanı
  • Voldoende yataq dəsti
  • Lehim materialı/dremelen/
  • Schroevendraaier

Addım 1: Komponentlərin verilməsi

Komponentlərin verilməsi
Komponentlərin verilməsi

Voor ons prototipi (op çörək taxtası) hebben biz komponentləri təqdim edirik:

6 düymə

7 1 kohm rezistor

1 sarı LED

1 Mavi LED

1 Arduino Uno R3

1 Yaşıl LED

2 qırmızı LED

1 Schuifschakelaar

1 Çörək lövhəsi

1 Potansiyometr

Addım 2: Bouwen prototipi

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

Çörək bişirmə funksiyasını yerinə yetirərkən, çörək lövhəsini sınamaqla yanaşı, həm də testdən keçdiyimiz müddətdə biz də bir araya gələrək prototip hazırlayırıq. Tinkercad.com vasitəsi ilə bir prototip hazırladıqdan sonra, bu prototipin ən böyük prototipi haqqında məlumat əldə edə bilərsiniz.

5 düyməni basdıqdan sonra bütün düymələr bir -birinə bağlandı və 5 düymənin birləşməsi bir araya gələrək bir araya gələrək bir araya gəldi. Müasir LED-lər də bir-biri ilə qarşılıqlı əlaqə qurmaqla uğurla idarə edilə bilər.

Addım 3: Kod Prototipi

Kod prototipi
Kod prototipi

Globale dəyişkəndir

Başlanğıcda, kodun başlanğıcını dəyişdirmək üçün bütün düymələri istifadə edə bilərsiniz.

// zet pin nömrələri mainButton (snaar) və düymələri bir -birindən ayırmaq olar: const int mainButton = A1; // gstar snaar const int lightSensor = A0; const int buttonPin1 = 2; // saylı düymələr1 const int buttonPin2 = 3; // düyməni basmaq üçün düymələr2const int buttonPin3 = 4; // düymələri basmaq3const int buttonPin4 = 5; // basma düymələri4const int buttonPin5 = 6; // nummer van düyməsi5

Tıklayacağınız seriallar ən çox istifadə edilə bilən düymələrdir.

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

LED -lərin quraşdırılması üçün heç bir problem yoxdur.

const int ledPin1 = 13; // LED pininin sayı 13

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

Ştatların "sensorlar" ı da (dünya potensialiometrinin, lichtsensorun istifadə etdiyi düymələr) dəyişə bilər.

// startiseer buttonStates və ya knoppen (niet of data) int mainButtonState = 0; int düyməsiState1 = 0; int düyməsiState2 = 0; int düyməsiState3 = 0; int düyməsiState4 = 0; int düyməsiState5 = 0; int lightSensorState = 0; int potValue = 0; int lightValue = 0;

Qurmaq

Void quraşdırma funksiyasını ləğv edin. Təlimatlar təlimatlarda göstərildiyi kimi, hər hansı bir növ boşluq (boşluq) kimi tanınır.

Başlanğıc funksiyasını şərh etmək çox vacibdir. Xüsusi funksiyaların icrası ilə bağlı əlavə məlumat, arduino istinadlarında mövcuddur

void setup () {// saniyə başına məlumat sürəti (baud) və ya serial ötürülməsi Serial.begin (9600); // pinMode (ledPin1, ÇIXIŞ) ilə birlikdə LEDPin parametrlərini də başladın; pinMode (ledPin2, Çıxış); pinMode (ledPin3, Çıxış); pinMode (ledPin4, Çıxış); pinMode (ledPin5, Çıxış); // başlanğıc üçün bütün düymələr daxil olmaqla: pinMode (mainButton, INPUT); pinMode (düyməPin1, GİRİŞ); pinMode (düyməPin2, GİRİŞ); pinMode (buttonPin3, GİRİŞ); pinMode (düyməPin4, GİRİŞ); pinMode (düyməPin5, GİRİŞ); pinMode (potPin, GİRİŞ); pinMode (işıq sensoru, GİRİŞ); }

Boş funksiya

Quraşdırma () funksiyasını yerinə yetirmək () funksiyasını yerinə yetirmək üçün təlimatlar daha da pisləşdi.

void loop () {// lees de staat van de pushbuttons uit (niet of ingedrukt) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);

// bütün sıra düymələri statusda

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

// potensialiometr və ya lichtsensor üçün ən yaxşı məlumat

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

// bəyannaməçi array mainStates və standaard waarden 0 düym.

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

// array aantalKnoppen üzərində döngə

for (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // başlanğıc üçün bütün məlumatlar knopPinnen daxil olmaqla digitalRead (knopPinnen ); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) istifadə edərək, bütün düymələri çap edin, əgər bütün düymələri göstərin (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}

Addım 4: Uittesten prototipi

Gebouwd prototipi, geschreven kodunun işlənməsindədir, bu da bir prototipdir. Videonun bütün növləri bir -biri ilə əlaqə qurmaqla bir araya gələrək bir araya gətirir.

Tweed -də videonun işlənməsi prosesində pisləşən potensialiometrlər istifadə olunur.

Addım 5: "Ontmantelen" lərlə tanış olun Komponentlər Gebruikt Gaan Worden

Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing

Əlavə olaraq düzgün bir prototip əldə etdikdən sonra Guitar Qəhrəmanı "ontmantelen" ilə tanış olduq. Biz bütün proqramları bir -birimizə bağladıqdan sonra bütün elementləri idarə edə biləcəyik. Əlavə olaraq, düymələrin ən yaxşı düymələrini öz üzərimizdə saxlayırıq (zımbalar). Biz bu məhsulu çıxarmaq üçün ən çox istifadə olunan məhsulu (bir düyməni bir araya gətirməklə bir yerdə) bir araya gətiririk (bu şəkil). LED -lərin nə vaxt veriləcəyini (bütün məlumatların düzgünlüyünü başa düşdükdən sonra).

Addım 6: Wineing Originele Buttons + Dremelen

Werking Originele Düymələri + Dremelen
Werking Originele Düymələri + Dremelen

Videonun ən çox yayılmış variantı, bütün əlaqələrin birləşməsi ilə əlaqədardır.

Şəxsi düymələr bir çox mənbələrdə görünsə də, biz də bir çox məlumat əldə edə bilərik.

Addım 7: Yataq Yandırma + Düymələr Vastlijmen

Yataq lehimləmə + Düymələr Vastlijmen
Yataq lehimləmə + Düymələr Vastlijmen
Yataq lehimləmə + Düymələr Vastlijmen
Yataq lehimləmə + Düymələr Vastlijmen
Yataq lehimləmə + Düymələr Vastlijmen
Yataq lehimləmə + Düymələr Vastlijmen

Biz nə vaxt başa düşdük ki, çörək taxtası bir neçə aydan çox müddətə başa çatdı və bu, bir çox komponentləri bir araya gətirdi. Nadat dit gebeurd, biz də düymələri genişləndiririk və bu da fotoşəkillərdir. Eins dit gebeurd, biz heç bir şeyi bağlaya bilmərik.

Addım 8: De Behuizing -də Maken ilə Plaats

De Behuizing -də Maken ilə birlikdə
De Behuizing -də Maken ilə birlikdə
De Behuizing -də Maken ilə birlikdə
De Behuizing -də Maken ilə birlikdə
De Behuizing -də Maken ilə birlikdə
De Behuizing -də Maken ilə birlikdə

Guitar Qəhrəmanı-model redaktə olundu ki, bu da çox yaxşı idi, biz də əlavə edə bilərik. dremelen. Bu gündən etibarən biz bu proqramların hamısını çox yaxşı başa düşə bilərik. Bilmək lazım deyilsə, biz də çox vaxt bu işin öhdəsindən gələ bilərik, biz də çox yaxşı bir iş görürük. Bu fotoşəkil ən çox məlumat əldə edə biləcəyiniz bir vaxtdır ki, bu düymələr heç bir yerdə yoxlanılmamışdır. Bu fotoşəkil ən çox yayılmış məlumatlardan biridir ki, bu da Arduino qapılarının açılması ilə əlaqədardır.

Addım 9: Bedrading Aansluiten Op Protobord

Yataq yeyən Aansluiten Op Protobord
Yataq yeyən Aansluiten Op Protobord
Yataq yeyən Aansluiten Op Protobord
Yataq yeyən Aansluiten Op Protobord
Yataq yeyən Aansluiten Op Protobord
Yataq yeyən Aansluiten Op Protobord
Yataq yeyən Aansluiten Op Protobord
Yataq yeyən Aansluiten Op Protobord

Komponentlər bir -birindən fərqlənir ki, bu protokoldur. Bu məlumatların hamısı, bir qayda olaraq, çörək bordoru ilə daha yaxşı işləyəcəkdir. Şəkillərin ən çox yayılmış şəkillərini də oxuya bilərik. Şəxsi məlumatların verilişini ən yaxşı şəkildə başa çatdırmaq olar (şəkil 2).

Addım 10: Verstevigen

Verstevigen
Verstevigen

Əlbətdə ki, hər şey son dərəcə sabitdir. Fotoşəkillərin çox böyük bir hissəsi var və biz bu məlumatları əldə edə bilərik. düymələri açdıqdan sonra düymələri yığın.

Addım 11: Kod Voor Het Communiceren Reaper ilə tanış oldu

Kod Voor Het Communiceren Reaper ilə Görüşdü
Kod Voor Het Communiceren Reaper ilə Görüşdü
Kod Voor Het Communiceren Reaper ilə Görüşdü
Kod Voor Het Communiceren Reaper ilə Görüşdü
Kod Voor Het Communiceren Reaper ilə Görüşdü
Kod Voor Het Communiceren Reaper ilə Görüşdü
Kod Voor Het Communiceren Reaper ilə Görüşdü
Kod Voor Het Communiceren Reaper ilə Görüşdü

Deze kodu açıq şəkildə göstərilir, lakin geyim de arduino IDE -də (interaktiv inkişaf mühiti) mövcuddur. İstifadəçi məlumatlarını yoxlamaq üçün hər hansı bir sensoru və ya midi nəzarətçisini yoxlayın.

Qenerasiya hər şeydən ibarətdir. Bütün bunlar Arduino qapılarını açmaq üçün qapını açmaq üçün lazım olan hər şeyi göstərir.

Arduino

/* Bu kod, Seri ilə İşləmə ilə əlaqə qurmaq üçün əsas bir eskizdir.

Öz kodunuzu qoya biləcəyiniz bir plandır

öz düymələriniz, potensiometrləriniz və ya sensorlarınız üçün nəzərdə tutulmuşdur.

Əlaqə qurduğumuzdan əmin olmaq üçün əl sıxışması var

və hansı ünsiyyətdə olduğumuza qərar verilir

Mesajı eyni şəkildə qurmaq vacibdir, belə ki, Qenerasiya onu sökməyi və DAW-a düzgün OSC mesajlarını göndərməyi bilir

werkcollege AV&IT üçün hazırlanmışdır

oktyabr 2017

*

/ baud dərəcəsi

const long baudRate = 115200;

// sancaqlar arasındakı sorğular arasında ms -də gözləmə vaxtı

const int loopPauseTime = 200; // milli saniyə

// Serialda göndərilən mesajın başlanğıc və bitiş dəyərləri

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

const char contactCharacter = '|';

// pin identifikatorları

// digər qlobal dəyişənlər

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 potValue = 0;

// analoq sensorlar

const int potPin = A5; // tremolo ilə vurun

// İşləmə eskizi ilə əlaqə qurmaq üçün bu funksiyaya ehtiyacımız var

// Burda saxlayın void installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // simvol göndər və cavab gözlə… gecikmə (loopPauseTime); } Serial.read (); }

boş quraşdırma () {

// bütün pinlər üçün pinModları təyin edin (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // 5V əvəzinə 3V üzərində işləyən sensorlar istifadə etsəniz şərh verməyin // 'ext' pinini 3.3V -ə də bağlamalı olacaqsınız // analogReference (EXTERNAL);

// Serial komutlarını işə salın

Serial.begin (baudRate); while (! Serial); // əl sıxmağı gözləyin installContact (); }

boşluq döngəsi () {

// ADIM 1: DÜĞMƏLƏRİ OXUYUN // bütün sancaqlar arasında sorğu keçirin və oxunuşu int buttonStates [aantalKnoppen] uyğun aralığına uyğunlaşdırın; /* 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); // nümunələr: // float v0 = xəritə (bpm, 0, 1023, 60, 250); // normallaşdırılmış float (məsələn, həcm üçün) istifadə etmək istəyirsinizsə // float v1 = map (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;

// ADIM 2: MESAJ YAZ

Serial.print (startString); // (int i = 0; i <aantalKnoppen; i ++) {if (mainButtonState == HIGH) {Serial.print (namenKnoppen ) üçün bir mesaj sırasına başlayın; Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }} başqa {buttonStates = 0; Serial. çap (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }}} Serial.print (","); Serial.print ("tremolo"); Serial.print (","); Serial.print (xəritə (potValue, 0, 1023, 0, 100)); // mesajın sonunu yazın Serial.print (endString);

// biraz gözlə..

gecikmə (loopPauseTime); }

İşlənilir

İmtina etmə: Necə deyilsə də, işləmə eskizini hazırlayın, bu kod ən yaxşı şəkildə: ProcessingSoundControl_handout_v6_1.pde formatında

Təlimatlar çox pisdir (indien nodig):

// Baudrate moet hetzelfde zijn zoals in arduino eskizində

final int baudRate = 115200;

// Oraqdakı IP ünvanı (zij ekran görüntüsü)

// İşlənib hazırlanır və indi ən çox yeyilir //

// final String remoteIP = "192.168.1.43"; // məsələn. "127.0.0.1";

final String remoteIP = "10.3.209.60";

// sendPort -a diqqət yetirin və bunu Reaper -də doldurun.

// Bu, İşlənmənin göndərdiyi və Oraqlının dinlədiyi portdur.

final int listenPort = 12000, sendPort = 12000;

// Buradakı listenPort aktiv olaraq debug etmək üçündür.

// portNames də debug etmək üçün buradadır.

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

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

//////////////////////////////////////////////////////////////////////////////////////////////////// ////

idxal emalı.serial.*;

java.util idxal edin.*;

idxal oscP5.*;

netP5 idxal edin.*;

OscP5 oscP5;

NetAddress myRemoteLocation;

Serial commsPort; // Serial limanı

boolean messageArrived = false;

Gələn sətir = "", GələnOSCMessage = "";

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

// Yalnız dəyişən parametrləri (dəyərləri) göndərdiyimizdən əmin olmaq üçün

// bu qlobal dəyişənlər burada silinir, lakin // burada işə salınmamalıdır! HashMap oldParams, newParams, toSendParams;

// Mesajı hər vergüldə bölməliyik

void processIncoming () {String resVec = incoming.split (","); // ad+dəyər cütləri alırıq // hər ad üçün (+2)… cəhd edin {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+) 1]); // onları yeni Hashtable newParams.put'a qoyun (resVec , dəyər); }} // bir səhv olarsa, onu göstərək və çıxaq. catch (Exception ex) {println ("İstisna Mesajı:" + ex); printArray (resVec); çıxış (); }}

// Mesajlarımızı süzmək üçün

/ * Giriş mesajı (Serial) dəyişəndə * Yalnız OSC-dən çıxan bir mesaj olduğuna əminik. Yəni: düyməni çevirsək/bassaq və dəyəri dəyişərsə. * Beləliklə, əslində dəyişən daxil olan dəyərləri süzgəcdən keçiririk * qeyd: məsələn, sürətləndiricilərdən və ya məsafə sensorlarından gəldiyimiz kimi dəyərlərin atlanmasından qaçmayacağıq * bunları Arduino -da özünüz düzəltməlisiniz */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// əgər açar artıq mövcuddursa (oldParams.containsKey (key)) {// açar mövcuddursa və dəyəri eyni deyilsə, (! oldParams.get (key)). bərabərdir (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} başqa {// açar köhnə parametrlərdə yoxdur, belə deyək! toSendParams.put (açar, newParams.get (açar)); } oldParams.put (açar, newParams.get (açar)); }}

boşluq makeOSC () {

for (String düyməsi: toSendParams.keySet ()) {OscMessage myMessage = yeni OscMessage ("/"+ düyməsi); myMessage.add (toSendParams.get (açar)); / * mesaj göndər */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {

processIncoming (); filterParams (); makeOSC (); } // HashMap mətnində göstərildiyi kimi daxil olan mesajı görmək üçün void ShowIncoming () {// pəncərəsinə çap etmək istədiyimiz zaman ("Arduinodan Gələnlər", 20, 20); int y = 20; for (String düyməsi: newParams.keySet ()) {y = y+20; mətn (açar, 20, y); mətn (newParams.get (key), 300, y); }}

boşluq showOsc () {

mətn (IncomingOSCMessage, 300, 200); GələnOSCMessage = ""; }

boş quraşdırma () {

ölçü (1000, 800); // Mərhələ ölçüsünün doldurulması (255); fon (0); oldParams = yeni HashMap (); newParams = yeni HashMap (); // printArray (Serial.list ()); commsPort = yeni Serial (bu, portName, baudRate);

/ * oscP5 -ə başlayın, gələn mesajları dinləyin */

oscP5 = yeni OscP5 (bu, listenPort);

/* myRemoteLocation bir NetAddressdir. bir NetAddress 2 parametr alır

* bir ip ünvanı və liman nömrəsi.myRemoteLocation, osc paketlərini başqa bir kompüterə, cihaza, * tətbiqə göndərərkən * oscP5.send () də parametr kimi istifadə olunur. istifadəsi aşağıya baxın. test məqsədləri üçün dinləmə limanı * və uzaq yer ünvanı portu eynidir, buna görə də * bu eskizə mesaj göndərəcəksiniz. */ myRemoteLocation = yeni NetAddress (remoteIP, sendPort); }

boş çəkmə () {

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

boş serialEvent (Serial commsPort) {

// serial portdan bir bayt oxuyun: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // daha çox println istəyin ("başlayır…"); fasilə; case startChar: gələn = ""; fasilə; case endChar: messageArrived = true; // println ("msg -nin sonu"); fasilə; standart: daxil olan += inChar; fasilə; }}

/* gələn osc mesajı oscEvent metoduna göndərilir. */

void oscEvent (OscMessage theOscMessage) {float dəyəri = theOscMessage.get (0).floatValue (); // birinci oscar arqumentini əldə edin

GələnOSCMessage += "\ n" +

String.format ("### bir osc mesajı aldı:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", dəyər); println (IncomingOSCMessage); }

Addım 12: Nəzarətçi Uittesten

Bütün bunlar bir -birindən fərqlidir, bütün kodlar hamısı birdən -birə yoxlanılırsa, bu da nəzarətçi tərəfindən yoxlanılır. Güc Qəhrəmanı MIDI Nəzarətçisindən Reaper -in ən təsirli oyunlarından biridir!

Tövsiyə: