آموزش آردوینو پروژه ششم
زمان بچگی، ما که کلاً اسم چندتا شغل رو بیشتر بلد نبودیم. اکثرمون در جواب اینکه “بزرگ شدی میخوای چه کاره بشی؟” معمولاً میگفتیم: خلبان هواپیما. (البته بهغیر از اون بچههای منحرفی که میخواستن آمپول زن بشن، یا حداقل بعد هر پرواز، مدت کوتاهی در واحد تزریقات فرودگاه مشغول فعالیت باشن!). قاعدتاً هیچ کدوم از ما و شمایی که این مطلب رو میخونید یا اصلاً پی گیر این آرزو نشدیم یا درصد کمی تلاش کردیم و موفق نشدیم. طبیعتاً الان که با این چشمهایی که توی مانیتور دیگه جونی براشون نمونده و موقع رانندگی هم آبجکتهایی که از روبروی ماشین رد میشن رو به زحمت تشخیص میدم(!)، دیگه دنبال خلبان شدن نیستم اما خب الزاماً که همه نباید خلبان ایرباس باشن، هرکسی به شیوهی خودش!
شاید برای شما مفید باشد: پروژه های آردوینو
تا الان دقت کردید چقدر این برد بوردها شبیه هواپیما هستن؟ اصلاً شاید ار روز ازل قسمت ما این بوده که خلبان برد بورد بشیم! درسته که همینطوری برد بورد رو با دستتون بگیرید توی هوا بچرخونید و صدای هواپیما در بیارید هم شبیه خلبانها میشید! اما یه چند تا آیتم ساده هم برای آموزش آردوینو بهش اضافه میکنیم تا حس بهتری بده!
ماژولهای موردنیاز
برای قسمت اول، از سه تا ماژول از همون بستهی کذایی استفاده میکنیم. به ترتیب از سمت راست معرفی میکنم، لیدیز اند جنتلمِنز:
Tilt Switch
Shock Sensor
SMD Color
هدف پروژه
هدف پروژه این هست که برای مطلع کردن خلبان از وضعیت اضطراری که به وجود اومده،از این سنسورها استفاده کنیم. سنسور Tilt یک بیلبیلک (!) داخلش داره که به چپ و راست حرکت میکنه و طبیعتاً میتونه از طریق خروجی دیجیتالش به ما هم اطلاع بده. سنسور شوک هم لرزش و ویبره رو تشخیص میده و SMD Color هم که مفصلاً اینجا ازش استفاده کردیم.
مراحل کار
اول سنسور Tilt رو به تنهایی بر روی بورد نصب میکنیم. چون باید در راستای افق تراز باشه، طبیعتاً باید روی بورد قرار بگیره. پایه منفی به منفی، پایه وسط به 5 ولت و پایه S یا سیگنال هم خروجی این شیلد هست. مدار رو من به این صورت طراحی کردم و اون سیم متصل به سنسور هم برای اینه که اینقدر وول نخوره و بشینه سرجاش!
خروجی سنسور رو به پایهی دوم آردوینو متصل کردم. این شیلد وقتی اون گلوله سمت راست باشه، مقدار صفر و وقتی سمت چپ قرار بگیره، مقدار یک رو روی خروجی قرار میده؛ اما میتونید برای این اطمینان مقادیر رو (همونطور که قبلاً دیدیم) روی خروجی سریال نمایش بدیم. پس نمونه کد زیر رو برای مرحلهی اول مینویسیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //By Sisoog //آموزش آردوینو پروژه ششم int TiltInputPin=2; int TiltInputValue; void setup() { // put your setup code here, to run once: pinMode(TiltInputPin,INPUT); Serial.begin(9600); Serial.print("Hi Capitan"); Serial.println(); } void loop() { TiltInputValue=digitalRead(TiltInputPin); Serial.print(TiltInputValue); delay(500); } |
خب تا همینجا هم حداقل تونستیم وضعیت تعادل هواپیما رو متوجه بشیم. اما برای اینکه به اطلاع خلبان برسونیم، SMD Color رو هم وارد بازی میکنیم. پینهای شمارهی ۲ و ۳ آردوینو رو بهعنوان رنگ سبز و قرمز، به پایههای SMD Color متصل میکنیم. از اونجا که توی حالت تعادل، سنسور تیلد مقدار 0 رو بر میگردونه، معکوسش رو به پایه سبز و معادل خروجیاش رو به پایه قرمز متصل میکنیم. زمین هم که نباید فراموش بشه.
1 2 | digitalWrite(RedLed,TiltInputValue); digitalWrite(GreenLed,!TiltInputValue); |
دقت داشته باشید که درسته داریم همون مقداری که سنسور تیلد میده رو به پایه قرمز منتقل میکنیم، اما نمیتونیم برای صرفهجویی به همون پایهی ۱ متصلش کنیم؛ چون از نوع ورودی تعریف شده و اتصال سیم کناری روی مقدارش تأثیر میذاره.
خب تا اینجا اگه خلبان تعادل رو به هم بریزه متوجه میشه؛ اما اگه توی شرایطی قرار بگیره که هواپیما شروع به لرزش کنه چی؟ برای اینکار شیلد سوم رو هم وارد بازی میکنیم:
نحوهی اتصال پایهها دقیقاً مشابه سنسور تیلد هست. پایه سیگنالش رو به پین شمارهی ۵ متصل میکنیم. برای روشن شدن چراغ باید یکم تغییر توی الگوریتمش ایجاد کنیم؛ چون دو نوع ورودی داریم. پس درصورتیکه یکی از شرایط اضطراری فعال شد، چراغ قرمز رو روشن میکنیم حتی اگر دومی شرایط عادی داشته باشه، مثلا در حال لرزش نباشه، اما تعادل مناسبی هم نداشته باشه.
مدار به شکل زیر در اومد:
1 2 3 4 5 | TiltInputValue=digitalRead(TiltInputPin); shakeValue=digitalRead(ShakePin); if(shakeValue || TiltInputValue) digitalWrite(RedLed,HIGH); else digitalWrite(GreenLed,HIGH); |
کار کرد؟ نه خیلی درست. چون صد بار گفتم که وقتی ورودی رو فعال میکنیم اون وضعیت باقی میمونه. یعنی اگر شما یک بار چراغ سبز رو روشن کنید، خب همیشه سبز هست دیگه! پس در ابتدا باید خاموشش کنید تا بر اساس شرایط، روشن شدن اون مشخص بشه.
کدنهایی
کد نهایی به صورت زیر هست. برای تست لرزش هواپیما رو به سمتی بگیرید که شیلد Tilt باعث قرمز شدن چراغ نشه و گلوله به سمت پایین گیر کنه:
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 | //By Sisoog //آموزش آردوینو پروژه ششم int TiltInputPin=2; int RedLed=3; int GreenLed=4; int TiltInputValue; int ShakePin=5; int shakeValue; void setup() { pinMode(TiltInputPin,INPUT); pinMode(ShakePin,INPUT); pinMode(RedLed,OUTPUT); pinMode(GreenLed,OUTPUT); Serial.begin(9600); Serial.print("Hi Capitan"); Serial.println(); } void loop() { digitalWrite(RedLed,LOW); digitalWrite(GreenLed,LOW); TiltInputValue=digitalRead(TiltInputPin); shakeValue=digitalRead(ShakePin); if(shakeValue || TiltInputValue) digitalWrite(RedLed,HIGH); else digitalWrite(GreenLed,HIGH); delay(200); } |