Capacitive touch piano breadboard build with ESP32-C3 SuperMini, TTP223 touch sensor modules as keys, and buzzer

ผู้เริ่มต้น

สร้างเปียโนระบบสัมผัสแบบเก็บประจุ

เซ็นเซอร์

ไม่มีชิ้นส่วนที่เคลื่อนที่ ไม่มีสวิตช์กลไก เพียงแค่แตะแผ่นสัมผัสแล้วได้ยินเสียงโน้ต คีย์บอร์ดตรวจจับแบบคาปาซิทีฟที่สร้างจากโมดูลสัมผัสและออด สอนการตรวจจับการสัมผัสที่แท้จริงแทนการกดปุ่มธรรมดา

รวมชิ้นส่วนจริง 3 รายการ

ราคารวมชุดนี้: 955.00 ฿

ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน

สิ่งที่คุณต้องใช้

เป้าหมายของโปรเจกต์

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

สิ่งที่ตัวควบคุมทำ

มันจะตรวจสอบเอาต์พุตของแต่ละโมดูลสัมผัสอย่างต่อเนื่อง และเมื่อโมดูลใดโมดูลหนึ่งทำงานสูงขึ้น มันจะเล่นโน้ตที่กำหนดให้กับแผ่นสัมผัสนั้นผ่านออด ตราบใดที่ยังคงมีการสัมผัสอยู่ หรือเป็นเสียงบี๊บสั้นๆ ที่คงที่ก็ได้ ซึ่งทั้งสองวิธีใช้งานได้

สิ่งที่เซ็นเซอร์สัมผัสทำ

แต่ละโมดูลจะตรวจจับการเปลี่ยนแปลงเล็กน้อยของความจุไฟฟ้าที่เกิดจากการสัมผัสของปลายนิ้วบนแผ่นสัมผัส และรายงานผลออกมาเป็นค่าดิจิทัล HIGH หรือ LOW อย่างง่ายๆ โดยไม่จำเป็นต้องใช้แรงกดหรือการกระตุ้นทางกลไกใดๆ เลย เพียงแค่การอยู่ใกล้ของวัตถุที่เป็นสื่อกระแสไฟฟ้าก็พอ

สิ่งที่ออดทำ

มันจะเล่นความถี่ใดก็ตามที่ตัวควบคุมกำหนดให้กับแผ่นสัมผัสที่กำลังถูกสัมผัส ทำให้แต่ละปุ่มมีโน้ตดนตรีที่แตกต่างกัน

แนวคิดเกี่ยวกับซอฟต์แวร์และไลบรารี

ทำให้แผ่นสัมผัสหนึ่งแผ่นสามารถกระตุ้นเสียงที่กำหนดได้อย่างน่าเชื่อถือก่อน จากนั้นจึงขยายรูปแบบเดียวกันนั้นไปยังแผ่นสัมผัสจำนวนมากเท่าที่คุณมีขา GPIO ที่ใช้งานได้ โดยกำหนดโน้ตของตัวเองในสเกลเพลงอย่างง่ายๆ

การทดสอบและการแก้ไขปัญหา

  • แผ่นสัมผัสทำงานเองโดยไม่มีอะไรสัมผัส โมดูลส่วนใหญ่มีตัวปรับความไวในตัว และการจัดสายไฟให้อยู่ห่างจากแผ่นสัมผัสอื่นๆ จะช่วยลดการจับคู่ความจุที่เล็ดลอดระหว่างกัน
  • แผ่นสัมผัสไม่ตอบสนองต่อการสัมผัสจริง โมดูลบางตัวอาจตั้งค่าเริ่มต้นเป็นโหมดสลับ (toggle mode) แทนที่จะเป็นโหมดชั่วขณะ (momentary mode) ให้ตรวจสอบแผ่นบัดกรีเลือกโหมดของโมดูลหรือจัมเปอร์หากมี
  • โน้ตสองตัวเล่นพร้อมกันโดยไม่คาดคิด ให้เพิ่มลอจิกการดีบาวซ์อย่างง่าย เพื่อให้การสัมผัสครั้งเดียวถูกอ่านเป็นเหตุการณ์ที่ชัดเจนเพียงครั้งเดียว แทนที่จะเป็นการกระตุ้นที่รวดเร็วหลายครั้ง

การอัพเกรดเพิ่มเติม

เพิ่มจอแสดงผล OLED จากกล่องอะไหล่เพื่อแสดงโน้ตที่กำลังเล่นอยู่ ทำให้กลายเป็นเครื่องดนตรีที่มีการแสดงผลด้วยภาพนอกเหนือจากเสียง

การเดินสาย

  • TTP223 VCC → ESP32-C3 SuperMini 3V3
  • TTP223 GND → ESP32-C3 SuperMini GND
  • TTP223 OUT → ESP32-C3 SuperMini GPIO4 — ขาเอนกประสงค์; หลีกเลี่ยง GPIO2/8/9 ซึ่งเป็นขาบูตในบอร์ด ESP32-C3 หลายรุ่น
  • Active Buzzer VCC/สัญญาณ → ESP32-C3 SuperMini GPIO5
  • Active Buzzer GND → ESP32-C3 SuperMini GND

การกำหนดหมายเลข/ป้ายชื่อ GPIO อาจแตกต่างกันเล็กน้อยระหว่างผู้จำหน่ายบอร์ด "ESP32-C3 SuperMini" ที่แตกต่างกัน — `#define`s ด้านล่างถูกตั้งค่าให้เป็นขาเอนกประสงค์ที่ปลอดภัยโดยทั่วไป แต่ให้ตรวจสอบซิลค์สกรีนของบอร์ดของคุณและปรับเปลี่ยนหากขาเหล่านั้นถูกใช้เพื่อสิ่งอื่นบนบอร์ดเฉพาะของคุณ

ความซื่อสัตย์เกี่ยวกับขอบเขต: รายการชิ้นส่วนประกอบด้วยแผ่นสัมผัส TTP223 หนึ่งแผ่นและออดแบบแอคทีฟหนึ่งตัว ดังนั้นนี่จึงเป็นตัวอย่าง "ตัวกระตุ้นโน้ต" แบบแผ่นเดียว ไม่ใช่เปียโนแบบหลายคีย์ — ไม่มีอะไรในรายการชิ้นส่วนที่จะนำมาสร้างคีย์เพิ่มเติมได้ โค้ดถูกเขียนขึ้นเป็นบล็อกอาคารที่สะอาดและนำกลับมาใช้ใหม่ได้: ตัวกระตุ้นการสัมผัสไปสู่เสียงที่ถูกดีบาวซ์ หากต้องการเปลี่ยนสิ่งนี้ให้เป็นเปียโนแบบหลายคีย์จริง ให้เพิ่มโมดูล TTP223 เพิ่มเติม (หนึ่งตัวต่อหนึ่งคีย์) บน GPIO ที่ว่างเพิ่มเติม และทำซ้ำรูปแบบการอ่าน/กระตุ้นเดียวกันต่อขา — นั่นคือเส้นทางที่แท้จริงและซื่อสัตย์ในการขยายขนาดสิ่งนี้

ขอพูดตามตรงเกี่ยวกับออด: โมดูลออดแบบ "แอคทีฟ" มีออสซิลเลเตอร์ภายในของตัวเองและจะคลิก/บี๊บที่ระดับเสียงเดียวเท่านั้นเมื่อถูกขับเคลื่อนด้วย HIGH — มันไม่สามารถเล่นโน้ต/ระดับเสียงดนตรีที่แตกต่างกันได้เหมือนกับเพียโซพาสซีฟที่ถูกขับเคลื่อนด้วย `tone()`/`ledcWriteTone()` PWM ดังนั้นโค้ดด้านล่างจึงไม่ได้สร้างเสียงดัดแปลง; แต่จะสร้างรูปแบบการเปิด/ปิดที่เป็นจังหวะ (การแตะสั้นๆ = เสียงบี๊บสั้นๆ, การสัมผัสค้างไว้ = เสียงบี๊บต่อเนื่อง) ตามความสามารถที่แท้จริงของส่วนนี้ หากต้องการโน้ตดนตรีจริงในภายหลัง ให้เปลี่ยนมาใช้เพียโซ/ออดแบบพาสซีฟ

โมดูล TTP223 โดยปกติจะทำงานเป็น active-HIGH เมื่อออกจากโรงงาน (OUT จะเป็น HIGH เมื่อสัมผัส) แต่บอร์ดบางรุ่นมีจัมเปอร์บัดกรีเพื่อกลับค่านี้เป็น active-LOW — โปรดตรวจสอบกับโมดูลของคุณก่อนที่จะเดินสายลอจิกที่สมมติว่า HIGH-on-touch

แผนภาพการต่อสาย

VCC → 3V3 GND OUT → GPIO4 GPIO5 GND ESP32-C3 SuperMini TTP223 Active Buzzer VCC/signal Active Buzzer

โค้ดเริ่มต้น

// Adjust these to match free, non-strapping GPIOs on your specific
// ESP32-C3 SuperMini board.
#define TOUCH_PIN  4
#define BUZZER_PIN 5

void setup() {
  Serial.begin(115200);
  pinMode(TOUCH_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN, LOW);
}

void loop() {
  bool touched = digitalRead(TOUCH_PIN) == HIGH; // flip to LOW if your TTP223 jumper is set active-LOW

  digitalWrite(BUZZER_PIN, touched ? HIGH : LOW);

  if (touched) {
    Serial.println("Pad touched — buzzer ON");
  }

  delay(20); // light debounce/poll rate
}

ไม่แน่ใจขั้นตอนไหน? ถามเรา