• Home
  • Firgelli Articles
  • একটি অপটিকাল সেন্সর থেকে প্রতিক্রিয়া...

একটি অপটিকাল সেন্সর থেকে প্রতিক্রিয়া কীভাবে পড়বেন

অপটিকাল সেন্সর

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

অপটিকাল সেন্সর

একটি অপটিক্যাল সেন্সর থেকে অবস্থানগত প্রতিক্রিয়া

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

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

long steps = 0; // Pulses from Optical Sensors
void setup() {
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), countSteps, RISING);
}
void loop () {}
void countSteps(void) {
steps++;
}
view raw OP_SEN_EG1.ino hosted with ❤ by GitHub

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

long pos = 0; // Actuator Position in Pulses
long steps = 0; // Pulses from Optical Sensor
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;
}}
view raw OP_SEN_EG2.ino hosted with ❤ by GitHub

আপনার লিনিয়ার অ্যাকুয়েটরকে হোমিং

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

bool homeFlag = 0; // Flag use to know if the Actuator is home
void homeActuator(void){
unsigned long 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();
}
}
}
view raw HES_EG_3.ino hosted with ❤ by GitHub

মিথ্যা ট্রিগার নিয়ে কাজ করা

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

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();
}}
view raw HES_EG_4.ino hosted with ❤ by GitHub

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

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));
}}
view raw HES_EG_5.ino hosted with ❤ by GitHub

সারসংক্ষেপ

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

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

 

[1] পাসচোটা, আর। অপটিক্যাল সেন্সর উপর নিবন্ধ। থেকে উদ্ধার:https://www.rp-photonics.com/optical_sensors.html

Share This Article
Tags: