กลับไปหน้ารวมไฟล์
keyless-musical-instrument-af7b37.md

Spatial Acoustics: The Ultrasonic Theremin

ABSTRACT:

โปรเจคนี้เราจะมาออกแบบและสร้างเครื่องดนตรีที่เล่นได้โดยไม่ต้องกดปุ่มอะไรทั้งนั้น! เป้าหมายคือทำอินเตอร์เฟซที่ใช้ง่ายจนใครๆ ก็เล่นได้ แม้แต่มือใหม่หัดเล่น จนถึงระดับโปร ก็เล่นเครื่องดนตรีไร้คีย์นี้ได้สบายๆ

การเล่นเปียโนต้องกดปุ่มที่ถูกตรึงไว้ในแต่ละอ็อกเทฟ แต่ Keyless Musical Instrument ของเราจะจำลองเครื่องดนตรีสุดแปลกและน่าขนลุกจากรัสเซียยุค 1920s อย่าง "เทอเรมิน" ให้กลายเป็นดิจิทัลทั้งหมด! แทนที่จะใช้คลื่นวิทยุ เราใช้คลื่นเสียงอัลตราโซนิคแทน Arduino ของเราจะสร้างกำแพงเสียงด้วยเซ็นเซอร์ HC-SR04 เมื่อมือเปล่าของผู้เล่นโบกเข้า-ออกในอากาศ Arduino จะตรวจจับระยะทางที่เปลี่ยนไปแบบทันทีทันใด แล้วก็คำนวณสมการซับซ้อนเพื่อแปลงระยะทาง (เซนติเมตร) ให้เป็นความถี่เสียงผ่าน Piezo Buzzer!

OBJECTIVE:

ใช้สำหรับเล่นดนตรีโดยไม่ต้องมีปุ่มกด แสดงโน้ตดนตรีที่กำลังเล่นอยู่ แสดงอ็อกเทฟที่กำลังเล่นอยู่ สามารถเปลี่ยนอ็อกเทฟได้ตั้งแต่ อ็อกเทฟ 3 ถึง อ็อกเทฟ 7

METHODOLOGY:

เราแทนที่คีย์หรือสายด้วยแสงเลเซอร์ 8 เส้น แต่ละลำแสงจะตกกระทบโฟโตเรซิสเตอร์ (LDR-Light Dependent Resistor) ที่กำหนดไว้ เมื่อมีสิ่งมาบังแสงเลเซอร์ โฟโตเรซิสเตอร์จะส่งสัญญาณไปที่ Arduino จากนั้น Arduino จะสั่งให้ลำโพงส่งเสียงโทนเฉพาะออกมาผ่านแอมป์ ทำให้เกิดเป็นเสียงดนตรีขึ้นมา เราใส่จอ LCD เพื่อแสดงโน้ตและอ็อกเทฟที่กำลังเล่นอยู่ และใส่ Rotary Encoder สำหรับเปลี่ยนอ็อกเทฟ โดยสามารถปรับได้ตั้งแต่ อ็อกเทฟ 3 ถึง อ็อกเทฟ 7

แปลงเซนติเมตรให้เป็นความถี่ (map())

หัวใจหลักของระบบอยู่ที่การแปลงระยะทาง (เช่น 5cm ถึง 30cm) ให้เป็นความถี่เสียง (เช่น 200Hz ถึง 1500Hz)

  1. SR04 ยิงพัลส์ 40Khz ออกไปและคำนวณหาระยะทาง
  2. Arduino ใช้ฟังก์ชันคณิตศาสตร์ขั้นเทพ map() ที่มีอยู่แล้ว!
  3. int note = map(distance, 5, 30, 200, 1500);
  4. ถ้าระยะทางต่ำกว่า 5cm หรือเกิน 30cm Arduino จะต้องสั่งหยุดเสียงทันทีเพื่อป้องกันเสียงแปลกประหลาด (noTone())
int distance = getDistance(); // Returns the exact CM measurement!

if (distance >= 5 && distance <= 30) {
  // Constrain limits to prevent bizarre glitches!
  int rawFreq = map(distance, 5, 30, 261, 1046); // Map CM into Middle C up to High C!
  
  // Fire the hardware Timer array to generate the explicit square wave Hz!
  tone(BUZZER_PIN, rawFreq); 
} else {
  // Silence! Hand is outside the play area!
  noTone(BUZZER_PIN); 
}

// Intense delay limits the math loop so the tone isn't constantly stuttering!
delay(40); 

เอาชนะเสียงเพี้ยนจาก Square Wave

ฟังก์ชัน tone() ของ Arduino มันผลิตคลื่น Square Wave ที่สมบูรณ์แบบทางคณิตศาสตร์ ออกมาเสียงห้าว แรง และโหดร้ายมาก! มันฟังดูเหมือนเสียงเตือนไมโครเวฟราคาถูกจากยุค 80s ไม่ใช่เสียงไวโอลินที่เนียนนุ่มเลย!

  • วิธีทำให้เสียงนุ่มขึ้น ก็คือใช้ ตัวเก็บประจุแบบ Low-Pass Filter เป็นตัวช่วยทางกายภาพ!
  • โดยการต่อตัวเก็บประจุอิเล็กโทรไลต์ 0.1µF หรือ 1µF เข้ากับขาบวกและขาลบของ Piezo หรือลำโพง 8 โอห์มแบบจัดหนักเลย มันจะช่วยดูดซับสัญญาณไฟฟ้าความถี่สูงที่แหลมคมจนเกินไป ทำให้ขอบที่ห้าวๆ ของ Square Wave กลายเป็นคลื่นที่กลมขึ้น คล้ายกับ Sine Wave แบบธรรมชาติ!

รายการอุปกรณ์อะคูสติก

  • Arduino Uno/Nano (ตัวจัดการไทเมอร์ความถี่ระดับฮาร์ดแวร์ที่ทำงานไม่หยุด)
  • เซ็นเซอร์วัดระยะอัลตราโซนิค HC-SR04 (ต้องหันหน้าไปทางที่โล่งเตียน ไม่มีอะไรกีดขวาง)
  • Piezo Buzzer แบบ Passive หรือลำโพงมินิ 8 โอห์ม (เดี๋ยวก่อน! ถ้าใช้ Buzzer แบบ Active จะล้มเหลวทันที เพราะมันส่งเสียงบี๊บเดียวที่น่ารำคาญเท่านั้น! ต้องใช้ Buzzer แบบ "Passive" ที่ทำตัวเหมือนลำโพงเปล่าๆ เลย ถึงจะเล่นความถี่ต่างๆ ได้!)
  • ตัวเก็บประจุแบบ Low-Pass Filter (ปกติจะใส่หรือไม่ใส่ก็ได้ แต่สำคัญมากถ้าอยากได้เสียงซินธิไซเซอร์ที่ชัดเจนระดับโปร)

วิดีโอการทำงาน:

รูปภาพประกอบ:

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE 1.8"
author: "asbro10"
category: "Audio & Sound"
components:
  - "1x Arduino Uno Rev3"
  - "1x PAM8403 amplifier module"
  - "1x jig saw"
  - "1x Speaker 3W  4 ohms"
  - "1x LDR module"
  - "1x  Laser Diode Red 650nm 5mW"
  - "1x KY-040 Rotary Encoder"
  - "1x Drilling Machine"
  - "1x 16x2 LCD display with I²C interface"
  - "1x Soldering kit"
description: "Acoustic spatial anomalies! Repurpose absolute HC-SR04 ultrasonic latency sweeps to actively manipulate massive high-frequency PWM tone arrays, dynamically generating continuous electronic synth oscillations based exclusively on physical hand proximity."
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/99bbfa43-6582-4ee7-a502-c0b6bdaf13c4.ino"
encryptedPayload: "U2FsdGVkX19n2wGirHorrbS7xLOdFF5uDg0OgBRcwX5IMEwWHsccjRrAArFfrB3KJ9u6q7UVnEA5nM72sDvAeT39SRVf2gj7pha45Ykv2sk="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/keyless-musical-instrument-af7b37_cover.jpg"
lang: "en"
likes: 0
passwordHash: "8100e8a250ca8cc2cefddf16adc43b703607ff1a7aca49be0523e79c1ccada06"
price: 2450
seoDescription: "Explore a unique and innovative Keyless Musical Instrument project. A creative approach to music making without keys."
tags:
  - "Music"
  - "Audio"
  - "Games"
  - "Toys"
title: "เครื่องดนตรีไร้คีย์บอร์ด งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://youtu.be/8tARt_JT7aE?si=u42hKfW76HUW1k1A"
views: 2604