কেমন হবে যদি এমন একটা রোবট বানাই যে দূরত্ব পরিমাপ করে এলগরিদম অনুযায়ী নিজে নিজে যে কোনো সিদ্বান্ত নিতে পারে? আমরা অনেকেই আল্ট্রাসাউন্ড বা শব্দোত্তর তরঙ্গ ব্যবহার করে বাদুড়ের পথ চলা সম্পর্কে জানি। আল্ট্রাসনিক সেন্সর হলো আল্ট্রাসাউন্ড ব্যবহার করে দূরত্ব পরিমাপ করার একটি বিশেষ সেন্সর। উল্লেখ্য আল্ট্রাসাউন্ড হলো একটি বিশেষ তরঙ্গ দৈর্ঘ্যের শব্দ। এ শব্দ আমরা সাধারণত শুনতে পাই না, কারণ আমাদের শোনার জন্যে যে শ্রাব্যতার সীমা (২০-২০,০০০ হার্জ) আছে সেই সীমার মাঝে এই আল্ট্রাসাউন্ড এর ফ্রিকোয়েন্সি বা কম্পাংক পড়ে না। আবার আমরা জানি যে, শব্দ উৎস হতে তরঙ্গ আকারে চারদিকে ছড়িয়ে পড়ে। যদি উৎসের সামনে কোনো বস্তু থাকে তখন শব্দ সে বস্তুর গায়ে প্রতিফলিত হয়ে পুনরায় উৎসের দিকে ফিরে আসে। যে কারণে বড় পাহাড়ের সামনে কিংবা খালি রুমে দেয়ালের সামনে দাঁড়িয়ে কথা বললে আমরা সে কথা পুনরায় শুনতে পাই – যাকে বলে প্রতিধ্বনি ।
আমরা এই সেন্সর দিয়েও ঠিক এই ধরনের কাজ করবো। এই সেন্সর একধরনের আল্ট্রাসাউন্ড তৈরি করবে। তখন এই শব্দটি সামনে অগ্রসর হবে এবং কোনো বস্তু থাকলে তার গায়ে আঘাত পেয়ে পুনরায় সেন্সরের দিকে ফিরে আসবে। শব্দ তৈরি এবং পুনরায় ফিরে আসার মাঝে যে সময় অতিবাহিত হয়, তা আমরা আরডুইনো ব্যবহার করে হিসাব করবো। আরডুইনো হলো একটা ওপেন সোর্স ইলেকট্রনিক প্ল্যাটফর্ম, যেখানে আপনি নিজের মত করে প্রোগ্রাম করে কোনো যন্ত্রকে বলতে পারবেন যে কী করতে হবে।
মনে প্রশ্ন জাগতে পারে, যে সময় কতটুকু লাগলো তা জেনে আমাদের কি লাভ? হুম, এখানেই তো মজা! যারা বিজ্ঞান বিভাগে পড়েছেন তারা হয়তো অলরেডি ধারণা করতে পারছেন যে কিভাবে দূরত্বটা বের করতে হবে। যারা বিজ্ঞান বিভাগের নন, ভয় পাওয়ার কোনো কারণ নেই। আসলে পদার্থ বিজ্ঞানে শব্দের বেগ নিয়ে আলোচনা করা হয়। পদার্থ বিজ্ঞানের সাহায্যে আমরা জানতে পেরেছি যে বাতাসে শব্দ প্রতি সেকেন্ডে প্রায় ৩৩২ মিটার পথ অতিক্রম করতে পারে। অবশ্য তাপমাত্রা পরিবর্তিত হলে এই বেগের পরিমাণ কিছুটা কম বেশি হয়। তাও এটা হলো একটা আদর্শ মান। এখন খেয়াল করে দেখুন তো সময়ের সাথে দূরত্বের একটা সম্পর্ক আমরা পেয়ে গেছি তাই না? এখন আমরা দেখবো যে আমাদের সেন্সরের মাধ্যমে তৈরি হওয়া শব্দটি কতক্ষণ পরে আবার সেন্সরে ফিরে এসেছে। সেই সময়টাকে ধরে আমরা সূত্রটার মাধ্যমে খুব সহজেই দূরত্বটা বের করতে পারবো। মজার না বিষয়টা? চলুন, আমরা প্র্যাকটিক্যালি বিষয়টি শিখে ফেলি।
আল্ট্রাসনিক সোনার সেন্সর HC-04 মডিউলটি অধিকাংশ ইলেকট্রনিক্স শপে পাওয়া যায়। এটি 40000 Hz এ একটি আল্ট্রাসাউন্ড নির্গত করে যা বাতাসে ভ্রমণ করে এবং পথে যদি কোনও বস্তুর বাধা পেয়ে থাকে তবে মডিউলটিতে ফিরে আসে। ভ্রমণ সময় এবং গতি বিবেচনা করে আপনি দূরত্ব মেপে ফেলতে পারবেন।
HC-04 মডিউলটিতে ৪ টি পিন থাকে। Ground, Vcc, Trigger, Echo । মডিউলের Gnd এবং Vcc পিনগুলি যথাক্রমে Arduino বোর্ডের Gnd ও 5v পিনের সাথে সংযুক্ত হবে এবং Arduino Board- এ যে কোনও ডিজিটাল I / O পিনে trig ও echo pin। আল্ট্রাসাউন্ড জেনারেট করার জন্য ১০ মাইক্রো সেকেন্ড এর জন্য একটি হাই স্টেটে Trig সেট করা প্রয়োজন। এটি একটি ৮ সাইকেল এর আল্ট্রাসাউন্ড তৈরী করবে যা শব্দের বেগে ভ্রমণ করবে এবং বাধা পেয়ে ফিরে আসলে echo পিন একে রিসিভ করবে।
উদাহরণস্বরূপ, যদি বস্তুটি সেন্সর থেকে ১০ সেন্টিমিটার দূরত্বে থাকে এবং শব্দের গতিবেগ ৩৪০ মি/সেকেন্ড বা ০.০৩ সেমি/মাইক্রোসেকেন্ডে থাকে তাহলে trig দ্বারা সৃষ্ট তরঙ্গটিকে ২৯৪ মাইক্রোসেকেন্ডে ধরে ভ্রমণ করতে হবে। কিন্তু ইকো পিন থেকে আপনি যা পাবেন তার সংখ্যা দ্বিগুণ হবে, কারণ তরঙ্গটি একবার গিয়ে আবার ফিরে আসছে। তাই সেন্টিমিটারে দূরত্ব পেতে আমরা ০.০৩৪ দ্বারা ভ্রমণের সময় মানকে গুণ করব এবং ২ দ্বারা ভাগ করব।
প্রোগ্রামের আদ্যোপান্তঃ
Arduino ide তে কোডিং এর জন্যে প্রথমেই আমাদের Trig এবং Echo পিন নির্ধারণ করতে হবে। এই ক্ষেত্রে আমরা Arduino বোর্ডের পিন সংখ্যা 11 ও 12 নির্বাচন করলাম এবং তাদের নাম দিলাম trigpin ও echopin । তারপর আমাদের প্রয়োজন একটি Long variable , যার নাম দিলাম duration আর distance নাম দিয়ে একটি ইন্টিজার ভেরিয়েবল নির্দেশ করলাম।
Setup অংশে আমরা trigpin কে আউটপুট আর echopin কে ইনপুট হিসাবে সংজ্ঞায়িত করলাম এবং সিরিয়াল মনিটরে ফলাফল দেখানোর জন্য Serial.begin(9600); লিখলাম। এখানে 9600 দিয়ে বোঝায় Baud Rate বা সেন্সর থেকে আর্ডিনো বোর্ডে ডেটা ট্রান্সমিট এর গতি।
Loop এ প্রথমে আমাদের নিশ্চিত করতে হবে যে trigpin ক্লিয়ার আছে। আর তাই আমরা কেবল ২ মাইক্রোসেকেন্ড এর জন্য লো-স্টেটে সেট করব। এখন আল্ট্রা সাউন্ড তরঙ্গ উৎপাদনের জন্য trigpin কে ১০ মাইক্রোসেকেন্ড এর জন্য হাই স্টেটে সেট করব।
PulseIn () ফাংশন ব্যবহার করে আমরা তরঙ্গের ভ্রমণের সময়টি পড়তে পারি এবং সেই মানটিকে ভেরিয়েবল duration এ রাখি। এই ফাংশনটির দুটি প্যারামিটার রয়েছে, প্রথমটি হল echo পিনের নাম এবং দ্বিতীয়টি আপনি HIGH বা LOW লিখতে পারেন। দূরত্ব অর্জনের জন্য আমরা ০.০৩৪ এর দ্বারা দৈর্ঘ্যকে গুণ করব এবং এটি ২ দ্বারা ভাগ করবো ।শেষে আমরা সিরিয়াল মনিটরের দূরত্ব প্রিন্ট করব।
সম্পূর্ণ প্রোগ্রামঃ
const int trigPin = 11;
const int echoPin = 12;
// defines variables
long duration;
int distance;
void setup()
{
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop()
{
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
// Prints the distance on the Serial Monitor
Serial.print(“Distance: “);
Serial.println(distance);
}
কাজঃ এই পর্বে আমরা দেখলাম আল্ট্রাসনিক সেন্সর দিয়ে কিভাবে দূরত্ব মাপা যায়, এছাড়া এই সেন্সর কাজে লাগিয়ে আরো বেশ কিছু গঠনমূলক কাজ করা যায়। এই যেমন অন্ধদের জন্যে আল্ট্রাসনিক লাঠি বা টুপি (Cap), পানির ট্যাঙ্কের পানির লেভেল মাপার যন্ত্র কিংবা আল্ট্রাসনিক রুলার স্কেলসহ আরো অনেক কিছু। এখন পাঠকদের কাছে প্রশ্ন রইলো – এই সেন্সর দিয়ে পানির নিচের দূরত্ব মাপা যাবে কিনা ? মাপা না গেলে এর সমাধান কি বা বিকল্প হিসেবে কোনটি ব্যবহার করা যাবে?
বিদ্রঃ প্রয়োজনীয় সফটওয়্যার ডাউনলোড লিঙ্ক
এই মডেলের সেন্সর গুলোর রেঞ্জ খুবই কম, পানির নিচে অনেক পরের ব্যাপার, এগুলো এক ফুট দূরত্বেও ঠিক মতন রিডিং দিতে পারে না। আর আরডুইনো সাধারণত বড় প্রজেক্টে ব্যবহার করা ভালো। এই ধরণের ছোট প্রজেক্টের জন্য ৮০৫১ মাইক্রো কন্ট্রোলারই যথেষ্ট, দাম ও কম।