در این آموزش قصد داریم نحوه راه اندازی بازر های اکتیو و پسیو را در پروژههای الکترونیکی بررسی نماییم. همچنین خواهیم آموخت که چگونه با استفاده از توابع ()tone و ()noTone چند کد آردوینو برای راه اندازی بازرها بنویسیم. اگر علاقمند به ساخت و راه اندازی مدارات الکترونیکی با قابلیت تولید صدا یا هشدار با استفاده از بازر ها هستید، پیشنهاد میکنیم تا انتهای این یادگیری با ما همراه باشید:
ما با بیان تفاوتهایی بین بازر اکتیو و پسیو در این مقاله، در مورد نحوه اتصال هر یک از آنها به آردوینو و نمونه کدها بحث خواهیم کرد.
بازر پیزوالکتریک چیست؟
بیپر یا بازر های پیزوالکتریک (buzzer) نوعی مبدل (ترانسدیوسر) صوتی از دسته قطعات الکترومکانیکال هستند که برای تولید صدا مورد استفاده قرار میگیرند، به این نحو که سیگنال صوتی الکترونیکی را به سیگنال مکانیکی یا صدا تبدیل میکند، مثل صدای بیپ که در زمان روشن شدن یک کامپیوتر به گوش میرسد. بازر ها به دلیل ابعاد کوچک، هزینه کم و استفادهی آسان، انتخاب مناسبی برای ایجاد افکتهای صوتی ساده مانند آلارم و اپلیکیشنهای تولید آهنگ هستند.
ساختار بازر ها چگونه است؟
بازر پیزوالکتریک، یک قطعهی الکترونیکی دارای پلاریته است، به این معنا که دارای یک پایه مثبت و یک پایه منفی میباشد. همچنین برای راه اندازی به ولتاژ تغذیهی بین 3.3 ولت تا حداکثر 12 ولت نیاز دارد. ولتاژ کاری هر نوع بازر در دیتاشیت ارائه شده توسط سازنده آن ذکر شدهاست.
چنانچه قصد دارید بازر خود را به هر میکروکنترلر دلخواهی متصل کنید، مطمئن شوید ولتاژ کاری بازری که تهیه میکنید 5 ولت باشد.
- اعمال ولتاژ به پایههای بازر پیزوالکتریک، باعث ایجاد تغییر شکل جزئی در دیسک پیزو میشود و با تغییر این ولتاژ، دیسک شروع به لرزش کرده و منجر به تولید صدایی میشود که ما از بازر میشنویم. این نوع بازر را بازر پسیو مینامند.
- نوع دیگری از بازرها هستند که نیازی به تغییر ولتاژ ندارند، تنها کافیست ولتاژ ثابتی به پایههای آنها اعمال کنید. این نوع بازر یک مدار اسیلاتور داخلی دارد که ولتاژ ثابت را به یک موج مربعی تبدیل و آن را به دیسک پیزو اعمال میکند تا صدایی با فرکانس ثابت تولید شود. این نوع بازر را بازر اکتیو مینامند.
تفاوت بارز های اکتیو و پسیو:
بازرهای اکتیو، آسانترین روش استفاده را دارند، زیرا دارای اسیلاتور داخلی هستند. شما فقط باید ولتاژ ثابتی به آن اعمال کنید، آنگاه تا زمانی که ولتاژ قطع شود، صدای بازر پخش خواهد شد. در واقع بازر اکتیو مانند یک قطعهی دیجیتال در خروجی(مانند یک LED) عمل میکند که شما آن را روشن یا خاموش میکنید.
از طرف دیگر بازرهای پسیو، به یک سیگنال ولتاژ AC نیاز دارند تا لرزش و صدا تولید کنند. بنابراین، در مقایسه با بازرهای اکتیو، کنترل بازرهای پسیو کمی دشوار است. البته این امکان را به ما میدهند تا بتوانیم صداهای با فرکانس دلخواه پخش کنیم.
در ادامه نحوه تشخیص بازر اکتیو از پسیو ذکر شده است.
1. مشاهدهی انتهای بازر
معمولاً بازرهای پسیو برخلاف بازرهای اکتیو در زیر خود پوششی ندارند. این امر میتواند تشخیص یک بازر اکتیو از پسیو را آسان سازد. با این وجود، تضمینی وجود ندارد که همیشه به این شکل باشند و به همین دلیل به تست دیگری نیاز است تا مطمئن شویم بازر موردنظر اکتیو است یا پسیو.
2. اتصال بازر به ولتاژ 5 ولت DC
با اتصال بازر به ولتاژ تغذیهی 5 ولت DC (ولتاژ کاری بازر)، میتوانید بفهمید بازر اکتیو است یا پسیو. زیرا هر دوی آنها پاسخ متفاوتی نسبت به ولتاژ ثابت تغذیه دارند که به صورت زیر خواهند بود:
- بازر اکتیو: با اعمال ولتاژ تغذیه، یک صدای پیوسته تولید خواهد کرد تا زمانی که ولتاژ تغذیه را قطع کنید.
- بازر پسیو: با اعمال ولتاژ تغذیه، صدای کلیک مانندی (مشابه صدای رله) خواهد داشت. با قطع و وصل کردن مجدد ولتاژ، میتوان صدای کلیک مانند را دوباره شنید.
به یاد داشته باشید:
هنگامی که ولتاژ تغذیهی DC به بازرهای پسیو اعمال شود، در مقایسه با بازرهای اکتیو جریان مصرفی قابل ملاحظهای خواهند داشت. مطمئن شوید بازر را به یک منبع با جریان محدود (50 میلی آمپر) متصل میکنید. همچنین میتوانید یک مقاومت 100 اهم را با آن سری کنید و از این طریق جریان را محدود کنید.
تجهیزات مورد نیاز
ما برای راه اندازی بازر پسیو و اکتیو نیاز به اقلامی داریم که میتوانید در بخش زیر آنها را بررسی و موارد ناموجود نزد خود را خریداری نمایید:
- بازر پسیو یا بازر اکتیو (یک عدد)
- ماژول آردوینو (یک عدد)
- تک سوئیچ (یک عدد)
نحوه راه اندازی بازر اکتیو با آردوینو
شما برای اتصال بازر به آردوینو خود، تنها به یک جفت سیم جامپر نیاز دارید. تنها کافی است به پلاریتههای بازر توجه داشته باشید و پایهی مثبت بازر را به هر پایهی دلخواهی از آردوینو متصل کنید! بله به همین سادگی!
بازر اکتیو برای شروع به تولید صدا با فرکانس ثابت، به یک سیگنال HIGH نیاز دارد و نیازی به داشتن خروجی PWM بر روی پین موردنظر یا استفاده از تابع ()tone نیست.
با کد سادهی زیر می توان به مدت یک ثانیه با بازر اکتیو صدا تولید کرد و سپس آن را خاموش نمود.
#define BUZZER_PIN 8
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(BUZZER_PIN, LOW);
نمونه برنامه : قطع و وصل صدای بازر توسط کلید
در این مثال میخواهیم یک بازر اکتیو را به آردوینو متصل کرده و صدای آن را با استفاده از یک کلید کنترل کنیم. تا زمانی که کلید فشرده شدهاست، بازر به تولید صدا ادامه خواهد داد. با رها شدن کلید، صدای بازر نیز قطع خواهد شد.
- برای اتصال بازر میتوانیم از هر پایهی دیجیتال آردوینو استفاده کنیم.
مرحله اول) انجام سیمکشی
در این بخش، میتوانید نحوهی اتصال قطعات به آردوینو را مشاهده نمایید.
مرحله دوم) آپلود کد آردوینو
در اینجا کد کامل برای آپلود روی IDE آردوینو، آماده و قابل مشاهده است.
/*
* LAB Name: Arduino (Active Buzzer) Example
* Author: Khaled Magdy
* For More Info Visit: www.DeepBlueMbedded.com
*/
#define BUZZER_PIN 8
#define BTN_PIN 7
void setup() {
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BTN_PIN, INPUT_PULLUP);
}
void loop() {
if(digitalRead(BTN_PIN))
{
digitalWrite(BUZZER_PIN, LOW);
}
else
{
digitalWrite(BUZZER_PIN, HIGH);
}
}
توضیحات کد:
هم اکنون که مراحل لازم برای راه اندازی یک بازر اکتیو را دانستید و تکه کد لازم برای این پروژه را آپلود و اجرا نمودهاید، زمان مناسبی است تا با یادگیری و بررسی کارایی هر دستور در این برنامه، دانش لازم برای استفاده از هر تابع را برای راه اندازی بازر ها در انواع پروژههای مبتنی بر آردوینو، به دست آورید:
ما در برنامه کنترل تولید صدای بازر اکتیو، ابتدا پینهای موردنیاز برای اتصال کلید و بازر را تعریف میکنیم.
#define BUZZER_PIN 8
#define BTN_PIN 7
- در تابع ()setup، پین بازر را بهعنوان خروجی و پین کلید را به عنوان ورودی تعیین میکنیم.
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BTN_PIN, INPUT_PULLUP);
- در تابع ()loop، بهطور دائم پایهی کلید ورودی را با تابع ()digitalRead میخوانیم. اگر کلید فشرده شده باشد (state == LOW)، پین بازر خروجی را فعال خواهیم کرد (HIGH). در غیراینصورت این پایه LOW خواهد بود.
if(digitalRead(BTN_PIN))
{
digitalWrite(BUZZER_PIN, LOW);
}
else
{
digitalWrite(BUZZER_PIN, HIGH);
}
نمونه برنامه : تغییر و کنترل صدای بازر اکتیو توسط PWM
در این مثال نیز یک بازر اکتیو را قطع و وصل میکنیم، همچنین سعی میکنیم صدای بازر را با وصل کردن آن به یک پین PWM (پایه ۹) و تغییر مقدار duty cycle کنترل کنیم.
/*
* LAB Name: Arduino (Active Buzzer) Example
* Author: Khaled Magdy
* For More Info Visit: www.DeepBlueMbedded.com
*/
#define BUZZER_PIN 9
#define BTN_PIN 7
void setup() {
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BTN_PIN, INPUT_PULLUP);
}
void loop() {
if(digitalRead(BTN_PIN))
{
analogWrite(BUZZER_PIN, 0);
}
else
{
analogWrite(BUZZER_PIN, 127);
}
}
پس از اجرای این برنامه مشاهده میکنیم اگرچه میزان صدای بازر کنترل میشود، اما صدای بازر شفاف نبوده و مخدوش شدهاست. این موضوع طبیعی است زیرا همانطور که ذکر شد بازر اکتیو نیازی به اتصال به پایه PWM ندارد. اما خوب است این حالت را امتحان کنید و عملکرد بازر اکتیو را در این حالت بدانید.
نحوه راه اندازی بازر پسیو با آردوینو
نحوه اتصال فیزیکی یک بازر پسیو به آردوینو، دقیقاً مشابه اتصال بازر اکتیو است و شما میتوانید از مراحل قبلی برای این راه اندازی نیز استفاده کنید. برای کنترل صدای بازر پسیو میتوانیم از یکی از پایههای خروجی PWM آردوینو یا یکی از پینهای دیجیتال بههمراه توابع ()tone و ()noTone استفاده کنیم.
به صورت نرمافزاری نیز، باید سیگنال AC موردنیاز برای راهاندازی بازر پسیو را با استفاده از تابع ()tone تولید کنیم. در ادامه از این توابع برای تولید فرکانسهای خروجی متفاوت استفاده خواهیم کرد.
کاربرد تابع ()tone در ایجاد صدا
با این تابع میتوان یک موج مربعی با فرکانس مشخص (50% duty cycle) بر روی یک پین تولید کرد. مدت زمان تولید این موج را نیز میتوان مشخص کرد، درغیر اینصورت موج تا زمانی ادامه خواهد داشت که تابع ()noTone فراخوانی شود. این پین را میتوانید به یک بازر پیزوالکتریک با بلندگوی دیگری به منظور پخش آهنگ متصل کنید.
در استفاده از تابع ()tone دقت کنید که در هر لحظه تنها یک صدا میتواند تولید شود بنابراین اگر از گذشته صدایی بر روی پین دیگری در حال پخش است، فراخوانی تابع ()tone تاثیری نخواهد داشت. اگر صدا بر روی همان پین پخش شود، فراخوانی تابع فرکانس صدا را تنظیم خواهد کرد.
tone(pin, frequency);
tone(pin, frequency, duration);
معرفی پارامترهای تابع ()tone :
pin: پین آردوینو که میخواهیم با استفاده از آن صدا تولید کنیم.
frequency: فرکانس صدا بر حسب هرتز. نوع دادهی مجاز: unsigned int
duration: مدت زمان پخش صدا بر حسب میلی ثانیه. نوع دادهی مجاز: unsigned long
به یاد داشته باشید:
اگر میخواهید صداهایی با فرکانسهای مختلف روی چند پایه پخش کنید، باید قبل از فراخوانی تابع ()tone بر روی پایه جدید، تابع ()noTone را روی پایه قبلی فراخوانی کنید. همچنین استفاده از تابع ()tone به همراه خروجی PWM بر روی پینهای شماره 3 و 11 (در بردهای آردوینو به غیر از Mega) تداخل ایجاد خواهد کرد. در نهایت بد نیست بدانید تولید صداهای با فرکانس کمتر از 31 هرتز با استفاده از تابع ()tone امکان پذیر نیست.
نمونه برنامه: پخش فرکانسهای متنوع صدا با استفاده از بازر پسیو
در این مثال قصد داریم یک بازر پسیو را توسط آردوینو راه اندازی و سپس با استفاده از یک کلید ورودی، صداهایی با فرکانسهای مختلف پخش کنیم. هر زمان که کلید فشرده شده باشد، با استفاده از تابع ()tone صدایی با فرکانس متفاوت پخش خواهیم کرد و زمانی که کلید رها شود، با استفاده از تابع ()noTone صدا را قطع خواهیم کرد.
مرحله اول) انجام سیمکشی
همانطور که گفتیم، نحوه انجام اتصالات این مدار کاملاً مشابه مرحله سیمکشی در بخش راه اندازی بازر اکتیو میباشد.
مرحله دوم) آپلود کد آردوینو
کد کامل این مثال را میتوانید برای انجام آپلود برروی برنامه IDE آردوینو سیستم خود، مورد استفاده قرار دهید :
/*
* LAB Name: Arduino (Passive Buzzer) Example
* Author: Khaled Magdy
* For More Info Visit: www.DeepBlueMbedded.com
*/
#define BUZZER_PIN 8
#define BTN_PIN 7
int FrequencyArr[5] = {150, 350, 550, 750, 950};
int Idx = 0;
void setup() {
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BTN_PIN, INPUT_PULLUP);
}
void loop() {
if(digitalRead(BTN_PIN))
{
noTone(BUZZER_PIN);
}
else
{
tone(BUZZER_PIN, FrequencyArr[Idx++]);
delay(500);
if(Idx == 5)
{
Idx = 0;
}
}
}
توضیحات کد:
پس از اتمام مراحل راه اندازی بازر پسیو توسط اجرای برنامه بالا در آردوینو، اکنون موقعیت بسیار مناسبی است تا با یادگیری و بررسی توضیحات هر بخش از برنامه آپلود شده، توانایی استفاده از بازر های پسیو را در پروژه های مبتنیبر آردوینو خود به دست آورید:
- برنامه را با تعریف پایههای موردنیاز برای بازر و کلید شروع میکنیم.
#define BUZZER_PIN 8
#define BTN_PIN 7
- همچنین آرایهای از فرکانسهایی که یکی پس از دیگری هنگام فشردن کلید پخش خواهیم کرد را تعریف میکنیم. سپس متغیر Idx را برای دنبال کردن صدایی که در حال پخش است، تعریف میکنیم.
int FrequencyArr[5] = {150, 350, 550, 750, 950};
int Idx = 0;
- در تابع ()setup، کلید را به عنوان ورودی و بازر را به عنوان خروجی تعریف میکنیم.
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BTN_PIN, INPUT_PULLUP);
در تابع ()loop، به طور دائم با استفاده از تابع ()digitalRead پایه متصل به تک سوئیچ را میخوانیم. اگر کلید فشرده شده باشد(state == LOW)، صدا را طبق آرایهی فرکانسی و با استفاده از تابع tone(pin, frequency) بر روی پایه خروجی پخش خواهیم کرد. در غیر این صورت، برای خاموش شدن بازر تابع noTone(pin) را فراخوانی میکنیم. زمانی که اندیس آرایه فرکانسی به آخرین عضو برسد، آن را ریست (صفر) میکنیم تا برای زمانی که مجددا کلید فشرده میشود از ابتدای آرایه شروع شود.
if(digitalRead(BTN_PIN))
{
noTone(BUZZER_PIN);
}
else
{
tone(BUZZER_PIN, FrequencyArr[Idx++]);
delay(500);
if(Idx == 5)
{
Idx = 0;
}
}
سخن آخر
در انتها از شما برای انتخاب این مقاله جهت آموزش راه اندازی بازر در پروژههای خود، بسیار سپاسگذار هستیم و امیدواریم توانسته باشیم این موضوع را بهطور کامل و واضح بیان نموده باشیم. چنانچه در روند یادگیری و انجام این پروژه دچار مشکل شدهاید و سؤالی ذهن شما را درگیر کردهاست، پیشنهاد میکنیم با ارسال این پرسش در قسمت دیدگاه همین صفحه برای کارشناسان فنی مجموعه روبوایکیو، پاسخ خود را در اسرع زمان از ما دریافت نمایید.