تعلم الوحدات · الدرس 2.6
الطنان غير النشط (Passive Buzzer)
العودة إلى الدروسنظرة عامة ومبدأ الصوت
ستتعلم استخدام الطنان غير النشط (Passive Buzzer) لتوليد ثماني نغمات، مدة كل منها 0.5 ثانية: دو 523Hz، ري 587Hz، مي 659Hz، فا 698Hz، صول 784Hz، لا 880Hz، سي 988Hz، ثم دو العليا 1047Hz.
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO R3).
- طنان غير نشط (Passive Buzzer).
- أسلاك توصيل أنثى إلى ذكر (Female to Male DuPont Wires).
المبدأ
يستخدم الطنان نبضات لإحداث اهتزاز الهواء؛ وتغيير التردد يولد نغمات مختلفة. مثلًا 523Hz لدو، و 587Hz لري، و 659Hz لمي. ويمكن عزف لحن باستخدامه.

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


المكتبة والمصفوفات
قبل رفع البرنامج، تأكد من توفر مكتبة 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);
}