کوډ ولټوئ

لومړی ۲۶/۳۱: سمارټ موټر برخه ۴: د الټراسونیک سینسر په کارولو سره د خنډ څخه مخنیوی | سن فاونډر روبوجکس

لومړی ۲۶/۳۱: سمارټ موټر برخه ۴: د الټراسونیک سینسر په کارولو سره د خنډ څخه مخنیوی | سن فاونډر روبوجکس

په دې درس کې، موږ ستاسو هوښیار موټر د الټراسونیک سینسر په کارولو سره د خپل چاپېریال د لیدلو او غبرګون وړتیا سره لوړوو. د مخې په وړاندې د شیانو فاصلې په اندازه کولو سره، موټر کولی شي هوښیارې پرېکړې وکړي: دا به مخ ته حرکت وکړي کله چې لاره روښانه وي، به ودریږي کله چې یو شی د احتیاط په زون کې وي، او به شاته ولاړ شي کله چې خنډ ډېر نږدې شي. دا پروژه د موټرو کنټرول او سینسر بنسټیزو اصولو باندې رغول شوې چې تاسو دمخه زده کړي دي، چې پایله یې یو واقعي خپلواک موټر دی.

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.09.009

دا یوازې یوه لوبه نه ده؛ دا د لا پېچلو روبوټیک پروژو د جوړولو په لور یو بنسټیز ګام دی. هغه منطق چې تاسو به دلته پلي کوئ — حس کول، فکر کول، عمل کول — هماغه دی چې د روبوټیک خلا پاکوونکو څخه تر صنعتي اتوماتیک پورې په هرڅه کې کارول کیږي. دلته ځینې نظرونه دي چې ستاسو د خپلو جوړښتونو لپاره الهام درکړي:

  • خپلواک روور: یو روبوټ جوړ کړئ چې کولی شي یوه کوټه یا دهلیز وپلټي پرته له دې چې دیوالونو یا فرنیچر سره ټکر وکړي.
  • د نږدېوالي الارم سیسټم: الټراسونیک سینسر په سروو باندې نصب کړئ ترڅو یوه سیمه سکین کړي او کله چې یو ننوتونکی په ټاکل شوي زون کې ننوځي الارم یا څراغ فعال کړي.
  • هوښیار پارکینګ مرستیال: یو سیسټم جوړ کړئ چې د فاصلې لوستلو څخه کار اخلي ترڅو موټر په تنګ ځای کې لارښوونه وکړي، بصري یا غږیز غبرګون چمتو کوي.

دا لارښود د SunFounder 3-in-1 Arduino کټ او د هغې د "Play with Ultrasonic Module" پروژې پر بنسټ دی. موږ به د تارونو اړیکې وڅیړو، د پرېکړې کوونکي کوډ تشریح کړو، او موټر په عمل کې وښیو.

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_02.26.146

د خنډ څخه د مخنیوي منطق څنګه کار کوي

د دې پروژې اصلي برخه یوه ساده، مګر پیاوړې پرېکړه ونې ده. الټراسونیک سینسر په دوامداره توګه د خپل مخې په وړاندې د شی فاصله اندازه کوي. دا د فاصلې ارزښت بیا د موټر د موټرو د کنټرول لپاره کارول کیږي، لکه څنګه چې په لاندې ډیاګرام کې ښودل شوي.

  • که فاصله > 25 سانتي متره وي: لاره روښانه ده، نو موټر مخ ته حرکت کوي.
  • که 10 سانتي متره < فاصله <= 25 سانتي متره وي: یو شی د "احتیاط زون" کې کشف شوی، نو موټر د ټکر څخه د مخنیوي لپاره ودریږي.
  • که 2 سانتي متره < فاصله <= 10 سانتي متره وي: یو شی په خطرناکه توګه نږدې دی. موټر د ډیر ځای د جوړولو لپاره شاته ځي.
  • که فاصله <= 2 سانتي متره وي: لوستل احتمالاً تېروتنه ده (د دقیق اندازه کولو لپاره ډېر نږدې)، نو موټر د خوندیتوب اقدام په توګه ودریږي.

هارډویر اجزا

د دې پروژې د جوړولو لپاره، تاسو به لاندې اجزاوو ته اړتیا ولرئ، چې ټول د SunFounder 3-in-1 کټ کې شامل دي.

  • 1x Arduino Uno (یا مطابقت لرونکی بورډ)
  • 1x هوښیار موټر چیسس د دوو ګیر شویو موټرو سره
  • 1x L298N موټر ډرایور ماډل
  • 1x HC-SR04 الټراسونیک فاصله سینسر
  • 1x بریډبورډ
  • جمپر تارونه
  • د موټر لپاره بریښنا رسول (د بیلګې په توګه، بیټرۍ پیک)
26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000

د تارونو اړیکو لارښود

تارونه د موټر ډرایور، الټراسونیک سینسر، او 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() فنکشن دننه کنټرول کیږي. دا هغه ځای دی چیرې چې تاسو کولی شئ د موټر "شخصیت" تنظیم کړئ.

void loop() {
    float فاصله = readSensorData();
    if (فاصله > 25) {
      حرکت_به_جلو(200);
    }
    else if (فاصله < 10 && فاصله > 2) {
      حرکت_به_عقب(200);
    } else {
      توقف_حرکت();
    }
  }

دا لپاره دا څنګه تنظیم کړئ:

  • د فاصلې حدونه: شمېرې 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 فاصله = readSensorData();
    if (فاصله > 25) {
      حرکت_به_جلو(200);
    }
    else if (فاصله < 10 && فاصله > 2) {
      حرکت_به_عقب(200);
    } else {
      توقف_حرکت();
    }
    ځنډ(100); // د ثابت لوستلو لپاره د 100ms ځنډ اضافه کړئ
  }

د 100 ملی ثانیو ځنډ معمولا د ثابت او یوشان فاصلې لوستلو ترلاسه کولو لپاره کافي دی. (په ویډیو کې په 10:56)

ژوندۍ پروژه ننداره

یوځل چې کوډ اپلوډ شي، د Serial Monitor خلاص کړئ. تاسو به متن وګورئ چې د موټر حالت ښیي، لکه "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] د خنډ مخنیوي ژوندۍ ننداره

انځورونه

27 SunFounder Car 5 follow hand
27 SunFounder Car 5 follow hand
26 SunFounder Car 4 ultrasonic video snapshot 00.09.009
26 SunFounder Car 4 ultrasonic video snapshot 00.09.009
26 SunFounder Car 4 ultrasonic video snapshot 02.26.146
26 SunFounder Car 4 ultrasonic video snapshot 02.26.146
26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
899-Lesson 26/31: Avoiding Obstacle Using Ultrasonic Sensor
ژبه: C++
/*
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);
}

هغه شیان چې تاسو ورته اړتیا لرئ

سرچینې او حوالې

فایلونه📁

Arduino کتابتونونه (zip)