ในโครงการนี้เราจะมีการพัฒนาเครื่องกำเนิดเสียงโดยใช้ Arduino Uno เราจะมีปุ่มที่เชื่อมต่อกับ UNO และแต่ละปุ่มจะสร้างความเข้มของโทนเสียงที่แตกต่างกัน ความถี่ของโทนเสียงที่สร้างโดย UNO จะเท่ากันในทุกๆด้าน เป็นความเข้มของเสียงที่เปลี่ยนไปเมื่อกดแต่ละครั้ง นี้เป็นหนึ่งในวิธีที่ง่ายที่สุดที่จะทำให้เปียโนกับ Arduino Uno ตรวจสอบวงจรเปียโนนี้ด้วย
สามารถเพิ่มโทนเสียงได้ถึง 20 เสียงซึ่งให้รูปแบบของโทนเสียงที่ดีที่สุดและการเปลี่ยนแปลงที่นุ่มนวลกว่ามาก ความเข้มของโทนเสียงจะเปลี่ยนไปโดย PWM (Pulse Width Modulation) ตัวอย่างของ PWM แสดงในกราฟด้านล่าง
ใน PWM ความถี่ของสัญญาณหรือช่วงเวลาของสัญญาณ (Ton + Toff) จะคงที่เสมอ เฉพาะอัตราส่วนของเวลาเปิดและปิดเท่านั้นที่เปลี่ยนแปลง ตัวอย่างเช่นในกราฟที่สองในรูปด้านบนเวลาเปิดเครื่องคือ 80% และเวลาปิดเครื่องคือ 20% ของระยะเวลาที่สมบูรณ์
ในกราฟที่สามเวลาเปิดเครื่องคือ 50% และเวลาปิดเครื่องคือ 50% ของระยะเวลาที่สมบูรณ์ ดังนั้นในกรณีแรกเรามีอัตราส่วนหน้าที่ 80% และในกรณีที่สองเรามีอัตราส่วนหน้าที่ 20%
ด้วยการเปลี่ยนแปลงในอัตราส่วนหน้าที่เรามีการเปลี่ยนแปลง Vrms (ค่ารูทค่าเฉลี่ยกำลังสองของแรงดันไฟฟ้า) เมื่อแรงดันไฟฟ้านี้ถูกส่งไปยังออดจะทำให้เกิดเสียงที่แตกต่างกันเมื่อใดก็ตามที่มีการเปลี่ยนแปลงอัตราส่วนหน้าที่
เราจะตั้งโปรแกรม UNO เพื่อให้สัญญาณ PWM ที่มีอัตราส่วนหน้าที่แตกต่างกันสำหรับแต่ละปุ่ม ดังนั้นเราจึงมีเครื่องกำเนิดเสียงอยู่ในมือซึ่งสร้างโทนเสียงที่แตกต่างกันเมื่อกดแต่ละปุ่ม
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์: Arduino Uno, แหล่งจ่ายไฟ (5v), ตัวเก็บประจุ 1000 uF, ตัวเก็บประจุ 100 nF, Buzzer, ปุ่ม (8 ชิ้น)
ซอฟต์แวร์: AURDINO nightly หรือ Atmel studio 6.2
แผนภาพวงจรและคำอธิบายการทำงาน
วงจรสำหรับเครื่องกำเนิดโทนจะแสดงในแผนภาพด้านล่าง
เพื่อกรองสัญญาณรบกวนจากตัวเก็บประจุแรงดันไฟฟ้าจะถูกวางไว้ตรงขั้วดังที่แสดงในแผนภาพ
PWM ของ Arduino Uno สามารถทำได้ที่หมุดใด ๆ ที่มีสัญลักษณ์เป็น“ ~” บนบอร์ด PCB มีช่องสัญญาณ PWM หกช่องใน UNO อย่างไรก็ตามเราไม่สามารถใช้หมุด PWM ที่สร้างขึ้นบน PINS 0-7 ได้เนื่องจาก PINS เป็นที่ต้องการสำหรับอินเทอร์เฟซปุ่ม
มีเหตุผลในการเลือก PINS 0-7 เป็นอินพุตเนื่องจาก PINS 0-7 แสดงถึง PORTD ของไมโครคอนโทรลเลอร์ ดังนั้นในกรณีหลังเราสามารถหา BYTE ทั้งหมดของ PORTD ได้
ตอนนี้สำหรับการรับ PWM อัตราส่วนหน้าที่แตกต่างกันเราจะใช้คำสั่งต่อไปนี้
analogWrite (9, VALUE); |
จากเงื่อนไขข้างต้นเราสามารถรับสัญญาณ PWM ได้โดยตรงที่พินที่เกี่ยวข้อง พารามิเตอร์แรกในวงเล็บใช้สำหรับเลือกหมายเลขพินของสัญญาณ PWM พารามิเตอร์ที่สองใช้สำหรับการเขียนอัตราส่วนหน้าที่
ค่า PWM ของ Arduino Uno สามารถเปลี่ยนได้ตั้งแต่ 0 ถึง 255 โดยให้“ 0” ต่ำสุดเป็น“ 255” สูงสุด ด้วย 255 เป็นอัตราส่วนหน้าที่เราจะได้รับ 5V ที่ PIN9 หากกำหนดอัตราส่วนหน้าที่เป็น 125 เราจะได้รับ 2.5V ที่ PIN9 เราจะแบ่งอัตราส่วนหน้าที่ 0-250 ระหว่าง 8 ปุ่มที่เชื่อมต่อที่ PORTD ของ UNO ที่นี่ฉันเลือกทีละ 25 ครั้งสำหรับทุกปุ่มแล้วแต่คุณจะเลือก
ด้วยสิ่งนั้นเราจะมีสัญญาณ PWM ซึ่งอัตราส่วนหน้าที่เปลี่ยนไปในแต่ละปุ่ม สิ่งนี้มอบให้กับออดเรามีเครื่องกำเนิดเสียง การทำงานของ เครื่องกำเนิดเสียงที่ใช้ Arduino นี้อธิบายทีละขั้นตอนในรหัส C ที่ระบุด้านล่าง