لومړی ۲۹/۳۱: موټر-۷ د سن فاونډر سمارټ موټر کنټرول د ریموټ کنټرولر په واسطه | روبوجاکس
په دې درس کې به موږ ستاسو د SunFounder سمارټ موټر په یوه له لرې کنټرول شوي موټر بدل کړو چې د انفراریډ (IR) ریموټ په کارولو سره. پرځای د تار لرونکې اړیکې یا د سمارټ فون اپلیکیشن باندې تکیه کولو، تاسو به زده کړئ چې څنګه د یو معیاري IR ریموټ تڼۍ د موټر د حرکت کنټرول لپاره نقشه کړئ — مخکې، شاته، ګرځېدل، او حتی د ډیګونال حرکتونه — او همدارنګه په الوتنه کې د هغې سرعت تنظیم کړئ. دا پروژه ستاسو د موټرو کنټرول او IR اړیکو د اساساتو زده کړې وروسته یو بشپړ بل ګام دی، ځکه چې دا دواړه په یوه متقابل سیسټم کې سره یوځای کوي.
دلته اصلي ارزښت د روبوټیک پلیټ فارم لپاره د یو پیاوړي او کاروونکي دوستانه کنټرول انٹرفیس د جوړولو په پوهیدو کې دی. هغه اصول چې تاسو به یې زده کړئ په مستقیم ډول د پروژو په پراخه لړۍ کې پلي کېدونکي دي، لکه:
- د کور اتوماتیک دندو لپاره د لرې کنټرول شوي روبوټ جوړول، لکه یو کوچنی تحویلي بوټ.
- د تعلیمي روبوټیک سیالیو لپاره د پروګرام وړ موټر جوړول.
- د کیمرې سلایډر یا د پین-ټیلټ میکانیزم لپاره د دودیز لرې کنټرول پراختیا.
- د یو لوی او پیچلي اتوماتیک سیسټم لپاره د کاروونکي انٹرفیس پروټوټایپ کول.
هارډویر او اجزاوې
دا پروژه د SunFounder 3-in-1 Arduino کټ پر بنسټ ولاړه ده. د تعقیب لپاره، تاسو به لاندې لیست شوي اجزاوې ته اړتیا ولرئ. تارونه مستقیم دي، د کورس د پخوانیو درسونو څخه غځول شوي.
- د SunFounder 3-in-1 Arduino کټ: دا د سمارټ موټر چوکاټ، د موټرو ډرایور بورډ، او د Arduino بورډ شاملوي.
- انفراریډ لرې کنټرول: هغه معیاري ریموټ چې د کټ سره راځي.
- د IR رسونکی ماډل: هغه سینسر چې د ریموټ څخه سیګنالونه به کوډ کوي.
- LED او 330-ohm ریزسټر: د لیدلو وړ شاخص په توګه کارول کیږي ترڅو تایید کړي چې یوه تڼۍ فشارول شوې ده. (په ویډیو کې په 04:08)
- جمپر تارونه: په بریډبورډ کې د اړینو اړیکو د جوړولو لپاره.
د تارونو لارښود
مخکې له دې چې کوډ ته لاړ شو، راځئ ډاډ ترلاسه کړو چې هارډویر په سمه توګه وصل دی. د IR رسونکي او د موټرو ډرایور تارونه د دې لړۍ په پخوانیو درسونو کې سره سمون لري. د پروژې د ډیر متقابل کولو لپاره، موږ به همدارنګه یو بهرنی LED د پن 13 سره د لیدلو وړ فیډبیک شاخص په توګه وصل کړو.
دلته د اړیکو لپاره یو ګام په ګام لارښود دی:
- د 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)
د دې اړیکو د لیدلو وړ حوالې لپاره، مهرباني وکړئ لاندې د تارونو ډیاګرام ته مراجعه وکړئ.
د کوډ تشریح
د دې پروژې کوډ د پوهیدو وړ ډیزاین شوی دی. دا د IRremote کتابتون کاروي ترڅو د IR سیګنالونو د کوډ کولو پیچلې دنده ترسره کړي. راځئ هغه د کاروونکي لخوا تنظیم کېدونکي برخې مات کړو چې تاسو ممکن د خپلو پروژو لپاره تنظیم کړئ.
د سکیچ په پورتنۍ برخه کې، تاسو به د پن تعریفونه ومومئ. دا لومړی شیان دي چې تاسو باید وګورئ که تاسو خپل اجزاوې له دې مثال کې کارول شوي پنونو څخه مختلفو پنونو سره وصل کړي وي.
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)
دودیز دندې لکه moveForward()، turnRight()، او moveLeft() هغه ځای دی چې د موټرو کنټرول پکې ترسره کیږي. هره دنده اوسنی speed د دلیل په توګه اخلي. د مثال په توګه، moveForward(speed) به دواړه موټرونه په ټاکل شوي سرعت سره مخکې وهي. د "ګرځېدو" او "حرکت" ترمنځ کلیدي توپیر دا دی چې ګرځېدل دواړه څرخونه په مخالف لوري ګرځوي، چې موټر په ځای کې څرخوي، پداسې حال کې چې حرکت یوازې یو څرخ ګرځوي، چې موټر د ولاړ څرخ شاوخوا په قوس حرکت کوي. (په ویډیو کې په 10:14)
ژوندۍ پروژې نندارې
د کوډ له پورته کولو او د موټر له بریښنا کولو وروسته، ریموټ کنټرول ستاسو لومړنی انٹرفیس کیږي. په ویډیو کې نندارې څو کلیدي چلندونه روښانه کوي:
- د سرعت کنټرول: د "+" کیلي فشارول سرعت د 50 لخوا زیاتوي، پداسې حال کې چې "-" کیلي یې کموي. سرعت د موټرو د ساتنې لپاره په 255 پورې محدود او په 0 کې ټیټ ساتل شوی. (په ویډیو کې په 11:56)
- لنډمهاله حرکت: کله چې تاسو د لارښود کیلي لکه "2" (مخکې) یا "8" (شاته) فشاروئ، موټر به د یوې ثانیې لپاره حرکت وکړي او بیا په اتوماتيک ډول ودریږي. دا په کوډ کې جوړ شوی خوندیتوب ځانګړتیا ده. (په ویډیو کې په 13:09)
- ګرځېدل او چلول: هغه کیلي چې په ریموټ کې د صلیب په بڼه ترتیب شوي د جویسټیک په څیر کار کوي. د "4" یا "6" فشارول موټر په ځای کې کیڼ یا ښي خوا ته ګرځوي. د ډیګونل کیلي فشارول، لکه "1" یا "3"، به "کیڼ حرکت" یا "ښي حرکت" ترسره کړي، کوم چې یو تیز ګرځېدل دی چې یو څرخ ولاړ وي. (په ویډیو کې په 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
فایلونه📁
Arduino کتابتونونه (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB