Кодты іздеу

Сабақ 27/31: Car-5 SunFounder Smart Car Follows Your Hand using Arduino | Robojax

Бұл сабақтың бөлігі: Arduino Course based on SunFounder's 3-in-1 Learning Kit

Сабақ 27/31: Car-5 SunFounder Smart Car Follows Your Hand using Arduino | Robojax

Кіріспе

Сіз ешқашан сіздің қатысуыңызға интуитивті түрде жауап беретін робот жасағыңыз келді ме? Бұл жоба стандартты SunFounder Smart Car-ды қолыңызды қадағалайтын ым-ишарамен басқарылатын көлікке айналдырады. Қашықтан басқару пультін немесе смартфон қолданбасын қолданудың орнына, бұл көлік қолыңыздың орны мен қашықтығын анықтау үшін ультрадыбыстық және инфрақызыл сенсорлардың комбинациясын пайдаланады, бұл оны қарапайым табиғи қозғалыстармен солға, оңға немесе алға бағыттауға мүмкіндік береді.

27-SunFounder-Car-5-Follow-Hand

Бұл жоба Robojax Arduino курсының (27/31-сабақ) бөлігі болып табылады және SunFounder 3-в-1 Arduino жинағын қолдану арқылы жасалған. Бұл сенсорлық фузияны үйренудің тамаша тәсілі, мұнда бірнеше сенсорлар күрделірек және жауапты мінез-құлық жасау үшін бірге жұмыс істейді. Мұндағы нақты әлемдік құндылық - шешім қабылдау үшін әртүрлі кіріс түрлерін біріктіруді түсіну, бұл робототехника мен автоматтандырудағы негізгі тұжырымдама.

Міне, осы логикамен құра алатын бірнеше практикалық идеялар:

  • Интерактивті көрмелер: Келушілердің назарын аудару үшін оларды қадағалайтын шағын роботтық дисплей жасаңыз.
  • Автономды кедергілерден аулақ жүретін платформа: Көліктің қолды қадағалаудың орнына кедергілерден аулақ жүру арқылы бөлмені шарлауы үшін кодты өзгертіңіз.
  • Білім беру робототехника жинағы: Студенттерге сенсорлық интеграция, логика және моторды басқару туралы үйрету үшін мұны негізгі жоба ретінде пайдаланыңыз.
  • Ақылды жеткізу арбасы: Бақыланатын ортада бұл логиканы қоймада немесе зауытта адамды қадағалайтын шағын арбаға бейімдеуге болады.

Аппараттық құралдар және компоненттер

Бұл жоба SunFounder 3-в-1 Arduino жинағына кіретін компоненттерді пайдаланады. Сіз қолданатын негізгі компоненттер:

  • SunFounder Smart Car шассиі: Дөңгелектері мен моторлары бар физикалық платформа.
  • Arduino тақтасы: Кодты орындайтын көліктің "миы".
  • Ультрадыбыстық сенсор (HC-SR04): Көліктің алдындағы нысанға (қолыңызға) дейінгі қашықтықты өлшеу үшін қолданылады.
  • Екі ИҚ (инфрақызыл) кедергіден аулақ жүру сенсоры: Сол және оң жақтарына орнатылған, қолыңыздың осы жақтарда болуын анықтау үшін.
  • Мотор драйвері: Arduino сигналдарына негізделген көлік моторларының жылдамдығы мен бағытын басқару үшін қолданылатын модуль (көбінесе L298N немесе ұқсас).
  • Қуат көзі: Arduino мен моторларды қуаттандыруға арналған батареялар.

Сымдарды жалғау нұсқаулығы

car_7_8_follow_hand

Бейнеде айтылғандай, бұл жобаның сымдары алдыңғы сабақтарда кедергілерден аулақ жүретін көлік үшін түсіндірілгенмен бірдей. Сенсорлар мен моторлардың барлығы Arduino-ның цифрлық және аналогтық түйреуіштеріне қосылған. Көрнекі анықтама үшін SunFounder Smart Car сымдар диаграммасын қараңыз.

Код әр компонент үшін қолданылатын нақты түйреуіштерді анықтайды, олар келесі бөлімде егжей-тегжейлі сипатталған.

Кодты түсіндіру

Бұл бөлім кодтың өз көлігіңіз үшін реттегіңіз келетін пайдаланушы конфигурациялайтын бөліктеріне бағытталған. Толық бағдарламаны 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 түйреуіштеріне қосылған болса, оларды өзгертуіңіз керек.
  • ИҚ сенсор түйреуіштері (rightIR, leftIR): Бұл цифрлық кіріс түйреуіштері сол және оң инфрақызыл кедергі сенсорларының сигналын оқиды. 0 мәні кедергінің (қолыңыздың) анықталғанын білдіреді, ал 1 жолдың ашық екенін білдіреді.
  • Ультрадыбыстық сенсор түйреуіштері (trigPin, echoPin): trigPin - қысқа ультрадыбыстық импульс жіберетін шығыс, ал echoPin - қашықтықты есептеу үшін шағылысқан импульстің ұзақтығын оқитын кіріс.

loop() функциясының ішінде негізгі мінез-құлық логикасын табасыз. Реттегіңіз келетін бір айнымалы бар:

int speed = 150;

Бұл speed айнымалысы қозғалыс кезінде моторларға жіберілетін қуатты басқарады. Ол 0-ден (тоқтаған) 255-ке дейін (максималды жылдамдық) болуы мүмкін. Жылдамырақ көлік үшін бұл мәнді арттыруға (мысалы, 200-ге) немесе баяу, бақыланатын қозғалыстар үшін азайтуға болады (мысалы, 100-ге).

Код сонымен қатар moveForward(), turnLeft() және turnRight() сияқты функцияларды қамтиды. Бұл функциялар көліктің қозғалысын басқару үшін қолданылады және сенсор көрсеткіштеріне негізделген шақырылады. Оларды өзгертудің қажеті жоқ, бірақ оларды өзіңіздің теңшелетін мінез-құлықтарыңызды жасау үшін құрылыс блоктары ретінде пайдалана аласыз.

"Қолыңызды қадағалау" логикасы қалай жұмыс істейді

Бұл жобаның сиқыры Arduino-дың үш сенсордан алынған деректерді қалай түсіндіретінінде жатыр. Логика қарапайым және loop() функциясында үздіксіз орындалады.

Алдымен, көлік ультрадыбыстық сенсорды қолданып, тікелей алдындағы нысанға дейінгі қашықтықты өлшейді. Содан кейін, ол екі инфрақызыл сенсорды тексеріп, нысанның сол жағында немесе оң жағында екенін анықтайды. Шешім қабылдау процесі келесідей:

  1. Алға жылжу: Егер ультрадыбыстық сенсормен өлшенген қашықтық 5 см-ден үлкен, бірақ 10 см-ден аз болса, көлік алға жылжиды. Бұл көліктің қолыңызды қадағалайтын "ыңғайлы аймақ" жасайды.
  2. Солға бұрылу: Егер қашықтық осы аймақта болмаса, көлік ИҚ сенсорларын тексереді. Егер сол жақ сенсор жабық болса (қолыңыз сол жақта) және оң жақ сенсор ашық болса, көлік солға бұрылады.
  3. Оңға бұрылу: Керісінше, егер оң жақ сенсор жабық және сол жақ ашық болса, көлік оңға бұрылады.
  4. Тоқтау: Егер осы шарттардың ешқайсысы орындалмаса—мысалы, қолыңыз тым алыс немесе тым жақын болса—көлік тоқтайды.

Бұл қарапайым ережелер жиынтығы көлікке қолыңыздың орнына динамикалық түрде жауап беруге мүмкіндік береді, тегіс және интуитивті қадағалау мінез-құлқын жасайды.

Тірі Жоба Демонстрациясы

Бейне демонстрацияда нұсқаушы көліктің мінез-құлқын нақты уақытта көрсетеді. Сериялық монитор ультрадыбыстық сенсор оқитын қашықтықты көрсету үшін қолданылады. Көлік бос тұрғанда және қолыңыз алыс болғанда (мысалы, 36 см), ол тоқтап қалады. Қолыңызды көліктің алдындағы 5-10 см аймаққа қойған бойда, ол алға жылжи бастайды.

Демонстрация сонымен қатар бұрылу логикасын көрсетеді. Қолыңызды көліктің сол жағына қойғанда, сол жақ ИҚ сенсоры іске қосылады және көлік солға бұрылады. Сол сияқты, қолыңызды оң жаққа қою көлікті оңға бұруға мәжбүрлейді. Көлік қолыңызды айналдырғанда оны қадағалауды жалғастырады, тек қолыңыз сенсор ауқымынан алыстағанда немесе тым жақын болғанда тоқтайды. Бұл сенсор біріктіру және логиканың дұрыс жұмыс істеп тұрғанын растайды, жауап беретін және қызықты жоба жасайды.

Тараулар

  • [00:00] Қолды Қадағалайтын Ақылды Көлікке Кіріспе
  • [00:35] Robojax Arduino Курсы мен Жинағы туралы
  • [01:41] Жобаға Шолу және Кодты Орнату
  • [02:19] Пин Анықтамалары мен Орнатуды Түсіндіру
  • [03:19] Қолыңызды Қадағалауға Арналған Код Логикасы
  • [05:48] Көліктің Іс-Әрекетіндегі Тірі Демонстрация
  • [07:28] Қорытынды Демонстрация және Өнімділікке Шолу

Суреттер

Car 7 8 follow hand
Car 7 8 follow hand
27 SunFounder Car 5 follow hand
27 SunFounder Car 5 follow hand
898-Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Тіл: C++
/*
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);
}

Сізге қажет болуы мүмкін нәрселер

Ресурстар мен сілтемелер

Файлдар📁

Arduino кітапханалары (zip)