اتصال کلید به آردوینو با استفاده از دستورات تاخیری

جلسه نهم:اتصال کلید به آردوینو

با توجه به سرعت بالای پردازش در میکروکنترلرهای AVR که پردازشگر برد آردوینو محسوب می شود، زمانیکه شما یک خط دستور در حلقه LOOP آردوینو می نویسید، آن دستور بسته به میزان فرکانس کلاک میکروکنترلر ممکن است هزاران و حتی میلیون ها بار در ثانیه بررسی و اجرا شود. حال فرض کنید در برنامه خود یک کلید تعریف کرده اید که با فشرده شدن آن می خواهید وضعیت یک لامپ LED را تغییر دهید، به عنوان مثال اگر لامپ روشن است آنرا خاموش و اگر خاموش است آنرا روشن کنید.

چیزی که مشخص است نوشتن این برنامه کار بسیار راحتی است، کافی است طبق توضیحاتی که در مثال (نحوه برنامه نویسی و اتصال کلید به آردوینو) از مبحث آموزش آردوینو داده شد یک ورودی تعریف کنید و در نهایت با نوشتن یک دستور شرطی وضعیت لامپ LED را با هر بار فشرده شدن کلید تغییر دهید. اما در زمان آزمایش ممکن لحضاتی برای شما پیش آید که با یک بار فشردن کلید وضعیت لامپ چندین بار تغییر کند، اما علت این موضوع چه چیزی می تواند باشد.

نقطه ضعف کلیدهای فشاری در مدارات آردوینو

کلیدها قطعات مکانیکی هستند و زمانیکه شما کلید را فشار می دهید ممکن است در کسری از ثانیه بدون اینکه شما متوجه شوید کلید در هنگام اتصال کامل دو نقطه از مدار ابتدا چندین بار دو نقطعه از مدار را قطع و وصل کند، از آنجا که سرعت پردازش آردوینو حداقل به چندین هزار بار در ثانیه میرسد هر بار از این قطع و وصل شدن های سریع را یکبار فشرده شدن کامل کلید در نظر می گیرد و در نهایت وضعیت لامپ ال.ای.دی را چندین بار تغییر می دهد. در این مثال می خواهیم شیوه حل این مشکل را بیان کنیم و نحوه صحیح و استاندارد تعریف یک کلید را آموزش دهیم.

مثالی که در این جلسه به شما عزیزان آموزش خواهیم داد کاربردهای دیگری نیز دارد، به عنوان مثال فرض کنید در پروژه خود نیاز دارید تا کلیدی تعریف کنید که کاربر اگر 3 ثانیه دست خود را بر روی کلید نگاه داشت عملیات مورد نظر اتفاق بیافتد، و یا اگر کلید مدت زمان 3 ثانیه رها شد اتفاقی رخ دهد. پس برای دریافت آموزش با ما تا انتهای این پست همراه باشید.

لیست قطعات مورد نیاز

برد آردوینو Arduino UNO R3 مدل DIP1 عدد
تک سوئیچ 2 پایه DIP سایز 6x6x5 میلیمتر1 عدد
ولوم 10kΩ1 عدد
برد بورد (پروجکت برد) مدل GL1 عدد
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی)1 عدد

نقشه شماتیک پروژه

ابتدا مطابق تصویر زیر و نقشه شماتیک یک کلید را به آردوینو متصل کنید. برای این منظور کافی است ابتدا یک پایه کلید را توسط یک تکه سیم به مثبت منبع تغذیه با همان پایه VCC در آردوینو متصل کنید. سپس پایه دوم کلید را با یک تکه سیم به پین دیجیتال شماره 2 آردوینو متصل کنید. پس از اتصال کلید به آردوینو نوبت اتصال مقاومت 10 کیلو اهم می رسد برای این منظور کافی است یک پایه مقاومت را به ولتاژ منفی منبع تغذیه یا پین GND در آردوینو متصل کنید و بعد از آن پایه بعدی مقاومت را به وسیله یک تکه سیم به پین دیجیتال شماره 2 آردوینو متصل کنید.

بعد قبل
اتصال کلید به آردوینو با استفاده از دستورات تاخیری
اتصال کلید به آردوینو با استفاده از دستورات تاخیری
بعد قبل

شرح عملکرد پروژه

با توجه کردن به نقشه شماتیک متوجه خواهید شد پین دیجیتال شماره 2 آردوینو به صورت همزمان هم به یکسر مقاومت 10 کیلو اهمی و هم به یکسر کلید متصل شده است. زمانیکه کلید فشرده نشده و به طور ساده تر می توان گفت زمانی که کلید باز است، پایه دیجیتال شماره 2 آردوینو توسط مقاومت 10 کیلو اهمی به منفی منبع تغذیه متصل شده و یک ولتاژ منفی بسیار کوچک بر روی آن ایجاد می کند (در دیجیتال منظور از ولتاژ منفی یا منفی منبع تغذیه منطق 0 است). و بلعکس زمانیکه کلید فشرده شده باشد با به طور ساده تر کلید بسته باشد. پایه دیجیتال شماره 2 آردوینو توسط کلید به صورت مستقیم به مثبت منبع تغذیه متصل می شود و یک ولتاژ مثبت نزدیک به 5 ولت بر روی آن ایجاد می کند (در دیجیتال منظور از ولتاژ مثبت منطق 1 است).

در این مثال در حقیقت ما در مبحث دیجیتال با استفاده از کلید، حالت 1 را ایجاد می کنیم و با استفاده از مقاومت 10 کیلو اهمی حالت 0 را ایجاد می کنیم. چون در مدار این پروژه یکسر مقاومت به منفی منبع تغذیه متصل شده، آنرا مقاومت پائین کشنده می نامیم، این به این معنا است که تا زمانیکه کلید فشرده نشده است مقاومت 10 کیلو اهمی باعث 0 یا LOW نگه داشتن پایه دیجیتال شماره 2 آردوینو می شود.

سورس کد برنامه در نرم افزار آردوینو

همانطور که در برنامه زیر مشاهده می کنید ما در این پروژه از دستور Milis() استفاده کرده ایم، که این دستور را به صورت کامل در مثال قبلی (چراغ چشمک زن با آردوینو بدون استفاده از دستورات تاخیری) توضیح دادیم. در این مثال برای اینکه به صورت کامل از فشرده شدن کامل کلید اطمینان حاصل کنیم، الگوریتمی با استفاده از دستور Milis() نوشته ایم که کلید باید حداقل 50 میلی ثانیه کلید فشرده شود و بعد از آن عملیات مورد نظر که در این مثال همان تغییر وضعیت لامپ LED است انجام شود. همچنین با استفاده از این برنامه می توانید برنامه های بنویسید که در آن، به عنوان مثال بگوئید اگر کلید بیشتر از 3 ثانیه فشرده شدن عملیات مورد نظر انجام شود.

آموزش صفر تا صد برنامه نویسی بردهای آردوینو – جلسه نهم

 اطلاعات پروژه

 رمز فایل : www.electronics98.com (این مطلب فاقد فایل جهت دانلود است)

 محیط برنامه نویسی : Arduino (IDE)

 برنامه نویسی شده به زبان : ترکیبی از برنامه نویسی به زبان سی (C) یا سی پلاس پلاس (++C)

 نویسنده : فرهاد اکبری

 تاریخ انتشار : 17 آوریل 2018

15 دیدگاه

  1. سلام مهندس
    خسته نباشید/ممنون از زحمات شما….
    مهندس جان من ال ای دی را در لحظه اول LOW کردم یعنی در لحظه اول خاموش است بعد که کلید را چند ثانه نگه میدارم ال ای دی روشن میشه. ولی من میخام مثلا بعد از دو یا سه ثانیه روشن بودن ال ای دی خاموش بشه. با delay هر برنامه ای نوشتم نشد.
    میشه راهنمایی بفرمایید.
    ممنون از لطف شما.

  2. فرهاد اکبری

    سلام دوست عزیز
    برای این منظور می توانید بعد از دستور موجود در خط 31 برنامه، یعنی دستور:

    دستور زیر را اضافه کنید:

  3. سلام و خسته نباشید
    ممنون ازاینکه وقت میزارید.
    دستور بالا را اجرا کردم مشکل حل شد ولی مقدار delay تو تاخیراضافه میشه.
    منظورم اینکه مثلا ما ۲ ثانیه تاخیر برای کلید میزاریم و ۱ ثانیه delayبرای روشن بودن ال ای دی و بعداز خاموش شدن ال ای دی برای روشن کردن مجدد ال ای دی باید ۳ثانیه صبر کنیم تا کلید عمل کنه. این عمل سریع انجام نمیشه
    ممنون از راهنمایی تون.

  4. فرهاد اکبری

    سلام دوست عزیز
    برای ایجاد تاخیر بدون استفاده از دستور delay می توانید از آموزش زیر استفاده کنید:
    چراغ چشمک زن با آردوینو بدون استفاده از دستورات تاخیری

  5. بی نهایت ممنون از لطف شما…..

  6. سلام مهندس خسته نباشید اموزش بسیار خوبیه
    اگر امکانش هست یه توضیح درباره فرمت کردن برد هم بدین

  7. سلام دوست عزیز
    منظورتون از فرمت کرد برد را متوجه نشدم!

  8. با سلام خدمت کارشناس گرامی
    بنده می‌خوام چند سنسور مختلف ، متصل کنم و برای شروع عملکرد هر سنسور یه میکروسوییچ بذارم.
    آیا از این میشه به این منظور استفاده کرد؟
    ممنون از شما

  9. سلام دوست عزیز
    دقیقا متوجه سوال شما نشدم! اما می توانید در برنامه چندین کلید تعریف کنید که با فشردن هر کلید عملیات خواندن و تحلیل آن سنسور اجرا شود.

  10. با سلام
    جناب مهندس ، اگر توسط این کد ، با فشردن میکروسوییچ یک پین رو HIGH کردیم ، بعدش بدون فشردن مجدد میکروسوییچ میشه با دستور در خطوط برنامه همون پین رو LOW کرد؟

  11. سلام دوست عزیز
    دقیقا متوجه سوال شما نشدم، اما می توانید برنامه را به شکلی تغییر دهید که بعد از High شدن Pin آردوینو چند ثانیه صبر کند و سپس همان پایه Low نمایید.

  12. با سلام

    جناب مهندس اکبری

    با راهنمایی های بی دریغ شما و با استفاده از کدهایی که شما زحمتش رو کشیدید مشکل بنده حل شد و نتیجه دلخواه رو گرفتم. در واقع فقط ۳ عدد led که هر کدام با کلید خود روشن و خاموش میشه و با روشن کردن یک کلید دیگر بقیه خاموش میشه چه روشن باشه چه خاموش.
    تا این که تامیم بدم این حالت رو برای برنامه اصلی
    دعا گوی شما هستم.
    اوقات خوشی داشته باشید.

    ارادتمند شما

    بابک سلامی

  13. سلام دوست عزیز
    ممنون از لطف و بزرگواری شما
    بسیار خوشحالیم که توانستید پروژه خود را راه اندازی کنید.

  14. سلام ببخشید چگونه می توانم reading را برابر یک چیز دیگر قرار دهیم یعنی می خواهم که این دکمه را وصل و قطع کند و علاوه بر آن یک چیز دیگر هم بتواند reading را تغییر دهید
    منظورم این است که reading را برابر دو تا چیز قرار دهم

  15. سلام دوست عزیز
    دقیقا متوجه سوال شما نشدم! اما نمی توانید از یک ورودی به صورت همزمان استفاده کنید. شما اگر نیاز به دو ورودی دارید می توانید یکی دیگر از پایه های آزاد آردوینو را به عنوان ورودی تعریف کنید و مقدار آنرا نیز بخوانید.

 شرایط و قوانین ثبت دیدگاه

 فارسی بنویسید و از کیبورد فارسی استفاده کنید.

 لطفاً بیش‌از‌حدِ معمول، شکلک یا ایموجی استفاده نکنید و از کشیدن حروف یا کلمات با صفحه‌کلید بپرهیزید.

 به کاربران و سایر اشخاص احترام بگذارید. پیام‌هایی که شامل محتوای توهین‌آمیز و کلمات نامناسب باشند، حذف می‌شوند.

 از ارسال لینک‌های سایت‌های دیگر و ارایه‌ی اطلاعات شخصی خودتان مثل شماره تماس، ایمیل و آی‌دی شبکه‌های اجتماعی پرهیز کنید.