
اندازهگیری زاویه بدون تماس با AS5600؛ دقتی در حد پروژههای صنعتی
آموزش کامل کار با AS5600 در آردوینو؛ از اندازهگیری زاویه تا کنترل موقعیت موتور
در دنیای رباتیک، مکاترونیک و کنترل دقیق، اندازهگیری زاویه و موقعیت چرخشی یکی از چالشهای همیشگی مهندسان است. بسیاری از راهکارهای سنتی مانند پتانسیومترها، به دلیل تماس فیزیکی دچار سایش میشوند و انکودرهای نوری نیز در برابر گرد و غبار و ضربه آسیبپذیرند. اما اگر به دنبال یک راهکار «بدون تماس» (Contactless)، با دقت بالا و قیمت مقرونبهصرفه هستید، ماژول انکودر مغناطیسی AS5600 انتخابی بیرقیب است.
در این مقاله، به بررسی عمیق سنسور AS5600، نحوه اتصال آن به آردوینو و پیادهسازی پروژههای کنترل موقعیت با آن خواهیم پرداخت.
چرا سنسور AS5600؟
تفاوت اصلی این سنسور با انکودرهای معمولی یا پتانسیومترها در تکنولوژی اثر هال (Hall Effect) و خروجی دیجیتال بسیار دقیق آن است.
۱. طول عمر نامحدود (بدون تماس فیزیکی)
برخلاف پتانسیومترها که دارای یک بازوی فلزی متحرک روی لایه کربنی هستند، AS5600 تنها با تشخیص میدان مغناطیسی یک آهنربای کوچک که بالای آن میچرخد، کار میکند. این یعنی هیچ اصطکاکی وجود ندارد و سنسور هرگز دچار سایش یا نویز ناشی از کارکرد طولانی نمیشود.
۲. رزولوشن بالای ۱۲ بیتی
این سنسور میتواند یک دور کامل (۳۶۰ درجه) را به ۴۰۹۶ قسمت مساوی تقسیم کند. این دقت (حدود ۰.۰۸ درجه) برای پروژههای حساس مانند بازوهای رباتیک، گیمبالها و فرمانهای هوشمند فوقالعاده است.
۳. خروجیهای متنوع (I2C، آنالوگ، PWM)
این ماژول بسیار منعطف است. شما میتوانید دادهها را از طریق پروتکل دیجیتال I2C با دقت کامل بخوانید، یا از خروجی آنالوگ آن به عنوان جایگزین مستقیم پتانسیومتر استفاده کنید. همچنین خروجی PWM برای کنترلرهای خاص در دسترس است.
مشخصات فنی و سختافزاری
قبل از شروع کدنویسی، نگاهی به مشخصات این قطعه کوچک و قدرتمند میاندازیم:
- ولتاژ کاری: ۳.۳ ولت تا ۵ ولت.
- رزولوشن: ۱۲ بیت (۴۰۹۶ پالس در هر دور).
- رابط ارتباطی: I2C (آدرس پیشفرض 0x36).
- خروجی ثانویه: خروجی آنالوگ (متناسب با زاویه) یا PWM.
- دمای کاری: ۴۰- تا ۱۲۵+ درجه سانتیگراد.
- نیاز مغناطیسی: نیاز به یک آهنربای دایرهای (Diametric Magnet) دارد که قطبهای N و S آن در پهنای دایره باشد.
راهنمای گامبهگام اتصال به آردوینو
برای این پروژه به قطعات زیر نیاز دارید:
- برد آردوینو (Uno، Nano یا ESP32).
- ماژول AS5600.
- آهنربای مخصوص (معمولاً همراه ماژول عرضه میشود).
- کابلهای جامپر.
نقشه سیمکشی (Wiring):
اگر از آردوینو Uno استفاده میکنید، اتصالات I2C به شرح زیر است:
| پایه سنسور | پایه آردوینو | توضیحات |
|---|---|---|
| VCC | 5V یا 3.3V | تامین توان |
| GND | GND | زمین مشترک |
| SCL | A5 | کلاک I2C |
| SDA | A4 | دیتای I2C |
| DIR | GND یا VCC | جهت چرخش (ساعتگرد/پادساعتگرد) |
نصب کتابخانه و کدنویسی
سادهترین راه برای تعامل با این سنسور، استفاده از کتابخانه مخصوص آن است تا درگیر رجیسترهای پیچیده نشوید.
۱. نصب کتابخانه
در نرمافزار Arduino IDE به مسیر Sketch -> Include Library -> Manage Libraries بروید و عبارت “AS5600” را جستجو کرده و کتابخانه ارائه شده توسط Rob Tillaart یا Seeed Studio را نصب کنید.
۲. کد نمونه برای خواندن زاویه
کد زیر مقدار دقیق زاویه را از ۰ تا ۳۶۰ درجه در سریال مانیتور نمایش میدهد:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <Wire.h> #include <AS5600.h> AS5600 as5600; void setup() { Serial.begin(115200); Wire.begin(); Serial.println("در حال اتصال به سنسور AS5600..."); if (as5600.isConnected()) { Serial.println("سنسور پیدا شد!"); } else { Serial.println("خطا! اتصالات را بررسی کنید."); while (1); } } void loop() { // خواندن مقدار خام (0 تا 4095) uint16_t rawAngle = as5600.readAngle(); // تبدیل به درجه float degrees = (rawAngle * 360.0) / 4096.0; Serial.print("زاویه فعلی: "); Serial.print(degrees); Serial.println(" درجه"); delay(100); } |
تحلیل کد:
- as5600.isConnected(): سلامت اتصال I2C را بررسی میکند.
- as5600.readAngle(): مقدار ۱۲ بیتی موقعیت آهنربا را مستقیماً از حافظه سنسور استخراج میکند.
مثال عملی: کنترل موقعیت موتور با سنسور AS5600 (ساخت یک سروو ساده با آردوینو)
یکی از جذابترین کاربردهای سنسور AS5600 ساخت یک سیستم کنترل موقعیت موتور (Position Control) است. در این روش، سنسور زاویه واقعی محور موتور را اندازه میگیرد و آردوینو با مقایسه آن با زاویه هدف، سرعت و جهت موتور را تنظیم میکند. این دقیقاً همان مفهومی است که در موتورهای سروو صنعتی استفاده میشود.
در این مثال یک موتور DC را به کمک AS5600 و درایور L298N کنترل میکنیم تا به زاویه مشخصی برسد.
ایده کلی پروژه
سیستم از سه بخش تشکیل شده است:
- موتور DC که محور آن میچرخد
- آهنربا که روی محور موتور نصب میشود
- سنسور AS5600 که زاویه محور را میخواند
مراحل کنترل به این شکل است:
- کاربر یک زاویه هدف تعیین میکند (مثلاً 120 درجه)
- سنسور زاویه فعلی موتور را میخواند
- آردوینو اختلاف زاویه را محاسبه میکند
- موتور در جهت مناسب حرکت میکند
- وقتی به زاویه هدف رسید موتور متوقف میشود
این همان کنترل حلقه بسته (Closed Loop Control) است.
قطعات مورد نیاز
- Arduino Uno / Nano
- ماژول AS5600
- موتور DC گیربکسدار
- درایور موتور L298N
- آهنربای Diametric
- منبع تغذیه موتور (مثلاً 12 ولت)
اتصال سنسور AS5600
اتصال به آردوینو:
VCC → 5V
GND → GND
SDA → A4
SCL → A5
DIR → GND
اتصال درایور موتور L298N
اتصال به آردوینو:
IN1 → D8
IN2 → D9
ENA → D10
موتور به خروجی OUT1 و OUT2 درایور وصل میشود.
نصب آهنربا
آهنربا باید:
- روی محور موتور قرار بگیرد
- دقیقاً در مرکز سنسور باشد
- فاصله حدود 1 تا 2 میلیمتر داشته باشد
کد کامل پروژه
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#include <Wire.h> #include <AS5600.h> AS5600 encoder; int IN1 = 8; int IN2 = 9; int ENA = 10; float targetAngle = 180; // زاویه هدف void setup() { Serial.begin(115200); Wire.begin(); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(ENA, OUTPUT); Serial.println("AS5600 Motor Position Control"); if (!encoder.isConnected()) { Serial.println("Sensor not detected!"); while (1); } } void loop() { uint16_t raw = encoder.readAngle(); float angle = raw * 360.0 / 4096.0; float error = targetAngle - angle; Serial.print("Angle: "); Serial.print(angle); Serial.print(" Error: "); Serial.println(error); if (abs(error) > 2) { if (error > 0) { rotateCW(); } else { rotateCCW(); } } else { stopMotor(); } delay(20); } void rotateCW() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 120); } void rotateCCW() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 120); } void stopMotor() { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); } |
توضیح عملکرد برنامه
در هر حلقه برنامه:
- سنسور زاویه محور را میخواند
|
1 2 |
encoder.readAngle() |
- مقدار 0 تا 4095 به درجه تبدیل میشود
|
1 2 |
angle = raw * 360 / 4096 |
- اختلاف زاویه محاسبه میشود
|
1 2 |
error = targetAngle - angle |
اگر خطا کمتر از ۲ درجه باشد موتور متوقف میشود.
نتیجه پروژه
وقتی برنامه اجرا شود:
- موتور شروع به چرخیدن میکند
- سنسور زاویه را اندازه میگیرد
- وقتی به 180 درجه برسد موتور میایستد
در واقع شما یک سروو موتور دستساز ساختهاید.
کاربردهای حرفهای سنسور AS5600
چرا مهندسان در پروژههای صنعتی به جای انکودرهای نوری گرانقیمت از AS5600 استفاده میکنند؟
۱. جویاستیکها و فرمانهای شبیهساز
در ساخت فرمانهای بازی (Sim Racing) یا جویاستیکهای هواپیما، پتانسیومترها بعد از مدتی دچار لرزش (Jitter) میشوند. AS5600 به دلیل ماهیت مغناطیسی، حرکتی نرم و بدون نویز را برای همیشه تضمین میکند.
۲. بازوهای رباتیک و مفاصل
برای کنترل دقیق موقعیت یک بازوی رباتیک، شما نیاز دارید بدانید هر مفصل در چه زاویهای قرار دارد. ابعاد کوچک AS5600 اجازه میدهد آن را مستقیماً پشت موتورهای DC یا پلهای (Stepper) نصب کنید تا یک سیستم “حلقه بسته” (Closed Loop) بسازید.
۳. سنجش سطح مایعات و بادسنجها
در ایستگاههای هواشناسی، از این سنسور برای تشخیص جهت باد (Wind Vane) استفاده میشود. چون سنسور هیچ تماسی با بخش متحرک ندارد، حتی با ضعیفترین باد هم میچرخد و در برابر باران و گرد و غبار کاملاً ایزوله میماند.
۴. کنترلرهای CNC و پرینترهای سه بعدی
از AS5600 میتوان برای تشخیص خطا در گامهای موتور (Step Loss) استفاده کرد تا از خرابی قطعات در حین چاپ یا تراشکاری جلوگیری شود.
نکات پیشرفته و بهینهسازی
تنظیم محدوده (Start & End Position):
یکی از ویژگیهای جذاب AS5600 این است که میتوانید آن را برنامهریزی کنید تا مثلاً چرخش ۹۰ درجه فیزیکی را به عنوان کل بازه ۴۰۹۶ پالس در نظر بگیرد. این کار برای شیرهای برقی یا دریچههایی که چرخش کامل ندارند عالی است.
فاصله آهنربا:
برای بهترین عملکرد، آهنربا باید در فاصله ۰.۵ تا ۳ میلیمتری از سطح آیسی قرار گیرد. اگر فاصله زیاد باشد، سنسور وضعیت “Low Magnetic Field” را اعلام میکند که از طریق رجیسترهای وضعیت قابل بازخوانی است.
جمعبندی
سنسور AS5600 فراتر از یک انکودر ساده است؛ این ماژول پلی است بین دنیای مکانیک آنالوگ و کنترل دیجیتال دقیق. با حذف تماس فیزیکی، شما نه تنها دقت را افزایش میدهید، بلکه هزینههای نگهداری و خرابی سیستم خود را به صفر نزدیک میکنید.
اگر به دنبال ساخت یک سیستم کنترل حرکت (Motion Control) هستید که سالها بدون افت کیفیت کار کند، AS5600 مطمئنترین انتخاب شماست.
آیا در مورد نحوه نصب آهنربا یا کدنویسی برای چندین سنسور روی یک خط I2C سوالی دارید؟ در بخش نظرات بپرسید!






