جدول المحتويات:
- الخطوة 1: المتطلبات
- الخطوة الثانية: المواصفات
- الخطوة الثالثة: البدء
- الخطوة 4: الدائرة الصغيرة
- الخطوة 5: اخرج مكواة اللحام
- الخطوة 6: اختبار DAC
- الخطوة 7: قراءة رأس Wav
- الخطوة 8: مقاطعة ، مقاطعة…
- الخطوة 9: المقاطعات والتخزين المؤقت المزدوج
فيديو: تشغيل ملفات الصوت الصوتية (Wav) باستخدام Arduino و DAC: 9 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
قم بتشغيل ملف wav Audio من بطاقة Audino SD الخاصة بك. سيوضح لك هذا Instructable كيف يمكن تشغيل ملف wav على بطاقة SdCard من خلال دائرة بسيطة إلى مكبر صوت.
يجب أن يكون ملف wav 8 بت أحادي. لم أواجه أي مشكلة في تشغيل ملفات 44 كيلوهرتز.
على الرغم من عدم الدقة العالية ، إلا أن جودة الصوت مرضية للغاية.
يتم استخدام جهاز العرض التسلسلي لتحديد الملف. يجب أن تكون الملفات في مجلد يسمى adlog.
يتبع هذا التوجيه من مشروع سابق حيث قمت بحفظ تسجيلات wav في SdCard:
تستخدم الدائرة محولًا رقميًا إلى تناظري (DAC) رخيص الثمن 8 بت ومكبر صوت بشريحة واحدة.
تم أخذ الأقسام الرئيسية لإعداد المقاطعات من المقالة الممتازة بقلم أماندا غاساي:
الخطوة 1: المتطلبات
Arduino - أستخدم Mega ، ولكن لا يوجد سبب يمنع Uno من العمل.
قارئ بطاقة SdCard- تم تكوين البرنامج لـ: لوحة اندلاع MicroSD المنظمة مع التحويل المنطقي V2
راجع هذا الدليل للحصول على تفاصيل إعداد SdCard: https://www.instructables.com/id/Arduino-Mega-Audio …
DAC0832 LCN- محول رقمي إلى تناظري 8 بت ممتاز- بضعة أرطال.
LM386 N-1 Op amp- رخيص مثل الرقائق
20 طريقة للمقبس رقاقة
مقبس رقاقة ذو 8 اتجاهات
مصدر طاقة 9 فولت - بطارية ستفي بالغرض.
مرجع الجهد LM336 2.5 فولت
10 فائق التوهج مكثف * 3 (أي جهد أكثر من 9 فولت)
10 أوم المقاوم
مكثف 50nF- (أو في مكان ما قريب من 47nF ، 56nf ، 68nf- سيفعل)
220 فائق التوهج مكثف
مكبر صوت 64 أوم
مقياس الجهد الخطي 10 كيلو
كابل لربط خطوط البيانات الثمانية بين Arduino والدائرة-
على Uno ، توجد 8 اتصالات في الخط ، في Mega هم في أزواج.
في Mega ، استخدمت كبل شريط 10 اتجاهات مع رأس IDC 10 اتجاهات. (2 أسلاك احتياطية)
موصلات المقبس لـ 0V ، 9V و DAC
لوح شريط نحاسي ، لحام ، سلك ، قواطع إلخ
الخطوة الثانية: المواصفات
ضبط المسلسل على 115200 باود.
يتوفر الدعم للوحة كسر Hobbytronics MicroSD باستخدام Mega. اختيار الشريحة والمنافذ الأخرى سوف تتغير بين Mega و Uno.
يجب أن تكون ملفات Wav موجودة في دليل يسمى adlog- لا تتردد في تسميتها شيئًا آخر وإعادة ترتيب الترميز اللازم.
يجب أن يكون ملف wav 8 بت أحادي. لقد اختبرت ما يصل إلى 44 كيلو هرتز.
يعرض جهاز العرض التسلسلي ملفات wav في مجلد adlog. يتم إرسال أسماء الملفات من خط إخراج الشاشة.
حجم الملف محدود فقط بحجم SdCard.
الخطوة الثالثة: البدء
قم بتوصيل قارئ بطاقة SD. هذه هي وصلات الميجا.
0 ، 5 فولت
CLK لدبوس 52
D0 لدبوس 50
D1 إلى دبوس 51
CS لدبوس 53
(انظر موقع الموردين للاتصال بمنفذ Uno)
سترغب في اختبار ما إذا كانت بطاقتك تعمل في هذه المرحلة - استخدم البرامج النصية التي يوفرها البائع.
نحن بحاجة لعمل دائرة صغيرة
سنرسل دفقًا من وحدات البايت الصوتية من Arduino.
هذه الأرقام بين 0 و 255. وهي تمثل الجهد.
الصمت هو 127-128.
255 هو مخروط مكبر الصوت صعبًا في اتجاه واحد.
0 هو مخروط مكبر الصوت صعبًا في الاتجاه الآخر.
لذلك يتم تسجيل الصوت كأرقام محفوظة ، مما يؤدي إلى إنشاء فولتية متفاوتة ، مما يؤدي إلى إنشاء أقماع مكبر صوت متحركة.
يمكننا إرسال الأرقام من 8 أسطر على Arduino ، في وقت واحد ، باستخدام "المنفذ".
إذا قمنا بتغذية الأسطر الثمانية في محول رقمي إلى تناظري ، فإنه يقوم بما هو مكتوب على القصدير وينتج جهدًا تناظريًا يتناسب مع الرقم الرقمي.
كل ما نحتاج إلى القيام به بعد ذلك هو حزم الجهد إلى مضخم تشغيلي صغير ثم إلى مكبر صوت.
الخطوة 4: الدائرة الصغيرة
DAC0832 LCN
هذا محول رقمي إلى تناظري رائع ورخيص 8 بت. (DAC)
يمكن التحكم فيه بشكل كامل مع مجموعة من البيانات ، خطوط عينة البيانات.
أو يمكن إعداده للقيام بكل ذلك تلقائيًا في "التدفق خلال العملية".
للاقتباس من الدليل:
ببساطة تأريض CS و WR1 و WR2 و XFER وربط ILE العالي يسمح لكلا المسجلين الداخليين بمتابعة المدخلات الرقمية المطبقة (التدفق من خلال) والتأثير بشكل مباشر على الإخراج التناظري DAC.
حسنًا ، هذا هو أربعة اتصالات لمجموعة الشريحة منخفضة وواحدة مضبوطة على 9 فولت - سهل.
لا نريد إخراج أي جهد سالب لذلك يقول الدليل أنه يجب علينا استخدام "وضع تبديل الجهد" ويقومون بتوفير الرسم التخطيطي.
كل ما نحتاج إلى القيام به هو استبدال مضخم صوت صغير بدلاً من الذي يقترحونه.
مكبر الصوت LM386-N
يوفر دليل Amp مخططًا أدنى للأجزاء - يوفر مكسبًا قدره 20 (الكثير جدًا بالنسبة لنا - ولكنه يحتوي على عنصر تحكم في مستوى الصوت).
كل ما علينا فعله هو إضافة مكثف بين DAC و amp حتى نقوم فقط بتضخيم إشارات التيار المتردد.
يجب أيضًا أن نضيف مكثفين قريبين من دبوس الإمداد لكل شريحة من رقائقنا وإلا سنحصل على همهمة من مصدر 9V الخاص بنا.
الخطوة 5: اخرج مكواة اللحام
نظرًا لأن الدائرة بسيطة ، فأنا لا أنوي توجيه ضربة عن طريق الحساب.
فيما يلي بعض المؤشرات:
- قم بإعداد قطعة من لوح شريط نحاسي على الأقل 28 × 28 فتحة. (نعم أعلم أن جراحي الدماغ يمكنهم تصغيره)
- إذا كنت تنوي تركيبها بمسامير ، اتركها في البداية!
- قم بتركيب الرقائق على المقابس. أدخل الرقائق فقط عندما يتم فحص كل شيء.
- احتفظ بأسلاك الإدخال بعيدًا عن الخرج.
- لاحظ القطبية الصحيحة للمكثفات.
- الرجوع إلى الرسم التخطيطي للعرض الأساسي لمرجع الجهد LM336. لا يتم استخدام ساق الضبط ويمكن قصها.
- لاحظ الاتصال المباشر بالدبوس 8 من DAC- إنه مفيد جدًا للاختبار.
- لقد قمت بتوصيل Audino بكابل الشريط وموصل IDC 10 اتجاهات.
- في Uno ، تكون التوصيلات في خط مستقيم - قد تجد أن ترتيب اتصالات الإدخال الثمانية في خط مستقيم واحد يسمح لك بالارتباط بـ Arduino باستخدام موصل تم شراؤه وجاهزًا من 8 اتجاهات ،
عند الانتهاء - تحقق من اللحام وتحقق من الفجوات بين المسارات النحاسية.
أجد شفرة منشار الاختراق للصغار تبلغ 36 طنًا في البوصة مفيدة جدًا لإزالة الحطام. أقوم بإزالة دبابيس تحديد الشفرة وحرك طرف الشفرة في المسار - من الواضح أن الشفرة ليست في إطار.
الخطوة 6: اختبار DAC
اترك الاتصال بين الدائرة وأردوينو مغلقًا.
اضبط التحكم في مستوى الصوت في دائرتك على منتصف الطريق.
قم بتشغيل 9V DC Power إلى دائرتك الجديدة.
تحقق من أن الدائرة على ما يرام - لا يمكنني تحمل أي مسؤولية عن دائرتك!
انقطاع التيار الكهربائي
قم بتوصيل دائرتك بـ Arduino.
على Mega استخدام دبابيس 22-29. (PORTA) لا تخطئ في دبابيس 5 فولت أعلاه!
على Uno ، استخدم الدبابيس 0-7. هذا هو PORTD
قم بتوصيل 0V الخاص بمصدر الطاقة الخاص بك إلى 0V على Arduino.
رفع الطاقة.
افتح برنامج الاختبار هذا DAC_TEST
بالنسبة إلى UNO ، استبدل جميع الإشارات إلى PORTA إلى PORTD
استبدل DDRA بـ DDRD- تحدد هذه التعليمات جميع الأسطر الثمانية للإخراج دفعة واحدة. هذا هو سجل اتجاه البيانات.
اضبط شاشتك التسلسلية على 115200.
قم بتوصيل الفولتميتر بين مخرج DAC و OV
سيقوم البرنامج بضبط الإخراج على 255 - جميع الخطوط - أقصى جهد.
الخرج 128- نصف الجهد الأقصى.
الناتج 0- صفر الجهد (أو ربما ما يقرب من الصفر).
ثم يتقدم باتجاه أحادي: 1 ، 2 ، 4 ، 8 ، 16 ، 32 ، 64 ، 128
يجب أن يزداد الجهد بشكل مطرد.
إذا انخفض الجهد مرة أخرى بينما زاد الرقم ، فمن المحتمل أن يكون لديك سلكان من الأسلاك المترابطة معكوسة.
يجب أن تسمع أيضًا صوت طقطقة السماعة بهدوء مع تغير الفولتية
الخطوة 7: قراءة رأس Wav
يتم حفظ ملفات Wav بتردد وحجم بيانات محددين.
هذه المعلومات موجودة في رأس 44 بايت في بداية ملف wav.
على الرغم من أن بعض البرامج تقوم بتوسيع الرأس (بعد البايتة 35) ، إلا أنه يجعل تحديد موقع حجم البيانات أكثر صعوبة.
لقراءة الرأس نقوم بإنشاء مخزن مؤقت ونسخ بداية الملف.
يتم تخزين التردد في 4 بايت بدءًا من 24 بايت في الملف.
// قراءة التردد المحدد في رأس ملف wav
بايت headbuf [60]
tempfile.seek (0) ؛
tempfile.read (headbuf ، 60) ؛
retval = headbuf [27] ؛
retval = (retval << 8) | headbuf [26] ؛
retval = (retval << 8) | headbuf [25]؛
retval = (retval << 8) | headbuf [24] ؛
Serial.print (F ("تردد الملف")) ؛
Serial.print (retval) ؛
أفضل طريقة للعثور على معلومات حجم البيانات هي البحث عن كلمة "بيانات" في الرأس.
ثم استخرج 4 بايت التي تليها ، والتي تشكل القيمة الطويلة
انتقام طويل بدون توقيع
int mypos = 40 ؛
لـ (int i = 36 ؛ i <60 ؛ i ++) {
إذا (headbuf == 'd') {
إذا (headbuf [i + 1] == 'a') {
إذا (headbuf [i + 2] == 't') {
إذا (headbuf [i + 3] == 'a') {
// أخيرًا لدينا
ميبوس = أنا + 4 ؛
أنا = 60 ؛
}
}
}
}
}
tempfile.seek (mypos) ؛
retval = headbuf [mypos + 3] ؛
retval = (retval << 8) | headbuf [mypos + 2] ؛
retval = (retval << 8) | headbuf [mypos + 1] ؛
retval = (retval << 8) | هيدبوف [ميبوس] ؛
حسنًا ، لدينا طول البيانات والتردد!
تتبع البيانات الصوتية الـ 4 بايت التي تشكل قيمة طول البيانات.
الخطوة 8: مقاطعة ، مقاطعة…
نستخدم معلومات التردد لإنشاء مقاطعة البرنامج عند التردد المطلوب أو بالقرب منه.
لا يمكن دائمًا تعيين المقاطعة بدقة ، لكنها كافية. يتم تمرير تردد القراءة من الملف إلى الروتين الفرعي setintrupt.
setintrupt (التكرار العائم) باطل {float bitval = 8 ؛ // 8 لمؤقتات 8 بت 0 و 2 ، 1024 للمؤقت 1 بايت
setocroa = (16000000 / (التكرار * bitval)) - 0.5 ؛
// تتطلب قيمة setocroa طرحًا من -1. مع ذلك ، نضيف 0.5 جولات إلى أقرب 0.5
// دقة جهاز ضبط الوقت محدودة
// تحدد في النهاية بحجم bitval
cli () ؛ // تعطيل المقاطعات // تعيين المقاطعة timer2
TCCR2A = 0 ؛ // قم بتعيين سجل TCCR2A بالكامل على 0
TCCR2B = 0 ؛ // نفس الشيء لـ TCCR2B
TCNT2 = 0 ؛ // تهيئة قيمة العداد إلى 0
// تعيين سجل مطابقة المقارنة لزيادات التردد (هرتز)
OCR2A = سيتوكرو ؛ // = (16 * 10 ^ 6) / (التردد * 8) - 1 (يجب أن يكون <256)
// قم بتشغيل وضع CTC
TCCR2A | = (1 << WGM21) ؛ // تعيين CS21 بت لـ 8 جهاز قياس مسبق
TCCR2B | = (1 << CS21) ؛ // تمكين الموقت مقارنة المقاطعة
// TIMSK2 | = (1 << OCIE2A) ؛ // هذا يعمل ، كما يفعل السطر التالي
sbi (TIMSK2 ، OCIE2A) ؛ // تمكين المقاطعة على المؤقت 2
سي () ؛ // تمكين المقاطعات
سيكون القراء المميزون قد رصدوا sbi (TIMSK2 ، OCIE2A)
لقد قمت بإعداد وظيفتين (مكتسبة عبر الإنترنت) لإعداد ومسح بتات التسجيل:
// يحدد لمسح وحدات البت # ifndef cbi
#define cbi (sfr، bit) (_SFR_BYTE (sfr) & = ~ _BV (bit))
#إنهاء إذا
// يعرّف لتحديد بتات التسجيل
#ifndef sbi
# تعريف sbi (sfr ، بت) (_SFR_BYTE (sfr) | = _BV (بت))
#إنهاء إذا
توفر هذه الوظائف مكالمة سهلة لتعيين المقاطعة أو مسحها.
إذاً المقاطعة جارية ، ماذا يمكننا أن نجعلها تفعل؟
الخطوة 9: المقاطعات والتخزين المؤقت المزدوج
عند 22 كيلوهرتز ، يتم إخراج بايت من البيانات الصوتية كل 0.045 مللي ثانية
تتم قراءة 512 بايت (حجم المخزن المؤقت) في 2.08 مللي ثانية.
لذلك لا يمكن قراءة المخزن المؤقت من بطاقة SDCard في دورة كتابة واحدة.
ومع ذلك ، تتم كتابة 512 بايت إلى المنفذ في 23.22 مللي ثانية.
لذلك كل ما يتعين علينا القيام به هو إعداد ملف جديد للقراءة في كل مرة يفرغ فيها المخزن المؤقت ولدينا وقت كافٍ للحصول على البيانات قبل أن تكون هناك حاجة إلى كتلة بيانات جديدة … بافتراض أننا نستخدم مخازن مؤقتة ، ونفرغ أحدهما بينما نملأ الآخر.
هذا هو التخزين المؤقت المزدوج.
سيتم إبطاء قراءة الملف بسبب المقاطعة المتكررة ، ولكنها ستنتهي.
لقد قمت بإعداد اثنين من المخازن المؤقتة 512 بايت تسمى bufa و bufb.
إذا كانت العلامة بالفعل صحيحة نقرأ من porta وإلا نقرأ من portb
عندما يصل موضع المخزن المؤقت (bufcount) إلى حجم المخزن المؤقت (BUF_SIZE 512) ، قمنا بتعيين علامة تسمى readit إلى true.
يبحث روتين الحلقة الفارغة عن هذه العلامة ويبدأ في قراءة كتلة:
إذا (اقرأ) {إذا (! جاهز) {
// بدء قراءة كتلة SDCard إلى bufa
tempfile.read (bufa، BUF_SIZE) ،
} آخر {
// بدء قراءة كتلة SDCard إلى bufb
tempfile.read (bufb، BUF_SIZE) ،
}
readit = خطأ ؛
}
عند الانتهاء من العلامات الروتينية ، اقرأها = خطأ.
ضمن روتين المقاطعة ، يجب أن نتحقق من انتهاء الحلقة الفارغة عن طريق التحقق مما إذا كانت readit == false.
في هذه الحالة ، نشير إلى أن هناك حاجة إلى قراءة أخرى وقم بتبديل الإشارة المسبقة لتبديل المخازن المؤقتة.
إذا كانت SDcard لا تزال تقرأ ، فيجب علينا الرجوع إلى مسار القراءة مرة أخرى (عداد - ؛ bufcount - ؛) والخروج من المقاطعة لإعادة المحاولة لاحقًا. (تشير النقرات في إشارة خرج الصوت إلى حدوث ذلك.)
عندما تتم قراءة جميع البيانات ، يتم إلغاء المقاطعة ، ويتم إعادة ضبط المنفذ على قيمة الجهد المتوسط 128 ويتم إغلاق ملف الصوت.
قبل تشغيل البرنامج النصي dac2.ino لأول مرة ، اضبط مستوى الصوت على 50٪. سيكون هذا مرتفعًا جدًا ، لكنه أفضل من 100٪!
إذا كان التحكم في مستوى الصوت يعمل في التبديل العكسي ، فإن العملاء المتوقعين على طرفي نقيض من مقياس الجهد 10K.
اسمحوا لي أن أعرف كيف يبدو.
موصى به:
الموجات فوق الصوتية للجسم بالموجات فوق الصوتية باستخدام Arduino: 3 خطوات (بالصور)
التصوير بالموجات فوق الصوتية للجسم باستخدام Arduino: مرحبًا ، هوايتي وشغفي هو تنفيذ مشاريع فيزياء. يتعلق أحد أعمالي الأخيرة بالتصوير بالموجات فوق الصوتية. كما هو الحال دائمًا ، حاولت أن أجعل الأمر بسيطًا قدر الإمكان باستخدام الأجزاء التي يمكنك الحصول عليها على موقع ئي باي أو AliExpress. لذلك دعونا نلقي نظرة إلى أي مدى يمكنني أن أذهب مع
الحديث اردوينو - تشغيل ملف MP3 باستخدام Arduino بدون أي وحدة - تشغيل ملف MP3 من Arduino باستخدام PCM: 6 خطوات
الحديث اردوينو | تشغيل ملف MP3 باستخدام Arduino بدون أي وحدة | تشغيل ملف MP3 من Arduino باستخدام PCM: في هذه التعليمات ، سنتعلم كيفية تشغيل ملف mp3 باستخدام اردوينو دون استخدام أي وحدة صوتية ، وهنا سنستخدم مكتبة PCM لـ Arduino التي تقوم بتشغيل 16 بت PCM بتردد 8 كيلو هرتز ، لذلك دعونا نفعل ذلك
تشغيل الأغاني (MP3) باستخدام Arduino باستخدام PWM على مكبر الصوت أو محول Flyback: 6 خطوات (بالصور)
قم بتشغيل الأغاني (MP3) باستخدام Arduino باستخدام PWM على مكبر الصوت أو Flyback Transformer: مرحبًا يا شباب ، هذا هو أول تدريب لي ، آمل أن تعجبك! لنقل بيانات الموسيقى من جهاز الكمبيوتر المحمول الخاص بي إلى Arduino. وباستخدام Arduino TIMERS t
كيفية ضغط ملفات ISO الخاصة بنسخ Psp الاحتياطية في ملفات CSO لتوفير المساحة: 4 خطوات
كيفية ضغط ملفات ISO الخاصة بنسخ Psp الاحتياطية في ملفات CSO لتوفير المساحة: في هذا Instructable ، سأوضح لك كيفية ضغط النسخ الاحتياطية لـ PSPS من ISO إلى CSO لتوفير مساحة على بطاقة الذاكرة الخاصة بك ، باستخدام قطعة واحدة فقط من البرامج التي يمكن استخدامه مع Wine In Ubuntu. ستحتاج أيضًا إلى CFW (Cusstom Firm-Ware) psp لعمل
كيفية إصلاح ملفات البيانات غير المدعومة وتنزيل ملفات الفيديو المفضلة لجهاز PSP المحمول: 7 خطوات
كيفية إصلاح ملفات البيانات غير المدعومة ، وتنزيل ملفات الفيديو المفضلة لجهاز PSP المحمول الخاص بك: لقد استخدمت Media Go ، وقمت ببعض الحيل & nbsp ؛ للحصول على ملفات فيديو غير مدعومة للعمل على PSP الخاص بي ، هذه هي كل خطواتي التي قمت بها ، عندما حصلت لأول مرة على ملفات الفيديو غير المدعومة للعمل على PSP الخاص بي. إنه يعمل بنسبة 100٪ مع جميع ملفات الفيديو الخاصة بي على PSP Po