สวัสดีทุกคนในช่วงสองสามสัปดาห์ที่ผ่านมาฉันได้พยายามสานสัมพันธ์กับความรักที่มีต่อกีตาร์อีกครั้ง การเล่นกีตาร์แบบบ็อกซ์เป็นวิธีที่ฉันผ่อนคลายเมื่อไม่กี่ปีก่อนที่แซกโซโฟนจะเข้ามา ย้อนกลับไปที่กีตาร์หลังจาก 3 ปีที่ไม่ค่อยดีดคอร์ดฉันก็ค้นพบสิ่งอื่น ๆ ที่ฉันไม่รู้อีกต่อไปว่าแต่ละสายควรจะให้เสียงอย่างไรเพื่อให้เพื่อนของฉันพูดว่า ด้วยเหตุนี้ฉันจึงไม่สามารถปรับแต่งกีต้าร์ได้โดยไม่ต้องใช้แป้นพิมพ์หรือแอพมือถือที่ฉันดาวน์โหลดมาในภายหลัง สัปดาห์ที่ผ่านมาผ่านไปจนถึงไม่กี่วันที่ผ่านมาเมื่อชงในตัวผมกลายเป็นแรงบันดาลใจและฉันตัดสินใจที่จะสร้าง Arduino ตามกีต้าร์จูนเนอร์ ในการกวดวิชาของวันนี้ฉันจะแบ่งปันวิธีการสร้างของคุณเองDIY Arduino กีต้าร์จูนเนอร์
Guitar Tuner ทำงานอย่างไร
ก่อนที่เราจะย้ายไปใช้อุปกรณ์อิเล็กทรอนิกส์สิ่งสำคัญคือต้องเข้าใจหลักการเบื้องหลังการสร้าง มีโน้ตดนตรีหลัก 7 ตัวที่แสดงด้วยตัวอักษร; A, B, C, D, E, F, G และมักจะลงท้ายด้วย A อีกตัวหนึ่งซึ่งสูงกว่า A ตัวแรกเสมอในเพลงโน้ตเหล่านี้มีหลายเวอร์ชันเช่น A ตัวแรกและ A ตัวสุดท้ายโน้ตเหล่านี้ แต่ละคนมีความแตกต่างจากรูปแบบของพวกเขาและจากอีกลักษณะหนึ่งของเสียงที่เรียกว่าระดับเสียงระดับเสียงหมายถึงความดังหรือความต่ำของเสียงและระบุโดยความถี่ของเสียงนั้น เนื่องจากเราทราบความถี่ของโน้ตเหล่านี้เพื่อให้เราทราบว่ากีตาร์ได้รับการปรับจูนหรือไม่เราเพียงแค่ต้องเปรียบเทียบความถี่ของโน้ตของสตริงเฉพาะกับความถี่จริงของโน้ตที่สตริงนั้น ๆ
ความถี่ของโน้ตดนตรี 7 ตัวคือ:
A = 27.50 เฮิร์ต
B = 30.87 เฮิร์ต
C = 16.35 เฮิร์ต
D = 18.35 เฮิร์ต
E = 20.60 เฮิร์ต
F = 21.83 เฮิร์ต
G = 24.50 เฮิรตซ์
แต่ละรูปแบบของบันทึกย่อเหล่านี้จะมีระยะห่างเท่ากับ FxM เสมอโดยที่ F คือความถี่และ M เป็นจำนวนเต็มที่ไม่ใช่ศูนย์ ดังนั้นสำหรับ A สุดท้ายซึ่งตามที่อธิบายไว้ก่อนหน้านี้จะมีค่าอ็อกเทฟสูงกว่า A ตัวแรกความถี่คือ
27.50 x 2 = 55 เฮิร์ต
กีตาร์ (กีตาร์ลีด / บ็อกซ์) มักจะมี 6 สายที่แสดงโดยโน้ต E, A, D, G, B, E บนสตริงเปิด ตามปกติแล้ว E สุดท้ายจะอยู่ที่ระดับอ็อกเทฟสูงกว่า E ตัวแรกเราจะออกแบบจูนเนอร์กีตาร์ของเราเพื่อช่วยปรับแต่งกีตาร์โดยใช้ความถี่ของโน้ตเหล่านี้
ตามการปรับแต่งกีตาร์มาตรฐานโน้ตและความถี่ที่สอดคล้องกันของแต่ละสายจะแสดงในตารางด้านล่าง
สตริง |
ความถี่ |
สัญกรณ์ |
1 (จ) |
329.63 เฮิร์ตซ์ |
E4 |
2 (B) |
246.94 เฮิร์ตซ์ |
B3 |
3 (ช) |
196.00 เฮิรตซ์ |
G3 |
4 (D) |
146.83 เฮิร์ตซ์ |
D3 |
5 (A) |
110.00 เฮิร์ตซ์ |
A2 |
6 (จ) |
82.41 เฮิร์ตซ์ |
E2 |
ขั้นตอนของโครงการค่อนข้างง่าย เราแปลงสัญญาณเสียงที่สร้างโดยกีตาร์เป็นความถี่จากนั้นเปรียบเทียบกับค่าความถี่ที่แน่นอนของสตริงที่กำลังจูน นักกีตาร์จะได้รับการแจ้งเตือนโดยใช้ LED เมื่อค่าสัมพันธ์กัน
การตรวจจับ / แปลงความถี่เกี่ยวข้องกับ 3 ขั้นตอนหลัก
- กำลังขยาย
- การหักล้าง
- การแปลงอนาล็อกเป็นดิจิตอล (การสุ่มตัวอย่าง)
สัญญาณเสียงที่กำลังผลิตจะอ่อนเกินไปสำหรับ ADC ของ Arduino ที่จะรับรู้ดังนั้นเราจึงจำเป็นต้องขยายสัญญาณ หลังจากการขยายสัญญาณเพื่อให้สัญญาณอยู่ในช่วงที่ ADC ของ Arduino สามารถจดจำได้เพื่อป้องกันการตัดสัญญาณเราจะชดเชยแรงดันไฟฟ้าของสัญญาณ หลังจากหักล้างสัญญาณจะถูกส่งผ่านไปยังArduino ADC ซึ่งเป็นตัวอย่างและความถี่ของเสียงนั้นจะได้รับ
ส่วนประกอบที่จำเป็น
ต้องใช้ส่วนประกอบต่อไปนี้เพื่อสร้างโครงการนี้
- Arduino Uno x1
- LM386 x1
- ไมค์คอนเดนเซอร์ x1
- แจ็คไมโครโฟน / เสียง x1
- โพเทนชิออมิเตอร์ 10k x1
- ตัวเก็บประจุ O.1uf x2
- ตัวต้านทาน 100 โอห์ม x4.0
- ตัวต้านทาน 10 โอห์ม x1
- ตัวเก็บประจุ 10uf x3
- ไฟ LED สีเหลือง 5 มม. x2
- LED สีเขียว 5 มม. x1
- ปกติเปิดปุ่มกด x6
- สายจัมเปอร์
- เขียงหั่นขนม
แผนงาน
เชื่อมต่อส่วนประกอบตามที่แสดงในแผนภาพวงจรเครื่องรับกีตาร์ด้านล่าง
ปุ่มกดเชื่อมต่อโดยไม่ต้องดึงตัวต้านทานขึ้น / ลงเนื่องจากจะใช้ตัวต้านทานแบบดึงขึ้นของ Arduino เพื่อให้แน่ใจว่าวงจรเรียบง่ายที่สุด
Arduino Code สำหรับ Guitar Tuner
อัลกอริทึมที่อยู่เบื้องหลังโค้ดสำหรับGuitar Tuner Projectนี้เป็นเรื่องง่าย ในการปรับแต่งสายใดสายหนึ่งนักกีต้าร์จะเลือกสายโดยการกดปุ่มกดที่เกี่ยวข้องแล้วดีดสายที่เล่นอยู่ เสียงจะถูกรวบรวมโดยขั้นตอนการขยายและส่งต่อไปยัง Arduino ADC ความถี่จะถูกถอดรหัสและเปรียบเทียบ เมื่อความถี่อินพุตจากสตริงน้อยกว่าความถี่ที่กำหนดสำหรับสตริงนั้นจะมีไฟ LED สีเหลืองหนึ่งดวงติดขึ้นเพื่อแสดงว่าสตริงควรจะรัดแน่น เมื่อความถี่ที่วัดได้มากกว่าความถี่ที่กำหนดไว้สำหรับสตริงนั้นไฟ LED อีกดวงจะติดเมื่อความถี่อยู่ในช่วงที่กำหนดไว้สำหรับสตริงที่ไฟ LED สีเขียวมาเพื่อเป็นแนวทางในการเล่นกีตาร์
รหัส Arduino ที่สมบูรณ์จะได้รับในตอนท้ายที่นี่เราได้อธิบายสั้น ๆ เกี่ยวกับส่วนสำคัญของรหัส
เราเริ่มต้นด้วยการสร้างอาร์เรย์เพื่อเก็บสวิตช์
int buttonarray = {13, 12, 11, 10, 9, 8}; //
ต่อไปเราจะสร้างอาร์เรย์เพื่อเก็บความถี่ที่สอดคล้องกันสำหรับแต่ละสตริง
ความถี่ลอย = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // ทั้งหมดเป็น Hz
เมื่อเสร็จแล้วเราจะประกาศพินที่เชื่อมต่อ LED และตัวแปรอื่น ๆ ที่จะใช้ในการรับความถี่จาก ADC
int lowerLed = 7; int higherLed = 6; int justRight = 5; #define ความยาว 512 ไบต์ rawData; จำนวน int;
ถัดไปคือฟังก์ชัน void setup ()
ที่นี่เราเริ่มต้นด้วยการเปิดใช้งานการดึงภายในบน Arduino สำหรับแต่ละพินที่สวิตช์เชื่อมต่อ หลังจากนั้นเราตั้งค่าพินที่ไฟ LED เชื่อมต่อเป็นเอาต์พุตและเปิดจอภาพอนุกรมเพื่อแสดงข้อมูล
การตั้งค่าเป็นโมฆะ () { สำหรับ (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (higherLed, เอาท์พุท); pinMode (justRight เอาท์พุท); Serial.begin (115200); }
ถัดไปเป็น ห่วงเป็นโมฆะ ฟังก์ชั่นที่เราใช้การตรวจสอบความถี่และการเปรียบเทียบ
โมฆะ loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } else { sum = 0; pd_state = 0; ช่วง int = 0; สำหรับ (i = 0; i <len; i ++) { // Autocorrelation sum_old = sum; ผลรวม = 0; สำหรับ (k = 0; k <len-i; k ++) sum + = (rawData-128) * (rawData-128) / 256; // Serial.println (ผลรวม); // Peak Detect State Machine if (pd_state == 2 && (sum-sum_old) <= 0) { period = i; pd_state = 3; } if (pd_state == 1 && (sum> thresh) && (sum-sum_old)> 0) pd_state = 2; ถ้า (! i) { thresh = sum * 0.5; pd_state = 1; } } // ความถี่ที่ระบุเป็น Hz ถ้า (thresh> 100) { freq_per = sample_freq / period; Serial.println (freq_per); สำหรับ (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == HIGH) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } else if (freq_per - freqarray> 10) { digitalWrite (higherLed, HIGH); } else { digitalWrite (justRight, HIGH); } } } } นับ = 0; } }
รหัสสมบูรณ์ด้วยวิดีโอสาธิตได้รับด้านล่าง อัปโหลดรหัสไปยังบอร์ด Arduino ของคุณแล้วดีดออกไป