Tổng Hợp

Hướng dẫn chế tạo led nháy theo nhạc

5

/

5

(

3

bình chọn

)

Hôm nay espitek xin quay trở lại giới thiệu với các bạn một món mới ? . Để tiêu khiển khi làm việc, học tập thì tất cả chúng ta thường sẽ nghe nhạc đúng không? Vậy kèm theo chút led nháy theo nhạc sẽ giúp ca khúc, âm điệu thêm phần sinh động hơn phải không!

Led nháy theo nhạc sử dụng cảm ứng Max9814

Xem thêm video dùng thử:


Yêu cầu phải có để DIY led nháy theo nhạc

Hardware:

  1. Bảng led ma trận: 32×16 (p5 thì phải ? ) mình đang xài loại HUB75

Bảng led ma trận 32×16 HUB75

2. Module nhận dạng tiếng động Max981

Nhận diện âm thanh để tạo led nháy theo nhạcNhận diện tiếng động Max981

Kết nối chân OUT với chân 34 của ESP32 (tùy chọn)

3. MCU: ESP32 (mình sẵn có dùng luôn). Nếu các bạn chưa biết cách sử dụng esp32 trên arduino thì có thể tham khảo chuỗi nội dung về lập trình esp32.

4. Board mạch sử dụng ESP32 quét led ma trận

Về nguyên lý để quét led nháy theo nhạc tất cả chúng ta sẽ dùng các chân GPIO của ESP32 và thông qua 2 IC dịch 74HC để đẩy dữ liệu từ ESP sang Hub75.

Sơ đồ mạch ESP32 dùng để quét led ma trậnSơ đồ mạch ESP32 dùng để quét led ma trận


Code hướng dẫn

#includevàlt;MegunoLink.hvàgt;
#includevàlt;Filter.hvàgt;

#include "ESP32-RGBMatrixPanel-GRAB.h"
RGB64x32MatrixPanel_I2S_DMA matrix(32, 16);

#define NOISE 550 // 550
#define MIC_PIN 34
#define led 22





int lvl = 0; // tweak the min and max as needed
ExponentialFiltervàlt;longvàgt; ADCFilter(5,0);

void setup() {
  // put your setup code here, to run once:
  //
  Serial.begin(115200);
  //pinMode(Red, OUTPUT);
  
  matrix.begin();
  matrix.fillScreen(0);
  matrix.setPanelBrightness(20);
    

  for(int k =31; kvàgt;= 0 ;k--) {
      for(int h = 15; h >= 0 ;h--) {
        matrix.drawPixel(k,h,LED_RED_HIGH);
        
      }
    }
    digitalWrite(led, 1);
    delay(1000);
    matrix.fillScreen(0);
    pinMode(led, OUTPUT);
    digitalWrite(led, 0);
    Serial.print("SETUP");
}

void loop() {
  // put your main code here, to run repeatedly:
  int n, heightx;
  n = analogRead(MIC_PIN);
  // remove the MX9614 bias of 1.25VDC
  n = abs(1023 - n); //1023
  // hard limit noise/hum
  n = (n <= NOISE) ? 0 : abs(n - NOISE);
  // apply the exponential filter to smooth the raw signal
  ADCFilter.Filter(n);
  lvl = ADCFilter.Current();


  int ySpec = map(lvl,0,140,0,15);

// *************** LED MATRIX *******************
        
        int led31 = random(ySpec);
        lightcolumns(31, ySpec+ led31);
        lightcolumns(30, ySpec+ led31);
        lightcolumns(29, 0);

        int led28 = random(ySpec);
        lightcolumns(28, ySpec+ led28);
        lightcolumns(27, ySpec+ led28);
        lightcolumns(26, 0);


        int led25 = random(ySpec);
        lightcolumns(25, ySpec + led25);
        lightcolumns(24, ySpec+ led25);
        lightcolumns(23, 0);

        int led22 = random(ySpec);
        lightcolumns(22, ySpec+ led22);
        lightcolumns(21, ySpec+ led22);
        lightcolumns(20, 0);

        int led19 = random(ySpec);
        lightcolumns(19, ySpec+ led19);
        lightcolumns(18, ySpec+ led19);
        lightcolumns(17, 0);

        int led16 = random(ySpec);
        lightcolumns(16, ySpec+ led16);
        lightcolumns(15, ySpec+ led16);
        lightcolumns(14, 0);

        int led13 = random(ySpec);
        lightcolumns(13, ySpec+ led13);
        lightcolumns(12, ySpec+ led13);
        lightcolumns(11, 0);

        int led10 = random(ySpec);
        lightcolumns(10, ySpec+ led10);
        lightcolumns(9, ySpec+ led10);
        lightcolumns(8, 0);

        int led7 = random(ySpec);
        lightcolumns(7, ySpec+ led7);
        lightcolumns(6, ySpec+ led7);
        lightcolumns(5, 0);

        int led4 = random(ySpec);
        lightcolumns(4, ySpec+ led4);
        lightcolumns(3, ySpec+ led4);
        lightcolumns(2, 0);

        int led1 = random(ySpec);
        lightcolumns(1, ySpec+ led1);
        lightcolumns(0, ySpec+ led1);
      //delay(10);
}

void lightcolumns(int rownum, int amplitude)
{
  if(amplitude >=12)  // <-O-> set the threshold for the band to turn red
  {
      for( int y = 0; y < 2; y++){
        matrix.drawPixel(rownum, y, matrix.Color333(0, 0, 7));     // red-green
      }
      for( int y = 2; y <= 12; y++){
        matrix.drawPixel(rownum, y, matrix.Color333(0, 5, 0));     // red-green
      }
      
      
      for(int y = amplitude; y <16; y++)
      {
        matrix.drawPixel(rownum, y, matrix.Color333(0, 0, 0));  
      }
      //matrix.drawPixel(rownum, amplitude+2, matrix.Color333(7, 7, 7));
  }
  
  else if(amplitudevàgt;9 && amplitude < 12 ) // <-O-> set the threshold for the band to turn yellow
  {
      for( int y = 0; y < 2; y++){
        matrix.drawPixel(rownum, y, matrix.Color333(0, 0, 7));     // red-green
      }
      for( int y = 2; y < amplitude; y++){
        matrix.drawPixel(rownum, y, matrix.Color333(0, 5, 0));     // red-green
      }
      
      for(int y = amplitude; y < 16; y++)
      {
        matrix.drawPixel(rownum, y, matrix.Color333(0, 0, 0));  
      }
      //matrix.drawPixel(rownum, amplitude+2, matrix.Color333(7, 7, 7));
  }
  
  else if(amplitudevàgt;2 && amplitude < 9) // <-O-> set the threshold for the band to turn green
  {
      for( int y = 0; y < 2; y++){
        matrix.drawPixel(rownum, y, matrix.Color333(0, 0, 7));     // red-green
      }
      for( int y = 2; y < amplitude; y++){
        matrix.drawPixel(rownum, y, matrix.Color333(0, 5, 0));
      }
      for(int y = amplitude; y < 16; y++)
      {
        matrix.drawPixel(rownum, y, matrix.Color333(0, 0, 0));  
      }
      //matrix.drawPixel(rownum, amplitude+2, matrix.Color333(7, 7, 7));
  } 
  
  else if(amplitude != 0)
  {
      for( int y = 0; y < 2; y++){
        matrix.drawPixel(rownum, y, matrix.Color333(0, 0, 7));     // red-green
      }
      for(int y = amplitude; y < 16; y++)
      {
        matrix.drawPixel(rownum, y, matrix.Color333(0, 0, 0));  
      }
  } 

  if(amplitude >0 & amplitude < 16){
    matrix.drawPixel(rownum, amplitude+2, matrix.Color333(7, 7, 7));

    delay(2);
  }
  
  
}


Giải thích code led:

Thêm thư viện Megunolink và FilterThêm thư viện Megunolink và Filter

Xem Thêm :   Đây Là Thần Chú Cực Kỳ Uy Lực Bảo Vệ Gia Đình Tránh Mọi T.ai Ư.ơng – HT. Thích Trí Quảng

Thêm thư viện vào giúp đọc các thông số kỹ thuật từ cảm ứng tiếng động Max981 tốt hơn.

Thêm thư viện giúp ESP32 quét led tốt hơn, sử dụng DMA để quét vận tốc cao hơn

Sử dụng tín hiệu cường độ tiếng động vào từ cảm ứng Max981 để làm đầu ra cho việc hiển thị led nháy theo nhạc đẹp. Tùy vào sở thích, mục đích của mỗi bạn điều chỉnh code cho thích hợp và đẹp mắt hơn!


Hướng mở rộng

Trong bài hướng dẫn này, Espitek sử dụng bảng led loại HUB75, và module esp32 quét led được thiết kế sẵn và tách biệt nên rất khó để các bạn có thể tìm thấy trên thị trường.

Vì thế mục đích bài này là giới thiệu công nghệ tiêu khiển, và gợi mở hướng dẫn cho các bạn có muốn DIY góc làm việc, học tập trở nên cá tính hơn.

Ngoài ra các bạn có thể tìm hiểu thêm các module led WS2812 và arduino. Có rất nhiều hướng dẫn tạo led nháy theo nhạc sinh động và đơn giản hơn nhiều.

Các hướng mở rộng có thể vận dụng:

  • Tạo module tiếng động không dây gửi về ESP32 quét led để giúp đặt thiết bị thu âm nhạc bất kỳ đâu trong phòng, quán cafe,…
  • Mở rộng bảng led để “CHILL” hơn
  • Nhận dạng giọng nói, tiếng động để trổ tài thông điệp lên bảng led: ví dụ sai bảo thì sẽ hiển thị nội dung lên bảng led,…

Xem Thêm :   HT.Thích Trí Quảng Vượt Qua Tai Nạn Nhờ 4 Điều Này (Cực Hay)

Chúc các bạn thành công!

Xem thêm bài viết thuộc chuyên mục: Kĩ Năng Sống

Xem thêm bài viết thuộc chuyên mục: Tổng Hợp
Xem thêm :  Kiếm hiệp dị giới thể loại game mới được kiếm ma 3d xây dựng có đủ sức chinh phục game thủ việt?

Related Articles

Back to top button