สารบัญ:

Arduino กลายเป็น Talking Tom: 6 ขั้นตอน
Arduino กลายเป็น Talking Tom: 6 ขั้นตอน

วีดีโอ: Arduino กลายเป็น Talking Tom: 6 ขั้นตอน

วีดีโอ: Arduino กลายเป็น Talking Tom: 6 ขั้นตอน
วีดีโอ: Arduino 6-18 โปรแกรมไฟวิ่งด้วยคำสั่ง for 2024, กรกฎาคม
Anonim
Arduino กลายเป็น Talking Tom
Arduino กลายเป็น Talking Tom
Arduino กลายเป็น Talking Tom
Arduino กลายเป็น Talking Tom

หนึ่งในความทรงจำที่เก่าแก่ที่สุดของฉันในการใช้สมาร์ทโฟนคือการเล่นเกม 'Talking Tom' เกมนี้ค่อนข้างง่าย มีแมวตัวหนึ่งชื่อทอมซึ่งสามารถพูดได้ ในเกม ทอมจะฟังอินพุตใดๆ ผ่านไมโครโฟนของโทรศัพท์แล้วทำซ้ำตามที่ได้ยิน ดังนั้น ไม่ว่าพูดอะไรกับทอม มันก็จะพูดซ้ำในสิ่งเดียวกันด้วยน้ำเสียงที่แหลมคมของตัวเอง

แม้ว่าจะฟังดูง่าย แต่ขั้นตอนทั้งหมดนี้ต้องใช้ขั้นตอนที่ซับซ้อนมากมาย เช่น การสุ่มตัวอย่างอินพุตไมโครโฟนแบบแอนะล็อกในรูปแบบดิจิทัล การจัดการเสียงเพื่อให้ทอมมีเสียงที่เป็นเอกลักษณ์ จากนั้นจึงสร้างสัญญาณจากค่าดิจิทัลทั้งหมดเพื่อเล่นกลับผ่านลำโพง. ขั้นตอนที่ซับซ้อนเหล่านี้ทั้งหมด แต่สมาร์ทโฟนจัดการได้ราวกับเป็นเสน่ห์แม้กระทั่งเมื่อ 9 ถึง 10 ปีก่อน!

สิ่งที่น่าสนใจคือการดูว่าสามารถทำได้เช่นเดียวกันกับบอร์ด Arduino ที่ใช้ไมโครคอนโทรลเลอร์ราคาถูกหรือไม่ ดังนั้นในคำแนะนำนี้ ฉันจะแสดงวิธีสร้าง Talking Tom แบบง่ายๆ เช่น โครงการจาก Arduino และอุปกรณ์อิเล็กทรอนิกส์ราคาถูกอื่นๆ

คำแนะนำนี้เขียนขึ้นโดยความร่วมมือกับ Hatchnhack Makerspace ในเดลี

หมายเหตุ: คำแนะนำนี้เป็นเวอร์ชันแรกของโครงการที่ทำคุณลักษณะ 'พูดคุย' ของ Talking Tom ให้สมบูรณ์ โดยที่ Arduino จะสามารถทำซ้ำสิ่งที่คุณพูดได้ ส่วนการเปลี่ยนเสียงจะกล่าวถึงในเวอร์ชันต่อๆ ไป แม้ว่าเนื่องจากความละเอียดที่น้อยกว่าของ Arduino ในตัว ADC เสียงที่บันทึกไว้แล้วจึงฟังดูแตกต่างออกไปเล็กน้อย:P (สามารถสังเกตได้อย่างชัดเจนในวิดีโอโครงการ)

เริ่มกันเลย!

ขั้นตอนที่ 1: วัสดุที่ใช้

วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้
วัสดุที่ใช้

ฮาร์ดแวร์:

  • Arduino UNO
  • โมดูลไมโครโฟน MAX4466 พร้อมอัตราขยายที่ปรับได้
  • โมดูลเครื่องอ่านการ์ด SD ที่ใช้ SPI
  • การ์ด SD
  • เครื่องขยายเสียง เช่น ลำโพง PC, โมดูลเครื่องขยายเสียง PAM8403 เป็นต้น
  • ลำโพงสำหรับเชื่อมต่อกับเครื่องขยายเสียง
  • แจ็คเสียงหญิง
  • ตัวต้านทาน 1 x 1k โอห์ม
  • ตัวต้านทาน 2 x 10k ohm
  • ตัวเก็บประจุ 1 x 10uF
  • 2 x ปุ่มกด
  • สายจัมเปอร์

ซอฟต์แวร์:

  • Arduino IDE
  • ความกล้า (ไม่จำเป็น)
  • TMRpcm และไลบรารี SD สำหรับ Arduino

ขั้นตอนที่ 2: ภาพรวมพื้นฐานของโครงการ

โครงการส่วนใหญ่มีคุณสมบัติ 2 ประการ:

  • สามารถเล่นเสียงที่เลือกแบบสุ่มจากชุดไฟล์เสียงที่ติดตั้งไว้ล่วงหน้าในการ์ด SD สำหรับเอฟเฟกต์เสียง ฯลฯ
  • มันสามารถบันทึกเสียงอินพุตจากไมโครโฟนแล้วเล่นกลับทันทีที่การบันทึกหยุดลง สิ่งนี้ทำให้ Arduino สามารถทำซ้ำสิ่งที่ได้ยินผ่านไมโครโฟน

ส่วนต่อประสานผู้ใช้ของโปรเจ็กต์ส่วนใหญ่ประกอบด้วยปุ่มกด 2 ปุ่ม ซึ่งแต่ละปุ่มจะสอดคล้องกับคุณลักษณะข้างต้นอย่างใดอย่างหนึ่ง

งานหนักหลักของการบันทึกและเล่นไฟล์เสียงจากการ์ด SD ได้รับการจัดการโดยไลบรารี TMRpcm

การบันทึกเสียงใช้โมดูลไมโครโฟน MAX4466, ADC ภายในของ Arduino และไลบรารี TMRpcm เพื่อสุ่มตัวอย่างเสียงแล้วจัดเก็บไว้ชั่วคราวในการ์ด SD เป็นไฟล์ '.wav' สำหรับการเล่น ไฟล์เสียง '.wav' ใช้ PCM (Pulse Code Modulation) เพื่อจัดเก็บข้อมูลเสียงในรูปแบบดิจิตอลเพื่อให้สามารถเล่นซ้ำได้ง่าย โดยทั่วไป ควรใช้ ADC ภายนอกสำหรับโครงการที่ใช้เสียงเนื่องจากความละเอียดของ ADC ของ Arduino นั้นไม่สูงนัก แต่ใช้ได้กับโครงการนี้

การเล่นไฟล์เสียง (ติดตั้งไว้ล่วงหน้าและบันทึกไว้) ทำได้โดยใช้ไลบรารี TMRpcm ซึ่งส่งสัญญาณเสียงเป็นสัญญาณ PWM จากพินที่เปิดใช้งาน PWM ของ Arduino สัญญาณนี้จะถูกป้อนเข้าในตัวกรอง RC เพื่อรับสัญญาณอะนาล็อกซึ่งจะถูกป้อนเข้าสู่เครื่องขยายเสียงเพื่อเล่นเสียงผ่านลำโพง สำหรับส่วนนี้คุณสามารถใช้ DAC ภายนอกได้เนื่องจาก Arduino ไม่มีอยู่ภายใน การใช้ DAC อาจเป็นทางเลือกที่ดีกว่า เนื่องจากจะปรับปรุงคุณภาพเสียงได้อย่างมาก

การสื่อสารระหว่างโมดูลการ์ด SD และ Arduino ทำได้ผ่าน SPI (อินเทอร์เฟซต่อพ่วงแบบอนุกรม) รหัสนี้ใช้ประโยชน์จากไลบรารี SD & SPI เพื่อเข้าถึงเนื้อหาของการ์ด SD ได้อย่างง่ายดาย

ขั้นตอนที่ 3: เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD

เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD
เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD
เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD
เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD
เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD
เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD
เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD
เตรียมการ์ด SD และเชื่อมต่อโมดูลการ์ด SD
  • ก่อนอื่น คุณต้องฟอร์แมตเป็นการ์ด SD ด้วยระบบไฟล์ FAT16 หรือ FAT32 (คุณสามารถใช้สมาร์ทโฟนเพื่อฟอร์แมตการ์ด SD)
  • ตอนนี้ให้ติดตั้งไฟล์เสียง.wav บางไฟล์ในการ์ด SD ล่วงหน้า คุณสามารถสร้างไฟล์.wav ด้วยความกล้า (ดูคำแนะนำด้านล่าง) อย่าลืมตั้งชื่อไฟล์เป็น audio_1.wav, audio_2.wav, audio_3.wav และอื่นๆ

โมดูลการ์ด SD ใช้ SPI เพื่อสื่อสารข้อมูลกับ Arduino ดังนั้นจึงเชื่อมต่อกับพินที่เปิดใช้งาน SPI เท่านั้น การเชื่อมต่อเหล่านี้มีดังนี้:

  • Vcc - 5v
  • GND - GND
  • MOSI (Master Out Slave In) - พิน 11
  • MISO (Master In Slave Out) - พิน 12
  • CLK (นาฬิกา) - พิน 13
  • SS/CS (Slave Select/Chip Select) - พิน 10

กำลังสร้างไฟล์ '.wav' ด้วยซอฟต์แวร์ Audacity:

  • เปิดไฟล์เสียงที่คุณต้องการแปลงเป็น.wav ด้วยความกล้า
  • คลิกที่ชื่อไฟล์แล้วเลือก 'Split Stereo to Mono' ตัวเลือกนี้จะแบ่งเสียงสเตอริโอออกเป็นสองช่องสัญญาณโมโน คุณสามารถปิดช่องใดช่องหนึ่งได้แล้ว
  • เปลี่ยนค่า 'Project Rate' ที่ด้านล่างเป็น 16000 Hz ค่านี้สอดคล้องกับความถี่การสุ่มตัวอย่างสูงสุดของ ADC ภายในของ Arduino
  • ตอนนี้ไปที่ File->Export/Export เป็น WAV
  • เลือกตำแหน่งและชื่อไฟล์ที่เหมาะสม จากเมนูการเข้ารหัส ให้เลือก 'Unsigned 8-bit PCM' เนื่องจากเราใช้รูปแบบ PCM เพื่อจัดเก็บเสียงในรูปแบบดิจิทัล

ขั้นตอนที่ 4: เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน

เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน
เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน
เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน
เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน
เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน
เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน
เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน
เชื่อมต่อเอาต์พุตเสียงและไมโครโฟน

การเชื่อมต่อไมโครโฟน:

  • Vcc - 3.3v
  • GND - GND
  • ออก - A0 พิน

บันทึก:

  • ลองเชื่อมต่อไมโครโฟนโดยตรงกับ Arduino แทนการใช้เขียงหั่นขนมเนื่องจากอาจทำให้เกิดเสียงรบกวนที่ไม่จำเป็นในสัญญาณอินพุต
  • ตรวจสอบให้แน่ใจว่าได้ประสานส่วนหัวของโมดูลไมโครโฟนอย่างหมดจด เนื่องจากข้อต่อที่บัดกรีไม่ดีก็สร้างเสียงรบกวนเช่นกัน
  • โมดูลไมโครโฟนนี้มีอัตราขยายที่ปรับได้ซึ่งสามารถควบคุมได้โดยใช้หม้อที่ด้านหลังของบอร์ด ฉันขอแนะนำให้คุณรักษาระดับเกนให้ต่ำ เพราะมันจะไม่ขยายเสียงมากนัก ในขณะที่คุณสามารถพูดโดยวางไว้ใกล้ปากของคุณ ส่งผลให้เอาต์พุตสะอาดขึ้น

การเชื่อมต่อเอาต์พุตเสียง:

  • วางตัวเก็บประจุ 10 uF และตัวต้านทาน 1k ohm ในอนุกรมบนเขียงหั่นขนมโดยให้ขั้วบวกของตัวเก็บประจุเชื่อมต่อกับตัวต้านทาน สิ่งเหล่านี้รวมกันเป็นตัวกรอง RC ซึ่งแปลงเอาต์พุต PWM เป็นสัญญาณแอนะล็อกที่สามารถป้อนเข้าสู่แอมพลิฟายเออร์
  • เชื่อมต่อพิน 9 ของ Arduino กับปลายอีกด้านหนึ่งของตัวต้านทาน
  • ขั้วลบของตัวเก็บประจุเชื่อมต่อกับช่องสัญญาณซ้ายและขวาของแจ็คเสียงหญิง
  • GND ของแจ็ค Audio เชื่อมต่อกับ GND
  • แจ็คเสียงเชื่อมต่อกับเครื่องขยายเสียงด้วยสาย Aux ในกรณีของฉัน ฉันใช้ระบบลำโพงของพีซี

บันทึก:

การใช้ PWM เป็นเอาต์พุตเสียงอาจไม่ใช่ตัวเลือกที่ดีที่สุด เนื่องจาก DAC ภายนอกจะให้ความละเอียดและคุณภาพที่ดีกว่ามาก นอกจากนี้ ตัวเก็บประจุและตัวต้านทานในตัวกรอง RC อาจก่อให้เกิดเสียงรบกวนที่ไม่ต้องการ แต่ผลลัพธ์ก็ยังค่อนข้างดีสำหรับโครงการนี้

ขั้นตอนที่ 5: วางสายปุ่ม

วางสายปุ่ม
วางสายปุ่ม
วางสายปุ่ม
วางสายปุ่ม
วางสายปุ่ม
วางสายปุ่ม

โครงการใช้ปุ่มกดเป็นส่วนต่อประสานกับผู้ใช้ ทั้งสองทำหน้าที่ต่างกันและใช้ต่างกัน แต่มีสายไฟเหมือนกัน การเชื่อมต่อของพวกเขามีดังนี้:

  • วางปุ่มบนเขียงหั่นขนม
  • ต่อขั้วหนึ่งของปุ่มใดปุ่มหนึ่งเข้ากับขา 2 ของ Arduino ด้วยตัวต้านทานแบบดึงลง 10k ohm ขั้วอื่นของปุ่มเชื่อมต่อกับ 5v ดังนั้นเมื่อกดปุ่มพิน 2 จะสูง และเราสามารถตรวจพบได้ในโค้ด
  • ปุ่มอื่นเชื่อมต่อแบบเดียวกันกับพิน 3 ของ Arduino แทนที่จะเป็น 2

ปุ่มที่เชื่อมต่อกับพิน 2 จะเล่นไฟล์เสียงแบบสุ่มจากชุดไฟล์เสียงที่ติดตั้งไว้ล่วงหน้าในการ์ด SD เมื่อกดหนึ่งครั้ง

ปุ่มที่เชื่อมต่อกับพิน 3 ใช้สำหรับการบันทึก คุณต้องกดปุ่มนี้ค้างไว้เพื่อบันทึก Arduino เริ่มบันทึกทันทีที่กดปุ่มนี้และหยุดการบันทึกเมื่อปล่อยปุ่มนี้ หลังจากหยุดการบันทึก การบันทึกจะเล่นซ้ำทันที

ขั้นตอนที่ 6: อัปโหลดรหัส

อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด

ก่อนอัปโหลดโค้ด ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งไลบรารีที่จำเป็นทั้งหมด เช่น TMRpcm, SD เป็นต้น

คุณยังสามารถเปิด Serial Monitor หลังจากอัปโหลดโค้ดเพื่อรับข้อเสนอแนะว่า Arduino ทำอะไรอยู่

ขณะนี้รหัสไม่ได้จัดการเสียงที่บันทึกไว้เพื่อให้เสียงแตกต่างกัน แต่ฉันวางแผนที่จะรวมคุณลักษณะนี้ในเวอร์ชันถัดไปซึ่งคุณอาจตั้งค่าความถี่เอาต์พุตของสัญญาณเสียงโดยใช้ Pot และรับเสียงประเภทต่างๆ.

และคุณทำเสร็จแล้ว!!

แนะนำ: