হল প্রভাব সেন্সর
হল এফেক্ট সেন্সরগুলি চৌম্বকীয় ক্ষেত্রের উপস্থিতি সনাক্ত করতে পারে এবং যখন একটি সনাক্ত করা হয় তখন একটি আউটপুট ভোল্টেজ উত্পাদন করতে পারে। হল এফেক্ট সেন্সর, যখন ব্যবহার করা হয়লিনিয়ার অ্যাকিউটিউটর, সাধারণত চৌম্বকীয় ডিস্কের সাথে অ্যাকুয়েটরের গিয়ারবক্সের ভিতরে অবস্থিত। লিনিয়ার অ্যাকুয়েটরটি প্রসারিত বা প্রত্যাহার করার সাথে সাথে এই ডিস্কটি হলের প্রভাব সেন্সরটি পাস করে যা সেন্সরটিকে ভোল্টেজের নাড়ি আকারে ডিজিটাল আউটপুট উত্পাদন করে। এই ডালগুলি গণনা করা যেতে পারে এবং অ্যাকুয়েটর কতদূর সরানো হয়েছে তা নির্ধারণ করতে ব্যবহার করা যেতে পারে।
একটি হল এফেক্ট সেন্সর থেকে অবস্থানগত প্রতিক্রিয়া
অবস্থানগত প্রতিক্রিয়ার জন্য হল এফেক্ট সেন্সর ব্যবহারের একটি নেতিবাচক দিকটি হ'ল তারা একটি পরম অবস্থান পরিমাপ করে না। পরিবর্তে তারা ডাল উত্পাদন করে যা অ্যাকিউউটর কতদূর সরে গেছে তা নির্ধারণের জন্য গণনা করা যেতে পারে। অবস্থানগত প্রতিক্রিয়ার জন্য এই ডালগুলি ব্যবহার করতে, আপনাকে একটি ব্যবহার করতে হবে মাইক্রো-কন্ট্রোলার উত্পাদিত ডাল গণনা করা। এটি করার জন্য, এই ডালগুলি যেমন ঘটেছিল তেমন গণনা করতে আপনাকে আপনার মাইক্রো-কন্ট্রোলারের বাহ্যিক বিঘ্নিত পিনগুলি ব্যবহার করতে হবে। বাহ্যিক বাধা হ'ল পিনগুলি যা ভোল্টেজের পরিবর্তন সনাক্ত করে এবং আমাদের ক্ষেত্রে হল এফেক্ট সেন্সর থেকে ভোল্টেজ ডাল সনাক্ত করতে ব্যবহার করা যেতে পারে। আপনার মাইক্রো-কন্ট্রোলারের কী পিনগুলি বাধা পিন হিসাবে ব্যবহার করা যেতে পারে তা নিশ্চিত করতে আপনাকে আপনার মাইক্রো-কন্ট্রোলারের ডেটাশিটের সাথে পরামর্শ করতে হবে। একটি ব্যবহার আরডুইনো ইউএনও উদাহরণস্বরূপ, পিন 2 এবং 3 বাহ্যিক বাধাগুলির জন্য ব্যবহার করা যেতে পারে। একবার আপনি একটি উপযুক্ত বাধা পিন নির্বাচন করার পরে, আপনি হল এফেক্ট সেন্সর আউটপুটটির তারটি সেই পিনের সাথে সংযুক্ত করতে পারেন এবং ইনপুট ভোল্টেজকে 5V এবং গ্রাউন্ডকে একটি গ্রাউন্ড পিনের সাথে সংযুক্ত করতে পারেন।
নীচের কোড উদাহরণটি দেখায় যে কীভাবে আরডুইনো আইডিইতে একটি বাধা সেটআপ করবেন যেখানে ভোল্টেজের নাড়ির ক্রমবর্ধমান প্রান্তে বাধা ট্রিগার করা হবে। ভোল্টেজ পরিবর্তনের বিভিন্ন পয়েন্টে ট্রিগার করার জন্য আপনি আপনার বাধা সেট আপ করতে পারেন এবং উপলভ্য বিকল্পগুলি নির্ধারণের জন্য আপনার মাইক্রো-কন্ট্রোলারের ডেটাশিটের সাথে পরামর্শ করা উচিত। আপনার বাধা সেট আপ করার জন্য আপনাকে সর্বশেষ দিকটি যা করতে হবে তা হ'ল আপনার বিঘ্নিত পরিষেবা রুটিনটি লিখতে হবে, এটিই ফাংশনটি যে প্রতিবার বাধা ট্রিগার হওয়ার সাথে সাথে কোডটি চলবে। এই ফাংশনটি সংক্ষিপ্ত হওয়া উচিত এবং কেবল আমাদের হল এফেক্ট সেন্সর থেকে ডালের সংখ্যা গণনা করার মতো সাধারণ কাজগুলি সম্পাদন করে। নীচের কোড উদাহরণে ফাংশন কাউন্টস্টেপস () হল এফেক্ট সেন্সর থেকে ডালের সংখ্যা গণনা করতে ব্যবহৃত হয়।
long steps = 0; // Pulses from Hall Effect sensors | |
void setup() { | |
pinMode(2, INPUT); | |
attachInterrupt(digitalPinToInterrupt(2), countSteps, RISING); | |
} | |
void loop () {} | |
void countSteps(void) { | |
steps++; | |
} |
একটি অবস্থানগত মান নির্ধারণের জন্য এই ডালগুলি ব্যবহার করার জন্য, আপনাকে লিনিয়ার অ্যাকিউউটরের পূর্ববর্তী অবস্থান এবং লিনিয়ার অ্যাকুয়েটর যে দিকটি ভ্রমণ করছে তা জানতে হবে Your আপনার মাইক্রো-কন্ট্রোলার ইতিমধ্যে জানতে পারবেন আপনি কোন উপায়ে আপনার লিনিয়ার অ্যাকুয়েটর চালাচ্ছেন, সুতরাং আপনি কেবল আপনার কোডে অ্যাকিউউটরের দিকটি ট্র্যাক করার জন্য একটি পরিবর্তনশীল সেট আপ করতে পারেন যা আপনি আপনার আগের অবস্থান থেকে ডাল যুক্ত বা বিয়োগ করে কিনা তা নির্ধারণ করতে ব্যবহৃত হবে। একবার আপনি নিজের অবস্থান আপডেট করে নিলে, আপনাকে গণনা করা ডালগুলি শূন্যে পুনরায় সেট করতে হবে। নীচের কোড উদাহরণটি আপনাকে এমন একটি ফাংশন দেখায় যা গণনা করা ডালের সংখ্যার ভিত্তিতে অবস্থান আপডেট করে। ডালের ক্ষেত্রে আপনার একবার অবস্থান পেয়ে গেলে আপনি আপনার লিনিয়ার অ্যাকুয়েটরের প্রতি ইঞ্চি স্পেসিফিকেশন ব্যবহার করে ইঞ্চিতে রূপান্তর করতে পারেন। নীচের কোড নমুনায়, প্রতি ইঞ্চি ভ্রমণ নাড়ি 3500।
long pos = 0; // Actuator Position in Pulses | |
long steps = 0; // Pulses from Hall Effect sensors | |
float conNum = 0.000285; // Convert to Inches | |
bool dir = 0; // Direction of Actuator (0=Retract, 1=Extend) | |
/* Updates Position */ | |
void updatePosition(void){ | |
if(dir == 1){ | |
pos = pos + steps; | |
steps = 0; | |
} else { | |
pos = pos - steps; | |
steps = 0; | |
}} | |
/* Converts Position to Inches */ | |
float convertToInches(long pos){ | |
return conNum*pos; | |
} |
আপনার লিনিয়ার অ্যাকুয়েটরকে হোমিং
একটি হল এফেক্ট সেন্সর থেকে অবস্থানগত প্রতিক্রিয়া সঠিকভাবে ব্যবহার করতে, আপনাকে সর্বদা আপনার লিনিয়ার অ্যাকুয়েটরের প্রারম্ভিক অবস্থানটি জানতে হবে। যদিও আপনি যখন প্রথম আপনার সিস্টেমটি চালু করেন, তখন আপনার মাইক্রো-কন্ট্রোলার অ্যাকিউউটরটি বাড়ানো হয়েছে কিনা তা বলতে সক্ষম হবেন না। এটির জন্য আপনাকে আপনার লিনিয়ার অ্যাকুয়েটরকে একটি পরিচিত অবস্থানে রাখার প্রয়োজন হবে your আপনার লিনিয়ার অ্যাকিউউটরকে বাড়িতে রাখার জন্য, আপনাকে এটিকে পুরোপুরি প্রত্যাহার করার মতো একটি পরিচিত অবস্থানে নিয়ে যেতে হবে। আপনি ব্যবহার করতে পারে বাহ্যিক সীমা সুইচ সম্পূর্ণরূপে প্রসারিত বা প্রত্যাহার ব্যতীত আপনার পরিচিত অবস্থানটি অন্য কোথাও সেট করতে। উদাহরণ হিসাবে নীচে আরডুইনো কোডটি ব্যবহার করে, আমরা এমন একটি লুপ সেট আপ করতে চাই যা আমাদের লিনিয়ার অ্যাকুয়েটরটিকে আপনার পরিচিত অবস্থানের দিকে চালিত করবে, এই ক্ষেত্রে পুরোপুরি প্রত্যাহার করা হয়েছে। আমরা জানি যে আপনি আমাদের পরিচিত অবস্থানে রয়েছেন কারণ হল এফেক্ট সেন্সরটির বাধা ট্রিগার করবে না। এই ক্ষেত্রে, আমরা বিঘ্নটি ট্রিগার করা হয়েছে কিনা তা নির্ধারণের জন্য ধাপগুলির পরিবর্তনশীল পরিবর্তন হয়েছে কিনা তা পরীক্ষা করে দেখি। আমাদের এটিও নিশ্চিত করতে হবে যে বাধাটি ট্রিগার হওয়ার আশা করার জন্য পর্যাপ্ত সময় কেটে গেছে, এর জন্য আমরা মিলিস () ফাংশনটি ব্যবহার করি যা কোডটি শুরু হওয়ার পর থেকে মিলিসেকেন্ডে সময়কে আউটপুট করে এবং আমরা পূর্ববর্তী সময়ের স্ট্যাম্পের সাথে তুলনা করি । একবার আমরা নির্ধারণ করে দিয়েছি যে লিনিয়ার অ্যাকুয়েটরটি আমাদের বাড়ির অবস্থানে রয়েছে, আমরা অ্যাকিউউটরটি চালনা বন্ধ করি, পদক্ষেপগুলি ভেরিয়েবলটি পুনরায় সেট করি এবং লুপটি থেকে বেরিয়ে যাই।
bool homeFlag = 0; // Flag use to know if the Actuator is home | |
void homeActuator(void){ | |
prevTimer = millis(); | |
while(homeFlag == 0){ | |
Speed = 127; | |
analogWrite(10, 0); | |
analogWrite(11, Speed); | |
if(prevSteps == steps){ | |
if(millis() - prevTimer > 10){ | |
analogWrite(10, 0); | |
analogWrite(11, 0); | |
steps = 0; | |
Speed = 0; | |
homeFlag = 1; | |
} | |
}else{ | |
prevSteps = steps; | |
prevTimer = millis(); | |
} | |
} | |
} |
মিথ্যা ট্রিগার নিয়ে কাজ করা
যদিও হল এফেক্ট সেন্সরগুলি পেন্টিওমিটারের মতো বৈদ্যুতিক শব্দের প্রতি ততটা সংবেদনশীল নয়, বৈদ্যুতিক শব্দ এখনও আউটপুট সংকেতকে প্রভাবিত করতে পারে। স্যুইচ বাউন্সিং হল এফেক্ট সেন্সরগুলির সাথেও একটি সমস্যা হতে পারে যা গণনা করতে মিথ্যা ডালগুলি ট্রিগার করতে পারে, যা আপনার মাইক্রো-কন্ট্রোলার মনে করে যে আপনার লিনিয়ার অ্যাকিউটরেটরটি সরানো হয়েছে তা প্রভাবিত করবে। কয়েকটি অতিরিক্ত ডাল পজিশনিংকে খুব বেশি প্রভাবিত করবে না কারণ প্রতি ইঞ্চি 1000 ডাল রয়েছে, তবে সময়ের সাথে সাথে এটি আরও বড় সমস্যা হতে পারে। মিথ্যা ট্রিগারগুলি ফিল্টার করার জন্য আপনি অভ্যন্তরীণ টাইমার ব্যবহার করে এই সমস্যাগুলি মোকাবেলা করতে পারেন। আপনি কীভাবে ঘন ঘন নতুন ডালগুলি সনাক্ত করার প্রত্যাশা করতে পারেন তা নির্ধারণ করতে পারেন, আপনি যখন শব্দের দ্বারা বাধাটি ট্রিগার করা হয়েছিল তখন আপনি ফিল্টার আউট করতে পারেন। নীচের কোড নমুনায়, ট্রিগ-বিলম্ব হ'ল প্রতিটি নাড়ির মধ্যে সময় বিলম্ব। যদি এই বিলম্বের আগে বাধা ট্রিগার করা হয়, তবে নাড়িটি গণনা করা হবে না।
unsigned long lastStepTime = 0; // Time stamp of last pulse | |
int trigDelay = 500; // Delay bewteen pulse in microseconds | |
void countSteps(void) { | |
if(micros()-lastStepTime > trigDelay){ | |
steps++; | |
lastStepTime = micros(); | |
}} |
এই বিলম্বের সময়টির দৈর্ঘ্য আপনার আবেদনের উপর ভিত্তি করে পরিবর্তিত হবে, তবে এটি খুব কম হলে এটি শব্দটি সঠিকভাবে ফিল্টার করবে না এবং যদি এটি খুব বেশি দীর্ঘ হয় তবে এটি লিনিয়ার অ্যাকুয়েটর থেকে প্রকৃত ডালগুলি মিস করবে। লিনিয়ার অ্যাকুয়েটরের গতিও এই বিলম্বকে প্রভাবিত করবে এবং আপনি যদি গতি সামঞ্জস্য করতে চান তবে এই পরিবর্তনশীলটি প্রত্যাশিত ডালগুলির নতুন ফ্রিকোয়েন্সিটির সাথে সামঞ্জস্য করতে পরিবর্তন করতে পারে। প্রতিটি নাড়ির মধ্যে সঠিকভাবে বিলম্ব নির্ধারণ করতে, আপনি হল এফেক্ট সেন্সর থেকে প্রকৃত সংকেত দেখতে একটি যুক্তি বিশ্লেষক ব্যবহার করতে পারেন। যদিও এটি বেশিরভাগ অ্যাপ্লিকেশনগুলিতে প্রয়োজন হয় না, যদি আপনার খুব সঠিক অবস্থানের প্রয়োজন হয় তবে আপনি একটি সুনির্দিষ্ট বিলম্ব নির্ধারণ করতে চাইতে পারেন।
মিথ্যা ট্রিগারগুলির বিরুদ্ধে লড়াই করার আরেকটি উপায় হ'ল প্রতিবার অ্যাকিউউটার কোনও পরিচিত অবস্থানে পৌঁছে অবস্থানগত মানটি সংশোধন করা। লিনিয়ার অ্যাকুয়েটরকে হোমিং করার মতো, যদি আপনি লিনিয়ার অ্যাকুয়েটরকে পুরোপুরি প্রত্যাহার বা বর্ধিত অবস্থানে চালিত করেন বা আপনি যদি ব্যবহার করেন তবে বাহ্যিক সীমা সুইচ, আপনি জানবেন যে অ্যাকুয়েটর কতদূর সরে গেছে। আপনার পরিচিত অবস্থানে পৌঁছানোর জন্য হল এফেক্ট সেন্সরটি কতগুলি পদক্ষেপ প্রেরণ করা উচিত তা আপনি জানেন, আপনি যখন পৌঁছেছি তখন আপনি কেবল মানটি সংশোধন করতে পারেন। নীচের কোড নমুনায়, এটি সম্পূর্ণ বর্ধিত এবং সম্পূর্ণ প্রত্যাহার করা অবস্থানের জন্য করা হয়। যেহেতু অ্যাকিউটরেটরটি একবার এই অবস্থানের মধ্যে একটিতে পৌঁছায় না, আমরা যদি অ্যাকিউউটরটি চালানোর চেষ্টা করি এবং অবস্থানের মান পরিবর্তন না করে তবে আমরা জানি আমরা সীমাতে রয়েছি। আপনার অবস্থানগত মানটি সঠিক থাকে তা নিশ্চিত করার জন্য এই পদ্ধতিটি একটি ব্যবহারিক সমাধান সরবরাহ করে, বিশেষত যদি আপনি অপারেশন চলাকালীন কোনও সময়ে আপনার অ্যাকুয়েটর পুরোপুরি প্রত্যাহার বা পুরোপুরি প্রসারিত করছেন। আপনি উপরে বর্ণিত পদ্ধতির সাথে এই পদ্ধতিটি ব্যবহার করতে পারেন যা আপনার অবস্থানগত মানের যথার্থতা বজায় রাখতে সহায়তা করবে।
if(digitalRead(8) == HIGH & digitalRead(9) == LOW){ | |
// Retract Actuator | |
dir = 0; | |
Speed = 255; | |
analogWrite(10, 0); | |
analogWrite(11, Speed); | |
if(millis() - prevTimer > 100){ // Update the Position Every 1/10 seocond | |
updatePosition(); | |
prevTimer = millis(); | |
if(pos == prevPos | pos == 0){ pos = 0;} // Corrects Position | |
else {prevPos = pos;} | |
Serial.println(convertToInches(pos)); | |
} | |
} else if(digitalRead(8) == LOW & digitalRead(9) == HIGH){ | |
// Extend Actuator | |
dir = 1; | |
Speed = 255; | |
analogWrite(10, Speed); | |
analogWrite(11, 0); | |
if(millis() - prevTimer > 100){ // Update the Position Every 1/10 seocond | |
updatePosition(); | |
prevTimer = millis(); | |
if(pos == prevPos | pos == 49000){pos = 49000;} // Corrects Position | |
else {prevPos = pos;} | |
Serial.println(convertToInches(pos)); | |
}} |
সারসংক্ষেপ
অবস্থানগত প্রতিক্রিয়ার জন্য একটি হল এফেক্ট সেন্সর ব্যবহার করা একটি পেন্টিওমিটারের প্রতিক্রিয়ার তুলনায় অনেক বেশি রেজোলিউশন সরবরাহ করে। যেহেতু প্রতি ইঞ্চি আন্দোলনের 1000s ডাল থাকতে পারে, হল এফেক্ট সেন্সরগুলি আপনার লিনিয়ার অ্যাকুয়েটরের অবস্থান নির্ধারণে নির্ভুলতা এবং নির্ভরযোগ্যতা সরবরাহ করে। হল এফেক্ট সেন্সরগুলি একাধিক লিনিয়ার অ্যাকিউটরেটর একসাথে একসাথে সরানো নিশ্চিত করার বৃহত্তর ক্ষমতা সরবরাহ করে কারণ ডাল গণনাগুলি পেন্টিওমিটারের পরিবর্তিত ভোল্টেজের চেয়ে আরও সঠিক। আমাদের ব্যবহার এফএ-সিঙ্ক-এক্স অ্যাকিউউটর কন্ট্রোলার, আপনি এমনকি লোড নির্বিশেষে অ্যাকিউটরেটরদের একত্রে সরানো নিশ্চিত করতে পারেন। ডিআইয়ার্সের জন্য, আপনি কীভাবে আপনার অ্যাকিউটরেটরগুলি আরডুইনো ব্যবহার করে একত্রে সরানো নিশ্চিত করতে পারেন তা পরীক্ষা করতে পারেন এখানে.
নীচে এই ব্লগে ব্যবহৃত সম্পূর্ণ নমুনা কোড রয়েছে এবং এটি 14 "স্ট্রোকের দৈর্ঘ্য নিয়ন্ত্রণ করতে নির্মিত হয়েছিল বুলেট সিরিজ 36 ক্যাল। রৈখিক নেতা। লিনিয়ার অ্যাকুয়েটর একটি ব্যবহার করে চালিত হয় মোটর ড্রাইভার, যা আপনি কীভাবে সেট আপ করবেন তা শিখতে পারেন এখানে.
[1] মনারি, জি। (জুন, 2013) অপটিক্যাল এবং চৌম্বকীয় এনকোডারগুলিতে রেজোলিউশন বোঝা। থেকে উদ্ধার: https://www.electronicdesign.com/technologies/components/article/21798142/understanding-resolution-in-optical-and-magnetic-encoders