استفاده از سوئیچ در آردوینو | قسمت بیست و پنجم آموزش آردوینو

blog
gasemi.m100
۱۴۰۳-۱۰-۲۶
6 دقیقه

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

در ادامه توضیح می‌دهیم که چگونه اسکچ شما به یک ورودی دیجیتال واکنش نشان می‌دهد؛ برای مثال، یک دکمه‌فشاری یا سوئیچ دیگر یا یک دستگاه خارجی که یک اتصال الکتریکی برقرار می‌کند.

شما می‌توانید از تابع digitalRead برای تشخیص وضعیت یک سوئیچ که به یک پین دیجیتال Arduino متصل است و به‌عنوان ورودی تنظیم شده است، استفاده کنید. کد زیر یک LED را زمانی که سوئیچ فشار داده می‌شود روشن می‌کند (شکل 1 نشان می‌دهد که چگونه باید سیم‌کشی شود):

استفاده از سوئیچ در آردوینو | قسمت بیست و پنجم آموزش آردوینو

شکل 1: سوئیچ متصل شده با استفاده از مقاومت پول دان (pull-down)

مقاومت 10 کیلو همان پول دان (pull-down) است که در قسمت قبل به آن اشاره شد و ورودی را  زمانی که کلید یک (1) منطقی نیست در حالت صفر نگه میدارد.

بردهای Arduino معمولاً دارای یک LED داخلی (built-in) متصل به یک پین هستند که به عنوان  LED_BUILTIN تعریف شده است. که ما از همین LED برای سادگی بیشتر استفاده می کنیم. این مسئله که کدی پیدا کنید که به پین 13 به‌عنوان LED داخلی اشاره می‌کند، غیرمعمول نیست. این شماره پین برای برد Uno و بسیاری دیگر از بردها صحیح است، اما استثناهای زیادی وجود دارد، بنابراین بهتر است از ثابت LED_BUILTIN استفاده کنید.

همچنین، اگر برد شما دارای LED داخلی نیست، باید شماره پین خروجی را از LED_BUILTIN به شماره پینی که استفاده می‌کنید تغییر دهید.

تابع setup پین LED را به‌عنوان خروجی (OUTPUT) و پین سوئیچ را به‌عنوان ورودی (INPUT) تنظیم می‌کند.

نکته✅

در کد یک پین باید در حالت خروجی (OUTPUT) تنظیم شود تا بتوان با استفاده از دستور digitalWrite ولتاژ خروجی پین را کنترل کرد(متصل به LED). همچنین، پین دیگری باید در حالت ورودی (INPUT) قرار گیرد تا بتوان ورودی دیجیتال را خواند (متصل به کلید).

تابع digitalRead ولتاژ موجود روی پین ورودی (inputPin) را می‌خواند و اگر ولتاژ 1 (HIGH) باشد ، (5 ولت در اکثر بردهای 8 بیتی و 3.3 ولت در بیشتر بردهای 32 بیتی) مقدار HIGH را برمی‌گرداند. همچنین، اگر ولتاژ پایین باشد (0 ولت)، این تابع مقدار LOW  را برمی‌گرداند.

هر ولتاژی بین ۳ تا ۵ ولت (یا بین ۲ تا ۳.۳ ولت در بردهای ۳.۳ ولتی) به‌عنوان HIGH در نظر گرفته می‌شود و ولتاژهای کمتر به‌عنوان LOW. اگر پایه‌ای متصل نباشد که به آن شناور یا floating گفته می‌شود، مقدار بازگشتی از تابع digitalRead غیرقابل‌پیش‌بینی خواهد بود؛ یعنی ممکن است HIGH یا LOW باشد. (مقاومتی که در شکل 1 نمایش‌داده‌شده است، نشان می‌دهد که ولتاژ روی پایه LOW باقی می‌ماند، زیرا این مقاومت ولتاژ پایه را به زمین (در اکثر بردها با GND نمایش داده می‌شود)، می‌کشد و ولتاژ را به صفر ولت می‌رساند.

و در نهایت، وقتی سوئیچ فشرده می‌شود، اتصالی بین پایه و ۵ ولت برقرار می‌شود و مقدار بازگشتی از تابع digitalRead از LOW به HIGH تغییر می‌کند.

نکته✅

پایه دیجیتال یا آنالوگ را به ولتاژی بالاتر از ۵ ولت (یا ۳.۳ ولت در بردهای ۳.۳ ولتی) متصل نکنید (برای اطلاع از حداکثر ولتاژ قابل‌تحمل برد، به داکیومنت تولیدکننده یا صفحه کاتالوگ آنلاین برد خود مراجعه کنید). ولتاژ بالاتر می‌تواند به پایه آسیب برساند و حتی ممکن است کل تراشه را از بین ببرد. همچنین، سوئیچ را طوری سیم‌کشی نکنید که ۵ ولت بدون مقاومت به زمین (GND) متصل شود. اگرچه این کار ممکن است به تراشه آردوینو آسیب نرساند، اما برای منبع تغذیه مناسب نیست مخصوصا اگر از USB کامپیوتر شخصی یا لپتاپ به عنوان تغذیه استفاده می‌کنید ممکن است پورت یا دستگاه شما آسیب ببیند.

در این مثال، مقدار بازگشتی از تابع digitalRead در متغیر val ذخیره می‌شود. این مقدار درصورتی‌که دکمه فشرده شود، HIGH و در غیر این صورت، LOW خواهد بود.

سوئیچی که در این مثال (و بیشتر مثال‌های دیگر این آموزش) استفاده شده است، هنگام فشرده‌شدن اتصال الکتریکی برقرار می‌کند و در صورت فشرده نشدن، اتصال را قطع می‌کند. این نوع سوئیچ‌ها به Normal Open یا به‌اختصار NO معروف هستند. نوع دیگری از سوئیچ‌ها، سوئیچ لحظه‌ای Normally Closed یا به‌اختصار NC نامیده می‌شود.

پین خروجی متصل به LED زمانی که مقدار val را روی HIGH تنظیم می‌کنید، روشن می‌شود و LED را روشن می‌کند.

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

ممکن است کدی مشابه ببینید که به‌جای HIGH از true استفاده می‌کند؛ این دو به‌صورت متقابل قابل‌استفاده هستند و گاهی به‌صورت عدد 1 نیز نمایش داده می‌شوند. به همین صورت، false معادل LOW و عدد 0 است.

تقریباً از هر نوع سوئیچی می‌توان استفاده کرد، اگرچه سوئیچ‌هایی که به آن‌ها لحظه‌ای (momentary) یا لمسی (tactile) گفته می‌شود، محبوب هستند؛ زیرا ارزان بوده و مستقیماً در یک بردبورد (breadboard) قابل‌استفاده هستند.

در اینجا روش دیگری برای پیاده‌سازی منطق (logic) موجود در اسکچ قبلی آورده شده است:

این روش حالت دکمه را در یک متغیر ذخیره نمی‌کند. در عوض، مستقیماً LED را با استفاده از مقداری که از digitalRead به دست می‌آید، روشن یا خاموش می‌کند. این یک شورت کات یا میانبُر کاربردی است!

در واقع digitalRead(inputPin) یک مقداری معادل 0 یا 1 منطقی دارد که در اسکچ قبل داخل یک متغییر ذخیره می‌شد اما الان مستقیما استفاده می‌شود.

کد Pull-Up مشابه نسخه Pull-Down است، اما منطق (logic) آن معکوس شده است: زمانی که دکمه فشار داده می‌شود، مقدار پین به LOW می‌رود. به خاطر داشته باشید که با فشاردادن دکمه به پایین، پین به LOW تغییر می‌کند:

استفاده از سوئیچ در آردوینو | قسمت بیست و پنجم آموزش آردوینو

شکل 2: سوئیچ متصل توسط مقاومتی به عنوان Pull-Up

استفاده از سوئیچ بدون مقاومت‌های خارجی

در ادامه توضیح می‌دهیم که چگونه با حذف مقاومت‌های Pull-Up خارجی هنگام اتصال سوئیچ‌ها، سیم‌کشی خود را ساده کنید.

همان‌طور که توضیح داده شد، ورودی‌های دیجیتال باید یک مقاومت داشته باشند تا زمانی که سوئیچ فشرده نشده، پین را به یک مقدار شناخته شده نگه دارند. آردوینو دارای مقاومت‌های داخلی Pull-Up است که می‌توان آن‌ها را با استفاده از حالت INPUT_PULLUP در pinMode فعال کرد.

در این مثال، سوئیچ در شکل 3 متصل شده است. این شکل تقریباً مشابه شکل 2 است، اما بدون مقاومت خارجی.

استفاده از سوئیچ در آردوینو | قسمت بیست و پنجم آموزش آردوینو

شکل 3: سوئیچ متصل شده برای استفاده با مقاومت داخلی Pull-Up

سوئیچ فقط بین پین ۲ و زمین (در اکثر بردها با GND مشخص می‌شود) متصل است. زمین به‌طور پیش‌فرض در ۰ ولت قرار دارد.

نکته✅

روی برد آردوینو بیش از یک پین زمین (GND) وجود دارد؛ همه آن‌ها به یکدیگر متصل هستند، بنابراین هرکدام که برایتان راحت‌تر است را انتخاب کنید.

وقتی از مقاومت‌های Pull-Up استفاده می‌کنید، منطق (logic) معکوس می‌شود؛ یعنی هنگام فشردن دکمه digitalRead مقدار LOW و وقتی دکمه فشرده نشود، مقدار HIGH خواهد بود. مقاومت‌های Pull-Up داخلی بین ۲۰ کیلو اهم تا ۵۰ کیلو اهم هستند. این مقدار برای بیشتر کاربردها مناسب است، اما برخی دستگاه‌ها ممکن است به مقاومت‌های با مقدار پایین‌تر نیاز داشته باشند. برای اطمینان از مناسب‌بودن مقاومت‌های Pull-Up داخلی، به دیتاشیت دستگاه‌های خارجی که می‌خواهید به آردوینو متصل کنید مراجعه کنید.

نکته✅

در نظر داشته باشید که در بردهای مبتنی بر AVR، مانند برد آردوینو Uno، رجیستر فعال یا غیرفعال سازیِ پول آپ در حالت ورودی با سطح ولتاژ (0 یا 1) در حالت خروجی مشترک است و اگر در اسکچ خود، حالت پین را بین ورودی و خروجی جابه‌جا می‌کنید، به ‌خاطر داشته باشید که حالت پین HIGH یا LOW هنگام تغییر حالت حفظ خواهد شد. به‌عبارت‌دیگر، اگر یک پین خروجی را روی HIGH تنظیم کرده باشید و سپس حالت آن را به ورودی تغییر دهید، مقاومت Pull-Up فعال خواهد بود و خواندن مقدار پین HIGH را نشان می‌دهد. اگر پین را در حالت خروجی با استفاده از digitalWrite(pin, LOW) روی LOW تنظیم کنید و سپس با استفاده از pinMode(pin, INPUT) حالت آن را به ورودی تغییر دهید، مقاومت Pull-Up غیرفعال خواهد شد. اگر مقاومت Pull-Up را روشن کنید و سپس حالت را به خروجی تغییر دهید، پین روی HIGH تنظیم خواهد شد که می‌تواند به طور ناخواسته باعث روشن‌شدن LED متصل به آن شود.
اطلاعات
0
0
لینک و اشتراک
profile

Arduino captain

متخصص الکترونیک

من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند.
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

دیدگاه ها

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله