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

아두이노 사운드 센서로 실시간 소음 레벨 모니터링: LED 인디케이터와 LCD 표시

부품 및 소모품

부품 수량 비고
아두이노 우노 (Arduino UNO) 1
풀사이즈 브레드보드 1
9V 배터리 + 배럴 잭 커넥터 각 1 휴대용 전원용 (선택)
수-수/수-암 점퍼 와이어 1세트
16x2 LCD (I2C 백팩, 0x27 주소) 1 실시간 수치 표시용
사운드 센서 모듈 KY-038 1 마이크 내장, 아날로그/디지털 출력
5mm LED: 노란색 2 저음량 구간 표시
5mm LED: 초록색 4 중간 음량 구간 표시
5mm LED: 빨간색 2 고음량 구간 표시
5mm LED: 흰색 4 확장 표시용
5mm LED: 파란색 4 확장 표시용
저항 100Ω 8 흰색/파란색 LED용
저항 220Ω 4 빨간색/노란색 LED용
저항 330Ω 4 초록색 LED용

소프트웨어

프로젝트 소개

스피커에서 나오는 소리 크기를 KY-038 사운드 센서로 실시간 측정해, 음량 레벨에 따라 색상별 LED 바그래프로 시각화하고 LCD에 수치를 표시하는 프로젝트입니다. 호기심과 심심함에서 시작된 작업이지만, 소음 모니터링의 기본 원리를 익히기 좋은 예제입니다.

작동 원리

  1. KY-038 모듈의 아날로그 출력(AO)을 아두이노 A0 핀으로 읽어 음량 레벨(0~1023) 획득
  2. 시리얼 모니터로 수집한 데이터를 스프레드시트에 옮겨 정렬, 빈도 높은 구간별 임계값 결정
  3. 임계값 구간별 LED 그룹 점등:
    • 노란색 LED (2개): 저음량 구간 (센서값 ~650~700)
    • 초록색 LED (4개): 중간 음량 구간 (~700~720)
    • 빨간색 LED (2개): 고음량 구간 (~720~750)
    • 흰색/파란색 LED (8개): 확장/피크 표시용
  4. LCD에 실시간 센서값 표시 (이전 값 잔상 방지 로직 포함)

주요 구현 포인트

소스 코드

#include "Arduino.h"
#include "LiquidCrystal_PCF8574.h"

#define LCD_ADDRESS 0x27
#define LCD_ROWS 2
#define LCD_COLUMNS 16
#define SCROLL_DELAY 150
#define BACKLIGHT 255

LiquidCrystal_PCF8574 LCDi2C;

// LED 핀 매핑 (브레드보드 순서 = 아두이노 PWM 핀)
int LED1 = 3;  int LED2 = 4;  int LED3 = 5;  int LED4 = 6;
int LED5 = 7;  int LED6 = 8;  int LED7 = 9;  int LED8 = 10;

int soundSensor = 2;      // KY-038 DO 핀 → D2
int sensorValue = A0;     // KY-038 AO 핀 → A0
boolean LEDStatus = false;

void setup() {
  Serial.begin(9600);
  LCDi2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT);
  
  pinMode(soundSensor, INPUT);
  pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT);
}

void loop() {
  int sensorValue = analogRead(A0);
  int SensorData = digitalRead(soundSensor);
  
  if (SensorData == HIGH) {  // 소리 감지됨
    if (LEDStatus == false) {
      LEDStatus = true;
      Serial.println(sensorValue);
      
      // LCD 표시 (잔상 방지용 공백 포함)
      LCDi2C.setCursor(0, 0);
      LCDi2C.print("SoundLevel Data:");
      LCDi2C.setCursor(0, 1);
      LCDi2C.print(sensorValue);
      LCDi2C.print(" ");
    }
    
    // 임계값별 LED 제어 (값은 환경에 맞게 조정 필요)
    if (sensorValue >= 750) digitalWrite(LED8, HIGH); else { LEDStatus = false; digitalWrite(LED8, LOW); }
    if (sensorValue >= 735) digitalWrite(LED7, HIGH); else { LEDStatus = false; digitalWrite(LED7, LOW); }
    if (sensorValue >= 725) digitalWrite(LED6, HIGH); else { LEDStatus = false; digitalWrite(LED6, LOW); }
    if (sensorValue >= 720) digitalWrite(LED5, HIGH); else { LEDStatus = false; digitalWrite(LED5, LOW); }
    if (sensorValue >= 715) digitalWrite(LED4, HIGH); else { LEDStatus = false; digitalWrite(LED4, LOW); }
    if (sensorValue >= 700) digitalWrite(LED3, HIGH); else { LEDStatus = false; digitalWrite(LED3, LOW); }
    if (sensorValue >= 675) digitalWrite(LED2, HIGH); else { LEDStatus = false; digitalWrite(LED2, LOW); }
    if (sensorValue >= 650) digitalWrite(LED1, HIGH); else { LEDStatus = false; digitalWrite(LED1, LOW); }
  }
  else {
    // 소리 미감지 시 모든 LED 끄기
    LEDStatus = false;
    for (int i = 1; i <= 8; i++) {
      digitalWrite(i + 2, LOW);  // D3~D10
    }
  }
}

회로도

브레드보드 배선도를 끝까지 따라 연결하세요. (첨부 이미지 참조)

아두이노 사운드 센서로 실시간 소음 레벨 모니터링: LED 인디케이터와 LCD 표시

보완 및 확장 아이디어

참고: 본 코드는 작성자의 학습용 프로젝트로, 주석에 "lol" 등 비공식 표현이 포함되어 있습니다. 실제 적용 시 코드 정리와 검증이 필요합니다.

제조공정

  1. Würth Elektronik WSEN-ITDS: 산업용 IoT용 초소형 저전력 3축 MEMS 가속도계
  2. 라즈베리 파이에 센서 데이터 통합하기: GPS 및 MPU-9150 IMU 실전 가이드
  3. 라즈베리 파이와 KY-033 라인 트래킹 센서로 문 열림/선 감지하기
  4. 라즈베리 파이에서 GY-91 모듈로 견고한 온도 및 센서 API 구축하기
  5. IoT 생태계에서 시각 데이터의 힘 발휘하기
  6. 고영향 센서 기반 IoT 애플리케이션 구축을 위한 6가지 핵심 원칙
  7. 아크 시스템즈(Arch Systems) & 플렉스(Flex), 제조 데이터 고도 분석으로 제조 혁신 파트너십 체결
  8. 피부 같은 소프트 촉각 센서 장착 로봇 그리퍼, 정밀 핸들링 구현
  9. ISS 센서용 정확한 WiFi RSSI 추적
  10. 차세대 LED 데이터 통신 구현할 혁신 소재 개발