آموزش آردوینو پروژه پنجم
از زمانیکه فردوسیبزرگ “عجم زنده کرد بدان پارسی” سالها گذشته. بعداز اون هرجا مردم خواستند یادشونباشه یا بهیادکسی بیارند که بسی رنج بردهشده، یکم مشکل داشتن؛ چون حکیم توس اهل کمکاری نبود و خوندن ششهزاربیت برای این یادآوری هم کارسختی بود. تا اینکه یکروز دونفر به اسمهای روحالله خالقی و حسین گلگلاب (که من قدیم فکر میکردم به خاطر تجلیل از کارش این رو بهش میگن!) تصمیم گرفتن یک نسخه مینیاتوری از شاهنامه رو بسازند و همه بزرگی اون رو توی چند بیت و چند میزان آهنگ بگنجونن. بعداز اون مردانی از پارس حتی در ثریا هم اون رو زمزمه کردن تا اینکه من کاشفبه عملآوردم هنوز در دنیای آردوینو این آهنگ طنینانداز نشده. اینشدکه تصمیمگرفتم روح فردوسی رو بیشاز این منتظر نگذارم! البته پرواضح و مبرهن است که با ابزارقبلی که داشتم، نمیشد چنینکاری کرد. لذا بستهی زیر رو به قیمت هشتادهزارتومان تهیه کردم که شامل مجموعهای از شیلدهای آموزش آردوینو ساخت کشور دوست و همسایه، چین است.
خوب دوستان چشمبادومی، زحمت یک راهنمایساده رو هم به خودشون ندادن و به نامناسبترین شکل ممکن حتی بردهای مشابه رو هم بهطور واضحی ازهم جداسازی نکردند. اما خوب چه میشه کرد؟ چینی هستند دیگه! ازبین اون همه شیلد، این دوتا رو انتخاب میکنیم. سمتراستی بازر[بیزر] پسیو هست و سمتچپی هم SMD color.
اگه دنبال دیتاشیت بازر پسیو توی آردوینو بگردید متوجه میشید که عملکرد سادهای داره: پایه مثبتو منفی که کاملاً مشخص هستن و یک پایه s هم وجودداره که براساس فرکانسیکه بهش میدین صدای متفاوتی ایجاد میکنه. صداش خیلی خوشایند نیست اما برای ساخت آهنگ کافیه. برای بهصدا درآوردنش توابعی مانند زیر استفاده میشن:
tone(3,1500); delay(1000); noTone(3); delay(3000);
تابع tone همونطور که مشخصه، روی پایهی مشخصی، صدا رو با فرکانس اعلامشده ایجادمیکنه و تو همین وضعیت باقی میمونه تااینکه برای قطعکردن صدا از تابع noTone استفاده کنیم. پیشنهاد میکنم برای جلوگیریاز صدمات و حملات احتمالی و ناگهانی سایرین(!) از یک مقاومت بین پایه S استفاده کنید تا شاید صدای ناخوشایندش یکم تلطیف بشه! SMD Color هم چهارپایه داره: پایهاول به زمین و هرکدام از اون سهپایه باقیمونده برای روشنکردن سه رنگ اصلی سبز، آبی و قرمز هستن.
صورتمسئله اصلی:
پرچم ایران رو در هنگام نواخته شدن قسمتیاز سرود ای ایران به اهتزاز در بیارید! برد رو مشابه تصویر زیر، پیادهسازی میکنیم:
همونطور که مشخص هست از چهارپایه دیجیتال بهعنوان خروجی استفاده کردم؛ یکی برای صدا و ۳ پایه برای دستور روشنشدن رنگ برروی SMD Color. خوشبختانه در این قسمت از آموزش آردوینو قرار نیست آموزش آهنگسازی با آردوینو رو ببینید؛ درنتیجه من قطعهای که قبلاً با تکیه بر دانش ناب موسیقی ایجاد کردم رو مستقیماً قرار میدم!
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 مقدار ۳ رو قرار بدید) و مدار رو درست متصل کرده باشید، موسیقی دلنواز رو خواهید شنید. حالا نوبت پرچم میرسه. برای خواناتر و سادهتر شدن استفاده، ۳ تابع زیر رو تعریف میکنیم:
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 جاسازیش کنیم. کدنهایی بهاین صورت میشه:
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); }
کد رو اجرا کنید، بایستید و دستتون رو روی قلبتون قرار بدید!
منبع: سیسوگ
[…] شوک هم لرزش و ویبره رو تشخیص میده و SMD Color هم که مفصلاً اینجا ازش استفاده […]