گاهی اوقات پیش اومده که توی پروژه نیاز داشته باشیم از علائم صوتی استفاده کنیم. علائمی مثل بوق زدن، بوق خطر، آژیر و… . در این آموزش قراره با هم دیگه یک شبه آژیر پلیس درست کنیم. از همینجا و بمناسبت هفته نیروی انتظامی به تمام این عزیزان خدا قوت و خسته نباشید عرض میکنیم.
بعد از یادگرفتن و راه اندازی این آموزش، میتوینم اون رو ارتقا بدیم و با یکم تغییر توی مدار و تقویت صدا، از اون توی پروژه هایی مثل دزدگیر یا سیستم اعلام حریق، سرقت و … استفاده کنیم. که به احتمال زیاد تا چند وقت دیگه یه مطلب آموزشی در این خصوص آماده خواهم کرد. به شرط اینکه فیدبک بدید توی کامنت ها و مطالب رو برای دوستانتون و بقیه ارسال کنید o_o. پس با ما همراه باشید و این آموزش جذاب را از دست ندید.
در این آموزش از تابع کاربردی ()tone استفاده شده. این تابع یکی از توابع محیط برنامه نویسی آدروینو هست که یک موج مربعی با فرکانس مشخص شده، روی پایه ای که بهش معرفی میکنیم ایجاد میکنه.
خب تا اینجا فهمیدیم برای ایجاد یک صدای آژیر نیاز هست یک روی پایه مشخصی یک موج مربعی که دارای فرکانس مشخص و متناسب با نوع آژیر هستش ایجاد کنید.
شماتیک:
وسایل مورد نیاز:
- آردوینو (مدل اش فرقی نمیکنه)
- بلندگو 8 اهم – نیم وات
- سیم
- برد بورد
- کلید فشاری
- مقاومت 1kΩ
- مقاومت 10KΩ
- ترانزیستور 2N2222
کد های پروژه:
از سورس کد زیر میشه فهمید، برای ایجاد صوت از تابع ()tone استفاده شده است. همونطور که در ابتدای آموزش هم گفته شد، این تابع یک موج مربعی با فرکانس مشخص، بر روی پایه مورد نظر ایجاد میکنه.
برای ایجاد آژیر نیاز به دو حلقه for داریم یکی برای فرکانس از کم به زیاد و یکی هم برای فرکانس از زیاد به کم.
طریقه استفاده از این تابع به شکل زیر است:
tone(pin, frequency) tone(pin, frequency, duration)
در توابع بالا مقادیر داخل آرگومان تابع بصورت زیر می باشند:
- pin: شماره پایه آردوینو که قصد ایجاد خروجی صوتی را داریم.
- frequency: فرکانس دلخواه جهت ایجاد روی پایه مورد نظر بر حسب هرتز. [.unsigned int]
- duration: مدت زمان پایداری موج ایجاد شده روی پایه مورد نظر بر حسب ms. (دلخواه) [.unsigned long]
در برنامه، مادامی که آژیر بصدا در خواهد آمد، برای دو پایه دیجیتال 2 و 3 دستورات شرطی در نظر گرفته شده است. اگر پایه شماره 2 یک منطقی شود صدای آژیر تبدیل به بوق می شود. و در صورتی که پایه شماره 3 یک منطقی شد، صدای آژیر تغییر پیدا کرده و مثل آژیر پلیس می شود.
int f, d; void setup() { pinMode(9, OUTPUT); } void loop() { for (f = 635; f <= 912; f++) { tone(9, f); delay(d); if (digitalRead(2) == HIGH) f = 912; if (digitalRead(3) == HIGH) d = 0; else d = 7; } for (f = 911; f >= 634; f--) { tone(9, f); delay(d); if (digitalRead(2) == HIGH) f = 634; if (digitalRead(3) == HIGH) d = 0; else d = 10; } while (digitalRead(2) == HIGH) { noTone(9); tone(9, 250); delay(5); noTone(9); delay(5); } }
برای دریافت سورس کد، از این لینک استفاده کنید.
تقویت صدای خروجی آژیر:
برای اینکه صدای خروجی رو تقویت کنیم و صدای بیشتری داشته باشیم نیاز به مداری بنام مدار تقویت کننده هست. همونطور که میدونیم مدارات تقویت کننده انواع مختلفی داره که از حوصله بحث خارج هست و دیگه بهش نمیپردازیم.
- تقویت کننده سیگنال کوچک (تقویت کننده ولتاژ)
- تقویت کننده سیگنال بزرگ (تقویت کننده توان)
در ویدیو زیر شکل موج خروجی و ایجاد شده روی پایه 9 را میتونید ببینید:
از اونجا که هدف ما در این مطلب، آموزش هست. برای تقویت کردن صدای ایجاد شده از یک مدار پایه و ساده تنها با یک ترانزیستور استفاده میکنیم. در صورتی که بخوایم بهره تقویت بیشتری داشته باشیم از تقویت کننده های چند طبقه یا مدارات تقویت کننده دیگه هم میتونیم استفاده کنیم.
در ویدیو زیر خروجی مدار بدون تقویت کننده است که میتونید مشاهده کنید:
مدار تقویت کننده:
در مدار زیر میتونیم به جای تغذیه 9 ولت از 5 ولت آردوینو هم استفاده کنیم. پایه خروجی صوتی (پایه شماره 9 با توجه به سورس کد این پروژه) را به ورودی تقویت کننده (P1) متصل نمایید. بعد از نصب و راه اندزای، شاهد افزایش بهره صوتی و صدای تولیدی خواهید بود. البته این یک مدار ابتدایی و ساده می باشد. برای نتیجه مطلوب تر و داشتن پارامتر های ایده آل تر از جمله توان مصرفی و نوع بایاس باید از مدار های تقویت کننده دیگر استفاده کرد.
در ویدیو زیر خروجی صوتی با استفاده از مدار بالا تقویت شده:
در صورتی که تمایل داشتید دامنه صوتی خروجی بیشتر بشه میتونید به جای استفاده از مدار فوق از آمپلی فایر استفاده کنید. برای خرید انواع آمپلی فایر هم میتونید به فروشگاه مایکروالکام مراجعه کنید.
اگر از این مطلب بهره برداری کردید و اون رو بصورت عملی استفاده کردید، فیلم و عکس های اون رو توی اینستاگرام با هشتگ microelecom# منتشر کنید. در صورتی که نظر یا انتقاد و سوالی بود اون رو حتما در انتهای مطلب از طریق کامنت ها با ما به اشتراگ بگذارید و نظرات شما در اسرع وقت پاسخ داده خواهد شد. تشکر از همراهی شما و تا آموزشی دیگه بدرود.
playagain:
FOR note = 635 TO 911
SOUND note, 0.222225
NEXT
one = 912
two = 634
note2 = one
m1:
SOUND note2, 0.222225
note2 = note2 – 1
IF note2 = two THEN
GOTO playagain
ELSE
GOTO m1
END IF
با سلام؛
متوجه نشدم. اگر امکانش هست در خصوص این تکه کد ها بیشتر توضیح بدید. 😀😃