الثلاثاء، 4 مارس، 2014

الأردوينو و توليد النغمات Arduino And Tones

الأردوينو و توليد النغمات 


Arduino And Tones


تتمتع الأردوينو بقدرات ممتازة على ربط القطع المختلفة و برمجتها بسهولة عبرها .

من اكثر الأمور متعة خلال استعمالي للمتحكمات الأصغرية MCU هي توليد نغمات موسيقية Tones مختلفة و جميلة .

تعتمد هذه النغمات على تقنية PWM في الأساس "التحكم بعرض نبضة الصوت" او بشكل ابسط تشغيل مؤقت لقياس عرض هذه النبضة "و هو ما نقوم به فعلياً في الأردوينو "




سأبدأ من البداية , الحديث عن توليد نغمات على الأردوينو يقودنا لامر مهم في لغة الأردوينو .

Tone


يقوم هذا الأمر بتوليد موجة مربعة ذات مشغولية duty cycle تساوي 50% عند اي تردد مطلوب .

هذه التقنية تعطينا اصواتاً مسموعة عند ترددات ما بين "20-20كيلو هيرتز " .

الألعاب القديمة التي كانت على اجهزة التلفزيون في منتصف الثمانينيات و التسعينيات "قبل ظهور الفيفا و المزرعة السعيدة :) " كانت هذه الألعاب تصدر اصوات رائعة نذكر منها اللعبة الأشهر "ماريو " هذه اللعبة تعتمد في اصدار الأصوات على نفس المبدأ الذي سنتعامل معه اليوم .


القطع التي سنحتاجها :

سنحتاج للقطع التالية :

1) بطاقة اردوينو
2) سماعة Speaker
3)مقاومة 470 اوم .
4)اسلاك توصيل 
5)BreadBoard

سنقوم في البداية بتوصيل الدارة كما في المخطط .




برنامج بسيط .







البرنامج بسيط و يعتمد في فكرته على تحديد مخرج رقمي "D8 في برنامجنا " و وضع نوتات موسيقية ذات ترددات مختلفة على ايقاعات مختلفة "2,4,8,16" ثم توليد هذه النوتات بطولها المحدد على المخرج , يصدر لدينا هذا الصوت على السماعة .



RTTL 

قامت شركة نوكيا بتطوير لغة اطلقت عليها اسم RTTL"Ringtone Transfer Language" كانت وظيفتها تحويل النغمات إلى صيغ يفهمها الهاتف المحمول "هل تذكر مولد النغمات في الجهاز Nokia 3310 ؟ "




هذه اللغة تحتوي 3 اقسام رئيسية :
 name.
default value.
data

يكون الأسم مكوناً من 10 احرف , و تليه 3 قيم هي 


d - duration

o - octave

b - beat, tempo


هذه القيم تحدد الطول  و المدة و النغمة الموسيقية المراد تشغيلها .


هذا مثال بسيط لكيفية تشغيل صوت معين .

لو اردنا تشغيل صوت مثل موسيقى لعبة الماريو الشهيرة



هذا البرنامج يقوم بهذه المهمة .





الكود قد يكون معقداً بعض الشيء , أليس كذلك ؟

حسناً هنا نحتاج لمكتبة لتنظيم كل هذه الأسطر من البرنامج في شكل سهل و بسيط قابل للدمج مع مشاريع اخرى .


سنستعمل مكتبة RTTL يمكن تحميلها من هنا  .

هذه المكتبة تتيح لنا سهولة اكبر في الأستخدام و اضافة اصوات جديدة و بشكل مرتب .

كتبت هذا الكود لتوليد أكثر من نغمة موسيقية مشهورة متنوعة .

بعد ان تفك ضغط المكتبة و تضعها في مسار المكتبات في برنامج الأردوينو , يمكنك تحميل البرنامج ادناه .








كل ما عليك هو بناء المصفوفة و وضع النوتة الموسيقية داخله فقط ان اردت اضافة صوت جديد . 


و في النهاية هذا الفيديو يوضح الأصوات التي ستسمعها .



9 التعليقات :

  1. السلام عليكم هذه الكودات الصوتية كيف نصنعها مثلا اذا اردنا صوت يناسب حركة سيارة ربوت كيف نصنع هذا الصوت وعلى اي اساس يتم صنعه

    ردحذف
    الردود
    1. هناك برامج tone RTTL Generator على الأنترنت تقوم بذلك , تحتاج لمعرفة بالنوتات الموسيقية لعمل نوتة كما تريد

      حذف
  2. السلام عليكم اخي الكريم
    يظهر عندي خطأ عند تطبيق الكود الأخير الخاص بمكتبة Rttl وبالتحديد عند ايعاز
    ;Rtttl player
    ارجو الرد على استفساري وشكرا

    ردحذف
    الردود
    1. تثبيتك للمكتبة في مسار المكتبات الخاص بالأردوينو خاطئ .

      حذف
  3. السلام عليكم
    انا اذا جيت ارفع الكود تجيني مشكله
    أردوينو 1.7.11 (Windows 8.1), لوحة:"Arduino Uno"

    Sketch uses 3,360 bytes (10%) of program storage space. Maximum is 32,256 bytes.

    Global variables use 64 bytes (3%) of dynamic memory, leaving 1,984 bytes for local variables. Maximum is 2,048 bytes.

    avrdude: ser_open(): can't open device "\\.\COM1": The system cannot find the file specified.




    مشكلة في الرفع الى البورد. راجع http://www.arduino.cc/en/Guide/Troubleshooting#upload كـ اقتراح .

    This report would have more information with
    "Show verbose output during compilation"
    مفعل في ملف> تفضيلات.

    ردحذف
  4. اذا اريد اطلع كلمات من الاردوينو مثل (مرحبا) وغيره ،، شو اللي بيتغير فالكود ؟! واذا الشيء يعتمد ع التردد كف اقدر احصل على الترددات للكلمات ؟!

    ردحذف
    الردود
    1. كلام قد يكون صعب نوعا ما و تحتاج لطريقة اخرى افضل لاخراج الكلام و هي استعمال mp3 shield و تخوين الاصوات مسبقا و استدعاءها وقت الحاجه

      حذف
  5. كيف اضيف الاصوات ببرنامج الاردوينو بحيث انه لكل اصبع حركة وكلمه تختلف عن الحركة الثانيه والكلمات الثانيه ؟

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.