সুচিপত্র:

একটি সম্পূর্ণ Arduino ঘূর্ণমান সমাধান: 5 টি ধাপ
একটি সম্পূর্ণ Arduino ঘূর্ণমান সমাধান: 5 টি ধাপ

ভিডিও: একটি সম্পূর্ণ Arduino ঘূর্ণমান সমাধান: 5 টি ধাপ

ভিডিও: একটি সম্পূর্ণ Arduino ঘূর্ণমান সমাধান: 5 টি ধাপ
ভিডিও: servo motor pulse/degree calculation | servo plc programming | servo motor rotation angle calculate 2024, জুলাই
Anonim
একটি সম্পূর্ণ Arduino ঘূর্ণমান সমাধান
একটি সম্পূর্ণ Arduino ঘূর্ণমান সমাধান

রোটারি এনকোডারগুলি ইলেকট্রনিক প্রজেক্টের জন্য টার্নেবল কন্ট্রোল নোবস, যা প্রায়ই আরডুইনো ফ্যামিলি মাইক্রোকন্ট্রোলারের সাথে ব্যবহৃত হয়। এগুলি টিউন প্যারামিটারগুলিকে সূক্ষ্ম করতে, মেনু নেভিগেট করতে, স্ক্রিনে বস্তুগুলি সরানোর জন্য, যে কোনও ধরণের মান নির্ধারণ করতে ব্যবহার করা যেতে পারে। এগুলি পোটেন্টিওমিটারের সাধারণ প্রতিস্থাপন, কারণ এগুলি আরও নির্ভুল এবং অসীমভাবে ঘোরানো যেতে পারে, তারা এক সময়ে একটি পৃথক মান বৃদ্ধি বা হ্রাস করে এবং প্রায়শই নির্বাচন ধরণের ফাংশনগুলির জন্য ধাক্কাযোগ্য সুইচের সাথে সংহত হয়। এগুলি সমস্ত আকার এবং আকারে আসে, তবে সর্বনিম্ন মূল্যের পরিসরটি নীচে ব্যাখ্যা করা হিসাবে ইন্টারফেস করা কঠিন।

রোটারি এনকোডারগুলির কাজের বিবরণ এবং ব্যবহারের পদ্ধতি এবং সেগুলি কীভাবে ব্যবহার করা যায় সে সম্পর্কে অসংখ্য নমুনা কোড এবং লাইব্রেরি সম্পর্কে অসংখ্য নিবন্ধ রয়েছে। একমাত্র সমস্যা হল যে তাদের কেউই সর্বনিম্ন মূল্য পরিসীমা চীনা ঘূর্ণমান মডিউলগুলির সাথে 100% নির্ভুলভাবে কাজ করে না।

ধাপ 1: ভিতরে ঘূর্ণমান এনকোডার

ভিতরে রোটারি এনকোডার
ভিতরে রোটারি এনকোডার
ভিতরে রোটারি এনকোডার
ভিতরে রোটারি এনকোডার
ভিতরে রোটারি এনকোডার
ভিতরে রোটারি এনকোডার

এনকোডারের ঘূর্ণমান অংশে তিনটি পিন রয়েছে (এবং twoচ্ছিক সুইচ অংশের জন্য আরও দুটি)। একটি হল সাধারণ স্থল (কালো জিএনডি), অন্য দুটি হল গিঁট ঘুরানোর সময় দিক নির্ধারণের জন্য (এগুলিকে প্রায়ই নীল সিএলকে এবং লাল ডিটি বলা হয়)। এই দুটিই মাইক্রোকন্ট্রোলারের একটি পুলআপ ইনপুট পিনের সাথে সংযুক্ত, যা লেভেলকে তাদের ডিফল্ট রিডিং করে তোলে। যখন গাঁটটি সামনে (বা ঘড়ির কাঁটার দিকে) ঘুরিয়ে দেওয়া হয়, প্রথমে নীল CLK LOW স্তরে পড়ে, তারপর লাল DT অনুসরণ করে। আরও ঘুরিয়ে, নীল CLK উচ্চতায় ফিরে আসে, তারপর সাধারণ GND প্যাচ যেমন উভয় সংযোগ পিন ছেড়ে দেয়, লাল DTও আবার উচ্চতায় উঠে যায়। এইভাবে একটি পূর্ণ টিক FWD (বা ঘড়ির কাঁটার দিকে) সম্পন্ন করা। একই দিক BWD (বা উল্টো ঘড়ির কাঁটার দিকে) যায়, কিন্তু এখন লালটি প্রথমে পড়ে, এবং নীলটি যথাক্রমে দুটি স্তরের ছবিতে দেখানো হয়েছে।

পদক্ষেপ 2: দু Misখ যা অনেকের জন্য আসল যন্ত্রণার কারণ হয়

দুeryখ যা অনেকের জন্য আসল যন্ত্রণার কারণ হয়
দুeryখ যা অনেকের জন্য আসল যন্ত্রণার কারণ হয়
দুeryখ যা অনেকের জন্য আসল যন্ত্রণার কারণ হয়
দুeryখ যা অনেকের জন্য আসল যন্ত্রণার কারণ হয়
দুeryখ যা অনেকের জন্য আসল যন্ত্রণার কারণ হয়
দুeryখ যা অনেকের জন্য আসল যন্ত্রণার কারণ হয়

Arduino hobbyists জন্য সাধারণ সমস্যা, যে সস্তা রোটারি এনকোডার মডিউল আউটপুট মাত্রা অতিরিক্ত পরিবর্তন বাউন্স, অতিরিক্ত এবং ভুল দিক গণনা রিডিং কারণ এটি ত্রুটিহীন গণনা রোধ করে এবং এই মডিউলগুলিকে সঠিক ঘূর্ণমান প্রকল্পে সংহত করা অসম্ভব করে তোলে। এই অতিরিক্ত বাউন্সগুলি সংযোগ পিনের উপর প্যাচগুলির যান্ত্রিক নড়াচড়ার কারণে ঘটে এবং এমনকি অতিরিক্ত ক্যাপাসিটর প্রয়োগ করলে সেগুলি সম্পূর্ণরূপে নির্মূল করা যায় না। বাউন্সগুলি সম্পূর্ণ টিক চক্রের যেকোনো স্থানে উপস্থিত হতে পারে এবং ছবিতে বাস্তব জীবনের দৃশ্যকল্প দ্বারা চিত্রিত হয়।

ধাপ 3: ফিনাইট স্টেট মেশিন (এফএসএম) সমাধান

ফিনাইট স্টেট মেশিন (এফএসএম) সমাধান
ফিনাইট স্টেট মেশিন (এফএসএম) সমাধান

ছবিটি দুটি পিনের (নীল সিএলকে এবং লাল ডিটি) সম্ভাব্য স্তরের পরিবর্তনের সম্পূর্ণ রাষ্ট্র স্থান দেখায়, উভয়ই সঠিক এবং মিথ্যা বাউন্সের জন্য। এই রাজ্য মেশিনের উপর ভিত্তি করে একটি সম্পূর্ণ সমাধান প্রোগ্রাম করা যেতে পারে যা সর্বদা 100% নির্ভুলভাবে কাজ করে। যেহেতু এই সমাধানটিতে কোন ফিল্টারিং বিলম্বের প্রয়োজন নেই, এটি দ্রুততম সম্ভব। পিনের স্টেট স্পেসকে ওয়ার্কিং মোড থেকে আলাদা করার আরেকটি সুবিধা হল যে কেউ নিজের পছন্দ অনুযায়ী পোলিং বা ইন্টারাপ্ট মোড উভয়ই প্রয়োগ করতে পারে। পোলিং বা বাধাগুলি পিনের স্তরের পরিবর্তনগুলি সনাক্ত করতে পারে এবং একটি পৃথক রুটিন বর্তমান অবস্থা এবং স্তরের পরিবর্তনের প্রকৃত ঘটনাগুলির উপর ভিত্তি করে নতুন রাজ্যের গণনা করবে।

ধাপ 4: Arduino কোড

Arduino কোড
Arduino কোড

নীচের কোডটি সিরিয়াল মনিটরে FWD এবং BWD টিক গণনা করে এবং switchচ্ছিক সুইচ ফাংশনকে সংহত করে।

// পিটার Csurgay 2019-04-10

// ঘূর্ণমান পিনগুলি Arduino পোর্টে ম্যাপ করা হয়েছে

#ডিফাইন SW 21 #ডিফাইন CLK 22 #ডিটি ডিফাইন 23

// ঘূর্ণমান দ্বারা সুরক্ষিত কাউন্টারের বর্তমান এবং পূর্ববর্তী মান

int curVal = 0; int prevVal = 0;

// FSM এর সাতটি রাজ্য (সসীম রাষ্ট্রীয় যন্ত্র)

#ডিফাইন IDLE_11 0 #ডিফাইন SCLK_01 1 #ডিফাইন SCLK_00 2 #ডিফাইন SCLK_10 3 #ডিফাইন SDT_10 4 #ডিফাইন SDT_00 5 #ডিফাইন SDT_01 6 int state = IDLE_11;

অকার্যকর সেটআপ() {

Serial.begin (250000); Serial.println ("Start…"); // লেভেল হাই সব পিন পিনমোডের জন্য ডিফল্ট হবে (SW, INPUT_PULLUP); পিনমোড (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // CLK এবং DT উভয়ই সমস্ত স্তরের পরিবর্তনের জন্য ইন্টারাপ্টগুলিকে ট্রিগার করবে। attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }

অকার্যকর লুপ () {

// কিছু রোটারি এনকোডারে সংহত optionচ্ছিক সুইচ পরিচালনা করা হলে যখন (! digitalRead (SW)); } // কাউন্টার ভ্যালুর কোন পরিবর্তন সিরিয়াল মনিটরে প্রদর্শিত হয় যদি (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}

// CLK স্তরের পরিবর্তনের জন্য স্টেট মেশিন ট্রানজিশন

void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; অন্যথায় যদি (state == SCLK_10) state = SCLK_00; অন্যথায় যদি (state == SDT_10) state = SDT_00; } অন্য {যদি (state == SCLK_01) state = IDLE_11; অন্যথায় যদি (state == SCLK_00) state = SCLK_10; অন্যথায় যদি (state == SDT_00) state = SDT_10; অন্যথায় যদি (state == SDT_01) {state = IDLE_11; curVal--; }}}

// ডিটি স্তরের পরিবর্তনের জন্য স্টেট মেশিন ট্রানজিশন

void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; অন্যথায় যদি (state == SDT_01) state = SDT_00; অন্যথায় যদি (state == SCLK_01) state = SCLK_00; } অন্য {যদি (state == SDT_10) state = IDLE_11; অন্যথায় যদি (state == SDT_00) state = SDT_01; অন্যথায় যদি (state == SCLK_00) state = SCLK_01; অন্যথায় যদি (state == SCLK_10) {state = IDLE_11; কার্ভাল ++; }}}

ধাপ 5: ত্রুটিহীন ইন্টিগ্রেশন

আপনি সংযুক্ত ভিডিওতে চেক করতে পারেন যে FSM সমাধানটি বিভিন্ন বিক্ষিপ্ত বাউন্স প্রভাব সহ কম পরিসরের ঘূর্ণমান এনকোডারের ক্ষেত্রেও সঠিক এবং দ্রুত কাজ করে।

প্রস্তাবিত: