پس از حدود دو دهه وقفه، اخیراً شروع به ساخت یک مدل راه آهن کردم. یکی از مسائلی که من با آن روبرو شده ام این است که سعی کنم بفهمم قطارها با چه سرعتی باید حرکت کنم تا سرعت آنها واقعیت را با توجه به مقیاسی که در آن مدل شده اند منعکس کند. من حدس میزنم که جزئیات برای همه با خواندن این پست جالب نخواهد بود، اما اگر علاقهمند هستید، من در یکی از وبلاگهای دیگرم در مورد این موضوع از سمت راهآهن مدل وبلاگنویسی کردهام . کافی است بگویم آنچه که من نیاز داشتم این بود که بتوانم مدت زمانی را که یک لوکوموتیو مدل می برد تا مسافت مشخصی را طی کند اندازه گیری کنم.
حالا میتوانستم از خطکش و ساعت توقف استفاده کنم، اما این هرگز خیلی دقیق نیست. بنابراین من به عنوان من به یک راه حل کامپیوتری تر روی آوردم: تله سرعت آردوینو!
خلاصه ای که برای خودم گذاشتم ساده بود:
- دو سوئیچ برای اندازه گیری زمان صرف شده برای طی مسافت معین
- یک LED سبز رنگ که نشان می دهد قطار کمتر از حد مجاز سرعت حرکت می کند
- یک LED قرمز برای نشان دادن محدودیت سرعت شکسته شده است
- جزئیات با سرعت کامل برای نمایش به رایانه شخصی ارسال می شود
سوال اصلی این بود که از چه شکلی از سوییچ ها استفاده کنم. سوئیچهای فیزیکی خاموش بودند، زیرا هرگز نمیتوانم آنها را بهطور دقیق در مسیر قرار دهم، به گونهای که هر لوکوموتیو بتواند بدون حادثه آنها را به حرکت درآورد. استفاده از سوئیچ نی آسان است و میتوان آن را روی طرحبندی پنهان کرد، اما به معنای افزودن آهنربایی به هر لوکوموتیو است که کمی نامرتب به نظر میرسد. یک پرتو مادون قرمز در سراسر مسیر نیز کار می کند، اما پنهان کردن آن در طرح کار دشواری است. در پایان تنها ایده معقولی که می توانستم به آن دست پیدا کنم استفاده از یک مقاومت وابسته به نور (LDR) و مشاهده تغییر ناگهانی مقاومت به دلیل مسدود شدن نور توسط لوکوموتیو متحرک بود.
بنابراین در راه بازگشت به خانه در روز پنجشنبه با فروشگاه محلی Maplin تماس گرفتم و دو تا از کوچکترین و مسطحترین LDRهایی که داشتند (مخصوصاً نسخه 1.8-4.5k) را خریدم.
اکنون در حالی که میدانستم هر چه نور بیشتری به LDR بتابید، مقاومت کمتری دارد، مطمئن نبودم که بهترین راه برای استفاده از این اطلاعات در ارتباط با آردوینو چیست. خوشبختانه وب مملو از اطلاعات و آموزش است و من به سرعت با راه حل مواجه شدم.
بنابراین با دو LDR، دو LED و یک دسته مقاومت موارد زیر را به هم زدم (توجه داشته باشید که هر دو نما به طور همزمان با استفاده از Fritzing ایجاد شده اند ، من واقعا تحت تاثیر این برنامه هستم).
همانطور که احتمالاً می بینید این کمی پیچیده تر از آن چیزی است که باید باشد زیرا از دو مقاومت برای هر LED استفاده می کند، اما این بهترین کاری بود که می توانستم با مقاومت هایی که داشتم مدیریت کنم.
البته سخت افزار تنها نیمی از راه حل است. بدون میکروکد مناسب، آردوینو کار مفیدی انجام نخواهد داد. خوشبختانه من در نوشتن نرم افزار بهتر از طراحی مدارها هستم، بنابراین این نیمه راحت تر بود.
کد (نسبتا) ساده است. اساساً این یک ماشین حالت است که (با نادیده گرفتن ورودی های نامعتبر) مراحل زیر را دنبال می کند:
- صبر کنید تا سنسور 1 فعال شود
- وقتی سنسور 1 فعال شد زمان را ثبت کنید
- صبر کنید تا سنسور 2 فعال شود
- تفاوت زمانی بین دو سنسور فعال را تعیین کنید و از آن برای محاسبه سرعت لوکوموتیو استفاده کنید
- صبر کنید تا هر دو سنسور به حالت عادی برگردند سپس به مرحله بازگردید