아두이노 우노 Q 피에조 버저

버저는 단순한 비프음부터 완전한 멜로디까지 다양한 소리를 생성합니다. 이 튜토리얼에서는 Arduino UNO Q에 피에조 버저를 연결하고, tone() 함수를 사용하여 음과 멜로디를 재생하며, Telegram을 통해 원격으로 소리를 트리거하는 방법을 배우게 됩니다.

Arduino UNO Q - 피에조 부저

필요한 하드웨어

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×3-24V 능동 피에조 버저 (Active Piezo Buzzer) 쿠팡 | 아마존
1×(또는) Active Piezo Buzzer Module 쿠팡 | 아마존
1×(또는) Passive Piezo Buzzer Module 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

피에조 버저 정보

능동 버저 vs 수동 버저

  • 능동 버저: 전압이 인가되면 지속적인 소리 생성 — 사용하기 가장 간단함
  • 수동 버저: 변하는 주파수 신호(사각파) 필요 — 다양한 톤과 멜로디를 생성할 수 있음

핀아웃

버저는 두 개의 핀을 가지고 있습니다:

  • 양극(+) 핀: Arduino UNO Q 출력 핀에 연결
  • 음극(−) 핀: GND에 연결
피에조 부저 사용법 핀아웃

프로그래밍 방법

Arduino의 내장 tone() 함수는 모든 디지털 핀에서 사각파를 생성하여 능동 및 수동 버저를 모두 제어합니다:

  • tone(pin, frequency, duration) — 주어진 주파수에서 주어진 시간 동안 음 재생
  • noTone(pin) — 음 중지

배선도

  • 독립형 피에조 버저로 배선:
Arduino UNO Q 피에조 부저 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • 피에조 버저 모듈로 배선:
Arduino UNO Q 피에조 부저 module 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

MCU 코드 — 멜로디 재생

Arduino UNO Q는 두 개의 프로세서를 가지고 있습니다: STM32 MCU(실시간 하드웨어 제어 담당)와 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍되고 Linux 쪽은 유휴 상태입니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줍니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-piezo-buzzer */ #include "pitches.h" #define BUZZER_PIN 6 // pin connected to the buzzer // notes in the melody int melody[] = { NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; // note durations: 4 = quarter note, 8 = eighth note, etc. int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; void setup() { int size = sizeof(noteDurations) / sizeof(int); for (int thisNote = 0; thisNote < size; thisNote++) { int noteDuration = 1000 / noteDurations[thisNote]; tone(BUZZER_PIN, melody[thisNote], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(BUZZER_PIN); } } void loop() { // melody plays once in setup — nothing needed here }

빠른 단계

  • Arduino UNO Q를 처음 사용하시나요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
  • 버저 배선: 양극 핀을 핀 6에, 음극 핀을 GND에 연결하세요.
  • 연결: USB-C 케이블로 Arduino UNO Q를 컴퓨터에 연결하세요.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다리세요.
  • 새 앱 만들기: Create New App 버튼을 클릭하세요.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱 이름을 입력하세요. 예: DIYables_Buzzer
  • Create를 클릭하여 확인하세요.
  • 새로운 앱 내에 생성된 폴더와 파일 세트를 보게 됩니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • sketch/sketch.ino 파일을 찾으세요 — 이곳이 MCU 스케치를 붙여넣을 장소입니다.
  • 스케치 붙여넣기: 위의 MCU 코드를 스케치 파일에 복사합니다.
  • pitches.h 파일 추가: 스케치에서 pitches.h라는 새 탭을 만들고 표준 Arduino pitches 헤더 내용을 붙여넣습니다.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • 업로드: Arduino App Lab의 Run 버튼을 클릭하여 STM32에 컴파일 및 업로드합니다.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q
    • 청취: 보드가 시작될 때 버저가 멜로디를 한 번 재생합니다.

    멜로디 수정 — Jingle Bells

    다른 곡을 재생하려면 melody[]noteDurations[] 배열을 업데이트하세요. 다음은 Jingle Bells 버전입니다:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-piezo-buzzer */ #include "pitches.h" #define BUZZER_PIN 6 // pin connected to the buzzer // Jingle Bells notes int melody[] = { NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_G5 }; int noteDurations[] = { 8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 2, 8, 8, 8, 8, 8, 8, 8, 16, 16, 8, 8, 8, 8, 4, 4 }; void setup() { int size = sizeof(noteDurations) / sizeof(int); for (int thisNote = 0; thisNote < size; thisNote++) { int noteDuration = 1000 / noteDurations[thisNote]; tone(BUZZER_PIN, melody[thisNote], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(BUZZER_PIN); } } void loop() { // melody plays once in setup — nothing needed here }

    빠른 단계

    • 스케치를 Jingle Bells 버전으로 바꾸고 Run을 클릭하세요.
    • 버저가 시작 시 Jingle Bells를 재생하는 것을 들으세요.

    Linux + MCU Bridge 프로그래밍

    Arduino UNO Q는 함께 작동하는 두 개의 프로세서를 가지고 있습니다: MPU(Qualcomm, Debian Linux 실행)와 MCU(STM32, Arduino 스케치를 실행하는 Zephyr OS). 이들은 Arduino_RouterBridge 라이브러리를 통해 RPC를 사용하여 통신합니다 — 원시 시리얼 포트를 통해 통신하지 않습니다.

    • 버저는 MCU(STM32)에 연결됩니다 — 디지털 출력 핀으로 배선됩니다. MCU는 tone()noTone()을 사용하여 버저를 구동합니다.
    • MPU는 직접 버저를 제어할 수 없습니다Bridge.call()을 통해 MCU의 함수를 호출하여 소리를 트리거해야 합니다.
    • MPU는 Wi-Fi를 가지고 있습니다 — MPU는 Wi-Fi를 가진 완전한 Debian Linux를 실행하므로 요청 시 Telegram을 통해 버저 소리를 트리거할 수 있습니다.
    • 통신: Linux 쪽의 Bridge.call()은 MCU 쪽의 Bridge.provide_safe() 함수를 호출합니다(tone()/noTone()은 하드웨어 API이므로).
    • ⚠️ 예약됨: /dev/ttyHS1(Linux) 및 Serial1(MCU)은 Arduino Router에서 사용됩니다 — 직접 열지 마세요.

    요약하면: MPU가 비프음이나 멜로디를 요청 → MCU가 tone()을 통해 버저를 구동 → MCU가 동작을 확인 → MPU가 로그하거나 전달합니다.

    MCU 스케치 — Bridge 및 Monitor 출력이 있는 버저:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-piezo-buzzer */ #include "Arduino_RouterBridge.h" #include "pitches.h" #define BUZZER_PIN 6 void beep() { tone(BUZZER_PIN, NOTE_C5, 200); delay(250); noTone(BUZZER_PIN); Monitor.println("Beep played"); } void play_melody() { int melody[] = { NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; int size = sizeof(noteDurations) / sizeof(int); for (int i = 0; i < size; i++) { int noteDuration = 1000 / noteDurations[i]; tone(BUZZER_PIN, melody[i], noteDuration); delay((int)(noteDuration * 1.30)); noTone(BUZZER_PIN); } Monitor.println("Melody played"); } void setup() { Bridge.begin(); Monitor.begin(); Bridge.provide_safe("beep", beep); Bridge.provide_safe("play_melody", play_melody); Monitor.println("Piezo Buzzer Bridge ready"); } void loop() {}

    Python 스크립트(Arduino App Lab) — Linux에서 버저 트리거:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-piezo-buzzer */ from arduino.app_utils import * import time def loop(): print("Playing beep...") Bridge.call("beep") time.sleep(3) print("Playing melody...") Bridge.call("play_melody") time.sleep(5) App.run(user_loop=loop)
    • 참고: MCU 스케치에서 Bridge.begin()이 호출되었고 Python 스크립트를 Linux 쪽에서 실행하기 전에 스케치가 업로드되었는지 확인하세요.
    • ⚠️ 경고: /dev/ttyHS1(Linux)을 직접 열거나 코드에서 Serial1(MCU)을 사용하지 마세요 — 이들은 Arduino Router에서 예약되었으며 접근하면 Bridge가 작동하지 않습니다.

    빠른 단계

    • MCU 스케치 업로드: Arduino App Lab을 열고, 새 앱을 만들고, Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고, pitches.h를 새 탭으로 추가하고, Arduino_RouterBridge 라이브러리를 설치하고 Run을 클릭합니다.
    • Python 스크립트 추가: 위의 Python 코드를 같은 앱의 Python 탭에 붙여넣습니다.
    • 앱 실행: Run을 클릭합니다 — Python 쪽이 비프음과 멜로디 사이에서 자동으로 순환합니다.
    • 콘솔 확인: 콘솔 탭을 열고 → MCU Monitor 서브탭에서 "Beep played"와 "Melody played" 메시지를 확인하세요.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    Piezo Buzzer Bridge ready Beep played Melody played Beep played

    Telegram 통합

    Telegram을 통해 어디서나 원격으로 버저 소리를 트리거합니다.

    아직 Telegram 봇이 없으시면, 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 참고하여 봇 토큰을 얻으세요.

    MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지합니다 — 변경할 사항이 없습니다. STM32에 이미 업로드되고 실행 중인지 확인하세요.

    Python 스크립트(Arduino App Lab) — 버저 제어용 Telegram 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-piezo-buzzer */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/beep": Bridge.call("beep") send_message(chat_id, "Beep played on the buzzer.") elif text == "/melody": Bridge.call("play_melody") send_message(chat_id, "Melody is playing on the buzzer.") else: send_message(chat_id, "Commands:\n/beep — play a short beep\n/melody — play a melody") time.sleep(1) App.run(user_loop=loop)
    • 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
    • /beep을 전송하여 짧은 비프음을 트리거합니다.
    • /melody를 전송하여 멜로디를 재생합니다.

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션의 Bridge MCU 스케치를 사용합니다(아직 업로드되지 않았다면 먼저 업로드하세요).
    • Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱 Python 탭에 복사합니다.
    • 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
    • 앱 실행: Run을 클릭합니다 — 봇이 Telegram 메시지를 수신 대기합니다.
    • 테스트: /beep을 전송하세요 — 버저에서 짧은 톤을 듣습니다. /melody를 전송하세요 — 전체 멜로디가 재생됩니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /beep [2026-04-29 12:00:01] Beep played on the buzzer. [2026-04-29 12:03:20] Telegram: /melody [2026-04-29 12:03:20] Melody is playing on the buzzer.
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /beep
    10:15 AM ✓✓
    Beep played on the buzzer.
    10:16 AM
    /melody
    10:17 AM ✓✓
    Melody is playing on the buzzer.
    10:18 AM

    OpenClaw 통합

    아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참고하여 이 튜토리얼에 OpenClaw를 적용할 수 있습니다.

    애플리케이션/프로젝트 아이디어

    • 원격 알람: 이벤트 발생 시 Telegram을 통해 원격으로 버저 알람을 트리거합니다.
    • 알림 비퍼: 센서 임계값을 초과하면 비프음을 냅니다 — MPU Linux 로직에서 트리거됩니다.
    • 초인종: 버튼을 사용하여 초인종 톤을 울리세요; 누군가 눌렀다는 알림을 Telegram으로 보냅니다.
    • 멜로디 주크박스: Telegram 봇을 만들어 원격으로 재생할 다양한 멜로디를 선택할 수 있습니다.
    • 타이머 알람: Linux MPU의 시계를 사용하여 예약된 시간에 버저 알람을 재생합니다.

    도전 과제

    • 쉬움: 두 번째 멜로디(예: Happy Birthday)를 추가하고 Telegram에서 /birthday로 노출합니다.
    • 중간: play_n_beeps(n) Bridge 콜백을 추가하고 Telegram에서 /beep <count>로 노출합니다.
    • 고급: Telegram 봇을 만들어 작업을 트리거하기 전에 카운트다운 멜로디를 재생합니다 — Linux MPU 쪽에서 시간 기반 스케줄링을 사용합니다.

    함수 참조