به نام خدا : تو این مطلب از سری مطالب پروژه های آردوینو ، میخوام اموزش و پروژه کار با ماژول روتاری انکودر چرخشی رو بزارم براتون ( پروژه و آموزش arduino ماژول روتاری انکودر rotary encoder )
پروژه و آموزش arduino ماژول روتاری انکودر rotary encoder
داستان این مطلب(شوخی جالب^_^) : تو مسجد بودم، کسی نبود، با رفقا بودیم، رفتم بالای منبر نشستم، حوصله نداشتم و خسته بودم، یهو رفیقم اومد گفت : رسول خدا(ص) گفته که در آینده بوزینه ها از منبر میرن بالا هیچی منم معدم تعجب کرد یه لحظه از این جمله رفیقم و میخندیدم از این شوخی رفیقم(داستان دقیق این ماجرا به صورت زیر هستش، خواستید بخونید)
و آن بوزینه ها و میمون ها همان بنی امیه ملعون و خبیث بودند که یکی پس از دیگری ادعای خلافت اسلامی را کردند.و شجره ملعونه هم اشاره دیگری به خاندان بنی امیه دارد.
پس نتیحه میشه گرفت که اون بوزینه هه من نبودم.
مطلب مرتبط : قبلا درباره یه مدل از روتاری انکودر یه مطلب گزاشته بودم که میتونید بخونیدش(تو مطلب زیر توضیحات بیشتری دادم) :
آموزش کار با Rotary Encoder و پرژوه کنترل Step Motor
خرید این قطعه : برا خرید این قطعه میتونید به لینک زیر مراجعه کنید که خودمم از همین لینک زیر خریدم، البته انواع دیگه ای هم وجود داره در سایت های دیگه که میتونید مراجعه کنید و بررسی کنید و بخرید.
ماژول سنسور چرخش FZ0534 – شافت اینکودر – Rotary Encoder
آموزش کار با روتاری انکودر چرخشی
خب این قطعه یه قطعه ساده ولی کاربری هستش(حالا کاربردش کجاس نمیدونم نشستم فک کنم ببینم کجاها میشه ازش استفاده کرد
، ولی خب از ظاهر هر قطعه میشه میزان کاربردش رو فهمید، خب معلومه که این جمله اشتباهه
، چرا؟ بععععععله مثلا از ظاهر خازن و مقاومت میشه میزان کاربردشون رو فهمید؟ خب معلومه که عمرا نمیشه و باید عملکرد هر قطعه رو دقیقا بدونی تا بتونی از اون قطعه در جای مناسب خودش استفاده کنی، و همین دونستن عملکرد دقیق و درست هر قطعه خیلی مهمه
)
خب عکس بالا گویای نحوه کار این قطعه هست، که در هر تغییر زاویه این قطعه 4 تا پالس میده.
CW = ClockWise = در جهت چرخش عقربه های ساعت
CCW = Counter ClockWise = خلاف جهت چرخش عقربه های ساعت
در جهت عقربه های ساعت : خب اون خطوط قرمز یعنی 1درجه و اگه از خط قرمز اولی بریم به سمت دومی 1درجه انگار روتاری انکودر ما چرخیده در جهت چرخش عقربه های ساعت.
در خلاف جهت عقربه های ساعت : اون خطوط سبز هم مربوط به تغییر زاویه در خلاف جهت چرخش عقربه های ساعت هستش.
پایه های روتاری انکودر چرخشی : این قطعه 5تا پایه به صورت زیر داره : VCC،GND،S1،S2،KEY
که پایه های VCC و GND کارشون که معلومه.
پایه KEY برا کلید هستش، همون طور که میدونید این قطعه روتاری انکودر علاوه بر روتاری انکودر بودن، مثل یه کلید هم هستش که با فشار دادن اهرمش به سمت پایین کلیدش قطع میشه(کلیدش در حالت عادی مقدار VCC داره و وقتی کلید رو فشار بدید مقدار پایه KEY برابر GND میشه)
پایه هایS1 و S2 هم همون پایه هایی هستن که پالس روشون اعمال میشه و ما مقدار این پایه ها رو میخونیم(البته این پایه ها در شکل بالا با نام های A و B ذکر شده که زیاد چیز مهمی نیست. )
جواب1 : خب در بالا گفتم و اون عکسه هم بازم گویای مسئله هستش ولی باز بیشتر توضیح میدم.
در جهت عقربه های ساعت : خب در این حالت با توجه به عکس بالا در یه درجه روتاری انکودر پالس هایی به صورت زیر ارسال میکنه(جدول زیر، قسمت "Coding for clockwise rotation")، یعنی وقتی روتاری انکودر یه درجه چرخید این قطعه 4 پالس به صورت جدول زیر ارسال میکنه.(یعنی پایه های S1 و S2(یا همون A و B) به صورت جدول زیر مقادرشون تغییر میکنه با 1 درجه چرخش روتاری انکودر.)
در خلاف جهت عقربه های ساعت : اینم مثل حالت بالا هستش فقط نحوه تغییر پایه ها فرق داره که در جدول زیر(Coding for counter-clockwise rotation) مشاهده میکنید.
Coding for clockwise rotation
B | A | Phase |
0 | 0 | 1 |
1 | 0 | 2 |
0 | 1 | 3 |
1 | 1 | 4 |
Coding for counter-clockwise rotation
B | A | Phase |
0 | 1 | 1 |
1 | 1 | 2 |
1 | 0 | 3 |
0 | 0 | 4 |
سوال2 : حالا تو کد نویسی چیکار کنیم تا راحت متوجه چرخش یه درجه ای روتاری در جهت چرخش عقربه های ساعت بشیم؟
جواب2 : خب بازم با توجه به عکس بالا :
در جهت عقربه های ساعت : وقتی پایه های A و B (همون S1 و S2) مقدار جفتشون برابر HIGH (همون 1 منطقی) شد یعنی روتاری انکودر 1 درجه در جهت عقربه های ساعت چرخیده.
در خلاف جهت عقربه های ساعت : وقتی پایه های A و B (همون S1 و S2) مقدار جفتشون برابر LOW(همون 0 منطقی) شد یعنی روتاری انکودر 1 درجه در خلاف جهت عقربه های ساعت چرخیده.
سوال3 : طبق گفته خودتون و اون جدولی که قرار دادید و او عکس، هم در چرخش در جهت چرخش عقربه های ساعت و هم خلافش ما حالت HIGH شدن هر دو پایه و LOW شدن هر دو پایه رو داریم، خب حالا مثلا هر پایه LOW شد(یا HIGH شد)، حالا چطور میشه فهمید که این مربوطه به چرخش در جهت عقربه های ساعت یا خلافش؟
جواب3 : خب سوال خوبی بود، در زیر توضیح میدم.
از وقفه استفاده میکنیم : خب اگه بیایم یکی از پایه های S1 یا S2 رو به یه پایه وقفه وصل کنیم(مثلا وقفه روی پایه S1 رو فعال میکنیم) و حالت وقفه رو میزاریم روی حالت RISING، حالا این وقفه کی رخ میده؟ بعله وقتی مقدار پایه S1 از 0 به 1 منطقی تغییر پیدا کنه، حالا این داخل تابع وقفه میایم بررسی میکنیم اگه مقدار پایه S1 با S2 برابر بود که یعنی روتاری 1 درجه در جهت عقربه های ساعت چرخیده و مقدار پایه های S1 و S2 عکس هم بود که یعنی روتاری 1 درجه در خلاف جهت چرخیده.(این هم جواب سوال 3 بود و هم توضیح کدهای پروژه2 که در ادامه قرارش دادم)
از وقفه استفاده نمیکنیم : خب تو این حالت هم به سری شرط و شروط تعیین میکنیم تا حالت RISING شدن پایه S1 رو متوجه بشیم و بعد میایم پایه های S1 و S2 رو با هم بررسی میکنیم و بعد اگه هر دو 1 بودن که یعنی در جهت و اگه هر دو 0 بودن یعنی در خلاف جهت روتاری 1 درجه چرخیده.(اینم جواب سوال3 و توضیح پروژه 1
سوال 4 : خب حالا اگه وقفه پایه S2 رو فعال کنیم و پایه S1 وقفه نداشته باشه فرقی میکنه؟
تست کنید و نتیجه رو ببینید، چون من بگم هم بد توضیح میدم و هنگ میکنید، همینو به عنوان تمرین تستش کنید.
پروژه آردوینو روتاری انکودر چرخشی
شماتیک این پروژه آردوینو به صورت زیر هستش :
توجه 1 : در زیر 2-3 تا پروژه قرار میدم که شماتیک همشون همین عکس بالا هستش.
توجه 2 : در دو پروژه زیر از پایه KEY استفاده نکردم چون ربطی به مطلب نداره و یه کلید معمولی هستش که وقتی روش کلیک بشه مقدارش 0 میشه و در حالت عادی مقدار این پایه 1 هستش، اگه خواستید هم میتونید از این پایه استفاده کنید و ربطی به فهمیدن چرخش روتاری انکودر نداره و فقط یه کلید هستش(دو بار گفتم حالا باز بیاید سوال کنید. )
پیشنیاز هایی برای فهم بهتر کدهای چند تا پروژه زیر : برای این که در فهم کدهای این چند تا پروژه به مشکل بر نخورید باس مطالب مربوط به جلسات 1،4،5،6،10 از سری مطالب آموزش آردوینو رو بخونید.
کد های پروژه1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#define S1 2 #define S2 3 int Number = 0; int S1_LastValue = LOW; int n; void setup() { pinMode (S1, INPUT); pinMode (S2, INPUT); Serial.begin (9600); } void loop() { n = digitalRead(S1); if ((S1_LastValue == LOW) && (n == HIGH)) { if (digitalRead(S2) == LOW) Number--; else Number++; Serial.print(String(Number) + "/"); } S1_LastValue = n; } |
کدهای پروژه 2(از وقفه استفاده شده)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#define S1 2 #define S2 3 int Number = 0; void setup() { pinMode(S1, INPUT); digitalWrite(S1, HIGH); // turn on pullup resistor pinMode(S2, INPUT); digitalWrite(S2, HIGH); // turn on pullup resistor attachInterrupt(0, Encoder, RISING); // encoder pin on interrupt 0 - pin 2 Serial.begin (9600); Serial.println("start"); // a personal quirk } void loop(){ } void Encoder() { if (digitalRead(S1) == digitalRead(S2)) Number++; else Number--; Serial.println (Number, DEC); } |
یه پروژه جالب : پروژه زیر رو هم در یکی از سایت های خارجی دیدم، چیز جالبی هستش، گفتم عکسش رو قرار بدیم شاید کسی این پروژه رو بستش.
منبع این مطلب لینک مقابل از سایت آردوینو هستش : Reading Rotary Encoders
البته به نظرم خیلی چیزای اون لینک بالا اضافه هستش و بعضی پروژه ها رو هم تغییراتی توش دادم چون به نظرم مشکلاتی داشت.
اگه این مطلب مفید بود براتون 3تا صلوات برا شادی روح شهدا و امام شهدا بفرستید.
در ضمن سوالی بود بگید جان داش، حالا اگه بلد بودیم جواب میدیم و گرنه میگم بلد نیستم دیگه، غیر از این نیستش که، آخه بعضی دوستان خجالت میکشن سوال بپسرن، جان داش منو تو هر انجمنی ببینی بیش از این که به سوالات دیگران جواب داده باشم بیشتر تو اون انجمن ها سوال پرسیدم.
راستی در مطالب بعدی پروژه MP3 PLAYER با آردوینو با قابلیت کنترل از طریق نرم افزار نوشته شده تحت ویندوز و پروژه MP3 PLAYER با صفحه لمسی و نمایشگر رنگی و بعد پروژه ضبط صدا رو قرار میخوام بدم تو سایت.
فعلا یا علی.
مهمان
شبیه ساز انکودر چه طوری تو پروئوس بیاریم؟
مهمان
سلام انجمن سایت جای رفع اشکال برنامه نویسی و شبیه سازیه این چه سیایتی که نمی تونیم کد بزاریم قالب بهم میریزه!
قالب رو عوض کنید
البته نظارت هم کنین
من تازه واردم جای اعتراض بدهید
امام علی گفته
اِضرِبُوا بعضَ الرأيِ ببعضٍ يَتَوَلَّدْ مِنهُ الصَّوابُ.
رایزنی كنید تا اندیشه درست متولّد شود.
مهمان
سلام انجمن سایت جای رفع اشکال برنامه نویسی و شبیه سازیه این چه سیایتی که نمی تونیم کد بزاریم قالب بهم میریزه!
قالب رو عوض کنید
البته نظارت هم کنین
مهمان
سلام برادر
خدا قوت
بابت سایت خوبت و زحمتی که میکشی بینهایت سپاسگذار
سوال داشتم میخواستم ببینم میشه دوتا کلید به پروژه اضافه کرد که درجه های تنظیم شده رو سیو کنه و با زدن این کلید ها به اون درجه سیو شده برسه و اینکه ایا میشه زمانی که درجه تنظیمه یا سیو هستش با زدن کلید روی روتاری حالت ریست یا بازگشت به صفر درجه فعال بشه
خیلی به این حالت نیاز دارم
سپاسگذار دوست عزیز
ومن ال..توفیق
مهمان
سلام وقت بخیر خسته نباشین بابت اطلاعات خوبی که میزارید
آقا من اومدم سوال 3 رو هرچی بررسی کردم به نتیجه نرسیدم اگه A رو S1 درنظر بگیریم اگه حالت RISING واسه اون اتفاق بیافته تو cw و ccw هیچ کدوم مقدار S1 , S2 باهم برابر نمیشه. میشه یه توضیحی راجع بعش بدین؟
یا علی
مهمان
سلام برادر
اولا دمت گرم واسه مطالب جالبت
بعدش من یه اینکودر با اتمگا 32 اجرا کردم و مشکلی هم توی خوانش ندارم هم در جهت ساعت گرد هم پاد ساعت گرد
فقط مشکلم توی سرعت چرخشه
مثلا وقتی که اینکودر رو توی یه فاصله ی مشخص با سرعت زیاد میچرخونمش اعداد به سرعت میره بالا مثلا فرض کن میره تا 100
و وقتی که همون مقدار فاصله رو با سرعت کم میچرخونم اعداد کمی مثلا 30 تا بهم نشون میده
شما چه راه حلی پشنهاد میکنی ؟؟؟؟؟؟
مهمان
سلام با کد های بالا میشه مدل HW_040 رو راه اندازی کرد؟
یا کد هاش فرق میکنه؟
ممنون.
نویسنده این مطلب
سلام – یه لینکی چیزی از این مدلی که گفتی میدادی حداقل
مهمان
سلام عالی هروقت میام سایت شما انرژی میگیرم
مطالب علمی ناب،انقلابی ،اسلامی ،همه چیز تمام
مهمان
من میخوام با استفاده از اردوینو حرکات انکودر رو تو یه بازه مثلا 60 ثانیه دریافت کنم بعد با یه استپر ازش تقلید کنم!
به نظرتون با خروجی pwm میشه؟🤔
مهمان
این همون خروجی pwm هست که اکثر انکودر ها دارن؟
مهمان
سلام عیدتونم مبارک
یه پروژه دارم فعلا نمیخوام از اینکودر صنعتی سافتاده کنم
اگر بخام از همین انکودر استفاده کنم ایا میتونه پارامتر هی زیرو بهم بده یا ن؟
1_سرعت چرخش؟ 2_مسافت طی شده؟(یعنی اگر وصل شه به یک چرخ میتونه از روی میزان چرخش مسافت طی شده بده؟اگر تعداد چرخش رو بده میشه توی فرمول گذاشت و مسافتو حساب کرد بحث اینه که تعداد دور رو میده یا ن)
نویسنده این مطلب
سلام.اینو وصل کنی به موتور؟ ….
میزان چرخش موتور رو که میتونی بفهمی براحتی.
ب ازای هر درجه چرخش روتاری فوق یه پالس میده فک کنم.خب مجموع پالسا میشه مقدار چرخش موتور
سرعت چرخش موتور هم به کمک تایمر میتونی حساب کنی.
تعداد پالس های دریافتی در واحد زمان!
اما مسافت طی شده!!!
اومدیم موتور چرخید ولی دستگاه حرکت نکرد…از این جور مشکلا بگذریم.با یه تست بشه فهمید که مثلا به ازای هر 10 پالس.موتور یک دور کامل.در نتیجه لاستیک یک دور کامل ( فرضم بر اینه که میخوای مسافت طی شده ماشین کنترلی! رو حساب کنی ) میزنه و میری حساب میکنی که لاستیک وقتی یه دور کامل میزنه چقدر دستگاه جابجا میشه.مثلا 10 سانت.
فلذا به ازای هر 10 پالس روتاری فوق.دستگاه 10 سانت جابجا میشه….
مهمان
سلام دمت گرم بابت پاسخ جامعت
در خصوص تایمر دقیقا چجور؟
ینی یه تایمر خارجی به اردیونو وصل کنم؟چجور کانفیگ رو انجام بدم اونوخ
راستی جهت چرخش اینکودرم میشه بدست اورد درسته؟
نویسنده این مطلب
میکرو خودش واحد تایمر داره
مهمان
ممنون
خیال کردم باس تایمر خارجی وصل کنم
تازه کارم
تابعشو میدونی بنویسی برام
مهمان
سلام و وقت یخیر
من یه موتور گیربکس انکودر دارم میخوام مثلا 2 دور به راست و 3 دور به چپ بجرخونمش میخوام بدونم چطور باید از روتاری استفاده کنم یا سیم بندیم باید چطور باشه یا اصلا میشه
ممنون از شما
مهمان
در این مورد نیازی به انکودر دو شفته نیست چرخ دنده رو با یه ساپورت می شه اتصال داد و اگر هم بخوای می شه یه لاستیک ضد سایش بگیری تا با قعطه اصطحلاک داشته باشه
مهمان
سلام وقت بخیر
بعضی از شاسی های ربات مسیریاب که توبازارهستن خودشون موتور دارن که بعضی هاشون انکودر دارن بعضی هاشون هم نه
کدهای راه اندازی موتور با انکودر و بدون انکودر در آردوینو باهم متفاوته؟؟
من فقط راه اندازی موتور بدون انکودرشو بلدم
اگر تفاوت داره لطفا راهنماییم کنین
نویسنده این مطلب
سلام
نمیدونم چه مدل انکودری میگی.
مهمان
سلام ممنون از مطالب مفیدتون
من میخواستم یک روتاری اینکودر افزایشی که در واقع به عنوان متر عمل میکنه رو از طریق پورت سریال به کامپیوتر وصل کنم که اندازه ی متر رو نمایش بده
اگر ممکنه راهنمایی کنید ممنون
مهمان
گفتی نظر بده منم دارم میدم


این روتاری انکودر همون روتاری روی ضبط خودرو نیست؟؟
و اینکه اگه برا تنظیم دما تو اردوینو استفاده کنم پایداری داره(یعنی عمرش خوبه؟؟)
و هیچی دیگه ناراحت نشی سوالا چرند و پرنده
نویسنده این مطلب
ضبط خودرو؟ بعید میدونم تو ضبط خودرو از همچین قطعه ای استفاده کرده باشن – نمیدونم دقیقا.
برا تنظیم دما بخوای از آردوینو استفاده کنی؟ نباید مشکلی رخ بده – ترجیها از بردش استفاده نکن – خودت یه برد برای مدارت بزن.
مهمان
سلام
ممنون از توضیحات ارزنده ات
اجرت با سید الشهدا
مهمان
سلام ببخشید نمیشه این ماژول رو با avr راه اندازیش کنیم؟
نویسنده این مطلب
سلام-میشه
مهمان
سلام مطالبتون خیلی جالبه فقط یه سوال داشتم اونم اینه که این انکدرو میشه به یه چرخ وصل کرد ؟

که با چرخ بجرخه؟
نویسنده این مطلب
سلام – موتورو به چرخ وصل کنی و به روتاری؟ موتورت باید دو شافته باشه – فک کنم بهش همینو میگن
مهمان
در این مورد نیازی به انکودر دو شفته نیست چرخ دنده رو با یه ساپورت می شه اتصال داد و اگر هم بخوای می شه یه لاستیک ضد سایش بگیری تا با قعطه اصطحلاک داشته باشه
مهمان
عالی بود داداش تو سایتت مطالب اموزنده ای گذاشتی دمت گرم موفق باشی.
مهمان
مطلب جالب و به درد بخوری بود.تشکر
مهمان
سلام وخسته نباشید. یه سوال اینکه در جاهای پر سر و صدا هم میشه از این سیستم آردوینو استفاده کرد؟
نویسنده این مطلب
سلام
بیشتر بحث نویز مطرح هستش تا آلودگی صوتی
مهمان
سلام اقا مهدی
امیدورام خوب باشی
میخواستم بدونم آردینو تو صنعت کاربرد داره؟
نویسنده این مطلب
سلام
تا صنعت رو چی تعریف کنی
خب آردوینو همون avr هستش – Avr هم که هر جا بری نوشته نویز میگیره و البته راه حل هایی هم ارائه دادن، باید بسته به محیط استفاده پروژه، میزان امکانات مورد نیاز، حداکثر هزینه تمام شده پروژه و… بهترین میکرو رو انتخاب کنی – ممکنه یه جا همین آردوینو کافی باشه – ممکنه یه جا آرم هم جواب نده.
مهمان
جالب بود . دوست دارم اردوینو رو یاد بگیرم و تو صنعت ازش استفاده کنم
اینم نظر . بعد نگی بی معرفت بود خوند و نظر نداد