تعلم الوحدات · الدرس 2.6

الطنان غير النشط (Passive Buzzer)

العودة إلى الدروس

نظرة عامة ومبدأ الصوت

ستتعلم استخدام الطنان غير النشط (Passive Buzzer) لتوليد ثماني نغمات، مدة كل منها 0.5 ثانية: دو 523Hz، ري 587Hz، مي 659Hz، فا 698Hz، صول 784Hz، لا 880Hz، سي 988Hz، ثم دو العليا 1047Hz.

المكونات المطلوبة

المبدأ

يستخدم الطنان نبضات لإحداث اهتزاز الهواء؛ وتغيير التردد يولد نغمات مختلفة. مثلًا 523Hz لدو، و 587Hz لري، و 659Hz لمي. ويمكن عزف لحن باستخدامه.

الطنان غير النشط (Passive Buzzer)
الطنان غير النشط (Passive Buzzer)

توصيل الدائرة

وصّل السلك الأحمر الموجب بالمنفذ 8، والأسود السالب بـ GND.

مخطط توصيل الطنان غير النشط (Passive Buzzer)
مخطط توصيل الطنان غير النشط (Passive Buzzer)
توصيل الطنان غير النشط (Passive Buzzer) بلوحة أردوينو (UNO R3 Board)
توصيل الطنان غير النشط (Passive Buzzer) بلوحة أردوينو (UNO R3 Board)

المكتبة والمصفوفات

قبل رفع البرنامج، تأكد من توفر مكتبة pitches في بيئة Arduino IDE. إذا لم تكن مثبتة أو ظهرت رسالة تشير إلى مكتبة مفقودة، فاتبع خطوات التثبيت في قسم «ما هي المكتبات؟» وطرق تثبيتها في الدرس 1.5 «وميض LED وإضافة المكتبات».

افتح ملف البرنامج passive_buzzer.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها.

تضم melody أسماء النغمات NOTE_C5 و NOTE_D5 و NOTE_E5 و NOTE_F5 و NOTE_G5 و NOTE_A5 و NOTE_B5 و NOTE_C6.

المصفوفة (Array)

مجموعة متغيرات يصل البرنامج إلى عناصرها برقم فهرس. قد تكون مصفوفات C++ معقدة، لكن الأنواع البسيطة سهلة الاستخدام. جميع التصريحات التالية صحيحة:

مقتطف من الشرح
int myInts[6];

int myPins[] = {2, 4, 8, 3, 6};

int mySensVals[6] = {2, 4, -8, 3, 2};

char message[6] = "hello";

myInts دون تهيئة. في myPins يحدد المترجم الحجم بعد عد العناصر. وفي mySensVals نحدد الحجم والقيم معًا. تحتاج مصفوفة char حرفًا إضافيًا لمحرف النهاية null.

فهرسة المصفوفات والدالة tone

تبدأ الفهارس من 0، لذا mySensVals[0] يساوي 2 و mySensVals[1] يساوي 4. في مصفوفة من عشرة عناصر يكون آخر فهرس 9:

مقتطف من الشرح
int myArray[10] = {9, 3, 2, 4, 3, 2, 7, 8, 9, 11};

// myArray[9] contains 11

// myArray[10] is invalid and refers to other memory

mySensVals[0] = 10;

x = mySensVals[4];

tone()

تولد موجة مربعة بالتردد المحدد ونسبة تشغيل 50%. يمكن تحديد مدة، وإلا تستمر حتى noTone(). يمكن توصيل المنفذ بطنان كهرضغطي (Piezo Buzzer) أو مكبر صوت (Speaker).

مقتطف من الشرح
tone(8, melody[thisNote], duration);

tone(pin, frequency);

tone(pin, frequency, duration);

pin رقم المنفذ؛ frequency التردد بالهرتز من النوع unsigned int؛ duration مدة اختيارية بالملي ثانية من النوع unsigned long. لا تعيد الدالة قيمة.

يمكن توليد نغمة واحدة فقط في الوقت نفسه. إذا كانت نغمة تعمل على منفذ آخر فلا يؤثر الاستدعاء الجديد، وإذا كانت على المنفذ نفسه يغير ترددها. تتداخل tone() مع PWM على المنفذين 3 و 11 في اللوحات غير Mega. لا يمكن توليد تردد أقل من 31Hz. وللتنقل بين منافذ مختلفة، استدع noTone() على المنفذ الأول قبل tone() على التالي.

الكود

passive_buzzer/passive_buzzer.ino

//www.elegoo.com
//2016.12.08

#include "pitches.h"
 
// notes in the melody:
int melody[] = {
  NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, NOTE_C6};
int duration = 500;  // 500 miliseconds
 
void setup() {
 
}
 
void loop() {  
  for (int thisNote = 0; thisNote < 8; thisNote++) {
    // pin8 output the voice, every scale is 0.5 sencond
    tone(8, melody[thisNote], duration);
     
    // Output the voice after several minutes
    delay(1000);
  }
   
  // restart after two seconds 
  delay(2000);
}

ملفات الدرس والمكتبات

المكتبات المرفقة

ملفات الدرس

100%

عرض الصورة

استخدم + و− للتكبير والتصغير، أو اضغط Esc للإغلاق.