MIDI2LED - MIDI tərəfindən idarə olunan LED Şerit İşıq Efekti: 6 addım
MIDI2LED - MIDI tərəfindən idarə olunan LED Şerit İşıq Efekti: 6 addım
Anonim
MIDI2LED - MIDI tərəfindən idarə olunan LED Şerit İşıq Efekti
MIDI2LED - MIDI tərəfindən idarə olunan LED Şerit İşıq Efekti

Bu mənim ilk təlimatımdır, buna görə səbr edin.

Musiqi yaratmağı sevirəm və qonaq otağı konsertləri kimi canlı vəziyyətlərdə, oynadıqlarımla sinxron işıq effektləri olanda xoşuma gəlir. Beləliklə, MIDI klaviaturamdakı bir nota vurduğumda və notu vurduğum yerdə LED şeridi təsadüfi rəngdə işıqlandıran Arduino əsaslı bir qutu qurdum.

Təchizat

  • Arduino Uno
  • Arduino protoxield
  • MIDI yuvası
  • 1N4148 diod
  • 6N138 opto bağlayıcı
  • Rezistorlar: 2x 220 Ohm, 1x 10kOhm, 1x 470Ohm
  • WS2812B LED şeridi (60 LED)
  • qalan tellər
  • istilik daraldıcı borular
  • Arduino üçün uyğun korpus (plastik qovşaqdan istifadə edirəm)

Sizə də lazım olacaq

  • lehimləmə dəmiri və lehim
  • MIDI klaviatura və MIDI kabeli

Addım 1: Elektronika

Elektronika
Elektronika

Dövrə olduqca sadədir. Standart bir MIDI girişindən (Arduinonun solunda) və LED şeridinə (Arduinonun sağında) olan əlaqədən ibarətdir. Bütün hissələri protoshieldə yerləşdirin, çox yer var, ümumiyyətlə LED şeridini gücləndirmək üçün xarici enerji təchizatı istifadə etmək məsləhət görülür, ancaq oynadığınız zaman eyni anda yalnız bir neçə LEDin yandığını gördüm. Arduino +5V / GND -ni güc çıxışı olaraq istifadə etməkdə heç bir problem yoxdur. (Bütün düymələri eyni vaxtda və tam sürətlə vurmamağa çalışın.;-)) Xarici bir enerji təchizatı istifadə etmək qərarına gəlsəniz, sadəcə Arduino +5V və GND pinlərinə bağlayın. Bəzi insanlar bu iki xətt arasına 100 uF kondansatör (sxematik olaraq göstərilməmiş) daxil etməyi məsləhət görürlər.

Parçaları protoshielda lehimləyin və LED şeridini sxematik şəkildə göstərildiyi kimi bağlayın.

Addım 2: LED şeridinin bağlanması

LED şeridinin bağlanması
LED şeridinin bağlanması

LED şeridinin sağ ucunu - giriş ucunu dövrə bağlamaq vacibdir. Mənim zolağımda giriş olaraq qadın konnektoru var və girişdən uzaqlaşan kiçik üçbucaqlar var. Çıxışda bir kişi konnektoru var idi (ehtiyacımız olmayan başqa bir zolağa bağlaya bilmək üçün), buna görə onu kəsdim və Arduinodan gələn üç kabelə lehimlədim. Üç kabeli LED şeridinə bağlamaq və daha az görünən etmək üçün istilik büzücü borulardan istifadə edin.

İstifadə etdiyim LED şeridi arxasında yapışan bantla gəlir, buna görə də MIDI klaviaturasının arxasına asanlıqla yapışdırıla bilər.

Addım 3: Layihəni Klaviaturanıza uyğunlaşdırın

Layihəni Klaviaturanıza uyğunlaşdırın
Layihəni Klaviaturanıza uyğunlaşdırın
Layihəni Klaviaturanıza uyğunlaşdırın
Layihəni Klaviaturanıza uyğunlaşdırın

LED şeridini və Arduino kodunu klaviaturanıza uyğunlaşdırmalı ola bilərsiniz. Mənimki 76 düyməyə malikdir və şeridin uzunluğu demək olar ki, klaviatura genişliyidir. Əgər varsa, məsələn 61 düymə, daha qısa bir zolağa ehtiyacınız ola bilər. LED şeridi hər iki LED arasında kəsilə bilər. Doğru hissəni kəsdiyinizə əmin olun, giriş ucu (qadın konnektoru ilə) və çıxış ucu (kişi konnektoru ilə) var, giriş ucunu saxlamalısınız. Kodda #tərifləri dəyişdirin üçün

  • Sonunu kəsdikdən sonra zolağınızda qalan LED sayına NUMBER_OF_LEDS,
  • Klaviaturanızdakı düymələrin sayına NUMBER_OF_KEYS və
  • Ən aşağı açarınızın MIDI meydan nömrəsinə MIN_KEY. Bunu klaviaturanın istifadə kitabçasında tapa bilərsiniz; və ya Linux üçün KMidiMon və ya Windows və ya Mac üçün Pocket MIDI kimi MIDI qeyd nömrəsini göstərən bir vasitədən istifadə edin; və ya cihaz klaviaturanızdakı bütün düymələrə cavab verənə qədər fərqli dəyərlər sınayın

Addım 4: Arduino Kodu

Arduino kodu, Forty Seven Effects -in MIDI kitabxanasından (v4.3.1) və Adafruit -in Adafruit NeoPixel kitabxanasından (v1.3.4) istifadə edir. Bu kitabxanaları Arduino IDE -dən istifadə edərək quraşdırın. Sonra kodu tərtib edin və qalxan bağlanmadan Arduinoya yükləyin (optocoupler yükləməyə mane olan RX pininə bağlıdır). Arduino -nu USB kabeli ilə gücləndirin (USB divar ziyalı istifadə edirəm).

Kodu zövqünüzə uyğun olaraq dəyişdirmək istəyirsinizsə, bunun necə işlədiyinə qısa bir baxış var: Hər döngədə MIDI girişi oxunur. Bir Qeyd On və ya Not Off hadisəsi alınıbsa, MyHandleNoteOn və ya MyHandleNoteOff funksiyaları çağırılır. Hər ikisi də açar nömrəsinin sürətini (yəni nə qədər vurduğunuzu) saxlayan updateVelocityArray funksiyasını çağırırlar. Sürət əvvəllər saxlanıldığından daha yüksəkdirsə, müvafiq LED -in rəngi "cari rəng" olaraq təyin olunur. MIDI hadisələri işləndikdən sonra updateLedArray funksiyası çağırılır. Bu "cari rəngi" yeniləyir (qırmızı, yaşıl və mavi dəyərlər xətti şəkildə müstəqil olaraq dəyişir, aşağı və ya yuxarı ucuna çatana qədər xətti dəyişmə sürəti təsadüfi bir rəqəmə təyin olunur), basılan notların sürətini yavaşca azaldır və rəngini dəyişdirmək məcburiyyətində olan hər bir LED -in rəng dəyərlərini yeniləyir (yeni nota vurulması və ya sürətin azalması səbəbindən). ShowLedArray funksiyası rəngləri "piksellər" adlanan Adafruit_NeoPixel quruluşuna köçürür və faktiki LED -lərin piksel strukturundakı rəngləri göstərməsini təmin edir.

Addım 5: Mümkün Gücləndirmələr…

Bir layihə heç vaxt bitmir. Bunu yaxşılaşdırmaq üçün hər zaman edilə biləcək bir şey var:

  • Protoxield o qədər az hissədən ibarətdir ki, bu, həqiqətən də tullantıdır; Eyni təsiri bir Arduino Nano və 15x7 delikli PCB və bəzi qadın pin başlıqları ilə asanlıqla əldə etmək olar.
  • MIDI siqnallarından bəziləri itir. NoteOn varsa, müvafiq LED yanmayacaq; bir NoteOff varsa, sönməyəcək (buna görə də LED -lərin sonsuza qədər qalmamasını təmin edən sürət azalmasını tətbiq etdim). Hələ də səbəbini anlamağa çalışıram. Bəlkə də bir zamanlama problemidir və MIDI.read () daha tez -tez çağrılmalıdır.
  • MIDI siqnallarından bəziləri səhv oxunur, yəni yanlış LEDlər yanır. Yuxarıdakı nöqtə ilə əlaqələndirilə bilər. Bir az araşdırma lazımdır.
  • Dövrə, çox istifadəçi əlaqəsi olmadan (klaviatura çalmaqdan başqa) xoş bir vizual effekt vermək üçün hazırlanmışdır. Bununla birlikdə, rənglərin dəyişdiyi maksimum sürəti dəyişdirə biləcəyiniz oxunan bir potensialiometr (Arduino analoq girişlərindən birini istifadə edərək) əlavə edə biləcəyinizi təsəvvür edə bilərdim (hazırda #define'd MAX_COLOR_CHANGE_SPEED = 20). Və ya iki NoteOn hadisəsi arasındakı ortalama vaxtı ölçün və buna uyğun olaraq MAX_COLOR_CHANGE_SPEED dəyişdirin - yavaş mahnılarda rəng daha yavaş dəyişməlidir.

Addım 6: Bitti

Arduino -nu USB kabeli ilə gücləndirin (USB divar ziyalı istifadə edirəm). MIDI klaviaturanızı MIDI yuvasına qoşun və sürüşməyə başlayın. Bir az yüngül musiqi çalmağımı izləyin (söz, nə qədər pis olsa da, nəzərdə tutulmuşdur).

Tövsiyə: