산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

32밴드 아두이노 오디오 스펙트럼 아날라이저 – 리니어 & 유사 로그 디스플레이

부품 및 소모품

Arduino Nano R3×1
저항 10kΩ×1
저항 100kΩ×2
저항 4.75kΩ×3
점퍼 와이어 (범용)×1
브레드보드 (범용)×1
USB-A to Mini-USB 케이블×1
택타일 스위치 (톱 액추에이티드)×1
수 헤더 36핀 1열 (0.1")×1

도구 및 장비

납땜 인두 (범용)

소프트웨어 및 온라인 서비스

Arduino IDE

프로젝트 소개

아두이노 기반 오디오 전자공학 첫 도전작입니다. 샤집의 오디오 비주얼라이저에서 영감을 받아, 32밴드 리니어 모드와 11밴드 유사 로그 모드를 디스플레이에 추가했습니다. 엑셀로 커스텀 로그 매핑 테이블을 만들고 펌웨어에 통합해 더 정확한 주파수 응답을 구현했습니다.

택타일 버튼으로 두 디스플레이 모드 간 빠른 전환이 가능해 공연이나 실험 중 편리합니다.

펌웨어나 하드웨어를 자유롭게 수정해 자신만의 크리에이티브 프로젝트에 활용하세요.

소스 코드

32_Band_LED_Spectrum_Analyzer-009.ino


// Christian Suryanto 수정 코드, 원본 (c) 2019 Shajeeb TM // HAZI TECH
#include <arduinoFFT.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <EEPROM.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define SAMPLES 64
#define MAX_DEVICES 4
#define xres 32
#define yres 8
#define PREV 0xFF02FD
#define NEXT 0xFFC23D
#define PWR 0xFFA25D

int audio_response = 35;
double vReal[SAMPLES];
double vImag[SAMPLES];
char data_avgs[xres];
int yvalue;
int displaycolumn, displayvalue;
int peaks[xres];
const int buttonPin = 6;
int state = HIGH;
int previousState = LOW;
int displaymode;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
int MY_ARRAY[] = {0, 128, 192, 224, 240, 248, 252, 254, 255};
bool EQ_ON = true;
byte eq1[32] = {40, 45, 50, 60, 65, 70, 75, 95, 110, 110, 110, 110, 110, 110, 110, 110, 130, 130, 130, 130, 130, 130, 130, 130, 145, 155, 170, 180, 215, 220, 245, 255};
byte eq2[11] = {40, 70, 75, 110, 110, 140, 145, 220, 220, 230, 250};

MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
arduinoFFT FFT = arduinoFFT();

void setup() {
  EEPROM.update(1,1);
  displaymode = EEPROM.read(1);
  ADCSRA = 0b11100101;
  ADMUX = 0b00000000;
  pinMode(buttonPin, INPUT);
  mx.begin();
  mx.control(MD_MAX72XX::INTENSITY, 0);
  delay(50);
}

void loop() {
  int numData;
  double rSum;
  
  // ADC 샘플링
  for(int i=0; i peaks[i]) peaks[i] = yvalue;
    yvalue = peaks[i];
    displayvalue = MY_ARRAY[yvalue];
    
    if (displaymode==1) {
      displaycolumn = 31-i;
      mx.setColumn(displaycolumn, displayvalue);
    } else {
      displaycolumn = 31-(3*i);
      mx.setColumn(displaycolumn-1, displayvalue);
      mx.setColumn(displaycolumn, displayvalue);
    }
  }
  displayModeChange();
}

void displayModeChange() {
  int reading = digitalRead(buttonPin);
  if (reading == HIGH && previousState == LOW && millis() - lastDebounceTime > debounceDelay) {
    if (displaymode==1) {
      displaymode = 2;
      mx.clear(); delay(200);
      EEPROM.update(1,2);
    } else {
      displaymode = 1;
      mx.clear(); delay(200);
      EEPROM.update(1,1);
    }
    lastDebounceTime = millis();
  }
  previousState = reading;
}

회로도

32밴드 아두이노 오디오 스펙트럼 아날라이저 – 리니어 & 유사 로그 디스플레이

제조공정

  1. 스마트 식물 갈증 알림기 – DIY 토양 수분 센서로 최적의 수분 관리
  2. 이탈리안 워드 클럭(Word Clock) 제작: 아두이노 나노 + 네오픽셀 + LCD + RTC
  3. 아두이노 핀 절약: 4x3 키패드를 단 3개 연결으로 사용하기
  4. 아두이노 MKR Fox 1200으로 신뢰성 높은 시그폭스 kWh 미터 만들기
  5. 블루투스 온도 모니터: 아두이노 나노와 NTC 서미스터로 구현
  6. DIY 오토레인지 정전용량 측정기 (10pF~10µF) – 간단한 Arduino 제작
  7. 터치프리 제스처 잠금장치: APDS-9960과 아두이노로 보안 액세스 구현
  8. 아두이노 나노 컴패니언 키트 – DIY 전자 작업을 위한 필수 부품 및 도구
  9. 아두이노용 절연 아날로그 입력 회로 만들기
  10. 아두이노 우노로 정밀 반응 속도 테스터 만들기