سبق 29/31: کار-7 سنفاؤنڈر سمارٹ کار کو ریموٹ کنٹرولر کے ذریعے کنٹرول کرنا | روبوجیکس
اس سبق میں، ہم آپ کی SunFounder سمارٹ کار کو ایک انفراریڈ (IR) ریموٹ کا استعمال کرتے ہوئے ریموٹ کنٹرول والی گاڑی میں تبدیل کریں گے۔ وائرڈ کنکشن یا اسمارٹ فون ایپ پر انحصار کرنے کے بجائے، آپ سیکھیں گے کہ معیاری IR ریموٹ کے بٹنوں کو کار کی حرکت—آگے، پیچھے، موڑنے، اور حتیٰ کہ ترچھی چالوں—کے ساتھ ساتھ چلتے پھرتے اس کی رفتار کو ایڈجسٹ کرنے کے لیے کیسے نقشہ بنایا جائے۔ یہ پروجیکٹ موٹر کنٹرول اور IR کمیونیکیشن کی بنیادی باتیں سیکھنے کے بعد ایک بہترین اگلا قدم ہے، کیونکہ یہ دونوں کو ایک ہی انٹرایکٹو سسٹم میں یکجا کرتا ہے۔
یہاں حقیقی دنیا کی قدر روبوٹکس پلیٹ فارم کے لیے ایک مضبوط، صارف دوست کنٹرول انٹرفیس بنانے کے طریقے کو سمجھنے میں ہے۔ آپ جو اصول سیکھیں گے وہ براہ راست پروجیکٹس کی ایک وسیع رینج پر لاگو ہوتے ہیں، جیسے:
- گھریلو آٹومیشن کے کاموں کے لیے ریموٹ کنٹرول روبوٹ بنانا، جیسے چھوٹا ڈیلیوری بوٹ۔
- تعلیمی روبوٹکس مقابلوں کے لیے پروگرام قابل گاڑی بنانا۔
- کیمرہ سلائیڈر یا پین-ٹیلٹ میکانزم کے لیے کسٹم ریموٹ کنٹرول تیار کرنا۔
- بڑے، زیادہ پیچیدہ خودکار نظام کے لیے صارف انٹرفیس کا پروٹوٹائپ بنانا۔
ہارڈویئر اور اجزاء
یہ پروجیکٹ SunFounder 3-in-1 Arduino کٹ پر مبنی ہے۔ اس پر عمل کرنے کے لیے، آپ کو نیچے درج اجزاء کی ضرورت ہوگی۔ وائرنگ سیدھی ہے، جو کورس کے پچھلے اسباق سے آگے بڑھتی ہے۔
- SunFounder 3-in-1 Arduino کٹ: اس میں سمارٹ کار چیسس، موٹر ڈرائیور بورڈ، اور Arduino بورڈ شامل ہے۔
- انفراریڈ ریموٹ کنٹرول: معیاری ریموٹ جو کٹ کے ساتھ آتا ہے۔
- IR ریسیور ماجیول: وہ سینسر جو ریموٹ سے سگنلز کو ڈی کوڈ کرے گا۔
- LED اور 330-ohm ریزسٹر: بصری اشارے کے طور پر استعمال ہوتا ہے تاکہ تصدیق ہو سکے کہ کوئی کلید دبائی گئی ہے۔ (ویڈیو میں 04:08 پر)
- جمپر تار: بریڈ بورڈ پر ضروری کنکشن بنانے کے لیے۔
وائرنگ گائیڈ
کوڈ میں جانے سے پہلے، آئیے یقینی بنائیں کہ ہارڈویئر درست طریقے سے جڑا ہوا ہے۔ IR ریسیور اور موٹر ڈرائیور کی وائرنگ اس سیریز کے پچھلے اسباق کے مطابق ہے۔ پروجیکٹ کو زیادہ انٹرایکٹو بنانے کے لیے، ہم پن 13 پر ایک بیرونی LED کو بصری فیڈ بیک اشارے کے طور پر بھی جوڑیں گے۔
کنکشنز کے لیے مرحلہ وار گائیڈ یہ ہے:
- IR ریسیور: IR ریسیور کے تین پن ہوتے ہیں۔ مثبت پن بریڈ بورڈ پر 5V ریل سے جڑتا ہے۔ گراؤنڈ پن GND ریل سے جڑتا ہے۔ سگنل پن، جو آخری پن ہے، آپ کے Arduino بورڈ پر ڈیجیٹل پن 11 سے جڑتا ہے۔ (ویڈیو میں 05:29 پر)
- بیرونی LED: 330-ohm ریزسٹر کی ایک ٹانگ Arduino پر ڈیجیٹل پن 13 سے جوڑیں۔ ریزسٹر کی دوسری ٹانگ LED کی لمبی (انوڈ) ٹانگ سے جوڑیں۔ LED کی چھوٹی (کیتھوڈ) ٹانگ بریڈ بورڈ پر GND ریل سے منسلک ہونی چاہیے۔ (ویڈیو میں 04:08 پر)
- موٹر ڈرائیور: موٹر ڈرائیور کے چار پن (A_1B، A_1A، B_1B، B_1A) بالترتیب Arduino پر پن 5، 6، 9، اور 10 سے جڑے ہوئے ہیں۔ یہ سیٹ اپ پچھلے اسباق میں شامل کیا گیا ہے۔ (ویڈیو میں 06:44 پر)
ان کنکشنز کے بصری حوالے کے لیے، براہ کرم نیچے دیے گئے وائرنگ ڈایاگرام کا حوالہ دیں۔
کوڈ کی وضاحت
اس پروجیکٹ کا کوڈ بدیہی ہونے کے لیے ڈیزائن کیا گیا ہے۔ یہ IR سگنلز کو ڈی کوڈ کرنے کے پیچیدہ کام کو سنبھالنے کے لیے IRremote لائبریری کا استعمال کرتا ہے۔ آئیے صارف کے قابل ترتیب حصوں کو توڑتے ہیں جنہیں آپ اپنے پروجیکٹس کے لیے ایڈجسٹ کرنا چاہیں گے۔
اسکیچ کے اوپری حصے میں، آپ کو پن کی تعریفیں ملیں گی۔ اگر آپ نے اپنے اجزاء کو اس مثال میں استعمال ہونے والے پنوں سے مختلف پنوں سے جوڑا ہے تو یہ پہلی چیزیں ہیں جنہیں آپ کو چیک کرنا چاہیے۔
const int IR_RECEIVE_PIN = 12; // IR سینسر کے لیے پن نمبر کی وضاحت کریں
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
IR_RECEIVE_PIN: یہ مستقل آپ کے IR ریسیور کے سگنل پن سے منسلک ڈیجیٹل پن کی وضاحت کرتا ہے۔ اگر آپ نے اسے مختلف پن سے جوڑا ہے، تو آپ یہاں نمبر تبدیل کریں گے۔A_1B،A_1A،B_1B،B_1A: یہ مستقل آپ کے موٹر ڈرائیور کے چار کنٹرول پنوں سے مطابقت رکھتے ہیں۔ وہ بائیں اور دائیں موٹرز کی رفتار اور سمت کو کنٹرول کرتے ہیں۔
اگلا، آپ کو ایک اہم متغیر ملے گا جو کار کے رویے کو کنٹرول کرتا ہے۔
int speed = 150;
speed: یہ متغیر کار کی ابتدائی رفتار متعین کرتا ہے۔ قدر 0 سے 255 تک ہو سکتی ہے۔ اس پروجیکٹ میں، آپ اسے ریموٹ پر "+" اور "-" کلیدوں کا استعمال کرکے تبدیل کر سکتے ہیں۔ کوڈ میں رفتار کو 255 سے تجاوز کرنے یا 0 سے نیچے گرنے سے روکنے کے لیے منطق بھی شامل ہے۔ (ویڈیو میں 09:22 پر)
ریموٹ کنٹرول کی بنیادی منطق loop() فنکشن میں سنبھالی جاتی ہے۔ جب کوئی کلید دبائی جاتی ہے، تو decodeKeyValue() فنکشن خام IR کوڈ کو ایک سادہ سٹرنگ میں ترجمہ کرتا ہے جیسے آگے کے لیے "2" یا رفتار بڑھانے کے لیے "+"۔ یہ اس کے بعد آنے والے if بیانات کو پڑھنے اور تبدیل کرنے میں بہت آسان بناتا ہے۔ (ویڈیو میں 07:58 پر)
turnRight()، اور moveLeft() وہ جگہ ہیں جہاں موٹر کنٹرول ہوتا ہے۔ ہر فنکشن موجودہ speed کو بطور آرگیومینٹ لیتا ہے۔ مثال کے طور پر، moveForward(speed) دونوں موٹروں کو مخصوص رفتار سے آگے چلائے گا۔ "turn" اور "move" کے درمیان کلیدی فرق یہ ہے کہ turn دونوں پہیوں کو مخالف سمتوں میں گھماتا ہے، جس سے کار اپنی جگہ گھومتی ہے، جبکہ move صرف ایک پہیہ گھماتا ہے، جس سے کار ساکن پہیے کے گرد محراب بناتی ہے۔ (ویڈیو میں 10:14 پر)
لائیو پروجیکٹ ڈیمونسٹریشن
کوڈ اپ لوڈ ہونے اور کار آن ہونے کے بعد، ریموٹ کنٹرول آپ کا بنیادی انٹرفیس بن جاتا ہے۔ ویڈیو میں ڈیمونسٹریشن کچھ اہم رویوں کو نمایاں کرتی ہے:
- اسپیڈ کنٹرول: "+" کلید دبانے سے رفتار 50 بڑھ جاتی ہے، جبکہ "-" کلید اسے کم کرتی ہے۔ رفتار 255 پر محدود اور 0 پر کم سے کم ہوتی ہے تاکہ موٹروں کی حفاظت ہو۔ (ویڈیو میں 11:56 پر)
- مختصر حرکت: جب آپ دشاتمک کلید جیسے "2" (آگے) یا "8" (پیچھے) دباتے ہیں، کار ایک سیکنڈ کے لیے حرکت کرتی ہے اور پھر خود بخود رک جاتی ہے۔ یہ کوڈ میں شامل حفاظتی خصوصیت ہے۔ (ویڈیو میں 13:09 پر)
- موڑنا اور چال چلنا: ریموٹ پر کراس پیٹرن میں ترتیب دی گئی کلیدیں جوائس اسٹک کی طرح کام کرتی ہیں۔ "4" یا "6" دبانے سے کار اپنی جگہ بائیں یا دائیں مڑتی ہے۔ اخترن کلیدیں، جیسے "1" یا "3" دبانے سے "move left" یا "move right" ہوتا ہے، جو ایک تیز موڑ ہے جہاں ایک پہیہ ساکن رہتا ہے۔ (ویڈیو میں 16:42 پر)
ایک چیز جو آپ دیکھ سکتے ہیں وہ یہ ہے کہ کار ہمیشہ بالکل سیدھی لائن میں نہیں چلتی۔ یہ اکثر موٹروں میں معمولی فرق یا کار کی اسمبلی کی تناؤ کی وجہ سے ہوتا ہے، جو ان کٹس کی ایک عام اور معمول کی خصوصیت ہے۔ (ویڈیو میں 15:14 پر)
ابواب
- [00:00] اسمارٹ کار کے لیے IR ریموٹ کنٹرول کا تعارف
- [01:15] شرائط اور مطلوبہ پچھلے اسباق
- [01:56] پروجیکٹ دستاویزات کا جائزہ
- [02:29] ریموٹ کنٹرول کلیدی افعال کو سمجھنا
- [03:29] IR ریسیور اور LED کے لیے مرحلہ وار وائرنگ گائیڈ
- [05:51] پروجیکٹ کوڈ کھولنا اور لوڈ کرنا
- [07:41] کوڈ کی وضاحت: لوپ، کلید ڈی کوڈنگ، اور اعمال
- [09:22] کوڈ میں رفتار محدود کرنا اور حفاظتی خصوصیات
- [10:08] موٹر موومنٹ فنکشنز کی وضاحت
- [11:49] لائیو ڈیمونسٹریشن: اسپیڈ کنٹرول اور LED بلنک کی جانچ
- [13:27] لائیو ڈیمونسٹریشن: آگے، پیچھے، اور موڑنا
- [14:31] پاور اور حرکت کے ساتھ مکمل کار ڈیمونسٹریشن
/*
Lesson 29/31: Car-7 Controlling SunFounder Smart Car using Remote Controller
Get this code and watch video Download and resource page https://robojax.com/RJT612
*/
#include <IRremote.h>
const int IR_RECEIVE_PIN = 12; // Define the pin number for the IR Sensor
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
int speed = 150;
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//IR remote
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the IR receiver // Start the receiver
Serial.println("REMOTE CONTROL START");
}
void loop() {
if (IrReceiver.decode()) {
// Serial.println(results.value,HEX);
String key = decodeKeyValue(IrReceiver.decodedIRData.command);
if (key != "ERROR") {
Serial.println(key);
if (key == "+") {
speed += 50;
} else if (key == "-") {
speed -= 50;
} else if (key == "2") {
moveForward(speed);
delay(1000);
} else if (key == "1") {
moveLeft(speed);
} else if (key == "3") {
moveRight(speed);
} else if (key == "4") {
turnLeft(speed);
} else if (key == "6") {
turnRight(speed);
} else if (key == "7") {
backLeft(speed);
} else if (key == "9") {
backRight(speed);
} else if (key == "8") {
moveBackward(speed);
delay(1000);
}
if (speed >= 255) {
speed = 255;
}
if (speed <= 0) {
speed = 0;
}
delay(500);
stopMove();
}
IrReceiver.resume(); // Enable receiving of the next value
}
}
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 moveLeft(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
void moveRight(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void backLeft(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
void backRight(int speed) {
analogWrite(A_1B, 0);
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);
}
String decodeKeyValue(long result)
{
switch(result){
case 0x16:
return "0";
case 0xC:
return "1";
case 0x18:
return "2";
case 0x5E:
return "3";
case 0x8:
return "4";
case 0x1C:
return "5";
case 0x5A:
return "6";
case 0x42:
return "7";
case 0x52:
return "8";
case 0x4A:
return "9";
case 0x9:
return "+";
case 0x15:
return "-";
case 0x7:
return "EQ";
case 0xD:
return "U/SD";
case 0x19:
return "CYCLE";
case 0x44:
return "PLAY/PAUSE";
case 0x43:
return "FORWARD";
case 0x40:
return "BACKWARD";
case 0x45:
return "POWER";
case 0x47:
return "MUTE";
case 0x46:
return "MODE";
case 0x0:
return "ERROR";
default :
return "ERROR";
}
}
Common Course Links
Common Course Files
آپ کو جن چیزوں کی ضرورت ہو سکتی ہے
-
ایمیزونSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.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