สารบัญ:

แปลงเพลงเป็นดิจิทัลด้วย Arduino: 6 ขั้นตอน
แปลงเพลงเป็นดิจิทัลด้วย Arduino: 6 ขั้นตอน

วีดีโอ: แปลงเพลงเป็นดิจิทัลด้วย Arduino: 6 ขั้นตอน

วีดีโอ: แปลงเพลงเป็นดิจิทัลด้วย Arduino: 6 ขั้นตอน
วีดีโอ: ARDUINO #6 การใช้งานเบื้องต้น เเบบละเอียด บอร์ดวงจร ARDUINO UNO R3 HOW TO USE. IOREF AREF. POWER 2024, พฤศจิกายน
Anonim
แปลงเพลงเป็นดิจิทัลด้วย Arduino
แปลงเพลงเป็นดิจิทัลด้วย Arduino

ฉันต้องการสร้างโครงการที่รวมสองวิชาที่ฉันโปรดปราน: วิทยาศาสตร์และดนตรี ฉันคิดถึงทุกวิถีทางที่จะรวมสองโดเมนนี้เข้าด้วยกัน และฉันคิดว่ามันน่าสนใจที่จะทำให้ Arduino เล่น Fur Elise ในขณะที่แสดงระดับเสียงของโน้ตในเฮิรตซ์ เอาล่ะ มาเริ่มสร้างกันเลย!

คุณจะต้องใช้ Arduino Uno หรือ Mega หนึ่งตัว สายจัมเปอร์จำนวนมาก ออด Piezo เขียงหั่นขนม จอ LCD ขนาด 16*2 ที่มีหมุดปัดน้ำฝนทั้งหมด และโพเทนชิออมิเตอร์ 10k (คุณอาจได้ยินพวกมันถูกเรียกว่าพอตมิเตอร์). ทางที่ดีควรรวบรวมอุปกรณ์เหล่านี้ทั้งหมดก่อนที่เราจะเริ่มสร้าง

ขั้นตอนที่ 1: แปลงโน้ตดนตรีเป็นโน้ตดิจิทัล: ค่าหน่วงเวลา

แปลงโน้ตดนตรีเป็นโน้ตดิจิทัล: ค่าดีเลย์
แปลงโน้ตดนตรีเป็นโน้ตดิจิทัล: ค่าดีเลย์

มีสองขั้นตอนในการถ่ายทอดบันทึกจากคะแนนเป็นดิจิทัลเทียบเท่า ขั้นแรก เราจะต้องเขียนเวลาที่บันทึกเป็นมิลลิวินาที ฉันใช้แผนภูมิที่พบทางออนไลน์สำหรับงานนี้ ฉันถอดความความยาวของโน้ตเป็นมิลลิวินาทีโดยพิจารณาจากโน้ตตัวหนึ่งว่าเป็นโน้ตครึ่งตัว โน้ตตัวหนึ่งในสี่ตัว ตัวที่แปด ฯลฯ คุณสามารถเห็นตัวเลขเหล่านี้ในรหัสของฉันเป็น delay(); ฟังก์ชันและตัวเลขในวงเล็บจะเป็นค่าการหน่วงเวลาเป็นมิลลิวินาทีที่เรากำหนดในขั้นตอนนี้

ขั้นตอนที่ 2: แปลงโน้ตดนตรีเป็นโน้ตดิจิทัล: ค่าเฮิรตซ์

แปลงโน้ตดนตรีเป็นโน้ตดิจิทัล: ค่าเฮิรตซ์
แปลงโน้ตดนตรีเป็นโน้ตดิจิทัล: ค่าเฮิรตซ์

ก่อนเริ่มขั้นตอนนี้ ให้ฉันกำหนดคำศัพท์ทางเทคนิคบางอย่างก่อน "ค่า" ของโน้ตสามารถใช้แทนกันได้กับคำว่า "pitch" "value" และ "note" ตอนนี้ คุณต้องอ่านโน้ตแต่ละเพลงจากสกอร์ จากนั้นคุณจะต้องแปลโน้ตแต่ละรายการเป็นเฮิรตซ์โดยใช้เพลงเป็นตารางเฮิรตซ์ ซึ่งคุณสามารถค้นหาออนไลน์ได้อย่างง่ายดาย สิ่งหนึ่งที่ต้องจำไว้คือ C กลางแสดงเป็น C4 บนโต๊ะ และอ็อกเทฟที่สูงกว่าคือ C5 เป็นต้น เมื่อบันทึกย่อเหล่านี้ทั้งหมดเป็นเฮิรตซ์ คุณจะวางค่าลงในเสียงฟังก์ชัน (x, y, z); โดยที่ X คือหมายเลขพินหรือ const int ซึ่งเป็นวิธีกำหนดตัวแปรที่ผมจะอธิบายในภายหลัง Y จะเป็นค่าเฮิรตซ์ที่คุณเพิ่งคัดลอก และ Z จะเป็นระยะเวลาของโน้ตในหน่วยมิลลิวินาทีที่ปัดเศษเป็นร้อยที่ใกล้ที่สุด ล่าช้า(); ค่าจะเป็นระยะเวลาของบันทึกย่อ ทีนี้มาออกแบบวงจรที่เล่นเพลงได้

ขั้นตอนที่ 3: การออกแบบวงจร

การออกแบบวงจร
การออกแบบวงจร

ตอนนี้เราได้แปลบันทึกทั้งหมดเป็นค่าดิจิทัลที่คอมพิวเตอร์สามารถเข้าใจได้ ก็ถึงเวลาสร้างวงจร เริ่มต้นด้วยการใช้เขียงหั่นขนมและวางหน้าจอ LCD ด้วยหมุดแรก (GND) ในแถวที่ 14 วางออดที่ใดก็ได้ที่คุณต้องการ และวางโพเทนชิออมิเตอร์ไว้ข้างๆ เป้าหมายคือการจัดวางทุกอย่างให้เป็นระเบียบ เพื่อลดความยุ่งเหยิงของสายไฟ วาง Arduino ถัดจากเขียงหั่นขนม และเชื่อมต่อพิน 5v กับรางบวกของเขียงหั่นขนม และพินกราวด์กับรางลบ ตอนนี้ เราพร้อมที่จะเชื่อมต่อจัมเปอร์ระหว่าง Arduino และส่วนประกอบต่างๆ แล้ว

ตอนนี้ มาพูดถึงหมุดบน LCD และวิธีต่อสายกัน

GND ย่อมาจาก กราวด์ นี่คือลวดลบในกระแสตรง ลวด GND กับรางลบของเขียงหั่นขนม

VCC ย่อมาจาก Voltage at the Common Collector และนี่คือที่ที่คุณเชื่อมต่อแหล่งพลังงาน 5 โวลต์ของคุณ (รางพลังงานบวก)

VO ย่อมาจาก Contrast ต่อสายนี้เข้ากับพินตรงกลางของโพเทนชิออมิเตอร์ เชื่อมต่อพินด้านซ้ายของโพเทนชิออมิเตอร์กับรางจ่ายไฟบวก และพินขวากับรางจ่ายไฟภาคพื้นดิน

RS ย่อมาจาก Register Select และ Arduino ใช้เพื่อบอกให้จอแสดงผลเก็บข้อมูลไว้ที่ไหน เชื่อมต่อพินนี้กับพิน 12 บน Arduino

RW ย่อมาจาก Read/Write pin ซึ่ง Arduino ใช้เพื่อตรวจสอบว่าหน้าจอแสดงสิ่งที่คุณตั้งโปรแกรมให้แสดงหรือไม่ เชื่อมต่อพินนี้กับรางลบบนเขียงหั่นขนม

E ย่อมาจาก Enable ซึ่งบอก LCD ว่าพิกเซลใดที่จะเปิดใช้งาน (เปิด) หรือปิดใช้งาน (ปิด) เชื่อมต่อพินนี้กับพิน Arduino 11

D4, D5, D6 และ D7 เป็นหมุดแสดงผลที่ควบคุมอักขระและตัวอักษรที่แสดง เชื่อมต่อกับหมุด Arduino 5, 4, 3 และ 2 ตามลำดับ

ขา A ซึ่งบางครั้งเรียกว่า LED เป็นขั้วบวก LED สำหรับไฟแบ็คไลท์ เชื่อมต่อสิ่งนี้เข้ากับรางจ่ายไฟบวกด้วยสายไฟหรือตัวต้านทาน 220 โอห์ม ตัวต้านทานจะดีกว่าสำหรับการใช้งานอีกต่อไปเนื่องจากเป็นอะไหล่ของ LCD แต่ถ้าอุปกรณ์จะไม่ถูกใช้งานทั้งกลางวันและกลางคืน คุณไม่จำเป็นต้องมีตัวต้านทาน

Pin K ซึ่งบางครั้งมีป้ายกำกับว่า LED (สับสน) ก็คือพินกราวด์ LED เชื่อมต่อสิ่งนี้กับรางไฟฟ้าภาคพื้นดิน

ขั้นตอนที่ 4: การอัปโหลดโค้ด: How-To

เสียบ Arduino ของคุณเข้ากับ USB ของคอมพิวเตอร์ อัปโหลดโค้ดต่อไปนี้โดยใช้โปรแกรมเมอร์ Arduino IDE

#รวม

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal LCD (rs, en, d4, d5, d6, d7);

การตั้งค่าเป็นโมฆะ () {

// ตั้งค่าจำนวนคอลัมน์และแถวของ LCD: lcd.begin(16, 2); // พิมพ์ข้อความไปยัง LCD lcd.print("สนามเฮิรตซ์:!"); ล่าช้า (1000); void loop () { // เล่น e4 delay (600); // หยุดชั่วคราวเป็นเวลา 0.6 วินาที (10, 329.63, 300); // เล่น e ไปที่ออดที่พิน 10 นาน.3 วินาที lcd.print (" 329.63"); //แสดงข้อความบน LCD "329.63"

ดีเลย์(350);//หน่วงเวลา.35 วินาที

lcd.clear();//clear LCD และรีเซ็ตสำหรับข้อความถัดไป // เล่น d4# tone(10, 311.13, 300); lcd.print("311.13"); ล่าช้า (350); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (350); lcd.clear(); // เล่น d4# โทน (10, 311.13, 300); lcd.print("311.13"); ล่าช้า (350); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (350); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นเสียง d4 (10, 293.66, 300); lcd.print("293.66"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 300); lcd.print("261.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3(10, 220, 900); lcd.print("220.0"); ล่าช้า (1000); lcd.clear();//line60//helpsave//avrdude.failure.eeprom // เล่น d3 tone(10, 146.83, 300); lcd.print("146.63"); ล่าช้า (350); lcd.clear(); // เล่นโทน f3 (10, 174.61, 300); lcd.print("174.61"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3 (10, 220, 300); lcd.print("220"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 900); lcd.print("246.94"); ล่าช้า (1000); lcd.clear();

// เล่น e3

โทน (10, 164.81, 300); lcd.print("164.81"); ล่าช้า (400); lcd.clear(); // เล่น g3# โทน (10, 207.65, 300); lcd.print("207.65"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 900); lcd.print("261.63"); ล่าช้า (1000); lcd.clear(); // เล่นอีโทน (10, 164.81, 300); lcd.print("164.81"); ล่าช้า (400); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (400); lcd.clear(); // เล่น d4# โทน (10, 311.13, 300); lcd.print("311.13"); ล่าช้า (400); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (400); lcd.clear(); // เล่น d4# โทน (10, 311.13, 300); lcd.print("311.13"); ล่าช้า (400); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นเสียง d4 (10, 293.66, 300); lcd.print("293.66"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 300); lcd.print("261.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3(10, 220, 900); lcd.print("220.0"); ล่าช้า (1000); lcd.clear(); // เล่นเสียง d3 (10, 146.83, 300); lcd.print("146.83"); ล่าช้า (400); lcd.clear(); // เล่นโทน f3 (10, 174.61, 300); //eeprom 20--6 ใช่ไม่ใช่, แฟลช 65--0 noyes lcd.print("174.61"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3(10, 220, 300); lcd.print("220.0"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 900); lcd.print("246.94"); ล่าช้า (1000); lcd.clear(); // เล่นโทน f3 (10, 174.61, 300); lcd.print("174.61"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 300); lcd.print("261.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3(10, 220, 900); lcd.print("220.0"); ล่าช้า (1000); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 300); lcd.print("261.63"); ล่าช้า (400); lcd.clear(); // เล่นเสียง d4 (10, 293.66, 300); lcd.print("293.66"); ล่าช้า (400); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 900); lcd.print("329.63"); ล่าช้า (1000); lcd.clear(); // เล่นเสียง g3 (10, 196, 300); lcd.print("196.0"); ล่าช้า (400); lcd.clear(); // เล่นโทน f4(10, 349.23, 300); lcd.print("349.23"); ล่าช้า (400); lcd.clear(); // เล่นโทนเสียง e4 (10, 329.23, 300); lcd.print("329.23"); ล่าช้า (400); lcd.clear(); // เล่นเสียง d4 (10, 293.63, 900); lcd.print("293.63"); ล่าช้า (1000); lcd.clear(); // เล่นเสียง e3 (10, 164.81, 300); lcd.print("164.81"); ล่าช้า (400); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (400); lcd.clear(); // เล่นเสียง d4 (10, 293.63, 300); lcd.print("293.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 900); lcd.print("261.63"); ล่าช้า (1000); lcd.clear(); // เล่นเสียง d3 (10, 146.83, 300); lcd.print("146.83"); ล่าช้า (400); lcd.clear(); // เล่นเสียง d4 (10, 293.63, 300); lcd.print("293.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 300); lcd.print("261.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 900); lcd.print("246.94"); ล่าช้า (1000); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (400); lcd.clear(); // เล่น d4# โทน (10, 311.13, 300); lcd.print("311.13"); ล่าช้า (350); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (350); lcd.clear(); // เล่น d4# โทน (10, 311.13, 300); lcd.print("311.13"); ล่าช้า (350); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (350); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นเสียง d4 (10, 293.66, 300); lcd.print("293.66"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 300); lcd.print("261.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3(10, 220, 900); lcd.print("220.0"); ล่าช้า (1000); lcd.clear(); // เล่นเสียง d3 (10, 146.83, 300); lcd.print("146.83"); ล่าช้า (350); lcd.clear(); // เล่นโทน f3 (10, 174.61, 300); lcd.print("174.61"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3 (10, 220, 300); lcd.print("220.0"); ล่าช้า (400); // เล่น b3 lcd.clear(); โทน (10, 246.94, 900); lcd.print("246.94"); ล่าช้า (1000); lcd.clear(); // เล่นเสียง e3 (10, 164.81, 300); lcd.print("164.81"); ล่าช้า (400); lcd.clear(); // เล่น g#3 โทน (10, 207.65, 300); lcd.print("207.65"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 900); lcd.print("261.63"); ล่าช้า (1000); ล่าช้า (300); lcd.clear(); // เล่นเสียง e3 (10, 164.81, 300); lcd.print("164.81"); ล่าช้า (400); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (400); lcd.clear(); // เล่น d4# โทน (10, 311.13, 300); lcd.print("311.13"); ล่าช้า (400); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (400); lcd.clear(); // เล่น d4# โทน (10, 311.13, 300); lcd.print("311.13"); ล่าช้า (400); lcd.clear(); // เล่นเสียง e4 (10, 329.63, 300); lcd.print("329.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นเสียง d4 (10, 293.66, 300); lcd.print("293.66"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 300); lcd.print("261.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3(10, 220, 900); lcd.print("220.0"); ล่าช้า (1000); lcd.clear(); // เล่นเสียง d3 (10, 146.83, 300); lcd.print("146.83"); ล่าช้า (400); lcd.clear(); // เล่นโทน f3 (10, 174.61, 300); lcd.print("174.61"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3(10, 220, 300); lcd.print("220.0"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 900); lcd.print("246.94"); ล่าช้า (1000); lcd.clear(); // เล่นโทน f3 (10, 174.61, 300); lcd.print("174.61"); ล่าช้า (400); lcd.clear(); // เล่นโทน c4 (10, 261.63, 300); lcd.print("261.63"); ล่าช้า (400); lcd.clear(); // เล่นโทน b3 (10, 246.94, 300); lcd.print("246.94"); ล่าช้า (400); lcd.clear(); // เล่นโทน a3(10, 220, 900); lcd.print("220.0"); ล่าช้า (1000); lcd.clear(); }

ขั้นตอนที่ 5: การอัปโหลดโค้ด: ทั้งหมดนี้หมายความว่าอย่างไร

มากำหนดฟังก์ชันบางอย่างเป็นภาษาอังกฤษกัน เพื่อให้คุณเข้าใจโค้ด

โทน(x, y, z); = เล่นโทนเสียงที่มีพิทช์ของ y เฮิรตซ์ เป็นเสียงกริ่งที่พิน x สำหรับ z มิลลิวินาที

lcd.print("XYZ"); = พิมพ์ข้อความด้วยตัวอักษร XYZ ไปยังหน้าจอ LCD (เช่น แสดงระยะห่างของเฮิรตซ์)

ล่าช้า(x); = หยุดชั่วคราวเป็นเวลา x มิลลิวินาที

const int X=Y = ตั้งค่าตัวแปรคงที่ X เพื่อตรึง Y และใช้ X หรือ Y เพื่อมอบหมายงานให้กับอุปกรณ์

lcd.clear(); = ล้างหน้าจอ LCD และรีเซ็ตสำหรับจอแสดงผลใหม่

โหมดพิน (X, เอาต์พุต); = ตั้งค่าพิน X สำหรับโหมดเอาต์พุต

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

ขั้นตอนที่ 6: เสร็จสิ้น !!

ที่เสร็จเรียบร้อย!!!
ที่เสร็จเรียบร้อย!!!
ที่เสร็จเรียบร้อย!!!
ที่เสร็จเรียบร้อย!!!

คุณมี Arduino ที่เล่น Fur Elise และแสดงค่าโน้ตใน Hertz หรือคุณสร้าง Arduino ที่เล่นทำนองเพลงที่คุณเลือก และแสดงข้อความที่คุณต้องการแสดง ขอบคุณสำหรับการเยี่ยมชมบทช่วยสอนนี้ และฉันหวังว่าคุณจะทำโครงการนี้บน Arduino

แนะนำ: