آموزش آردوینو پروژه پنجم
از زمانی که فردوسی بزرگ “عجم زنده کرد بدان پارسی” سالها گذشته. بعد از اون هر جا مردم خواستند یادشون باشه یا به یاد کسی بیارند که بسی رنج برده شده، یکم مشکل داشتن؛ چون حکیم توس اهل کمکاری نبود و خوندن شش هزار بیت برای این یادآوری هم کار سختی بود. تا اینکه یک روز دو نفر به اسمهای روحالله خالقی و حسین گلگلاب (که من قدیم فکر میکردم به خاطر تجلیل از کارش این رو بهش میگن!) تصمیم گرفتن یک نسخه مینیاتوری از شاهنامه رو بسازند و همه بزرگی اون رو توی چند بیت و چند میزان آهنگ بگنجونن.
بعد از اون مردانی از پارس حتی در ثریا هم اون رو زمزمه کردن تا اینکه من کاشف به عمل آوردم هنوز در دنیای آردوینو این آهنگ طنینانداز نشده. این شد که تصمیم گرفتم روح فردوسی رو بیش از این منتظر نگذارم!
البته پر واضح و مبرهن است که با ابزار قبلی که داشتم، نمیشد چنین کاری کرد. لذا بستهی زیر رو به قیمت هشتاد هزار تومان تهیه کردم که شامل مجموعهای از شیلدهای آموزش آردوینو ساخت کشور دوست و همسایه، چین است.
خوب دوستان چشم بادومی، زحمت یک راهنمای ساده رو هم به خودشون ندادن و به نامناسبترین شکل ممکن حتی بردهای مشابه رو هم بهطور واضحی از هم جداسازی نکردند. اما خوب چه میشه کرد. چینی هستند دیگه!
از بین اون همه شیلد، این دوتا رو انتخاب میکنیم. سمت راستی بازر[بیزر] پسیو هست و سمت چپی هم SMD color.
اگه دنبال دیتا شیت بازر پسیو توی آردوینو بگردید متوجه میشید که عملکرد سادهای داره: پایه مثبت و منفی که کاملاً مشخص هستن و یک پایه s هم وجود داره که بر اساس فرکانسی که بهش میدین صدای متفاوتی ایجاد میکنه. صداش خیلی خوشایند نیست اما برای ساخت آهنگ کافیه.
برای به صدا درآوردنش توابعی مانند زیر استفاده میشن:
1 2 3 4 5 | tone(3,1500); delay(1000); noTone(3); delay(3000); |
تابع tone همونطور که مشخصه، روی پایهی مشخصی، صدا رو با فرکانس اعلامشده ایجاد میکنه و تو همین وضعیت باقی میمونه تا اینکه برای قطع کردن صدا از تابع noTone استفاده کنیم. پیشنهاد میکنم برای جلوگیری از صدمات و حملات احتمالی و ناگهانی سایرین(!) از یک مقاومت بین پایه S استفاده کنید تا شاید صدای ناخوشایندش یکم تلطیف بشه!
شاید برای شما مفید باشد: پروژه های آردوینو
SMD Color هم چهارپایه داره: پایه اول به زمین و هرکدام از اون سه پایه باقیمونده برای روشن کردن سه رنگ اصلی سبز، آبی و قرمز هستن.
صورتمسئله اصلی:
پرچم ایران رو در هنگام نواخته شدن قسمتی از سرود ای ایران به اهتزاز در بیارید!
برد رو مشابه تصویر زیر، پیادهسازی میکنیم:
همونطور که مشخص هست از چهارپایه دیجیتال بهعنوان خروجی استفاده کردم؛ یکی برای صدا و ۳ پایه برای دستور روشن شدن رنگ بر روی SMD Color.
خوشبختانه در این قسمت از آموزش آردوینو قرار نیست آموزش آهنگسازی با آردوینو رو ببینید؛ در نتیجه من قطعهای که قبلاً با تکیه بر دانش ناب موسیقی ایجاد کردم رو مستقیماً قرار میدم!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | void playMusic() { tone(BUZZER,1000); delay(500); tone(BUZZER,1500); delay(500); tone(BUZZER,1000); delay(500); tone(BUZZER,1500); delay(500); tone(BUZZER,1520); delay(500); tone(BUZZER,1600); delay(250); tone(BUZZER,1700); delay(250); tone(BUZZER,1700); delay(250); tone(BUZZER,1600); delay(250); tone(BUZZER,1500); delay(1000); noTone(BUZZER); delay(3000); } |
درصورتیکه این تابع رو در تابع Loop فراخوانی کنید (برای متغیر Buzzer مقدار ۳ رو قرار بدید) و مدار رو درست متصل کرده باشید، موسیقی دلنواز رو خواهید شنید. (امیدوارم روح روحالله خالقی توی گور ناراحت نشده باشه، هرچی باشه یک بازر که بیشتر نیست!)
حالا نوبت پرچم میرسه. برای خواناتر و سادهتر شدن استفاده، ۳ تابع زیر رو تعریف میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | void GreenLed() { digitalWrite(BLUE,LOW); digitalWrite(RED,LOW); digitalWrite(GREEN,HIGH); } void RedLed() { digitalWrite(BLUE,LOW); digitalWrite(GREEN,LOW); digitalWrite(RED,HIGH); } void WhiteLed() { digitalWrite(BLUE,HIGH); digitalWrite(GREEN,HIGH); digitalWrite(RED,HIGH); } |
چون نه ما توی پرچم رنگ آبی داریم و نه این شیلد رنگ سفید رو میتونه ایجاد کنه، برای رنگ سفید سبز، قرمز و آبی رو همزمان روشن میکنیم.
آردوینو بهصورت پیشفرض دستورات رو بهصورت خطی ایجاد میکنه، یعنی اگر از این توابع بعد از playMusic استفاده کنید، اول موسیقی رو میشنوید و بعد رنگها روشن میشن. پس لازم هست توی قسمت PlayMusic جاسازیش کنیم.
کد نهایی به این صورت میشه:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | //By Sisoog //آموزش آردوینو پروژه پنجم int BUZZER=3; int BLUE=4; int GREEN=5; int RED=6; void setup() { // put your setup code here, to run once: pinMode(BUZZER,OUTPUT); pinMode(BLUE,OUTPUT); pinMode(GREEN,OUTPUT); pinMode(RED,OUTPUT); } void loop() { playMusic(); } void GreenLed() { digitalWrite(BLUE,LOW); digitalWrite(RED,LOW); digitalWrite(GREEN,HIGH); } void RedLed() { digitalWrite(BLUE,LOW); digitalWrite(GREEN,LOW); digitalWrite(RED,HIGH); } void WhiteLed() { digitalWrite(BLUE,HIGH); digitalWrite(GREEN,HIGH); digitalWrite(RED,HIGH); } void playMusic() { GreenLed(); tone(BUZZER,1000); delay(500); tone(BUZZER,1500); delay(500); tone(BUZZER,1000); WhiteLed(); delay(500); tone(BUZZER,1500); delay(500); tone(BUZZER,1520); delay(500); tone(BUZZER,1600); delay(250); tone(BUZZER,1700); delay(250); Red(); tone(BUZZER,1700); delay(250); tone(BUZZER,1600); delay(250); tone(BUZZER,1500); delay(1000); noTone(BUZZER); delay(3000); } |
کد رو اجرا کنید، بایستید و دستتون رو روی قلبتون قرار بدید!