در ادامهی سری آموزشهای پکیج سنسور آردوینو ، امروز قصد داریم طریقهی راه اندازی روتاری انکودر ( انکودر دوار – Rotary Encoder ) و مکانیز عمل آن را به شما آموزش دهیم . در ادامهی آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.
روتاری انکودر چیست ؟ (Rotary Encoder)
روتاری انکودر (یا انکودر دوار) یک سنسور رمز گذار چرخشی دوار است که وظیفهی آن مشخص کردن مقدار چرخش شفت و جهت چرخش آن میباشد.در اتوماسیون صنعتی از انکودرهای دوار به عنوان سنسور زاویه، موقعیت، سرعت و شتاب استفاده می شود. با استفاده از ابزارهایی چون چرخ دنده ها و تسمه نقاله، توسط این انکودرها حرکات خطی را نیز می توان کنترل کرد. انکودرهای دوار عموماً چرخش مکانیکی را به سیگنالی الکتریکی تبدیل می کنند که می توان آن را توسط شمارنده ها، تاکومترها و کنترل کننده های دیجیتالی پردازش نمود.
سخت افزار مورد نیاز
روتاری انکودر از پکیج سنسور آردوینو
ساختار انکودرهای دوار
یکی از اجزای اصلی انکودرهای دوار، دیسکی شیشه ای یا پلاستیکی است که به صورت یک در میان با نوارهای شفاف و نوارهای تیره پوشانده شده است. یک منبع نوری در یک سمت و یک حسگر نوری نیز در سمت دیگر دیسک قرار می گیرند.همزمان با چرخش شفت و به تبع آن چرخش دیسک، تابش نور به حسگر قطع و وصل می گردد. هرگاه نور به حسگر برخورد می کند، انکودر یک پالس الکتریکی ایجاد می کند. هنگامی که نور توسط بخش تیره دیسک بازتاب شده و به حسگر نمی رسد، سیگنال نیز قطع می گردد. بنابراین با چرخش مداوم دیسک، یک موج مربعی ایجاد می شود. ( برگرفته از motordrive.ir )
انکودری که در اختیار شماست دارای ۳۰ عدد توار مشکی و شفاف میباشد که با هر چرخش شفت یک سیگنال تولید میکنند.
در یک طرف از انکودری که در اختیار شماست ، سه پین به نامهای A ، B و C قرار دارد.(همانطور که در تصویر مشاهده میکنید)
درون انکودر دو عدد سوییچ قرار دارد. یکی از سوییچها پین A را به C متصل میکند و سوییچ دیگر پین B ٰرا به C متصل میکند.
در هر وضعیتی که شافت انکودر قرار دارد ، هر دوسوییچ یا در وضعیت باز قرار دارند یا در وضعیت بسته. با هر تحریک کوچک شافت انکودر(چرخاندن شافت) باعث میشود که وضعیت باز و بسته بودن سوییچها بر اساس موارد زیر تغییر کند:
- اگر هر دو سوییچ در وضعیت بسته قرار داشته باشند: چرخاندن انکودر در جهت ساعت گرد یا پادساعت گرد باعث باز شدن سوییچها میشود.
- اگر هر دو سوییچ در وضعیت باز قرار داشته باشند : چرخاندن انکودر در جهت ساعت گرد یا پادساعت گرد باعث بسته شدن سوییچها میشود.
تصویر زیر ساختاری از نحوهی قرارگیری سوییچها را نمایش میدهد.
همانطور که در تصوبر بالا مشاهده میکنید ، زاویهی پین A و B به دو صورت زیر میباشد:
- هنگامی که شافت انکودر به صورت ساعتگرد بچرخد : در این حالت ابتدا سوییچ A به C متصل میشود.
- هنگامی که شافت انکودر به صورت پادساعتگرد بچرخد : در این حالت ابتدا سوییچ B به C متصل میشود.
اگر بخواهیم شکل موج باز و بسته شدن کلیدها را رسم کنیم تقریبا چیزی شبیه تصویر زیر بدست میآید.
برای تعیین جهت چرخش ابتدا باید مشخص کنیم که ابتدا وضعیت سوییچ A تغییر میکند یا B .
- اگر ابتدا سوییچ A تغییر وصعیت دهد ، بدین معناست که انکودر در جهت ساعت گرد در حال چرخش است .
- و در مقابل اگر ابتدا سوییچ B تغییر وضعیت دهد ،بدین معناست که انکورد در جهت پاد ساعت گرد در حال چرخش است.
پینهای ماژول انکودر دوار (Rotary encoder)
این ماژول به گونهای طراحی شده است که هنگامی که سوییچها در وضعیت بسته قرار دارند ،خروجی به صورت LOW خواهد بود و هنگامی که سوییج ها در وضعیت باز قرار دارند ، خروجی به صورت HIGH میباشد.
حالت LOW به وسیلهی پین GND یا همان پین C هنگامی که سوییچها در حالت بسته قرار دارند تولید میشود و به پین CLK و DT اعمال میشود.
حالت HIGH به وسیلهی پین ۵V یا همان تعذیه هنگامی که سوییچها در حالت باز قرار دارند تولید میشوند و به پین CLK و DT اعمال میشود.
بر روی انکودر یک عدد کلید فشاری نیز قرار دارد که در صورت فشردن آن پین SW از وضعیت HIGH به LOW تغییر میکند( دقت شود در این بخش برنامه نویسی حتما باید پین آردوینو متصل شده به SW ٰرا در وضعیت PULL UP قرار داد)
شماتیک ماژول انکودر دوار
شماتیک این ماژول در شکل زیر نمایش داده شده است. مقاومت R2 و R3 به صورت پول آپ به پینهای DT و CLK متصل شده است.
مدرای برای درک فهم بهتر طریقهی عمل کرد ماژول انکودر دوار
پیاده سازی هر پروژه مستلزم درک آن پروژه و مکانیزم عمل کرد ماژولهای استفاده شده در آن پروژه میباشد.تاکنون هرچیزی که برای راهاندازی ماژول انکودر دوار نیاز بود به شما آموزش دادیم ولی اگر تاکنون درک درستی از عملکرد انکودر پیدا نکردهاید پیشهاد میکنم مدار زیر را پیاده سازی کنید و نتیجه را مشاهده کنید.
به صورت خیلی خیلی آهسته شافت انکودر را در جهت ساعت گرد و پاد ساعت گرد بچرخانید و توجه کنید که کدام LED وضعیتش زود تر تغییر میکند.
اتصال روتاری انکودر ( انکودر دوار ) به آردوینو – rotary encoder
برنامه نویسی
برنامه نویسی این ماژول کار زیاد مشکلی نیست فقط کافیست تشخیص دهیم که ابتدا کدام یک از سوییچ ها تغییر وضعیت میدهد و سپس جهت آن را مشخص کنیم.
int pinA = 3; // Connected to CLK int pinB = 4; // Connected to DT int pinsW = 5; int encoderPosCount = 0; int pinALast; int aVal; boolean bCW; void setup() { pinMode(pinA, INPUT); pinMode(pinB, INPUT); pinMode(pinsW, INPUT_PULLUP); /* Read Pin A Whatever state it's in will reflect the last position */ pinALast = digitalRead(pinA); Serial.begin(9600); } void loop() { aVal = digitalRead(pinA); if (aVal != pinALast) { // به این معنی است که شافت در حال چرخش است // اگر شافت بچرخد ، ما باید جهت چرخش را مشخیص کنیم /* که ایم کار را به وسیله ی خواندن پین B انجام می دهیم */ if (digitalRead(pinB) != aVal) { /* اگر پین A ابتدا تغییر وضعیت دهد و به این معنی است که چرخش در جهت ساعت گرد می باشد */ encoderPosCount++; bCW = true; } else {/* ولی اگر ابتدا B تغییر وضعیت دهد به این معنی است که چرخش پاد ساعت گرد می باشد */ bCW = false; encoderPosCount--; } Serial.print("Rotated: "); if (bCW) { Serial.println("clockwise"); } else { Serial.println("counterclockwise"); } Serial.print("Encoder Position: "); Serial.println(encoderPosCount); } pinALast = aVal; if (digitalRead(pinsW)==LOW) // خواندن وضعیت کلید روی انکودر { Serial.println("sw pressed"); delay(100); } }
سلام… نگفتین سرعت رو چجوری بدست میاریم؟؟؟
برای بدست اوردن سرعت باید یک پست دیگر نوشته شود
ا سلام و تشکر از مطالب مفیدتون
بنده میخوام سرعت یک موتور را اندازه گیری کنم
آیا امکان اتصال ماژول روتاری انکودر به شافت موتور است؟
و از ماژول روتاری انکودر به عنوان ورودی استفاده کنیم؟
سلام
از توجه شما ممنونم.
در این خصوص آموزش مربوطه جهت کنترل سرعت موتور در سایت منتشر شده است، به لینک زیر مراجعه کرده و سوالات خود را از این طریق بپرسید.
آموزش کار با درایور موتور L298N و برد آردوینو – بخش دوم کنترل سرعت موتور
سلام از این ماژول انکدر برای کنترل دقیق و به صورت هم محور سروو یا استپرموتور میشه استفاده کرد اگر بله آیا مدارش رو کار کردید ؟
با سلام
بله میتوانید این کار را انجام دهید.