본문 바로가기
라즈베리파이

Clap Switch With PICO 2 and MAX9814

by 모빌리티키즈 2025. 2. 3.
728x90
반응형

모두에게 인사하고 다시 오신 것을 환영합니다.

오늘은 여러분에게 유용한 프로젝트를 소개하려고 합니다.

CLAP Switch 프로젝트는 OLED 디스플레이와 함께 MAX9814 마이크 앰프 모듈을 사용합니다. OLED 화면은 박수를 감지하면 메시지를 표시합니다. 이 프로젝트의 아이디어는 MAX9814 마이크 모듈과 PICO를 사용하여 테스트할 수 있는 간단한 브레드보드 설정을 만드는 것입니다. 이 브레드보드 버전을 설정하는 것은 곧 개발될 Clap Switch Circuit을 개발하는 데 매우 중요합니다.

이번 Instructables에서는 MAX9814 마이크 센서의 설정 가이드와 OLED 화면과 PICO 2를 활용하여 기본 박수 스위치를 준비하는 방법을 살펴보겠습니다.

필요한 재료

이 프로젝트에 사용된 재료는 다음과 같습니다:

  • 라즈베리 파이 PICO 2
  • MAX9814 마이크 앰프 모듈
  • 브레드보드
  • OLED 디스플레이 128x32 SSD1306
  • 점퍼 와이어

단계별 가이드

  1. 단계 1: 설정 준비
    • 먼저 브레드보드를 준비하고, 라즈베리 파이 PICO 2를 브레드보드에 연결합니다.
    • MAX9814 마이크 앰프 모듈을 브레드보드에 연결합니다.
  2. 단계 2: OLED 디스플레이 연결
    • OLED 디스플레이 128x32 SSD1306을 브레드보드와 라즈베리 파이 PICO 2에 연결합니다.
    • 점퍼 와이어를 사용하여 필요한 핀을 연결합니다.
  3. 단계 3: 코드 작성 및 업로드
    • PICO 2에 올바른 코드를 작성하고 업로드합니다. 코드는 MAX9814 마이크에서 신호를 감지하고 OLED 디스플레이에 메시지를 표시하도록 합니다.
  4. 단계 4: 테스트 및 조정
    • 모든 연결과 코드를 확인한 후, 박수를 치며 제대로 작동하는지 테스트합니다.
    • 필요한 경우, 코드를 조정하여 최적의 감도를 설정합니다.

이렇게 하면 MAX9814 마이크와 OLED 디스플레이를 사용하여 박수를 감지하고 메시지를 표시하는 Clap Switch 프로젝트를 완성할 수 있습니다. 이 프로젝트는 간단하지만, 다양한 응용 프로그램에 활용될 수 있는 기초적인 원리를 제공합니다.

1 단계 : MAX9814- 마이크 증폭기 모듈

이 MAX9814는 정밀한 오디오 캡처 및 증폭이 필요한 애플리케이션을 위해 설계된 고성능 마이크 증폭기 모듈입니다. AGC(Automatic Gain Control)가 있어 앰프 레벨을 동적으로 조정하여 다양한 오디오 입력 레벨을 수용하여 일관되고 고품질의 출력을 보장합니다.

우리가 클랩 스위치 프로젝트에서 MAX9814 사용하는 이유는 AGC가 게인을 동적으로 조정하여 다양한 소음 환경에서도 일관된 오디오 출력을 보장하기 때문입니다. 이는 배경 소음 수준에 관계없이 박수 소리를 정확하게 감지할 수 있음을 의미합니다. 또한 낮은 입력 참조 노이즈 밀도와 낮은 THD(Total Harmonic Distortion)는 오디오 신호가 명확하고 정확하다는 것을 보장하여 박수 소리를 보다 안정적으로 감지합니다.

이 소자는 2.7V에서 5.5V까지 동작하고, 약 3mA를 소비하며, 1.25V DC 바이어스에서 2V 피크 대 피크 출력을 제공하며, 20Hz에서 20kHz까지의 주파수 범위를 커버한다. 30nV/√Hz의 낮은 입력 참조 노이즈 밀도와 0.04%의 THD로 선명한 고음질 오디오를 보장합니다. 이 증폭기는 40dB, 50dB 및 60dB의 프로그래밍 가능한 이득 설정을 지원하고, 2V 마이크 바이어스를 제공하며, -40°C에서 +85°C의 온도에서 작동하며, 소형 14핀 TDFN 패키지로 제공됩니다.

 

2단계: PICO 및 MAX9814 배선

 
 
 
 
 
  1. PICO 2, SSD1306 OLED 스크린 및 MAX9814 MIC 모듈의 세 가지 구성 요소를 모두 브레드 보드에 배치하여 조립 프로세스를 시작합니다.
  2. 다음으로 PICO 2의 VBUS를 OLED의 VCC와 MAX Module의 VCC를 병렬로 연결했다. 세 가지 모두의 GND도 병렬로 연결됩니다.
  3. 이제 OLED의 SDA와 SCL을 PICO의 GPIO4 및 GPIO5와 연결합니다.
  4. 마지막으로 MAX9814 모듈의 OUT 핀을 PICO 2의 GPIO26과 연결했습니다.

배선 과정이 완료되었습니다.

4단계: 코드

다음으로 아래 스케치를 PICO 2에 업로드했습니다.

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define OLED_ADDRESS 0x3C // I2C address for the SSD1306 OLED display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define MIC_PIN 26
#define CLAP_THRESHOLD 500 // Adjust based on your sensor's range
#define CLAP_DELAY 200 // Minimum delay between claps in milliseconds
#define CLAP_WINDOW 1000 // Time window for detecting second clap in milliseconds
#define DISPLAY_DURATION 5000 // Time to display "Clap Detected" message
unsigned long last_clap_time = 0;
unsigned long message_display_time = 0;
bool display_clap_message = false;
void setup() {
// Initialize the serial communication for debugging
Serial.begin(9600);
// Initialize the OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.display();
}
void loop() {
int analog_val = analogRead(MIC_PIN); // Read microphone value
unsigned long current_time = millis();
// Debugging information
Serial.print("Analog Value: ");
Serial.println(analog_val);
// Detect clap
if (analog_val > CLAP_THRESHOLD) {
if (current_time - last_clap_time > CLAP_DELAY) {
Serial.println("Clap detected");
display_clap_message = true;
message_display_time = current_time;
last_clap_time = current_time;
}
}
// Update the OLED display
display.clearDisplay();
if (display_clap_message) {
display.setCursor(0, 0);
display.println("Clap");
display.setCursor(0, 16); // Move to the second line
display.println("Detected");
if (current_time - message_display_time > DISPLAY_DURATION) {
display_clap_message = false;
}
} else {
display.setCursor(0, 0);
display.println("Nothing");
display.setCursor(0, 16); // Move to the second line
display.println("happened");
}
display.display();
// Short delay for stability
delay(100);
}

우리의 코드 OLED 디스플레이와 마이크를 설정하여 박수를 감지하고 해당 메시지를 표시합니다.

OLED는 특정 치수와 I2C 주소로 초기화되고 마이크는 박수 감지 임계값이 500으로 설정된 핀 26에 연결됩니다. 마이크가 이 임계값을 초과하는 소리를 감지하면 박수 사이의 최소 지연과 두 번째 박수 감지를 위한 정의된 창을 고려하여 박수를 등록합니다.

박수가 감지되면 OLED는 5초 동안 "박수 감지됨"을 표시합니다. 그렇지 않으면 "아무 일도 일어나지 않았습니다"가 표시됩니다. 이 코드에는 디버깅을 위한 직렬 출력이 포함되어 있어 아날로그 값을 모니터링하고 박수 감지를 확인할 수 있습니다. 이 설정은 OLED 화면에 적절한 메시지가 표시되어 효과적이고 신뢰할 수 있는 박수 감지를 보장합니다.

이 스케치를 사용하기 전에 OLED 라이브러리를 설치하십시오.

https://github.com/adafruit/Adafruit_SSD1306

5단계: 결과

이것은 이 간단하지만 중요한 빌드의 최종 결과입니다: PICO 2 및 출력 표시를 위한 OLED 화면과 함께 MAX9814 마이크 모듈을 사용하는 CLAP SENSOR 구성입니다. AC 기기(박수 소리와 함께 실내 조명)를 켜거나 끄려면 실제 CLAP 스위치를 개발할 예정이므로 이 설정이 중요합니다.

프로젝트의 브레드보드 버전을 설정하는 것은 준비 방법을 정확히 이해하는 데 도움이 되었기 때문에 중요하고 유익했습니다.

 

728x90
반응형