Mục lục:
Video: MÁY PHÂN TÍCH SPECTRUM CRAZY L.O.L: 6 bước (có hình ảnh)
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Hôm nay tôi muốn chia sẻ cách tạo một bộ phân tích phổ âm thanh - 36 băng tần bằng cách kết hợp 4 LoL Shields với nhau. Dự án điên rồ này sử dụng thư viện FFT để phân tích tín hiệu âm thanh nổi, chuyển đổi nó thành các dải tần và hiển thị biên độ của các dải tần này trên 4 x LoL Shields.
Trước khi bắt đầu, vui lòng xem video dưới đây:
Bước 1: NHỮNG ĐIỀU CHÚNG TÔI CẦN
Các thành phần điện tử chính như sau:
- 4 cái x Arduino Uno R3.
- 4 cái x LoLShield PCB. PCBWay (Dịch vụ nguyên mẫu PCB tùy chỉnh đầy đủ tính năng) đã hỗ trợ tôi các bảng mạch in LoLShield này.
- 504pcs x LED, 3mm. Mỗi LoLShield cần 126 đèn LED và chúng ta có thể chọn 4 màu & loại đèn LED khác nhau (khuếch tán hoặc không khuếch tán).
- 1 cái x Bộ sạc di động Pin dự phòng 10000 / 20000mAh.
- 4 cái x Đầu đực 40 chân 2,54mm.
- 2 cái x cáp USB Loại A / B. Một cái được sử dụng để lập trình Arduino, cái còn lại dùng để cấp nguồn cho Arduino từ bộ dự trữ năng lượng.
- 1 cái x 3,5 mm Giắc cắm âm thanh nổi nữ.
- 1 cái x 3,5 mm 1 Bộ điều hợp Bộ tách âm thanh Nam đến 2 Nữ hoặc Bộ chia âm thanh nhiều tai nghe.
- 1 cái x 3,5 mm Giắc cắm âm thanh stereo Cáp kết nối Nam-Nam.
- Cáp ruy băng cầu vồng 1m x 8P.
- 1m x Cáp điện hai lõi.
- 1 cái x Acrylic trong suốt, kích thước A4.
Bước 2: SCHEMATIC
LoLShield là ma trận LED hiển thị biểu đồ 9x14 cho Arduino và thiết kế này KHÔNG bao gồm bất kỳ điện trở hạn chế dòng điện nào. Các đèn LED có thể định địa chỉ riêng lẻ, vì vậy chúng ta có thể sử dụng nó để hiển thị thông tin trong ma trận led 9 × 14.
LoL Shield để lại các chân D0 (Rx), D1 (Tx) và các chân analog A0 đến A5 miễn phí cho các ứng dụng khác. Hình ảnh bên dưới cho thấy việc sử dụng các chân Arduino Uno cho dự án này:
Máy phân tích phổ âm thanh của tôi có 4 x (Arduino Uno + LoLShield). Nguồn điện và giắc cắm âm thanh nổi 3,5 mm được kết nối như sơ đồ dưới đây:
Bước 3: LOL SHIELD PCB & LED SOLDERING
1. LoL SHIELD PCB
Ѽ. Bạn có thể tham khảo thiết kế PCB tại: https://github.com/jprodgers/LoLshield của Jimmie P. Rodgers.
Ѽ. PCBWay đã hỗ trợ tôi những bảng mạch in LoLShield này với giao hàng nhanh chóng và chất lượng PCB cao.
2. ĐÈN LED SOLDERING
Ѽ. Mỗi LoLShield cần 126 đèn led và tôi đã sử dụng các loại & màu sắc khác nhau cho 4x LoLShields như sau:
- 1 x LoLShield: đèn led khuếch tán, màu đỏ, 3mm.
- 1 x LoLShield: đèn led khuếch tán, màu xanh lá cây, 3mm.
- 2 x LoLShield: led không khuếch tán (rõ ràng), màu xanh lam, 3mm.
Ѽ. Chuẩn bị LoLShield PCB và LED
Ѽ. Hàn 126 LED lên LoLShield PCB. Chúng ta nên kiểm tra đèn LED bằng pin sau khi hàn mỗi hàng - 14 đèn LED
TOP LoLSHIELD
BOTTOM LoLSHIELD
Ѽ. Hoàn thành một LoLShield và tiếp tục hàn 3 LoLShield còn lại.
Bước 4: KẾT NỐI VÀ LẮP RÁP
Ѽ. Hàn cấp nguồn và tín hiệu âm thanh sang 4xLoLShield. Tín hiệu âm thanh nổi sử dụng hai kênh âm thanh: trái và phải được kết nối với Arduino Uno tại các chân analog A4 & A5.
- A4: Kênh âm thanh bên trái.
- A5: Kênh âm thanh bên phải.
Ѽ. Căn chỉnh và gắn 4 x Arduino Uno trên tấm acrylic.
Ѽ. Cắm 4 x LoLShield vào 4 x Arduino Uno.
Ѽ. Keo sạc dự phòng di động và giắc cắm âm thanh trên tấm acrylic
Ѽ. Xong!
Bước 5: LẬP TRÌNH
Bạn nên tham khảo cách hoạt động của LoLShield dựa trên phương pháp Charlieplexing và Fast Fourier Transform (FFT) tại:
en.wikipedia.org/wiki/Charlieplexing
github.com/kosme/fix_fft
Đối với Charlieplexing, chúng tôi chú ý đến "ba trạng thái" của các chân kỹ thuật số Arduino: "HIGH" (5V), "LOW" (0V) và "INPUT". Chế độ "INPUT" đặt chân Arduino ở trạng thái trở kháng cao. Tham khảo tại:
www.arduino.cc/en/Tutorial/DigitalPins
Trong dự án của tôi, các dải tần âm thanh được hiển thị trên 4 x LoL Shield và chúng được mô tả như hình dưới đây:
Mỗi Arduino đọc tín hiệu âm thanh ở kênh trái / phải và thực hiện FFT.
for (i = 0; i <64; i ++) {Audio_Input = analogRead (RIGHT_CHANNEL); // Đọc tín hiệu âm thanh ở kênh bên phải A5 - ARDUINO 1 & 2 // Audio_Input = analogRead (LEFT_CHANNEL); // Đọc tín hiệu âm thanh ở kênh bên trái A4 - ARDUINO 3 & 4 Real_Number = Audio_Input; Imaginary_Number = 0; } fix_fft (Số_thực_số,_số_thực_phẩm, 6, 0); // Thực hiện Biến đổi Fourier Nhanh với N_WAVE = 6 (2 ^ 6 = 64) for (i = 0; i <32; i ++) {Real_Number = 2 * sqrt (Real_Number * Real_Number + Imaginary_Number * Imaginary_Number ); }
Ѽ. Arduino 1 - Hiển thị các dải tần số biên độ 01 ~ 09 của kênh bên phải (A5).
for (int x = 0; x <14; x ++) {for (int y = 0; y <9; y ++) {if (x <Real_Number [y]) // Hiển thị các dải tần từ 01 đến 09 {LedSign:: Set (13-x, 8-y, 1); // LED ON} else {LedSign:: Set (13-x, 8-y, 0); // DẪN RA } } }
Ѽ. Arduino 2 - Hiển thị dải tần số biên độ 10 ~ 18 của kênh bên phải (A5).
for (int x = 0; x <14; x ++) {for (int y = 0; y <9; y ++) {if (x <Real_Number [9 + y]) // Hiển thị các dải tần từ 10 đến 18 {LedSign:: Đặt (13-x, 8-y, 1); // LED ON} else {LedSign:: Set (13-x, 8-y, 0); // DẪN RA } } }
Ѽ. Arduino 3 - Hiển thị các dải tần số biên độ 01 ~ 09 của kênh bên trái (A4).
Mã này giống như Arduino 1 và kênh bên trái của tín hiệu âm thanh kết nối với Arduino tại chân analog A4.
Ѽ. Arduino 4 - Hiển thị dải tần số biên độ 10 ~ 18 của kênh bên trái.
Mã này giống như Arduino 2 và kênh bên trái của tín hiệu âm thanh kết nối với Arduino ở chân analog A4.
Bước 6: KẾT THÚC
Máy phân tích quang phổ di động này có thể kết nối trực tiếp với máy tính xách tay / máy tính để bàn, điện thoại di động, máy tính bảng hoặc các máy nghe nhạc khác thông qua giắc cắm âm thanh stereo 3,5 mm. Dự án này có vẻ điên rồ, tôi hy vọng bạn thích nó!
Cảm ơn bạn đã đọc !!!