سنسورها همیشه یکی از اجزای ضروری هر پروژه ای بودهاند. وظیفه آنها تبدیل دادههای بدست آمده از محیط به مقادیر دیجیتال و قابل پردازش برای مدارات الکترونیکی است. در بازار انواع مختلفی از سنسورها یافت میشود که میتوانید بسته به نیاز خود یکی از آنها را انتخاب کنید. ما در این پروژه به راهاندازی سنسور اثر هال با آردوینو میپردازیم. این سنسور توانایی تشخیص آهنربا و قطبهای آن را دارد.
سوال اینجاست که کاربرد تشخیص آهنربا چیست؟
موارد زیادی وجود دارد که در آنها از سنسور اثرهال استفاده میشود که ممکن است تا کنون به آنها توجه نکرده باشیم.
برای مثال یکی از کاربردهای این سنسور اندازهگیری سرعت حرکت دوچرخه یا هر جسم دوار دیگری است. همچنین از این سنسور در موتورهای براشلس برای تشخیص موقعیت آهنرباهای روتور و تحریک به موقع سیم پیچهای استاتور استفاده میشود.
کاربردهای بیشماری برای این سنسور وجود دارد پس به سراغ آموزش راهاندازی این سنسور برویم تا به ابزار دیگری برای پروژههای بعدی مجهز شویم.
در این آموزش ما از تابع وقفه آردوینو برای تشخیص مجاورت آهنربا با سنسور و روشن کردن یک LED استفاده میکنیم.
در اکثر مواقع به دلیل کاربردهایی که در آن ها نیازمند سرعت خواندن و اجرای بالا هستیم سنسور اثر هال فقط با وقفهها استفاده میشود.
وسایل مورد نیاز برای راهاندازی سنسور اثر هال با آردوینو
- سنسور اثر هال (هر مدل دیجیتال آن)
- برد آردوینو (هر مدل)
- مقاومتهای 10k اهم و 1k اهم
- ال ای دی
- سیم
سنسور اثر هال:
قبل از شروع کار و بستن مدار نکات مهمی در مورد این سنسور هست که ابتدا به آنها میپردازیم:
سنسور اثر هال دو نوع مختلف دارد: آنالوگ و دیجیتال. نوع دیجیتال آن فقط توانایی تشخیص حضور یا عدم حضور یک آهنربا در اطراف خود را دارد (0یا1) اما در مدل آنالوگ خروجی سنسور با توجه به میدان مغناطیسی اطراف آن تغییر میکند و میتوان با استفاده از آن قدرت آهنربا یا فاصله آن را نیز تشخیص داد.
بدلیل متداول بون مدل دیجیتالی ما نیز در این پروژه از سنسور دیجیتال استفاده میکنیم.
همانگونه که از نام آن پیداست سنسور اثر هال با پدیده “اثر هال ” کار میکند . بر اساس این پدیده “هنگامی که یک رسانا یا نیمه رسانا که از آن جریانی در یک جهت عبور میکند را به طور عمود در یک میدان مغناطیسی قرار دهیم میتوانیم یک اختلاف پتانسیل را در دو سر رسانا عمود بر جهت جریان اندازه گیری کنیم “.
با استفاده از این پدیده سنسور اثر هال حضور آهنربا در اطراف خود را تشخیص میدهد.
شماتیک مدار و توضیحات مدار راه اندازی سنسور اثر هال با آردوینو:
همانطور که از شکل پیداست اتصالات مدار بسیار ساده است. مهمترین نکته تشخیص درست پایههای سنسور اثر هال است که اگر طرف نوشته دار سنسور را رو به خود بگیرید اولین پایه از سمت چپ Vcc و پایههای بعدی به ترتیب خروجی و Gnd خواهند بود.
همانگونه که قبل تر گفته شد ما در این مدار از وقفهها استفاده میکنیم بنابراین خروجی سنسور را به پایه شماره 2 آردوینو وصل میکنیم. پایه شماره 3 نیز به یک ال ای دی متصل شده که با نزدیک کردن یک آهنربا به سنسور روشن میشود.
اگر مدار را روی بردبرد ببندیم شکلی شبیه زیر خواهد داشت:
کد آردوینو:
کد کامل این پروژه بسیار کوتاه است و در پایین این صفحه قرار دارد . می توانید آن را مستقیما بر روی برد خود آپلود کنید.
در ادامه توضیحات کد و چگونگی کارکرد مدار شرح داده شده.
ما یک ورودی داریم که سنسور هست و یک خروجی که LED هست. سنسور باید به عنوان یک وقفه ورودی به آردوینو متصل شود.
بنابراین داخل تابع setup پینها را پیکرهبندی میکنیم و پایه 2 را به عنوان یک وقفه تعریف میکنیم. در اینجا پایه 2 Hall_sensor و پایه 3 LED نام گذاری شده.
void setup() { pinMode(LED, OUTPUT); //LED is a output pin pinMode(Hall_sensor, INPUT_PULLUP); //Hall sensor is input pin attachInterrupt(digitalPinToInterrupt(Hall_sensor), toggle, CHANGE); //Pin two is interrupt pin which will call toggle function }
هنگامی که وقفه تشخیص داده میشود تابع toggle فراخوانی میشود. پارامترهای وقفه زیادی مانند Toggle,Change,Rise,Fallو غیره وجود دارند اما ما فقط میخواهیم تغییر خروجی سنسور را تشخیص دهیم.
داخل تابع toggle از متغییری به نام state استفاده میکنیم که هر در هربار فراخوانی تابع toggle مقدار خود را از 0 به 1 یا بلعکس تغییر میدهد و از آن برای روشن یا خاموش کردن LED استفاده میکنیم.
void toggle() { state = !state; }
و در آخر داخل حلقهloop LED را کنترل میکنیم. متغیر state با هر بار نزدیک کردن آهنربا به سنسور تغییر مقدار میدهد بنابراین از آن برای روشن یا خاموش کردن LED استفاده میکنیم.
void loop() { digitalWrite(LED, state); }
کارکرد مدار:
بعد از بستن مدار روی بردبرد کد رو روی آردوینو آپلود کنید و تغذیه مدار رو وصل کنید.
من از یک باتری کتابی 9ولت استفاده کردم .شما میتونید به دلخواه خودتون از هر منبع دیگری هم استفاده کنید.
حالا با نزدیک آهنربا به سنسور LED روشن خواهد شد وبا دور کردن آهنربا LED خاموش میشود.
نکته : سنسور اثر هال به قطب حساس است. به این معنی که هر روی سنسور فقط توانایی تشخیص یک قطب مغناطیسی را دارد و بنابراین برای مثال با نزدیک قطب S آهنربا به وجهی از سنسور که توانایی تشخیص قطب N را دارد LED روشن نخواهد شد.
آنچه در داخل سنسور اتفاق میافتد این است که با نزدیک کردن آهنربا سنسور تغییر وضعیت میدهد و این تغییر توسط پایه وقفه تشخیص داده میشود که منجر به فراخوانی تابع toggle و تغییر مقدار متغیر stateاز “0” به “1” میشود. بنابراین LED روشن میشود .با دور کردن آهنربا از سنسور تمامی این اتفاقات تکرار میشوند که این بار منجر به تغییر مقدار متغییر stateاز “1” به “0” میشود و بنابراین LED خاموش میشود.
این چرخه با هر بار نزدیک و دور کردن آهنربا تکرار میشود.
const byte ledPin = 13; const byte interruptPin = 2; volatile byte state = LOW; int val=0; void setup() { pinMode(ledPin, OUTPUT); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), test, CHANGE); Serial.begin(9600); } void loop() { digitalWrite(ledPin, state); Serial.println(val/2); } void test() { state = !state; val++; }
منابع: