สร้างเสียงโดยการแตะนิ้วมือโดยใช้ Arduinoส่วนประกอบที่ต้องการ:
วัสดุที่จำเป็นสำหรับโครงการนี้มีดังต่อไปนี้ไม่จำเป็นต้องติดอยู่เหมือนกัน เมื่อคุณคว้าแนวคิดคุณสามารถใช้วิธีการสร้างอาคารของคุณเองได้
แผนผังวงจรและคำอธิบาย:
แผนภาพวงจรสำหรับArduino Palm Pianoดังแสดงด้านล่าง
|
โครงการที่ใช้ทั้งหมดสี่เซ็นเซอร์ที่เป็นสองเซ็นเซอร์ดิ้นและสองคู่ดาร์ลิงตันทำหน้าที่เป็นเซ็นเซอร์สัมผัส เรายังได้ใช้ตัวต้านทานแบบดึงลงสองตัว R1 และ R2 ของแต่ละค่า 10k ซึ่งจะทำหน้าที่เป็นตัวต้านทานแบบดึงลงสำหรับเซ็นเซอร์ Flex ใช้เซ็นเซอร์ Flex เพื่อสร้างเสียงสามแบบโดยการใช้นิ้วเดียวโดยพิจารณาจากระดับความโค้งงอ เราสามารถผลิตเสียงได้ 6 เสียงโดยใช้สองนิ้ว เรียนรู้เกี่ยวกับFlex Sensor ที่นี่
คู่ Darlington:
ก่อนที่เราจะดำเนินการต่อสิ่งสำคัญคือต้องรู้ว่า Darlington คืออะไรและทำงานอย่างไรในโครงการของเรา คู่ Darlington สามารถกำหนดเป็นสองทรานซิสเตอร์สองขั้วเชื่อมต่อในลักษณะที่ปัจจุบันขยายโดยคนแรกจะขยายเพิ่มเติมโดยทรานซิสเตอร์ที่สอง คู่ Darlington แสดงไว้ในภาพด้านล่าง:
ดังที่แสดงไว้ข้างต้นเราได้ใช้ทรานซิสเตอร์ BC547 สองตัวที่มีการรวบรวมตัวเก็บรวบรวมและ emitter ของทรานซิสเตอร์ตัวแรกจะเชื่อมต่อกับฐานของทรานซิสเตอร์ที่สอง วงจรนี้ทำหน้าที่เป็นเครื่องขยายเสียงที่มีกำลังรับซึ่งหมายถึงสัญญาณขนาดเล็กที่ให้กับฐานของทรานซิสเตอร์ตัวแรกก็เพียงพอที่จะส่งผลต่อฐานของทรานซิสเตอร์ที่สอง ร่างกายของเราทำหน้าที่เป็นพื้นดินที่นี่ดังนั้นเมื่อใดก็ตามที่เราสัมผัสฐานของทรานซิสเตอร์ที่ทรานซิสเตอร์ที่สองจะลำเอียง เราได้สร้างเซ็นเซอร์สัมผัสสำหรับโครงการนี้ขึ้นมาเพื่อประโยชน์ของเรา
หมายเลขขาที่ 2 และ 3 เป็นขาขัดจังหวะที่ Arduinoซึ่งจะถูกดึงขึ้นโดยใช้ตัวต้านทานแบบดึงขึ้นภายในและหมุดเหล่านี้จะยึดกับพื้นเมื่อใดก็ตามที่สวิตช์ดาร์ลิงตันปิดลง วิธีนี้ทุกครั้งที่เราสัมผัสลวด (จากฐานของ 1 เซนต์ทรานซิสเตอร์) ขัดจังหวะจะถูกเรียกจาก Arduino
ใช้สองนิ้วสามารถผลิตเพียงสองประเภทของเสียงด้วยเหตุนี้ฉันยังเพิ่มขึ้นเซ็นเซอร์ดิ้นซึ่งจะปรับเปลี่ยนโทนสีขึ้นอยู่กับวิธีการมากก็จะงอ ฉันได้ตั้งโปรแกรมให้ผลิตเสียงที่แตกต่างกันสามแบบต่อนิ้วขึ้นอยู่กับจำนวนนิ้วที่งอ (flex sensor) คุณสามารถเพิ่มจำนวนได้หากต้องการมีโทนเสียงที่ปลายนิ้ว
ฉันทำกระดานสมบูรณ์บนบอร์ด perf เพื่อให้พอดีกับปาล์มของฉัน แต่คุณสามารถใช้ breadboard เช่นกัน เพียงให้แน่ใจว่าร่างกายของคุณสัมผัสพื้นของวงจรในบางจุด เมื่อคุณประสานทุกอย่างแล้วควรมีลักษณะดังนี้
ฉันใช้ถุงมือสองนิ้วเพื่อรักษาสายไฟจากคู่ของ Darlington และเซ็นเซอร์แบบดิ้นในตำแหน่งดังที่แสดงไว้ด้านบน คุณสามารถมากับความคิดของคุณ (ดีกว่าถ้าเป็นไปได้) เพื่อรักษาความปลอดภัยในสถานที่ในขณะที่คุณกำลังเล่นเสียงของคุณ
การเขียนโปรแกรม Arduino:
โปรแกรมสำหรับเครื่องกำเนิดไฟฟ้า Tap Tap Tone ของ Arduinoนี้ค่อนข้างตรงไปข้างหน้า เราต้องตรวจสอบการขัดจังหวะจากสายดาร์ลิงตันและหากพบเราต้องเล่นเสียงซึ่งขึ้นอยู่กับเซ็นเซอร์แบบโค้งงอมาก รหัสที่สมบูรณ์จะได้รับที่ท้ายโพสต์นี้ แต่ฉันได้อธิบายชิ้นส่วนที่สำคัญไม่กี่ด้านล่าง
หมายเหตุ: โปรแกรมนี้ทำงานร่วมกับห้องสมุด "pitches.h" เพื่อให้แน่ใจว่าคุณได้เพิ่มไฟล์ส่วนหัวลงในโปรแกรมของคุณก่อนที่จะคอมไพล์ คุณสามารถดาวน์โหลดไฟล์ส่วนหัว pitches.h จากที่นี่
ในฟังก์ชันการตั้งค่า เราจะเริ่มต้นขา 2 และ 3 เป็นอินพุทพร้อมตัวต้านทานแบบดึงขึ้น นอกจากนี้เรายังประกาศให้เป็นหมุดขัดจังหวะและดำเนิน tone1 () ที่เมื่อมีการขัดจังหวะในขา 2 และ tone2 () ฟังก์ชันเมื่อมีการขัดจังหวะใน 3 ถขา การขัดจังหวะเหล่านี้จะถูกเรียกใช้เมื่อใดก็ตามที่หมุดเหล่านี้ได้รับต่ำจากสถานะที่ดึงขึ้น
การตั้งค่าเป็นโมฆะ () { pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (2), tone1, LOW); attachInterrupt (digitalPinToInterrupt (3), tone2, LOW); Serial.begin (9600); }
ภายในฟังก์ชั่นลูปเราตรวจสอบว่าเซ็นเซอร์แบบโค้งงออยู่เสมอ ตัวอย่างเช่น FlexSensor 1 ของฉันให้ค่าประมาณ 200 เมื่อทิ้งราบเรียบและลงไปจนถึง 130 ตอนที่ฉันงอมันให้มากที่สุดดังนั้นฉันจึงมีค่าตั้งแต่ 200 ถึง 130 เป็น 1 ถึง 3 เนื่องจากฉันต้องเล่น 3 ประเภทที่แตกต่างกัน ของโทน คุณต้องปรับแต่งเส้นสองเส้นนี้ตามค่าเซนเซอร์ Flex และจำนวนโทนเสียง
void loop () { แผนที่ flexSensor1 = (analogRead (A0), 200,130,1,3); // จัดทำค่าของคุณเองตามเซ็นเซอร์ flex ของคุณ แผนที่ flexSensor2 = (analogRead (A1), 170,185,1,3); // จัดทำค่าของคุณเองตามเซ็นเซอร์ flex ของคุณ }
ฟังก์ชั่นtone1 ()จะถูกเรียกใช้เมื่อมีการตรวจพบ interrupt ใน pin 2 สิ่งที่เกิดขึ้นภายในtone1 ()จะปรากฏขึ้นที่ด้านบน เรามองไปที่ค่าของ FlexSensor1 และเล่นเสียงตามค่า flexSesnor เสียงเรียกเข้าจะเล่นโดยใช้ฟังก์ชั่นเสียงของ Arduino เราได้อธิบายฟังก์ชัน tone () ไว้ในโครงการก่อนหน้านี้แล้ว
โมฆะ tone1 () { ถ้า (flexSensor1 == 1) โทน (8, NOTE_D4,50); อื่นถ้า (flexSensor1 == 2) โทน (8, NOTE_A3,50); อื่นถ้า (flexSensor1 == 3) โทน (8, NOTE_G4,50); อื่น โทน (8, NOTE_D4,50); }
บรรทัดด้านล่างใช้สำหรับเล่นเสียง คุณสามารถเล่นเสียงใดก็ได้ที่มีอยู่ในไฟล์ส่วนหัว "pitches.h" บรรทัดด้านบนเช่นเล่น NOTE_A3 บนขาเป็นระยะเวลา 50 มิลลิวินาที
โทน (8, NOTE_A3,50); // tone (PinNum, ชื่อโน้ต, ระยะเวลา);
การทำงาน:
เมื่อฮาร์ดแวร์ของคุณพร้อมแล้วให้อัปโหลดโค้ดแล้วติดตั้งไว้บนนิ้วมือ ตรวจสอบให้แน่ใจว่าร่างกายของคุณสัมผัสกับพื้นของวงจรในบางจุด ตอนนี้เพียงแค่สัมผัสวัสดุนำไฟฟ้าหรือร่างกายของคุณและคุณควรจะสามารถได้ยินเสียงที่เกี่ยวข้อง คุณสามารถเล่นเมโลดี้หรือเพลงของคุณเองได้โดยการแตะที่ช่วงเวลาต่างๆและตำแหน่งต่างๆ
วิดีโอด้านล่างแสดงให้เห็นถึงการทำงานที่สมบูรณ์ของโครงการ TH หวังว่าคุณจะสนุกกับการสร้างโครงการคำแนะนำหรือคำถามต่างๆสามารถโพสต์ได้ในส่วนความคิดเห็นด้านล่าง ตรวจสอบArduino Audio PlayerและArduino Tone Generator Project ด้วย
แฮปปี้แตะ!
รหัส
/ *
* ผู้เล่น Tap and Tone ของ Arduino
เผยแพร่โดย: CircuitDigest.com
* รหัส: B.Aswinth Raj
* วันที่: 8-7-2017
*
* ### CONNECTIONS ###
* Darlington Wire 1 -> Pin 2
* Darlington Wire 2 -> Pin 3
* FlexSensor 1 -> A0
* FlexSensor 2 -> A1
* ลำโพง -> Pin 8
* /
* ผู้เล่น Tap and Tone ของ Arduino
เผยแพร่โดย: CircuitDigest.com
* รหัส: B.Aswinth Raj
* วันที่: 8-7-2017
*
* ### CONNECTIONS ###
* Darlington Wire 1 -> Pin 2
* Darlington Wire 2 -> Pin 3
* FlexSensor 1 -> A0
* FlexSensor 2 -> A1
* ลำโพง -> Pin 8
* /
# include "pitches.h" / / เพิ่ม librarey นี้ลงในโฟลเดอร์โครงการ
flexSensor1 int, flexSensor2;
flexSensor1 int, flexSensor2;
การตั้งค่าเป็นโมฆะ () {
pinMode (2, INPUT_PULLUP);
pinMode (3, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (2), tone1, LOW); / / Trigger tone1 เมื่อ LOW
attachInterrupt (digitalPinToInterrupt (3), tone2, LOW); / / ทริกเกอร์ tone2 เมื่อ LOW
Serial.begin (9600);
}
pinMode (2, INPUT_PULLUP);
pinMode (3, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (2), tone1, LOW); / / Trigger tone1 เมื่อ LOW
attachInterrupt (digitalPinToInterrupt (3), tone2, LOW); / / ทริกเกอร์ tone2 เมื่อ LOW
Serial.begin (9600);
}
void loop () {
flexSensor1 = แผนที่ (analogRead (A0), 200,130,1,3); //
แม็ปค่าของคุณเองตามเซ็นเซอร์ flex ของคุณflexSensor2 = แผนที่ (analogRead (A1), 170,185,1,3); // แม็ปค่าของคุณเองตามเซ็นเซอร์แบบยืดหยุ่นของคุณ
}
flexSensor1 = แผนที่ (analogRead (A0), 200,130,1,3); //
แม็ปค่าของคุณเองตามเซ็นเซอร์ flex ของคุณflexSensor2 = แผนที่ (analogRead (A1), 170,185,1,3); // แม็ปค่าของคุณเองตามเซ็นเซอร์แบบยืดหยุ่นของคุณ
}
/ / ** ฟังก์ชันเพื่อดำเนินการใน Interrupt 1 ** / /
void tone1 ()
{
void tone1 ()
{
ถ้า (flexSensor1 == 1)
โทน (8, NOTE_D4,50);
อื่นถ้าเสียง (flexSensor1 == 2)
(8, NOTE_A3,50);
อื่นถ้า (flexSensor1 == 3)
โทน (8, NOTE_G4,50); เสียง
อื่น
(8, NOTE_D4,50);
}
โทน (8, NOTE_D4,50);
อื่นถ้าเสียง (flexSensor1 == 2)
(8, NOTE_A3,50);
อื่นถ้า (flexSensor1 == 3)
โทน (8, NOTE_G4,50); เสียง
อื่น
(8, NOTE_D4,50);
}
/ / ** ฟังก์ชันเพื่อดำเนินการใน Interrupt 2 ** / /
void tone2 ()
{
void tone2 ()
{
ถ้า (flexSensor1 == 1)
เสียง (8, NOTE_A4,50);
อื่นถ้าเสียง (flexSensor1 == 2)
(8, NOTE_F4,50);
อื่นถ้า (flexSensor1 == 3)
โทน (8, NOTE_E4,50); เสียง
อื่น
(8, NOTE_A4,50);
}
เสียง (8, NOTE_A4,50);
อื่นถ้าเสียง (flexSensor1 == 2)
(8, NOTE_F4,50);
อื่นถ้า (flexSensor1 == 3)
โทน (8, NOTE_E4,50); เสียง
อื่น
(8, NOTE_A4,50);
}
วีดีโอ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น