초보자로서 사운드 센서와 LED로 연습한 후, 사운드 디텍터를 이용한 8개 LED 시스템을 만들기로 했습니다. 저와 같은 초보자에게 흥미로운 프로젝트가 될 것입니다.
브레드보드 연결 예시완성된 회로 모습
각 LED의 작동 임계값은 코드에서 개별적으로 설정할 수 있습니다. 또한 사운드 센서의 민감도 조정을 잊지 마세요. 아래에 사운드 센서 민감도 설정 방법이 나와 있습니다. 세 번째 이미지는 사운드 센서 값 모니터링 화면으로, 이 값들을 기준으로 코드에서 소리 반응 시점을 결정합니다.
시리얼 모니터로 센서 값 확인사운드 센서 민감도 조정용 트리머작동 중인 LED 디스플레이
코드
8개 LED 시스템과 사운드 디텍터용 코드입니다.
/* Mantas Utka */
int ledPin1 = 13; // LED 핀 및 센서 핀 정의
int ledPin2 = 12;
int ledPin3 = 11;
int ledPin4 = 10;
int ledPin5 = 9;
int ledPin6 = 8;
int ledPin7 = 7;
int ledPin8 = 6;
int sensorPin = A0; // 아날로그 핀 사용 (이러한 프로젝트에 적합)
int val = 0;
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
pinMode(sensorPin, INPUT); // 센서를 입력으로 설정
Serial.begin(9600);
}
void loop() {
val = analogRead(sensorPin);
Serial.println(val); // 센서 값 출력
// 센서 감지 시 LED 점등 (임계값별)
// 1번 LED
if (val >= 127) digitalWrite(ledPin1, HIGH);
else digitalWrite(ledPin1, LOW);
// 2번 LED
if (val >= 378) digitalWrite(ledPin2, HIGH);
else digitalWrite(ledPin2, LOW);
// 3번 LED
if (val >= 505) digitalWrite(ledPin3, HIGH);
else digitalWrite(ledPin3, LOW);
// 4번 LED
if (val >= 632) digitalWrite(ledPin4, HIGH);
else digitalWrite(ledPin4, LOW);
// 5번 LED
if (val >= 759) digitalWrite(ledPin5, HIGH);
else digitalWrite(ledPin5, LOW);
// 6번 LED
if (val >= 886) digitalWrite(ledPin6, HIGH);
else digitalWrite(ledPin6, LOW);
// 7번 LED
if (val >= 980) digitalWrite(ledPin7, HIGH);
else digitalWrite(ledPin7, LOW);
// 8번 LED
if (val >= 1000) digitalWrite(ledPin8, HIGH);
else digitalWrite(ledPin8, LOW);
}
작동 원리
사운드 디텍터의 아날로그 출력값(0~1023)을 읽어 8단계 임계값(127, 378, 505, 632, 759, 886, 980, 1000)과 비교합니다. 소리가 커질수록 더 많은 LED가 점등되어 시각적인 레벨 미터 역할을 합니다. 시리얼 모니터로 실시간 센서 값을 확인하며 임계값을 조정할 수 있습니다.
팁
사운드 센서 모듈의 트리머(가변저항)로 전체 민감도를 먼저 조정하세요.
시리얼 플로터(Tools > Serial Plotter)를 사용하면 소리 파형을 시각적으로 확인하기 좋습니다.