สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
นี่เป็นโครงการของฉันสำหรับชั้นเรียนในมหาวิทยาลัยแห่งหนึ่งของฉันที่ชื่อ SMP ในขณะที่เราใช้บอร์ดพัฒนา STM32F103RB ฉันจึงใช้โปรเจ็กต์นี้โดยเริ่มจากมิเตอร์ VU แบบธรรมดา จากนั้นฉันได้เพิ่มคุณสมบัติพิเศษบางอย่าง เช่น การรองรับ Bluetooth เพื่อถ่ายทอดค่าจาก ADC ไปยังแอพ Android เพื่อสร้างแผนภูมิ dB อย่างง่าย
ขั้นตอนที่ 1: ส่วนประกอบที่ใช้
- บอร์ดพัฒนา STM32F103RB
- HC-05 zs040 โมดูลบลูทูธ
- แผงมิเตอร์ VU แบบอะนาล็อก (ลิงก์)
- ไมโครโฟนอิเล็กเตรต
- LM324N ควอดออปแอมป์
- ทรานซิสเตอร์ TIP120 จำนวน 2 ตัว
- 3 1N4148 ไดโอด
- ตัวเก็บประจุและตัวต้านทานต่างๆ
แม้ว่าคุณจะสามารถขับวงจรนี้ออกจากราง 5V ของบอร์ดได้ แต่ฉันก็ยังใช้แหล่งจ่ายไฟ 5V ภายนอกด้วย
ขั้นตอนที่ 2: ผู้ติดตามซองจดหมาย
ส่วนหลักของการออกแบบนี้คือตัวติดตามซองจดหมายซึ่งรับสัญญาณจากไมโครโฟนอิเล็กเตรตและส่งสัญญาณออกตามสัดส่วนของแรงดันไฟฟ้ากับแอมพลิจูดสัญญาณของไมโครโฟน
สัญญาณดิบจากไมโครโฟนจะถูกส่งผ่านเครื่องขยายเสียงด้วยอัตราขยาย 150 ก่อน
จากนั้นสัญญาณจะถูกส่งผ่านไปยังตัวตามเอนเวโลปจริง ซึ่งควรส่งสัญญาณออกเฉพาะส่วนสัญญาณบวกเท่านั้น
ส่วนสุดท้ายกำลังลบแรงดันออฟเซ็ต 1.65V จากเอาต์พุตของตัวติดตามซองจดหมายเพื่อให้สัญญาณ 0 V สำหรับไม่มีเสียง 1.65 V สำหรับเสียงกลางและ 3.3 V สำหรับเสียงดังที่ควรเข้ากันได้กับในตัว ADC ของคณะกรรมการ
ผู้ติดตามซองจดหมายนี้ใช้งานจากคำตอบ StackExchange ที่ยอดเยี่ยมนี้
ขั้นตอนที่ 3: PWM สำหรับ Analog Meter
เพื่อให้ได้เข็มของมาตรวัด ฉันได้กำหนดค่าตัวจับเวลา TIM4 ของบอร์ดไมโครคอนโทรลเลอร์ด้วยความถี่ประมาณ 500 Hz
โดยการลองใช้รอบการทำงานที่แตกต่างกันอย่างต่อเนื่อง ฉันได้ตัดสินด้วยค่าบางค่าที่เพียงพอที่จะทำให้เข็มเปลี่ยนจาก 0 ถึง 100
ฉันจะให้รายละเอียดกระบวนการแสดงค่าที่แน่นอนในขั้นตอนต่อไปโดยใช้คณิตศาสตร์
ขั้นตอนที่ 4: การปรับเทียบไมโครโฟน
เมื่อทำผู้ติดตามซองจดหมายเสร็จแล้ว ฉันก็เขียนโค้ดง่ายๆ เพื่อใช้ ADC และตรวจสอบว่าค่าที่อ่านได้เปลี่ยนแปลงตามความดังภายในห้องจริงๆ
ในการ "แปล" ค่านี้เป็นการอ่าน dB จริง ฉันได้ใช้เครื่องกำเนิดเสียงออนไลน์ที่มีความถี่ 550 Hz และ Android ของฉันเพื่อให้อ่านค่าอ้างอิง
ฉันได้พล็อตค่าเหล่านั้นและใช้เครื่องมือ Curve Fit ของ MatLAB เพื่อรับฟังก์ชันที่จับคู่การอ่าน ADC กับการประมาณค่าจริงของระดับ dB (หรืออย่างน้อยก็ใกล้เคียงกับการอ่านในโทรศัพท์ของฉัน)
เราจะเห็นว่าสิ่งนี้เป็นไปตามมาตราส่วนลอการิทึมของไมโครโฟน
ฉันยังทำสิ่งเดียวกันเพื่อจับคู่ตำแหน่งเข็มกับค่า PWM ฉันรวบรวมค่าเหล่านั้นโดยเพิ่มค่า PWM ขึ้น 10 อย่างต่อเนื่องจนกว่าความต้องการจะอ่านในระดับของมัน
เมื่อรวม 2 ฟังก์ชันนี้เข้าด้วยกัน ฉันก็มีวิธีง่ายๆ ในการแสดงค่าที่อ่านได้จาก ADC เป็นค่าจริงบนตัวระบุมาตรวัด
ขั้นตอนที่ 5: แอพ Android
แอพใช้ไลบรารีสุดเจ๋งนี้เพื่อสื่อสารผ่านบลูทู ธ ซีเรียลเพื่อแลกเปลี่ยนข้อมูลไบต์
ข้อแม้หลักของระบบนี้คือความยาวคำสูงสุดที่ส่งผ่าน Bluetooth คือ 8 บิต และค่า ADC จะแสดงเป็น 12 บิต เพื่อแก้ปัญหานี้ ฉันแยกค่า ADC หนึ่งค่าออกเป็นค่า 6 บิตแยกกัน 2 ค่า (MSB และ LSB) โดยเหลืออีก 2 บิตที่เหลือใช้เพื่อระบุประเภทข้อความ (MSB, LSB, CHK)
ดังนั้น สำหรับค่า ADC เดียวที่เราต้องการออกอากาศ เราแบ่งค่าจริงออกเป็น 2 ข้อความ เพื่อตรวจสอบความสมบูรณ์ของข้อความเหล่านั้น ฉันได้ส่งข้อความที่สามพร้อมกับ XOR ของ 2 ข้อความแรก
หลังจากตรวจสอบความสมบูรณ์ของค่าแล้ว เราสามารถใช้ฟังก์ชันเดียวกันเพื่อรับระดับ dB และลงจุดบนแผนภูมิสดของเราได้
ขั้นตอนที่ 6: สรุป
แม้ว่าส่วนไมโครคอนโทรลเลอร์ของโปรเจ็กต์นี้จะทำงานได้ดีในการแสดงความดังภายในห้อง แต่ฉันพบปัญหาบางอย่างเมื่อส่งข้อมูลผ่านบลูทูธเนื่องจากแพ็กเก็ตสูญหาย
ซอร์สโค้ดสำหรับโครงการนี้สามารถพบได้ที่นี่:
- แอพคู่หู Android - repo
- รหัสไมโครคอนโทรลเลอร์ - repo
อย่าลังเลที่จะมีส่วนร่วมหากคุณพบว่าสิ่งนี้มีประโยชน์ในทางใดทางหนึ่ง