968엔으로 만든다. LED 이퀄라이저 같은 표시기
개요
소리 센서를 구입했기 때문에 시험해 보았습니다.
이 기기는 앰프도 내장되어 있기 때문에 매우 우수하다는 것 ...
조금 감상
당초, 아날로그 출력을 그대로 표시시키고 있었습니다만 생각한 것 같은 값은 나오지 않았습니다.
음성 등은 주파수가 되어 버리기 때문에 고속 푸리에 변환(fft)이라는 계산이 필요하다.
그 모듈을 이용하여 출력하고 있습니다.
부품
사운드 센서 : MAX4466
133엔
디스플레이 : MAX7219ENG가 내장된 8x8 LED
136엔
컴퓨터 : Arduino UNO 호환 기계
699엔
이용 모듈
max4466
푸리에 변환 모듈입니다.
아래 사이트에서 다운로드하여 Arduino 폴더에 복사하십시오.
ㅡㅡㅡㅡ 오무무시 ぁbs. 코m/
MAC이라면
/Users/{user name}/Documents/Arduino/libraries
max7219eng_8x8led
LED를 제어하는 모듈입니다.
Arduino Library에서 검색하여 설치
htps : // 기주 b. 코 m / 다니다 sk / 마리 → 에 d
배선
소스 코드
아래의 "fft_adc"라는 스케치 예를 거의 참고로하고 있습니다.
ㅡㅡㅡㅡ 오무무시 ぁbs. 코m/
Licence:GPL licensed
/*
fft_adc.pde
guest openmusiclabs.com 8.18.12
example sketch for testing the fft library.
it takes in data on ADC0 (Analog0) and processes them
with the fft. the data is sent out over the serial
port at 115.2kb. there is a pure data patch for
visualizing the data.
*/
#define LOG_OUT 1 // use the log output function
#define FFT_N 256 // set to 256 point fft
#include <FFT.h> // include the library
#include <MatrizLed.h>
MatrizLed pantalla;
void setup() {
// Serial.begin(115200); // use the serial port
Serial.begin(2000000); // use the serial port
TIMSK0 = 0; // turn off timer0 for lower jitter
ADCSRA = 0xe5; // set the adc to free running mode
ADMUX = 0x40; // use adc0
DIDR0 = 0x01; // turn off the digital input for adc0
pantalla.begin(12, 11, 10, 2); // dataPin, clkPin, csPin, numero de matrices de 8x8
}
char strbuf[64];
void loop() {
while(1) { // reduces jitter
cli(); // UDRE interrupt slows this way down on arduino1.0
for (int i = 0 ; i < 512 ; i += 2) { // save 256 samples
while(!(ADCSRA & 0x10)); // wait for adc to be ready
ADCSRA = 0xf5; // restart adc
byte m = ADCL; // fetch adc data
byte j = ADCH;
int k = (j << 8) | m; // form into an int
k -= 0x0200; // form into a signed int
k <<= 6; // form into a 16b signed int
fft_input[i] = k; // put real data into even bins
fft_input[i+1] = 0; // set odd bins to 0
}
fft_window(); // window the data for better frequency response
fft_reorder(); // reorder the data before doing the fft
fft_run(); // process the data in the fft
fft_mag_log(); // take the output of the fft
sei();
#if 0
Serial.write(255); // send a start byte
Serial.write(fft_log_out, 128); // send out the data
#endif
int _sum = 0;
for(int i=0;i<128;i++){
_sum+=fft_log_out[i];
}
int ave = _sum/128/3;
int cnt=0;
for(int x=0;x<8;x++){
for(int y=0;y<8;y++){
if(ave > cnt){
pantalla.setLed(0, x, y, true);
}else{
pantalla.setLed(0, x, y, false);
}
cnt++;
}
}
memset(strbuf,0,64);
memset(strbuf,'|',_sum/128/3);
Serial.print(strbuf);
Serial.print("\n");
delayMicroseconds(1);
}
}
github
동작 확인
gif 동영상으로 올려도 알기 어려웠기 때문에, Youtube에서 확인하실 수 있으면 다행입니다.
Reference
이 문제에 관하여(968엔으로 만든다. LED 이퀄라이저 같은 표시기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hashito/items/d1c94910e11d044e53bb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
당초, 아날로그 출력을 그대로 표시시키고 있었습니다만 생각한 것 같은 값은 나오지 않았습니다.
음성 등은 주파수가 되어 버리기 때문에 고속 푸리에 변환(fft)이라는 계산이 필요하다.
그 모듈을 이용하여 출력하고 있습니다.
부품
사운드 센서 : MAX4466
133엔
디스플레이 : MAX7219ENG가 내장된 8x8 LED
136엔
컴퓨터 : Arduino UNO 호환 기계
699엔
이용 모듈
max4466
푸리에 변환 모듈입니다.
아래 사이트에서 다운로드하여 Arduino 폴더에 복사하십시오.
ㅡㅡㅡㅡ 오무무시 ぁbs. 코m/
MAC이라면
/Users/{user name}/Documents/Arduino/libraries
max7219eng_8x8led
LED를 제어하는 모듈입니다.
Arduino Library에서 검색하여 설치
htps : // 기주 b. 코 m / 다니다 sk / 마리 → 에 d
배선
소스 코드
아래의 "fft_adc"라는 스케치 예를 거의 참고로하고 있습니다.
ㅡㅡㅡㅡ 오무무시 ぁbs. 코m/
Licence:GPL licensed
/*
fft_adc.pde
guest openmusiclabs.com 8.18.12
example sketch for testing the fft library.
it takes in data on ADC0 (Analog0) and processes them
with the fft. the data is sent out over the serial
port at 115.2kb. there is a pure data patch for
visualizing the data.
*/
#define LOG_OUT 1 // use the log output function
#define FFT_N 256 // set to 256 point fft
#include <FFT.h> // include the library
#include <MatrizLed.h>
MatrizLed pantalla;
void setup() {
// Serial.begin(115200); // use the serial port
Serial.begin(2000000); // use the serial port
TIMSK0 = 0; // turn off timer0 for lower jitter
ADCSRA = 0xe5; // set the adc to free running mode
ADMUX = 0x40; // use adc0
DIDR0 = 0x01; // turn off the digital input for adc0
pantalla.begin(12, 11, 10, 2); // dataPin, clkPin, csPin, numero de matrices de 8x8
}
char strbuf[64];
void loop() {
while(1) { // reduces jitter
cli(); // UDRE interrupt slows this way down on arduino1.0
for (int i = 0 ; i < 512 ; i += 2) { // save 256 samples
while(!(ADCSRA & 0x10)); // wait for adc to be ready
ADCSRA = 0xf5; // restart adc
byte m = ADCL; // fetch adc data
byte j = ADCH;
int k = (j << 8) | m; // form into an int
k -= 0x0200; // form into a signed int
k <<= 6; // form into a 16b signed int
fft_input[i] = k; // put real data into even bins
fft_input[i+1] = 0; // set odd bins to 0
}
fft_window(); // window the data for better frequency response
fft_reorder(); // reorder the data before doing the fft
fft_run(); // process the data in the fft
fft_mag_log(); // take the output of the fft
sei();
#if 0
Serial.write(255); // send a start byte
Serial.write(fft_log_out, 128); // send out the data
#endif
int _sum = 0;
for(int i=0;i<128;i++){
_sum+=fft_log_out[i];
}
int ave = _sum/128/3;
int cnt=0;
for(int x=0;x<8;x++){
for(int y=0;y<8;y++){
if(ave > cnt){
pantalla.setLed(0, x, y, true);
}else{
pantalla.setLed(0, x, y, false);
}
cnt++;
}
}
memset(strbuf,0,64);
memset(strbuf,'|',_sum/128/3);
Serial.print(strbuf);
Serial.print("\n");
delayMicroseconds(1);
}
}
github
동작 확인
gif 동영상으로 올려도 알기 어려웠기 때문에, Youtube에서 확인하실 수 있으면 다행입니다.
Reference
이 문제에 관하여(968엔으로 만든다. LED 이퀄라이저 같은 표시기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hashito/items/d1c94910e11d044e53bb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
max4466
푸리에 변환 모듈입니다.
아래 사이트에서 다운로드하여 Arduino 폴더에 복사하십시오.
ㅡㅡㅡㅡ 오무무시 ぁbs. 코m/
MAC이라면
/Users/{user name}/Documents/Arduino/libraries
max7219eng_8x8led
LED를 제어하는 모듈입니다.
Arduino Library에서 검색하여 설치
htps : // 기주 b. 코 m / 다니다 sk / 마리 → 에 d
배선
소스 코드
아래의 "fft_adc"라는 스케치 예를 거의 참고로하고 있습니다.
ㅡㅡㅡㅡ 오무무시 ぁbs. 코m/
Licence:GPL licensed
/*
fft_adc.pde
guest openmusiclabs.com 8.18.12
example sketch for testing the fft library.
it takes in data on ADC0 (Analog0) and processes them
with the fft. the data is sent out over the serial
port at 115.2kb. there is a pure data patch for
visualizing the data.
*/
#define LOG_OUT 1 // use the log output function
#define FFT_N 256 // set to 256 point fft
#include <FFT.h> // include the library
#include <MatrizLed.h>
MatrizLed pantalla;
void setup() {
// Serial.begin(115200); // use the serial port
Serial.begin(2000000); // use the serial port
TIMSK0 = 0; // turn off timer0 for lower jitter
ADCSRA = 0xe5; // set the adc to free running mode
ADMUX = 0x40; // use adc0
DIDR0 = 0x01; // turn off the digital input for adc0
pantalla.begin(12, 11, 10, 2); // dataPin, clkPin, csPin, numero de matrices de 8x8
}
char strbuf[64];
void loop() {
while(1) { // reduces jitter
cli(); // UDRE interrupt slows this way down on arduino1.0
for (int i = 0 ; i < 512 ; i += 2) { // save 256 samples
while(!(ADCSRA & 0x10)); // wait for adc to be ready
ADCSRA = 0xf5; // restart adc
byte m = ADCL; // fetch adc data
byte j = ADCH;
int k = (j << 8) | m; // form into an int
k -= 0x0200; // form into a signed int
k <<= 6; // form into a 16b signed int
fft_input[i] = k; // put real data into even bins
fft_input[i+1] = 0; // set odd bins to 0
}
fft_window(); // window the data for better frequency response
fft_reorder(); // reorder the data before doing the fft
fft_run(); // process the data in the fft
fft_mag_log(); // take the output of the fft
sei();
#if 0
Serial.write(255); // send a start byte
Serial.write(fft_log_out, 128); // send out the data
#endif
int _sum = 0;
for(int i=0;i<128;i++){
_sum+=fft_log_out[i];
}
int ave = _sum/128/3;
int cnt=0;
for(int x=0;x<8;x++){
for(int y=0;y<8;y++){
if(ave > cnt){
pantalla.setLed(0, x, y, true);
}else{
pantalla.setLed(0, x, y, false);
}
cnt++;
}
}
memset(strbuf,0,64);
memset(strbuf,'|',_sum/128/3);
Serial.print(strbuf);
Serial.print("\n");
delayMicroseconds(1);
}
}
github
동작 확인
gif 동영상으로 올려도 알기 어려웠기 때문에, Youtube에서 확인하실 수 있으면 다행입니다.
Reference
이 문제에 관하여(968엔으로 만든다. LED 이퀄라이저 같은 표시기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hashito/items/d1c94910e11d044e53bb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
아래의 "fft_adc"라는 스케치 예를 거의 참고로하고 있습니다.
ㅡㅡㅡㅡ 오무무시 ぁbs. 코m/
Licence:GPL licensed
/*
fft_adc.pde
guest openmusiclabs.com 8.18.12
example sketch for testing the fft library.
it takes in data on ADC0 (Analog0) and processes them
with the fft. the data is sent out over the serial
port at 115.2kb. there is a pure data patch for
visualizing the data.
*/
#define LOG_OUT 1 // use the log output function
#define FFT_N 256 // set to 256 point fft
#include <FFT.h> // include the library
#include <MatrizLed.h>
MatrizLed pantalla;
void setup() {
// Serial.begin(115200); // use the serial port
Serial.begin(2000000); // use the serial port
TIMSK0 = 0; // turn off timer0 for lower jitter
ADCSRA = 0xe5; // set the adc to free running mode
ADMUX = 0x40; // use adc0
DIDR0 = 0x01; // turn off the digital input for adc0
pantalla.begin(12, 11, 10, 2); // dataPin, clkPin, csPin, numero de matrices de 8x8
}
char strbuf[64];
void loop() {
while(1) { // reduces jitter
cli(); // UDRE interrupt slows this way down on arduino1.0
for (int i = 0 ; i < 512 ; i += 2) { // save 256 samples
while(!(ADCSRA & 0x10)); // wait for adc to be ready
ADCSRA = 0xf5; // restart adc
byte m = ADCL; // fetch adc data
byte j = ADCH;
int k = (j << 8) | m; // form into an int
k -= 0x0200; // form into a signed int
k <<= 6; // form into a 16b signed int
fft_input[i] = k; // put real data into even bins
fft_input[i+1] = 0; // set odd bins to 0
}
fft_window(); // window the data for better frequency response
fft_reorder(); // reorder the data before doing the fft
fft_run(); // process the data in the fft
fft_mag_log(); // take the output of the fft
sei();
#if 0
Serial.write(255); // send a start byte
Serial.write(fft_log_out, 128); // send out the data
#endif
int _sum = 0;
for(int i=0;i<128;i++){
_sum+=fft_log_out[i];
}
int ave = _sum/128/3;
int cnt=0;
for(int x=0;x<8;x++){
for(int y=0;y<8;y++){
if(ave > cnt){
pantalla.setLed(0, x, y, true);
}else{
pantalla.setLed(0, x, y, false);
}
cnt++;
}
}
memset(strbuf,0,64);
memset(strbuf,'|',_sum/128/3);
Serial.print(strbuf);
Serial.print("\n");
delayMicroseconds(1);
}
}
github
동작 확인
gif 동영상으로 올려도 알기 어려웠기 때문에, Youtube에서 확인하실 수 있으면 다행입니다.
Reference
이 문제에 관하여(968엔으로 만든다. LED 이퀄라이저 같은 표시기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hashito/items/d1c94910e11d044e53bb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(968엔으로 만든다. LED 이퀄라이저 같은 표시기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hashito/items/d1c94910e11d044e53bb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)