شِفر (کود) جستجو

درس ۷/۳۱-۲: تشخیص میدان مغناطیسی با استفاده از کلید ریید | کیت سان‌فاندر

درس ۷/۳۱-۲: تشخیص میدان مغناطیسی با استفاده از کلید ریید | کیت سان‌فاندر

تشخیص میدان مغناطیسی یکی از ساده‌ترین و رضایت‌بخش‌ترین راه‌ها برای شروع کار با ورودی‌های دیجیتال در آردوینو است. در این پروژه شما یک آشکارساز میدان مغناطیسی با استفاده از یک کلید ری드 می‌سازید — یک کلید کوچک شیشه‌ای که هر زمان آهنربایی به آن نزدیک شود، کنتاکت‌هایش بسته می‌شوند. از آنجا که کلید رید دقیقاً مانند یک دکمه فشاری عمل می‌کند (یا باز است یا بسته)، مقدمه‌ای عالی برای تابع digitalRead() است و همچنین به شما می‌آموزد چرا مقاومت pull-down اهمیت دارد و چگونه pull-up داخلی ورودی آردوینو می‌تواند کاملاً جایگزین آن شود.

reed_switch

وقتی این مدار را راه‌اندازی کردید، همان مدار می‌تواند قلب بسیاری از پروژه‌های واقعی باشد. در اینجا چند ایده عملی برای امتحان کردن آورده شده است:

  • دزدگیر در و پنجره — کلید ریید را روی چارچوب و یک آهنربای کوچک روی در نصب کنید؛ آردوینو لحظه‌ای که آهنربا دور شود وضعیت "باز" را گزارش می‌دهد.
  • دورسنج غیرتماسی — یک آهنربا را به چرخ دوار بچسبانید و پالس‌ها را برای اندازه‌گیری دور در دقیقه بشمارید.
  • قرائت‌کننده کنتور آب یا گاز — بسیاری از کنتورهای شهری خروجی پالس مغناطیسی دارند که کلید ریید می‌تواند آن را دریافت و ثبت کند.
  • حساس(حس کننده) درب لپ‌تاپ / محفظه — تشخیص بسته شدن درب برای فعال کردن حالت خواب یا یک LED وضعیت.
  • کیلومترشمار دوچرخه — یک آهنربا روی پره و یک کلید ریید روی دوشاخه به شما یک پالس در هر دور چرخ می‌دهد.
  • تشخیص دستکاری — یک جفت آهنربا و کلید ریید را داخل یک محفظه پنهان کنید تا بدانید آیا باز شده است یا خیر.

نحوه کار کلید ریید

lesson-7-reading-reed-with-magnet-multimeter

کلید ریید یک کپسول شیشه‌ای کوچک حاوی دو تیغه نازک فرومغناطیسی است (در ویدیو در دقیقه 12:38). در حضور میدان مغناطیسی، تیغه‌ها به سمت یکدیگر جذب شده و تماس برقرار می‌کنند و مدار بسته می‌شود. آهنربا را بردارید و تیغه‌ها از هم جدا می‌شوند و مدار دوباره باز می‌شود. این تمام اصل ماجراست — یک کلید بدون دکمه متحرک، بدون سایش ناشی از فشار انگشت، و بدون نیاز به تماس فیزیکی با شیئی که حس می‌کنید.

می‌توانید این رفتار را با یک مولتی‌متر در حالت پیوستگی تأیید کنید (در ویدیو در دقیقه 13:59): وقتی آهنربایی در نزدیکی نیست، مولتی‌متر مدار باز را نشان می‌دهد و به محض نزدیک شدن آهنربا، بوق به صدا در می‌آید و مولتی‌متر مدار بسته را نشان می‌دهد. از آنجا که این کلید از نظر الکتریکی دقیقاً مانند یک دکمه فشاری است، شِفر (کود) و سیم‌کشی آردوینو همانند هر ورودی دیجیتال دیگری است.

توضیح ورودی‌های دیجیتال و مقاومت‌های Pull

آردوینو یک پایه دیجیتال را به صورت HIGH یا LOW می‌خواند. روی یک برد 5 V، هر چیزی بالاتر از حدود 2.2 V به عنوان HIGH و هر چیزی پایین‌تر از حدود 1.5 V به عنوان LOW در نظر گرفته می‌شود (در ویدیو در دقیقه 01:49). مشکل این است که یک کلید متصل مستقیماً بین یک پایه و 5 V، وقتی کلید باز است، پایه را شناور رها می‌کند — به هیچ چیز متصل نیست، بنابراین اغتشاش (نویز) می‌گیرد و مقادیر تصادفی گزارش می‌دهد.

why_use_resistor_switch-1
why_use_resistor_switch-2
why_use_resistor_switch-3
why_use_resistor_switch-4
why_use_resistor_switch-5
why_use_resistor_switch-6
why_use_resistor_switch-7
why_use_resistor_switch-8
push button with INPUT_PULLUP

به همین دلیل از مقاومت استفاده می‌شود. دو آرایش به یک اندازه کار می‌کنند:

  • پول‌داون: یک مقاومت ۱۰ کیلوΩ از پایه به زمین. وقتی کلید باز است پایه LOW خوانده می‌شود و وقتی کلید پایه را به ۵ ولت وصل می‌کند HIGH خوانده می‌شود.
  • پول‌آپ: یک مقاومت ۱۰ کیلوΩ از پایه به ۵ ولت. وقتی کلید باز است پایه HIGH خوانده می‌شود و وقتی کلید پایه را به زمین وصل می‌کند LOW خوانده می‌شود.

آردوینو همچنین یک مقاومت پول‌آپ داخلی دارد که می‌توان آن را در نرم‌افزار با INPUT_PULLUP فعال کرد (در ویدیو در ۱۹:۵۲). این کار نیاز به مقاومت خارجی را کاملاً حذف می‌کند — پایه در حالت بی‌کاری HIGH است و بستن کلید به زمین آن را LOW می‌کند. هزینه‌اش این است که منطق معکوس می‌شود: فشرده‌شده (یا وجود آهنربا) اکنون ۰ خوانده می‌شود به جای ۱.

سخت‌افزار و قطعات

  • آردوینو Uno (یا هر برد سازگار)
  • ماجیول کلید ری드 یا کلید ریید لخت
  • مقاومت ۱۰ کیلوΩ (فقط برای نسخه پول‌داون لازم است)
  • بردبورد و سیم‌های جامپر
  • یک آهنربای کوچک برای آزمایش
  • کابل USB برای برنامه‌ریزی و تغذیه

راهنمای سیم‌کشی

lesson-7-reading-reed-schematic
lesson-7-reading-reed-wiring

کلید ریید دقیقاً مانند یک دکمه فشاری سیم‌کشی می‌شود. یک پای کلید ریید به ۵ ولت می‌رود، پای دیگر به پایه ۲ آردوینو و به یک سر مقاومت ۱۰ کیلوΩ می‌رود. سر دیگر مقاومت به زمین می‌رود (در ویدیو در ۱۴:۴۰). این یک پیکربندی پول‌داون است، بنابراین پایه بدون آهنربا LOW و وقتی آهنربا کلید را می‌بندد HIGH خوانده می‌شود.

روی بردبورد، کلید ریید را طوری قرار دهید که دو پای آن در ردیف‌های مختلف باشند، مقاومت را از همان ردیف یکی از پاها به ریل زمین وصل کنید، یک سیم قرمز از پای دیگر به ریل ۵ ولت بکشید، و یک سیم سبز از محل اتصال کلید ریید و مقاومت به پایه ۲ (در ویدیو در ۱۵:۵۳). مشکی به زمین، قرمز به ۵ ولت، سبز به پایه ۲ — همان قرارداد رنگی که در سراسر کیت SunFounder استفاده شده است.

اگر ترجیح می‌دهید مقاومت را حذف کنید، یک پای کلید ریید را به پایه ۲ و پای دیگر را مستقیم به زمین وصل کنید، سپس INPUT_PULLUP را در شِفر (کود) همان‌طور که در زیر توضیح داده شده فعال کنید.

توضیح شِفر (کود)

اسکچ عمداً بسیار کوچک است. هر چیزی که بخواهید تغییر دهید در دو جا در بالای فایل قرار دارد.

int reedPin = 2;//the pin reed switch is connected to 

void setup() {
  Serial.begin(9600);
  pinMode(reedPin, INPUT);
}

reedPin — اگر کلید ریید را به پایه دیجیتال دیگری وصل کرده‌اید این عدد را تغییر دهید. هر پایه دیجیتالی روی Uno کار می‌کند؛ پایه ۲ در اینجا فقط به این دلیل استفاده شده که روی بردبورد راحت است.

Serial.begin(9600) — سرعت نمایشگر مسلسل را تنظیم می‌کند. اگر این مقدار را تغییر دهید باید نرخ باود را نیز در منوی کشویی پنجره Serial Monitor تغییر دهید، در غیر این صورت کاراکترهای نامفهوم خواهید دید (در ویدیو در ۱۱:۲۵).

pinMode(reedPin, INPUT) — پایه را به عنوان ورودی امپدانس بالا پیکربندی می‌کند تا بتواند ولتاژ تعیین‌شده توسط کلید ریید و مقاومت را حس کند. اگر به جای آن از پول‌آپ داخلی استفاده می‌کنید، این خط را به pinMode(reedPin, INPUT_PULLUP); تغییر دهید و به یاد داشته باشید که خوانش‌ها معکوس خواهند بود.

حلقه به سادگی پایه را می‌خواند و نتیجه را چاپ می‌کند:

void loop() {
  Serial.println(digitalRead(reedPin));
  delay(10);       
}

digitalRead(reedPin) وقتی پایه HIGH است ۱ و وقتی LOW است ۰ برمی‌گرداند. چون مقدار مستقیماً به Serial.println() پاس داده می‌شود، نیازی به متغیر واسطه نیست — خوانش مستقیماً چاپ می‌شود. با سیم‌کشی پول‌داون، 0 به معنای «بدون میدان مغناطیسی» و 1 به معنای «آهنربا شناسایی شد» است (در ویدیو در ۱۸:۳۱).

delay(10) کنترل می‌کند که هر چند وقت یک بار خوانش چاپ شود. ده میلی‌ثانیه به اندازه کافی سریع است که لحظه‌ای که آهنربا نزدیک می‌شود تغییر مقدار را ببینید. اگر نمایش آرام‌تری ترجیح می‌دهید می‌توانید آن را به ۲۰۰ میلی‌ثانیه افزایش دهید، اما توجه کنید که این کار تشخیص را نیز کند می‌کند (در ویدیو در ۱۲:۰۱).

نمایش زنده پروژه

پس از آپلود اسکچ، Serial Monitor را باز کنید و نرخ باود را روی ۹۶۰۰ تنظیم کنید. بدون آهنربا در نزدیکی، پنجره پر از صفر می‌شود. یک آهنربای کوچک را نزدیک کپسول شیشه‌ای بیاورید و خروجی بلافاصله به یک‌ها تغییر می‌کند؛ آهنربا را دور کنید و به صفر برمی‌گردد (در ویدیو در ۱۷:۰۴). پاسخ فوری است و حتی وقتی آهنربا یک یا دو سانتی‌متر دورتر از کلید نگه داشته شود کار می‌کند.

lesson-7-reading-reed-wiring-on-breadboard

اگر به جای آن نسخه پول‌آپ را ساخته‌اید، منطق معکوس است: مانیتور در حالت استراحت ۱ و وقتی آهنربا حاضر است ۰ نشان می‌دهد (در ویدیو در ۲۲:۱۳). در هر صورت، اکنون یک آشکارساز میدان مغناطیسی بدون تماس و قابل اعتماد دارید که تقریباً هیچ هزینه‌ای ندارد و می‌توان آن را در هر یک از ایده‌های پروژه‌ای که در بالای این مقاله فهرست شده قرار داد.

نسخه دکمه‌ای همین درس خواندن دیجیتال به‌صورت جداگانه در درس ۷/۳۱: خواندن دیجیتال دکمه، تشخیص میدان مغناطیسی کیت SunFounder | Robojax پوشش داده شده است.

پروژه‌های مرتبط از این ویدیو

فصل‌ها

  • [۰۰:۰۰] مقدمه: دو مثال خواندن دیجیتال
  • [۰۱:۳۳] معنی خواندن دیجیتال و HIGH/LOW
  • [۰۲:۴۶] نحوه کار کلید دکمه‌ای
  • [۰۳:۲۵] تئوری مقاومت pull-up و pull-down
  • [۰۵:۱۸] سیم‌کشی دکمه روی بردبورد
  • [۰۸:۲۱] باز کردن و توضیح شِفر (کود) دکمه
  • [۱۰:۵۵] آپلود و امتحان مثال دکمه
  • [۱۲:۳۸] معرفی کلید ری드 و امتحان آن با مولتی‌متر
  • [۱۴:۴۰] سیم‌کشی کلید رید به پایه ۲
  • [۱۶:۴۶] امتحان کلید رید با آهنربا
  • [۱۷:۱۹] توضیح شِفر (کود) کلید رید
  • [۱۹:۴۵] استفاده از INPUT_PULLUP بدون مقاومت خارجی

تصاویر

reed_switch
reed_switch
push button with INPUT_PULLUP
push button with INPUT_PULLUP
why_use_resistor_switch-1
why_use_resistor_switch-1
why_use_resistor_switch-2
why_use_resistor_switch-2
why_use_resistor_switch-3
why_use_resistor_switch-3
why_use_resistor_switch-4
why_use_resistor_switch-4
why_use_resistor_switch-5
why_use_resistor_switch-5
why_use_resistor_switch-6
why_use_resistor_switch-6
why_use_resistor_switch-7
why_use_resistor_switch-7
why_use_resistor_switch-8
why_use_resistor_switch-8
lesson-7-reading-reed-with-magnet-multimeter
lesson-7-reading-reed-with-magnet-multimeter
lesson-7-reading-push-button-schematic
lesson-7-reading-push-button-schematic
lesson-7-reading-push-button-wiring
lesson-7-reading-push-button-wiring
lesson-7-reading-reed-schematic
lesson-7-reading-reed-schematic
lesson-7-reading-reed-wiring
lesson-7-reading-reed-wiring
lesson-7-reading-reed-wiring-on-breadboard
lesson-7-reading-reed-wiring-on-breadboard
932-Lesson 7/31-2: Digital read, working with reed switch
زبان: C++
/*
 * Lesson 7/31-2: Digital read, working with reed switch
Download and resource page https://robojax.com/RJT590
watch video tutorial https://www.youtube.com/watch?v=yyJrqFKn-X4
 * written/updated by Ahmad Shamshiri www.Robojax.com
 * Dec 12, 2022
 * 

*/

int reedPin = 2;//the pin reed switch is connected to 

void setup() {
  Serial.begin(9600);
  pinMode(reedPin, INPUT);
}

void loop() {
  Serial.println(digitalRead(reedPin));
  delay(10);       
}

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

کتابخانه‌های آردوینو (zip)

راهنمای کاربر