Kabel Patch Stereo Audio 3.5mm Jantan ke Jantan 6 Kaki – 1 unit
Alat dan Mesin yang Diperlukan
Bor / Obeng Nirkabel
Tentang Proyek Ini
Dalam artikel ini, saya menjelaskan cara membuat visualizer audio matriks LED RGB, menggunakan Arduino, RGB LED Matrix Shield, dan Audio Spectrum Analyzer Shield, lalu menempatkannya dalam kotak pelindung sehingga Anda dapat memiliki proyek selesai yang dapat Anda tampilkan di sisi sistem musik Anda untuk panggilan cahaya indah dari musik Anda!
Untuk Analisis Spektrum Audio, saya menggunakan Spectrum Shield SparkFun, yang menggunakan dua filter tampilan equalizer grafis MSGEQ7, yang memisahkan masukan audio stereo menjadi 7 band (per saluran) dan membaca amplitudo masing-masing menggunakan ADC pada Arduino Anda. Ini datang dengan sketsa contoh Arduino untuk memulai.
Untuk Matriks LED RGB, saya menggunakan NeoPixel Shield untuk Arduino Adafruit, yang terdiri dari 40 NeoPixels RGB (terminologi Adafruit untuk sumber cahaya WS2812 mereka). LED merah, hijau, dan biru terintegrasi bersama dengan chip driver dalam paket permukaan kecil yang dikontrol melalui satu kabel. Mereka dapat digunakan secara individu, dirantai menjadi rantai yang lebih panjang, atau dirangkentuk bentuk-bentuk yang lebih menarik. Dalam kasus Shield, mereka dirantai bersama. Shield juga datang dengan pustaka Adafruit_NeoMatrix, yang menyederhanakan akses ke Matriks LED RGB dan mengontrol LED.
Terakhir datang kotak pelindung. Beberapa dari Anda mungkin tahu bahwa saya telah membuat sistem kotak pelindung modular yang dapat ditumpuk baru yang disebut ProtoStax. Ini adalah gatal pribadi yang harus saya gores - saya ingin kotak pelindung yang mendukung berbagai tahap prototyping, menawarkan perlindungan dan akses terbuka saat memulai, dengan kemampuan untuk menambahkan dinding sisi dan atas nanti, tetapi juga memiliki kemampuan untuk menumpuk beberapa unit berdampingan atau satu di atas yang lain, sehingga memiliki kemampuan untuk berekspansi dengan kebutuhan prototyping dan penambahan papan serta komponen lainnya.
Dalam contoh ini saya menggunakan ProtoStax untuk Arduino, kotak pelindung akrilik jernih untuk Arduino -- yang cocok dengan jejak Uno/Leonardo serta jejak Mega/Due yang lebih besar -- yang juga dapat ditumpuk dan modular dan memiliki ruang nyaman untuk kedua Shield (dengan beberapa modifikasi kecil, yang akan saya garis besar). Ini jernih dan kokoh dan juga memiliki karet kaki untuk sedikit mengangkatnya dan melindungi permukaan meja Anda, sehingga Anda dapat menampilkan Visualizer Audio dan panggilan cahayanya bersama dengan sistem musik Anda! 😊
Oke, mari kita mulai, ya? 😊
Langkah 1 - Pasang Arduino pada Papan Dasar Kotak Pelindung
Mari kita pasang terlebih dahulu Arduino (Uno dalam contoh kita) ke papan dasar kotak pelindung. Ini memberikan perlindungannya sambil menawarkan akses terbuka penuh untuk mengonfigurasi dan memasang Arduino dan bermain-main dengannya. Ketika Anda siap menutupnya, mudah untuk menambahkan dinding sisi dan papan atas dan mengamankan semuanya dengan sekrup.
Pasang Arduino ke papan dasar, dan tambahkan kaki serta hardware lainnya untuk menyiapkan kotak pelindung dalam Platform Configuration. Lihat langkah-langkah di bawah ini dalam slideshow - keterangan untuk setiap gambar dinomori dan memberikan penjelasan tambahan untuk setiap langkah.
Ini adalah semua langkah sebagai gif animasi:
Langkah 2 - Siapkan SparkFun Spectrum Shield untuk Arduino
SparkFun Spectrum Shield tidak datang dengan header. Untungnya bagi kami, NeoPixel Shield untuk Arduino Adafruit datang dengan header tumpukan dan header biasa. Karena saya ingin NeoPixel Shield berada di atas, saya ingin menggunakan header biasa dengan itu sehingga itu akan rata, dan ini meninggalkan header tumpukan untuk digunakan dengan Spectrum Shield, yang tepat apa yang saya inginkan! 😉
Namun, Spectrum Shield dengan header tumpukan tidak pas rapat - port USB dan Daya pada Arduino Uno menghalangnya, seperti yang ditunjukkan dalam gambar di bawah ini.
Saya membuat dua modifikasi berikut:
Potong ujung Spectrum Shield di atas port USB dan Daya (bagian tersebut memiliki area prototyping, yang tidak digunakan. Bahkan jika Anda menggunakannya, Anda akhirnya hanya akan memotong satu baris lubang) Ini membuat Spectrum Shield duduk rapat pada Arduino.
Kaki header tumpukan mungkin masih terlalu panjang agar Spectrum Shield duduk rapat. Saya memotong kaki header tumpukan sedikit untuk membuat Spectrum Shield duduk rapat pada Arduino dengan header tumpukan.
Sekarang pas rapat!
Langkah 3 - Masukkan NeoPixel Shield untuk Arduino ke dalam header tumpukan Spectrum Shield
NeoPixel Shield Adafruit diletakkan di atas Spectrum Shield. Anda pertama-tama perlu menempelkan header biasa (yang datang dengan itu). Saya juga menempelkan konektor terminal yang datang dengan itu, meskipun dalam contoh ini, saya memberinya daya menggunakan Arduino, karena semua LED tidak akan menyala secara bersamaan, jadi konsumsi daya dalam jumlah yang dapat disediakan oleh Arduino.
Pesan dari halaman NeoPixel Shield untuk Arduino Adafruit:
Langkah 4 - Kode Demo
Mari kita lihat Kode Demo dan lihat apa yang sedang dilakukan. Untuk itu, kita dapat membaginya menjadi dua bagian utama:
Analisis Spektrum dan penyimpanan hasil
Menerjemahkannya menjadi skema tampilan/warna untuk Matriks NeoPixel 8x5.
Anda dapat dengan cepat merujuk ke kode demo di sini:
Anda dapat merujuk ke Panduan Pemasangan Spectrum Shield untuk informasi tambahan mengenai Spectrum Shield. Saya telah merangkum informasi di sini.
Dengan menulis urutan digital ke pin STROBE dan RESET dari Spectrum Shield, Anda menginisialisasi chip MSGEQ7 yang digunakan oleh Shield. Anda kemudian dapat melanjutkan untuk membaca magnitudo setiap 7 band frekuensi yang dibagi oleh spektrum. Setiap band dibaca diikuti oleh penggenangan pin STROBE untuk memulai pembacaan band berikutnya. Nilai-nilai disimpan dalam Frequencies_One[7] dan Frequencies_Two[7] untuk dua saluran masukan stereo. Nilai-nilai dibaca menggunakan ADC 10-bit Arduino, dan nilai output dapat menjadi 0 - 1023 - mereka memberikan representasi amplitudo setiap band frekuensi.
Saya membaginya menjadi 3 rentang - BASS, MID_RANGE dan TREBLE. Rentang Bass biasanya 60 hingga 250 Hz, jadi dua band pertama berada dalam rentang BASS. Frekuensi menengah biasanya 500 Hz hingga 2 kHz, jadi saya mengelompokkan 3 band berikutnya ke dalam MID_RANGE. Saya mengelompokkan 2 band sisa ke dalam TREBLE.
[Catatan: Saya juga mencatat pembacaan maksimum setiap band ke dalam variabel terpisah. Ini mungkin dapat digunakan untuk menskalakan pembacaan secara otomatis ke level yang direpresentasikan oleh kolom matriks RGB - ini berguna dalam kasus di mana sinyal masukan rendah - jika tidak hanya sangat sedikit matriks RGB yang akan menyala dalam kasus tersebut. ]
Matriks RGB
Anda dapat merujuk ke NeoPixel Überguide Adafruit untuk informasi tambahan mengenai NeoPixel Shield dan NeoPixels secara umum. Saya telah merangkum informasi yang berkaitan dengan penggunaan kami di sini.
Poin utama yang akan saya coba jelaskan, yang saya temukan sedikit membingungkan pada awalnya, adalah arah dan orientasi NeoPixel Shield dan penomoran sistem koordinat. Überguide menjelaskannya, tetapi saya pikir saya dapat membuatnya sedikit lebih mudah.
Pertama perlu diperhatikan bahwa dalam sistem koordinat, [0, 0] SELALU merujuk ke kiri atas, terlepas dari orientasi.
Selanjutnya perlu diperhatikan LEBAR, diikuti TINGGI, dari orientasi mana pun yang Anda minati (misalnya 5 x 8 vs 8 x 5 dalam kasus Shield kami)
Ketiga perlu diperhatikan posisi LED FISIK #0 (ditandai dengan logo lucu Adafruit). KANAN ATAS, KIRI ATAS, KIRI BAWAH dan KANAN BAWAH tergantung pada kasusnya. Juga perhatikan orientasi progresi LED FISIK. Tata letak adalah PROGRESIF pada papan kami (LED fisik berikutnya setelah akhir satu baris dimulai dari awal baris berikutnya seperti yang ditunjukkan oleh garis KUNING). Orientasi progresi adalah sepanjang BARIS saat lebar lebih luas (orientasi horizontal) (seperti yang ditunjukkan oleh panah HIJAU pendek), dan KOLOM saat lebar lebih sempit (orientasi vertikal) (lagi, seperti yang ditunjukkan oleh panah HIJAU pendek).
Ini diilustrasikan oleh 4 gambar di bawah ini dalam slideshow. Keterangan menyertakan pengaturan yang relevan dalam setiap kasus!
Dalam contoh kami, kita memiliki 7 band frekuensi, dan matriks 8 x 5 (atau 5 x 8, tergantung dari arah mana Anda melihatnya!) Saya memilih untuk menampilkan 7 band sepanjang dimensi 8 (meninggalkan satu yang tidak digunakan). Saya kemudian akan menampilkan representasi amplitudo setiap band frekuensi sepanjang dimensi 5. Dengan kata lain, saya ingin progresinya sebagai berikut:
Saya ingin asalnya dimulai di sudut kiri bawah (mewakili level terendah dari band frekuensi terendah) dan bergerak ke atas. Namun karena hal pertama yang perlu diperhatikan dalam sistem koordinat adalah [0, 0] selalu merujuk ke KIRI ATAS, Anda harus memiringkan kepala ke kiri dan melihat gambar di bawah ini, untuk memahami pilihan nilai untuk menginisialisasi NeoMatrix! 😊(LEBAR = 5, TINGGI = 8, KANAN ATAS, KOLOM PROGRESIF)
Mari kita selidiki sedikit kode demo mengenai NeoMatrix dan penggrafan frekuensi. Pertama, kami telah menentukan bahwa NeoPixel kami memiliki LEBAR=5, TINGGI=8, dan orientasi yang kami sukai adalah KANAN ATAS, dan KOLOM PROGRESIF. Ikuti persiapan yang diperlukan untuk matriks dalam fungsi setup().
Dalam loop(), kami membaca masukan Serial untuk memilih skema warna - Saya telah mendefinisikan 3 skema warna yang berbeda
Saya kemudian memanggil Graph_Frequencies dengan pilihan skema warna tersebut. Perhatikan juga parameter pertama yang dapat memilih rentang frekuensi yang ditampilkan (BASS, MID-RANGE atau TREBLE)
enum RANGE { BASS = 0, MID_RANGE = 1, TREBLE = 2, ALL = 3 };
Untuk saat ini, saya memilih semua rentang untuk ditampilkan - ini ditinggalkan sebagai latihan bagi pembaca untuk mengimplementasikan pilihan rentang yang ditampilkan - baik melalui masukan Serial atau dengan menambahkan tombol tekan sementara untuk berganti tampilan antara BASS, MID_RANGE, TREBLE atau ALL. Pemilihan RANGE menentukan rentang "dari" dan "ke" baris yang akan ditampilkan.
Untuk setiap baris (band frekuensi), kami memilih yang lebih besar dari dua magnitudo frekuensi (saluran kanan dan kiri masukan stereo). Nilai itu berada antara 0 dan 1023 seperti yang sudah kita bahas. Kita perlu memetakan itu menjadi 5 kolom berbeda tampilan, jadi kita bagi frekuensi dengan FREQ_DIV_FACTOR yang didefinisikan sebagai 204 (1023/204 = 5, yang akan memetakan output 1023 menjadi 5). Untuk berjaga-jaga, kita juga memastikan numCol yang ditampilkan tidak lebih besar dari 5. Ini menentukan jumlah kolom yang ditampilkan untuk setiap band frekuensi.
Saya kemudian menggunakan matrix.drawPixel() untuk menampilkan piksel yang sesuai pada warna yang sesuai.
Saya menggunakan roda warna HSV dalam tampilan grafis saya. Ini menimbulkan beberapa kerumitan tambahan untuk diatasi.
Biasanya, penggunaan adalah matrix.drawPixel(column, row, Color(r, g, b)), di mana Color(r, g, b) mewakili warna yang ditentukan oleh nilai MERAH, HIJAU dan BIRU. Namun, menggunakan HSV memungkinkan transisi warna yang halus.
NeoMatrix menyediakan metode matrix.ColorHSV(uint16_t hue) yang mengambil satu nilai uint16_t hue dan mengembalikan warna HSV uint32_t.
Namun matrix.Color(r, g, b) mengembalikan warna uint16_t. matrix.drawPixel juga mengharapkan warna 16 bit.
Cara mengatasi ini adalah dengan menggunakan matrix.setPassThruColor(nilai warna 32 bit). Ini mengatur flag di matrix yang menyebabkan drawPixel mengabaikan argumen warnanya dan sebagai berikutnya menggunakan warna 32 bit yang sudah diatur oleh metode di atas. Ingatlah untuk memanggil matrix.setPassThruColor() untuk mereset flag yang bersangkutan. Sangat elegan, tapi berhasil. Contohnya:
static uint16_t hue = 0; //21845 22250 to -250 uint16_t hueDelta = 200; hue += hueDelta; ... rgbcolor = matrix.ColorHSV(hue); ... matrix.setPassThruColor(rgbcolor); matrix.drawPixel(col, row, (uint16_t)0); // warna tidak penting di sini matrix.setPassThruColor(); ... matrix.show();
Dengan HSV, mungkin untuk meningkatkan hue 16 bit dan menghasilkan kode warna HSV, sehingga mendapatkan transisi warna yang halus.
Berikut adalah berbagai potongan kode untuk referensi:
#define NEO_MATRIX_WIDTH 5 #define NEO_MATRIX_HEIGHT 8 #define NEOPIXEL_PIN 6 // Shield maps it to pin 6 Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(NEO_MATRIX_WIDTH, NEO_MATRIX_HEIGHT, NEOPIXEL_PIN, NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE, NEO_GRB + NEO_KHZ800); .... void setup() { ... matrix.begin(); matrix.setTextWrap(false); matrix.setBrightness(40); matrix.fillScreen(0); matrix.show(); ... } void loop() { static int scheme = 0; while (Serial.available() > 0) { scheme = Serial.parseInt(); } ... Graph_Frequencies(ALL, scheme); ... delay(50); } void Graph_Frequencies(CHANNEL c, SCHEME s){ ... for( row= from; row<to; row++) { int freq = (Frequencies_Two[row] > Frequencies_One[row])?Frequencies_Two[row]:Frequencies_One[row]; int numCol = (freq/FREQ_DIV_FACTOR); if (numCol > 5) numCol = 5; for (int col = 0 ; col < numCol ; col++) { ... // pilih skema warna untuk ditampilkan matrix.setPassThruColor(rgbcolor); matrix.drawPixel(col, row, (uint16_t)0); // warna tidak penting di sini matrix.setPassThruColor(); //matrix.show(); } matrix.show(); } }
Selanjutnya adalah pemilihan skema warna. Perhatikan bahwa saya telah membuat ketentuan untuk dapat memilih warna untuk rentang frekuensi yang berbeda (bassHue, midHue, trebleHue). Saya telah membuat 3 skema warna yang berbeda - satu yang menggunakan hijau ke merah/pink untuk tampilan dari amplitudo terendah ke tertinggi, dan yang lainnya yang menggunakan rentang lebih pink/blue yang berubah. Skema ke-3 menggunakan warna yang sama untuk semua piksel, tetapi melalui seluruh roda warna seiring berjalannya. Saya akan menunjukkan video semua 3 skema warna.
Pasang elemen penopang atas, dinding sisi, kabel audio, dan atas. Lihat langkah-langkah di bawah ini dalam slideshow - keterangan untuk setiap gambar dinomori dan memberikan penjelasan tambahan untuk setiap langkah.
Ini adalah semua langkah dalam satu gif animasi:
Langkah 7 - Tampilkan Kreasi Anda dan Buat Musik Indah Bahkan Lebih Indah!
Anda sekarang dapat memiliki visualizer audio menyenangkan yang dapat Anda tampilkan di sisi sistem musik Anda dan memiliki efek cahaya buatan sendiri keren yang melengkapi musik Anda!
Langkah 8 - Meningkatkan Proyek Ini
Berikut adalah beberapa ide untuk membawa proyek ini lebih jauh!
1. Saat ini, kabel audio (masukan dan keluaran) dipasang ke Spectrum Shield dalam kotak pelindung, dan dengan demikian Anda memiliki kotak pelindung ini dengan kabel ini yang terhubung dan menggantung di luar. Sebaliknya, Anda dapat menambahkan beberapa jack stereo panel mount (terdapat dalam daftar "barang" yang digunakan) ke dinding sisi di dekat jack stereo Spectrum Shield, lalu colokkan kabel audio dengan jack stereo jantan 3.5mm ke masing-masing, lalu colokkan jack audio Spectrum Shield. Dalam hal ini, kotak pelindung Anda menjadi sangat rapi dan semua kabeling terkandung di dalamnya dengan hanya jack audio pada kotak pelindung untuk sistem eksternal yang akan dihubungkan.
2. Anda dapat menambahkan skema cahaya lebih banyak lagi ke Visualizer Audio Anda - rentang warna yang berbeda, pola yang berbeda.
3. Tambahkan opsi untuk mengaktifkan/menonaktifkan rentang frekuensi menggunakan masukan Serial - saat ini hanya skema warna yang dapat diubah tetapi tidak rentang frekuensi yang ditampilkan.
4. Tambahkan saklar untuk berganti antara skema warna yang berbeda alih-alih menggunakan masukan Serial. Modifikasi kotak pelindung untuk menambahkan lubang ke salah satu Dinding Sisi panjang untuk menampung saklar push button momentary panel mount (terdapat dalam daftar "barang" yang digunakan).
5. Tambahkan saklar kedua untuk berganti antara rentang frekuensi yang ditampilkan (BASS, MID_RANGE, TREBLE, ALL) dan pasang saklar tersebut ke dinding sisi kotak pelindung.
6. Karena kotak pelindang terbuat dari akrilik, Anda dapat menggunakan beberapa pita pelukis biru di atasnya untuk melindungi permukaan, dan bor untuk membuat lubang dengan ukuran yang diperlukan untuk memasang jack stereo panel mount dan/atau saklar. Direkomendasikan untuk menggunakan bor bertingkat, atau mulai dengan lubang yang lebih kecil dan kemudian lebarkan lubang sampai ukuran yang Anda inginkan. Jack stereo yang terdaftar membutuhkan lubang pemasangan 5/16", dan Saklar membutuhkan lubang pemasangan 0.47".
7. Gerus permukaan atas papan atas secara ringan dan merata. Ini akan bertindak sebagai difusor cahaya dan memberi Anda efek cahaya yang lebih difus dan lembut.
Jika ada minat yang cukup, saya akan memperbarui proyek untuk menampilkannya dengan Jack Audio dan Saklar serta atas difusor cahaya Opaque - silakan kirim pesan kepada saya jika Anda ingin melihat proyek yang diperbarui! 😊
Apakah Anda bisa memikirkan yang lainnya? Tulis komentar di bawah ini untuk memberi tahu kami! 😊 Jangan ragu untuk juga bertanya tentang pertanyaan apa pun yang mungkin Anda miliki! 😊
Selamat membuat! 😊
Kode
ProtoStax Audio Visualizer Demo
Repositori Github yang berisi kode yang digunakan dalam ProtoStax Audio Visualizer Demo ini https://github.com/protostax/ProtoStax_Audio_Visualizer_Demo