পাঠ ২৭/৩১: কার-৫ সানফাউন্ডার স্মার্ট কার আপনার হাত অনুসরণ করে আরডুইনো ব্যবহার করে | রোবোজ্যাক্স
ভূমিকা
আপনি কি কখনও এমন একটি রোবট তৈরি করতে চেয়েছেন যা আপনার উপস্থিতিতে স্বজ্ঞাতভাবে সাড়া দেয়? এই প্রকল্পটি একটি স্ট্যান্ডার্ড SunFounder স্মার্ট কারকে একটি অঙ্গভঙ্গি-নিয়ন্ত্রিত যানে রূপান্তরিত করে যা আপনার হাত অনুসরণ করে। রিমোট কন্ট্রোল বা স্মার্টফোন অ্যাপ ব্যবহার করার পরিবর্তে, এই গাড়িটি আপনার হাতের অবস্থান এবং দূরত্ব সনাক্ত করতে আল্ট্রাসনিক এবং ইনফ্রারেড সেন্সরের সংমিশ্রণ ব্যবহার করে, যা আপনাকে সহজ প্রাকৃতিক নড়াচড়ার মাধ্যমে এটিকে বাম, ডান বা সামনের দিকে পরিচালিত করতে দেয়।
এই প্রকল্পটি Robojax Arduino কোর্সের (পাঠ 27/31) অংশ এবং এটি SunFounder 3-ইন-1 Arduino কিট ব্যবহার করে তৈরি। এটি সেন্সর ফিউশন সম্পর্কে শেখার একটি চমৎকার উপায়, যেখানে একাধিক সেন্সর একসাথে কাজ করে আরও জটিল এবং প্রতিক্রিয়াশীল আচরণ তৈরি করে। এখানে বাস্তব-বিশ্বের মূল্য হল বিভিন্ন ধরণের ইনপুট কীভাবে একত্রিত করে সিদ্ধান্ত নেওয়া যায় তা বোঝা, যা রোবোটিক্স এবং অটোমেশনের একটি মৌলিক ধারণা।
এই লজিকের উপর ভিত্তি করে আপনি তৈরি করতে পারেন এমন কয়েকটি ব্যবহারিক ধারণা এখানে দেওয়া হলো:
- ইন্টারেক্টিভ প্রদর্শনী: একটি ছোট রোবোটিক ডিসপ্লে তৈরি করুন যা দর্শকদের মনোযোগ আকর্ষণের জন্য তাদের অনুসরণ করে।
- স্বায়ত্তশাসিত বাধা-এড়ানো প্ল্যাটফর্ম: কোডটি পরিবর্তন করুন যাতে গাড়িটি হাত অনুসরণ করার পরিবর্তে বাধা এড়িয়ে একটি ঘরে চলাচল করতে পারে।
- শিক্ষামূলক রোবোটিক্স কিট: শিক্ষার্থীদের সেন্সর ইন্টিগ্রেশন, লজিক এবং মোটর নিয়ন্ত্রণ শেখানোর জন্য এটি একটি ভিত্তিমূলক প্রকল্প হিসেবে ব্যবহার করুন।
- স্মার্ট ডেলিভারি ট্রলি: একটি নিয়ন্ত্রিত পরিবেশে, এই লজিকটি একটি ছোট ট্রলির জন্য অভিযোজিত হতে পারে যা গুদাম বা কারখানার সেটিংয়ে একজন ব্যক্তিকে অনুসরণ করে।
হার্ডওয়্যার ও উপাদানসমূহ
এই প্রকল্পটি SunFounder 3-ইন-1 Arduino কিটে অন্তর্ভুক্ত উপাদানগুলি ব্যবহার করে। আপনি যে মূল উপাদানগুলি ব্যবহার করবেন তা হলো:
- SunFounder স্মার্ট কার চ্যাসিস: চাকা এবং মোটর সহ ভৌত প্ল্যাটফর্ম।
- Arduino বোর্ড: গাড়ির "মস্তিষ্ক" যা কোড চালায়।
- আল্ট্রাসনিক সেন্সর (HC-SR04): গাড়ির সামনে একটি বস্তুর (আপনার হাত) দূরত্ব পরিমাপ করতে ব্যবহৃত হয়।
- দুটি IR (ইনফ্রারেড) বাধা এড়ানো সেন্সর: বাম এবং ডান পাশে মাউন্ট করা হয় যাতে সেই পাশে আপনার হাতের উপস্থিতি সনাক্ত করা যায়।
- মোটর ড্রাইভার: একটি মডিউল (প্রায়শই L298N বা অনুরূপ) যা Arduino থেকে সংকেতের ভিত্তিতে গাড়ির মোটরের গতি এবং দিক নিয়ন্ত্রণ করতে ব্যবহৃত হয়।
- পাওয়ার সোর্স: Arduino এবং মোটর চালানোর জন্য ব্যাটারি।
ওয়্যারিং গাইড
ভিডিওতে উল্লেখ করা হয়েছে, এই প্রকল্পের ওয়্যারিং পূর্ববর্তী পাঠে বাধা-এড়ানো গাড়ির জন্য ব্যাখ্যা করা ওয়্যারিংয়ের মতোই। সেন্সর এবং মোটর সবগুলোই Arduino-এর ডিজিটাল এবং অ্যানালগ পিনের সাথে সংযুক্ত। ভিজ্যুয়াল রেফারেন্সের জন্য, অনুগ্রহ করে SunFounder স্মার্ট কার-এর ওয়্যারিং ডায়াগ্রামটি দেখুন।
কোডটি প্রতিটি উপাদানের জন্য ব্যবহৃত নির্দিষ্ট পিনগুলি সংজ্ঞায়িত করে, যা পরবর্তী বিভাগে বিস্তারিতভাবে বর্ণনা করা হয়েছে।
কোড ব্যাখ্যা
এই বিভাগটি কোডের ব্যবহারকারী-কনফিগারযোগ্য অংশগুলিতে ফোকাস করে যা আপনি আপনার নিজের গাড়ির জন্য সামঞ্জস্য করতে চাইতে পারেন। সম্পূর্ণ প্রোগ্রামটি Robojax রিসোর্স পেজ থেকে ডাউনলোডের জন্য উপলব্ধ।
স্কেচের একদম শুরুতে, আপনি পিন সংজ্ঞাগুলি পাবেন। আপনি যদি আপনার গাড়িটি প্রশিক্ষকের চেয়ে ভিন্নভাবে ওয়্যার করে থাকেন তবে এগুলি বোঝার জন্য সবচেয়ে গুরুত্বপূর্ণ লাইন।
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR=7;
const int leftIR=8;
const int trigPin = 3;
const int echoPin = 4;
এখানে প্রতিটি পিন গ্রুপ কী করে তা বর্ণনা করা হলো:
- মোটর পিন (A_1A, A_1B, B_1A, B_1B): এগুলি মোটর ড্রাইভারের সাথে সংযুক্ত পিন যা দুটি মোটর নিয়ন্ত্রণ করে। "A" এবং "B" লেবেল সাধারণত যথাক্রমে বাম এবং ডান মোটরকে নির্দেশ করে। আপনার মোটর ড্রাইভার যদি ভিন্ন Arduino পিনের সাথে সংযুক্ত থাকে তবে আপনাকে এগুলি পরিবর্তন করতে হবে।
- IR সেন্সর পিন (rightIR, leftIR): এই ডিজিটাল ইনপুট পিনগুলি বাম এবং ডান ইনফ্রারেড বাধা সেন্সর থেকে সংকেত পড়ে।
0মানে একটি বাধা (আপনার হাত) সনাক্ত করা হয়েছে, যখন1মানে পথ পরিষ্কার। - আল্ট্রাসনিক সেন্সর পিন (trigPin, echoPin):
trigPinএকটি আউটপুট যা একটি সংক্ষিপ্ত আল্ট্রাসনিক পালস পাঠায়, এবংechoPinএকটি ইনপুট যা দূরত্ব গণনা করার জন্য প্রতিফলিত পালসের সময়কাল পড়ে।
loop() ফাংশনের ভিতরে, আপনি মূল আচরণের লজিক পাবেন। একটি একক ভেরিয়েবল রয়েছে যা আপনি সামঞ্জস্য করতে চাইতে পারেন:
int speed = 150;
এই speed ভেরিয়েবলটি চলাচলের সময় মোটরগুলিতে পাঠানো শক্তি নিয়ন্ত্রণ করে। এটি 0 (বন্ধ) থেকে 255 (সর্বোচ্চ গতি) পর্যন্ত হতে পারে। দ্রুত গাড়ির জন্য আপনি এই মান বাড়াতে পারেন (যেমন, 200) অথবা আরও নিয়ন্ত্রিত, ধীর গতির জন্য কমাতে পারেন (যেমন, 100)।
কোডটিতে moveForward(), turnLeft(), এবং turnRight() এর মতো ফাংশনও রয়েছে। এই ফাংশনগুলি গাড়ির চলাচল নিয়ন্ত্রণ করতে ব্যবহৃত হয় এবং সেন্সর রিডিংয়ের ভিত্তিতে কল করা হয়। আপনাকে এগুলি পরিবর্তন করতে হবে না, তবে আপনি নিজের কাস্টম আচরণ তৈরি করতে এগুলিকে বিল্ডিং ব্লক হিসাবে ব্যবহার করতে পারেন।
কীভাবে "আপনার হাত অনুসরণ করুন" লজিক কাজ করে
এই প্রকল্পের জাদুটি নিহিত রয়েছে কীভাবে Arduino তিনটি সেন্সর থেকে আসা ডেটা ব্যাখ্যা করে। যুক্তিটি সহজ এবং loop() ফাংশনে ক্রমাগতভাবে কার্যকর করা হয়।
প্রথমে, গাড়িটি আল্ট্রাসোনিক সেন্সর ব্যবহার করে সরাসরি সামনের কোনো বস্তুর দূরত্ব পরিমাপ করে। তারপর, এটি দুটি ইনফ্রারেড সেন্সর পরীক্ষা করে দেখে যে এর বাম বা ডান পাশে কোনো বস্তু আছে কিনা। সিদ্ধান্ত গ্রহণের প্রক্রিয়াটি নিম্নরূপ:
- সামনে এগোনো: যদি আল্ট্রাসোনিক সেন্সর দ্বারা পরিমাপ করা দূরত্ব 5 সেমির বেশি কিন্তু 10 সেমির কম হয়, তাহলে গাড়িটি সামনে এগিয়ে যায়। এটি একটি "সুইট স্পট" জোন তৈরি করে যেখানে গাড়িটি আপনার হাত অনুসরণ করবে।
- বামে মোড় নেওয়া: যদি দূরত্ব সেই জোনে না থাকে, তাহলে গাড়িটি IR সেন্সর পরীক্ষা করে। যদি বাম সেন্সরটি বন্ধ থাকে (আপনার হাত বাম পাশে) এবং ডান সেন্সরটি খোলা থাকে, তাহলে গাড়িটি বামে মোড় নেয়।
- ডানে মোড় নেওয়া: বিপরীতভাবে, যদি ডান সেন্সরটি বন্ধ থাকে এবং বামটি খোলা থাকে, তাহলে গাড়িটি ডানে মোড় নেয়।
- থামা: যদি এই শর্তগুলোর কোনোটি পূরণ না হয়—উদাহরণস্বরূপ, আপনার হাত খুব দূরে বা খুব কাছাকাছি থাকে—তাহলে গাড়িটি থেমে যায়।
এই সহজ নিয়মগুলির সেটটি গাড়িটিকে আপনার হাতের অবস্থানের প্রতি গতিশীলভাবে প্রতিক্রিয়া জানাতে দেয়, যা একটি মসৃণ এবং স্বজ্ঞাত অনুসরণ আচরণ তৈরি করে।
লাইভ প্রকল্প প্রদর্শন
ভিডিও প্রদর্শনে, প্রশিক্ষক রিয়েল-টাইমে গাড়ির আচরণ দেখান। সিরিয়াল মনিটরটি আল্ট্রাসোনিক সেন্সর দ্বারা পড়া দূরত্ব প্রদর্শনের জন্য ব্যবহৃত হয়। যখন গাড়িটি নিষ্ক্রিয় থাকে এবং আপনার হাত দূরে থাকে (যেমন, 36 সেমি), এটি থেমে থাকে। যত তাড়াতাড়ি আপনি আপনার হাতটি গাড়ির সামনে 5-10 সেমি জোনের মধ্যে রাখেন, এটি সামনে এগোতে শুরু করে।
প্রদর্শনটি মোড় নেওয়ার যুক্তিও তুলে ধরে। যখন আপনার হাতটি গাড়ির বাম পাশে রাখা হয়, বাম IR সেন্সরটি সক্রিয় হয় এবং গাড়িটি বামে মোড় নেয়। একইভাবে, ডান পাশে হাত রাখলে গাড়িটি ডানে মোড় নেয়। আপনি যখন আপনার হাতটি ঘোরান, গাড়িটি আপনার হাত অনুসরণ করতে থাকবে এবং কেবল তখনই থামবে যখন আপনার হাতটি এর সেন্সর পরিসীমা থেকে সরানো হবে বা খুব কাছাকাছি হবে। এটি নিশ্চিত করে যে সেন্সর ফিউশন এবং যুক্তি উদ্দেশ্য অনুযায়ী কাজ করছে, যা একটি প্রতিক্রিয়াশীল এবং মজাদার প্রকল্প তৈরি করে।
অধ্যায়সমূহ
- [00:00] হ্যান্ড-ফলোয়িং স্মার্ট কার-এর ভূমিকা
- [00:35] Robojax Arduino কোর্স এবং কিট সম্পর্কে
- [01:41] প্রকল্পের ওভারভিউ এবং কোড সেটআপ
- [02:19] পিন সংজ্ঞা এবং সেটআপের ব্যাখ্যা
- [03:19] আপনার হাত অনুসরণের জন্য কোড লজিক
- [05:48] গাড়ির কার্যকলাপের লাইভ প্রদর্শন
- [07:28] চূড়ান্ত প্রদর্শন এবং কর্মক্ষমতা পর্যালোচনা
/*
Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Get this code and watch video Download and resource page https://robojax.com/RJT610
YouTube video https://www.youtube.com/watch?v=mcbJlE7-8ro
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR=7;
const int leftIR=8;
const int trigPin = 3;
const int echoPin = 4;
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//IR obstacle
pinMode(leftIR,INPUT);
pinMode(rightIR,INPUT);
//ultrasonic
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
float distance = readSensorData();
int left = digitalRead(leftIR); // 0: Obstructed 1: Empty
int right = digitalRead(rightIR);
int speed = 150;
if (distance>5 && distance<10){
moveForward(speed);
}else if(!left&&right){
turnLeft(speed);
}else if(left&&!right){
turnRight(speed);
}else{
stopMove();
}
}
float readSensorData() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
return distance;
}
void moveForward(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void moveBackward(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void turnRight(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void turnLeft(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void stopMove() {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
Common Course Links
Common Course Files
আপনাকে যা প্রয়োজন হতে পারে
-
অ্যামাজনSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
অ্যামাজন
-
অ্যামাজন
-
অ্যামাজন
-
অ্যামাজন
সম্পদ ও রেফারেন্সসমূহ
-
ডকুমেন্টেশনDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
বাহ্যিকPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
ফাইলসমূহ📁
আর্ডুইনো লাইব্রেরি (জিপ)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB