سبق 26/31: سمارٹ کار حصہ 4: الٹراسونک سینسر کا استعمال کرتے ہوئے رکاوٹ سے بچنا | سن فاؤنڈر روبو جیکس
اس سبق میں، ہم آپ کی سمارٹ کار کو الٹراسونک سینسر کے ذریعے اپنے ماحول کو دیکھنے اور اس پر ردعمل دینے کی صلاحیت سے اپ گریڈ کرتے ہیں۔ اس کے سامنے موجود اشیاء تک فاصلہ ناپ کر، کار ذہین فیصلے کر سکتی ہے: جب راستہ صاف ہو تو آگے بڑھے گی، جب کوئی چیز احتیاطی زون میں ہو تو رک جائے گی، اور جب رکاوٹ بہت قریب آ جائے تو پیچھے ہٹ جائے گی۔ یہ پروجیکٹ ان بنیادی موٹر کنٹرول اور سینسر اصولوں پر استوار ہے جو آپ پہلے سیکھ چکے ہیں، جس کے نتیجے میں ایک حقیقی خود مختار گاڑی بنتی ہے۔
یہ صرف ایک کھلونا نہیں ہے؛ یہ زیادہ پیچیدہ روبوٹکس پروجیکٹس بنانے کی طرف ایک بنیادی قدم ہے۔ جو منطق آپ یہاں نافذ کریں گے—محسوس کریں، سوچیں، عمل کریں—وہی ہے جو روبوٹک ویکیوم کلینر سے لے کر صنعتی آٹومیشن تک ہر چیز میں استعمال ہوتی ہے۔ یہاں کچھ آئیڈیاز ہیں جو آپ کے اپنے پروجیکٹس کو متاثر کر سکتے ہیں:
- خود مختار روور: ایک روبوٹ بنائیں جو دیواروں یا فرنیچر سے ٹکرائے بغیر کمرے یا راہداری کو تلاش کر سکے۔
- قربت کا الارم سسٹم: الٹراسونک سینسر کو سروو پر نصب کریں تاکہ کسی علاقے کو اسکین کیا جا سکے اور جب کوئی گھسنے والا مخصوص زون میں داخل ہو تو الارم یا روشنی چالو ہو۔
- سمارٹ پارکنگ اسسٹنٹ: ایک ایسا سسٹم بنائیں جو فاصلے کی ریڈنگز استعمال کرکے گاڑی کو تنگ جگہ میں لے جائے، بصری یا قابل سماعت فیڈ بیک فراہم کرے۔
یہ گائیڈ SunFounder 3-in-1 Arduino کٹ اور اس کے "Play with Ultrasonic Module" پروجیکٹ پر مبنی ہے۔ ہم وائرنگ کے ذریعے آگے بڑھیں گے، فیصلہ سازی کے کوڈ کی وضاحت کریں گے، اور کار کو عمل میں دکھائیں گے۔
رکاوٹ سے بچنے کی منطق کیسے کام کرتی ہے
اس پروجیکٹ کا مرکز ایک سادہ، پھر بھی طاقتور، فیصلہ درخت ہے۔ الٹراسونک سینسر مسلسل اپنے سامنے موجود چیز تک فاصلہ ناپتا ہے۔ یہ فاصلہ پھر کار کے موٹرز کو کنٹرول کرنے کے لیے استعمال ہوتا ہے، جیسا کہ نیچے دیے گئے خاکے میں دکھایا گیا ہے۔
- اگر فاصلہ > 25 سینٹی میٹر: راستہ صاف ہے، اس لیے کار آگے بڑھتی ہے۔
- اگر 10 سینٹی میٹر < فاصلہ <= 25 سینٹی میٹر: "احتیاطی زون" میں کوئی چیز پائی گئی ہے، اس لیے کار تصادم سے بچنے کے لیے رک جاتی ہے۔
- اگر 2 سینٹی میٹر < فاصلہ <= 10 سینٹی میٹر: کوئی چیز خطرناک حد تک قریب ہے۔ کار زیادہ جگہ بنانے کے لیے پیچھے ہٹتی ہے۔
- اگر فاصلہ <= 2 سینٹی میٹر: ریڈنگ ممکنہ طور پر غلط ہے (درست ناپنے کے لیے بہت قریب)، اس لیے کار حفاظتی اقدام کے طور پر رک جاتی ہے۔
ہارڈویئر اجزاء
اس پروجیکٹ کو بنانے کے لیے، آپ کو درج ذیل اجزاء کی ضرورت ہوگی، جو سب SunFounder 3-in-1 کٹ میں شامل ہیں۔
- 1x Arduino Uno (یا مطابقت رکھنے والا بورڈ)
- 1x سمارٹ کار چیسس دو گیئرڈ موٹرز کے ساتھ
- 1x L298N موٹر ڈرائیور ماجیول
- 1x HC-SR04 الٹراسونک فاصلہ سینسر
- 1x بریڈ بورڈ
- جمپر تار
- کار کے لیے بجلی کی فراہمی (مثلاً بیٹری پیک)
وائرنگ گائیڈ
وائرنگ موٹر ڈرائیور، الٹراسونک سینسر، اور Arduino کو جوڑتی ہے۔ موٹر ڈرائیور کار کے پہیوں کو کنٹرول کرتا ہے، جبکہ الٹراسونک سینسر اس کی "آنکھوں" کا کام کرتا ہے۔
یہاں SunFounder دستاویزات سے کنکشن خاکہ ہے:
آئیے کنکشنز کو تفصیل سے دیکھتے ہیں۔ پہلے، بریڈ بورڈ کے مثبت اور منفی ریلز کو Arduino کے 5V اور GND پنوں سے پاور کریں۔ الٹراسونک سینسر پھر درج ذیل طریقے سے جڑا ہوا ہے:
- VCC (پاور): بریڈ بورڈ پر مثبت ریل سے جڑا ہوا۔
- GND (گراؤنڈ): بریڈ بورڈ پر منفی ریل سے جڑا ہوا۔
- Trig (ٹرگر): Arduino پر ڈیجیٹل پن 3 سے جڑا ہوا۔ یہ پن الٹراسونک پلس بھیجتا ہے۔
- Echo (وصول): Arduino پر ڈیجیٹل پن 4 سے جڑا ہوا۔ یہ پن منعکس پلس وصول کرتا ہے۔
موٹر ڈرائیور کے کنکشن پچھلے اسباق کی طرح ہیں۔ چار کنٹرول پن (IN1, IN2, IN3, IN4) Arduino کے ڈیجیٹل پن 5، 6، 9، اور 10 سے جڑے ہوئے ہیں۔ یہ پن دو موٹرز کی رفتار اور سمت کو کنٹرول کرتے ہیں۔ یقینی بنائیں کہ موٹر ڈرائیور کی پاور اور گراؤنڈ بیٹری پیک اور Arduino کے گراؤنڈ سے صحیح طریقے سے جڑے ہوئے ہیں۔ (ویڈیو میں 02:24 پر)
کوڈ کی وضاحت
اس پروجیکٹ کا کوڈ الٹراسونک سینسر سے فاصلے کی ریڈنگ کی بنیاد پر کار کے رویے کو کنٹرول کرتا ہے۔ منطق سیدھی اور حسب ضرورت آسان ہے۔ آئیے اہم، صارف کے قابل ترتیب حصوں کو دیکھتے ہیں۔
1. پن تعریفیں
اسکیچ کے اوپری حصے میں، موٹرز اور الٹراسونک سینسر کے پنوں کی تعریف کی گئی ہے۔ اگر آپ نے اپنے اجزاء کو مختلف Arduino پنوں سے جوڑا ہے تو آپ انہیں تبدیل کر سکتے ہیں۔
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int trigPin = 3;
const int echoPin = 4;
یہاں، A_1A، A_1B، B_1A، اور B_1B L298N ڈرائیور کے ذریعے بائیں اور دائیں موٹرز کو کنٹرول کرتے ہیں۔ trigPin اور echoPin الٹراسونک سینسر کے لیے ہیں۔
2. رویے کے متغیرات اور منطق
مرکزی رویہ loop() فنکشن کے اندر کنٹرول کیا جاتا ہے۔ یہ وہ جگہ ہے جہاں آپ کار کی "شخصیت" کو ایڈجسٹ کر سکتے ہیں۔
یہاں اسے حسب ضرورت بنانے کا طریقہ ہے:
- فاصلے کی حدیں: نمبر
25اور10سینٹی میٹر میں "محفوظ" اور "خطرناک" زونز کی وضاحت کرتے ہیں۔25بڑھائیں تاکہ کار پہلے رک جائے، یا اسے کم کریں تاکہ یہ رکاوٹوں کے قریب جا سکے۔2ایک حفاظتی مارجن ہے تاکہ بہت قریب موجود اشیاء سے غلط ریڈنگز کو نظر انداز کیا جا سکے۔ - موٹر کی رفتار:
200جوmoveForward()اورmoveBackward()کو دیا گیا ہے، کار کی رفتار مقرر کرتا ہے۔ یہ قدر 0 سے 255 تک ہو سکتی ہے۔ کم قدر، جیسے 150، کار کو آہستہ اور زیادہ احتیاط سے چلائے گی۔
باقی کوڈ readSensorData() فنکشن پر مشتمل ہے، جو الٹراسونک سینسر کے ٹائمنگ کو سنبھال کر فاصلہ حساب کرتا ہے، اور moveForward()، moveBackward()، اور stopMove() فنکشنز، جو موٹر ڈرائیور کو کنٹرول کرتے ہیں تاکہ مطلوبہ عمل انجام دیا جا سکے۔
ایک عام غلطی کا حل
آپ کو ایسی غلطی مل سکتی ہے جیسے 'moveForward' was not declared in this scope۔ یہ اس لیے ہوتا ہے کیونکہ Arduino IDE کوڈ کو اوپر سے نیچے پڑھتا ہے۔ جب یہ loop() فنکشن تک پہنچتا ہے، تو اسے نیچے بیان کردہ فنکشنز کے بارے میں معلوم نہیں ہوتا۔ اسے ٹھیک کرنے کے لیے، آپ کو setup() فنکشن سے پہلے "فنکشن پروٹوٹائپس" شامل کرنی ہوں گی۔ یہ صرف فنکشن کے نام اور ریٹرن ٹائپ کے اعلانات ہیں، جو سیمی کولن پر ختم ہوتے ہیں۔
void moveForward(int speed);
void moveBackward(int speed);
void stopMove();
float readSensorData();
یہ لائنیں شامل کرنے سے کمپائلر کو بتایا جاتا ہے، "یہ فنکشنز موجود ہیں اور بعد میں بیان کیے جائیں گے،" جس سے غلطی حل ہو جاتی ہے۔ (ویڈیو میں 09:21 پر)
سینسر کی استحکام میں بہتری
ٹیسٹنگ کے دوران، آپ دیکھ سکتے ہیں کہ کار رک جاتی ہے یا رک رک کر چلتی ہے چاہے راستہ صاف ہو۔ یہ اکثر اس لیے ہوتا ہے کہ لوپ بہت تیز چلتا ہے، اور الٹراسونک سینسر کو ایکو سگنل حاصل کرنے کے لیے کافی وقت نہیں ملتا، جس کے نتیجے میں 0 سینٹی میٹر کی ریڈنگ آتی ہے۔ اسے ٹھیک کرنے کے لیے، loop() فنکشن کے آخر میں ایک چھوٹی تاخیر شامل کریں تاکہ سینسر کو کام کرنے کا وقت ملے۔
void loop() {
float distance = readSensorData();
if (distance > 25) {
moveForward(200);
}
else if (distance < 10 && distance > 2) {
moveBackward(200);
} else {
stopMove();
}
delay(100); // مستحکم ریڈنگز کے لیے 100ms کی تاخیر شامل کریں
}
100 ملی سیکنڈ کی تاخیر عام طور پر مستحکم اور یکساں فاصلے کی ریڈنگز حاصل کرنے کے لیے کافی ہوتی ہے۔ (ویڈیو میں 10:56 پر)
لائیو پروجیکٹ کا مظاہرہ
کوڈ اپ لوڈ ہونے کے بعد، سیریل مانیٹر کھولیں۔ آپ کو کار کی حالت ظاہر کرنے والا متن نظر آئے گا، جیسے "Forward"، "Reverse"، یا "Stop"۔
مظاہرے میں، کار کو ایک رکاوٹ کے سامنے رکھا گیا ہے۔ جب رکاوٹ 25 سینٹی میٹر سے زیادہ دور ہوتی ہے، کار آگے بڑھتی ہے۔ جیسے ہی آپ اپنا ہاتھ قریب لاتے ہیں، کار رک جاتی ہے جب فاصلہ 25 سینٹی میٹر سے کم ہو جاتا ہے۔ اگر آپ ہاتھ بہت قریب لاتے ہیں، 10 سینٹی میٹر کے اندر، کار پیچھے ہٹ جائے گی۔ یہ رویہ ویڈیو میں واضح طور پر نظر آتا ہے اور تصدیق کرتا ہے کہ رکاوٹ سے بچنے کی منطق درست طریقے سے کام کر رہی ہے۔ (ویڈیو میں 11:53 پر)
نتیجہ
مبارک ہو! آپ نے کامیابی سے ایک سمارٹ کار بنائی ہے جو اپنے ماحول میں حرکت کر سکتی ہے اور رکاوٹوں سے بچ سکتی ہے۔ یہ پروجیکٹ سینسر ان پٹ، فیصلہ سازی کی منطق، اور موٹر کنٹرول کو ایک واحد، فعال نظام میں یکجا کرتا ہے۔ آپ نے نہ صرف الٹراسونک سینسر استعمال کرنا سیکھا ہے بلکہ ایک سادہ کنٹرول الگورتھم بھی نافذ کیا ہے جو کہ زیادہ پیچیدہ خود مختار روبوٹس کی بنیاد ہے۔
ابواب
- [00:00] رکاوٹ سے بچنے کا تعارف
- [01:16] پروجیکٹ کا جائزہ اور ضروری شرائط
- [02:24] الٹراسونک سینسر اور موٹر ڈرائیور کی وائرنگ
- [04:56] پروجیکٹ کوڈ کھولنا
- [05:12] کوڈ کی وضاحت: منطق اور فنکشنز
- [08:34] کوڈ اپ لوڈ کرنا اور ابتدائی ٹیسٹ
- [09:21] خرابی کا حل: فنکشن پروٹوٹائپس
- [10:56] خرابی کا حل: استحکام کے لیے تاخیر شامل کرنا
- [11:53] رکاوٹ سے بچنے کا لائیو مظاہرہ
/*
Lesson 26/31: Avoiding Obstacle Using Ultrasonic Sensor
Get this code and watch video Download and resource page https://robojax.com/RJT609
YouTube video https://www.youtube.com/watch?v=uLBmRvaemxA
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
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);
//ultrasonic
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
float distance = readSensorData();
if (distance > 25) {
moveForward(200);
}
else if (distance < 10 && distance > 2) {
moveBackward(200);
} 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 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