குறியீட்டை தேடு

பாடம் 28/31: கார்-6 SunFounder சுய ஓட்டுநர் Arduino கார் பயன்படுத்தி | Robojax

பாடம் 28/31: கார்-6 SunFounder சுய ஓட்டுநர் Arduino கார் பயன்படுத்தி | Robojax

இந்த திட்டத்தில், Arduino, ஒரு அல்ட்ராசோனிக் சென்சார், மற்றும் இரண்டு அகச்சிவப்பு சென்சார்களைப் பயன்படுத்தி ஒரு அடிப்படை தானியங்கி கார் ஒன்றை உருவாக்குவோம். தன்னாட்சி வழிசெலுத்தல், சென்சார் இணைப்பு, மற்றும் முடிவெடுக்கும் தர்க்கம் பற்றி கற்க ஒரு சிறந்த அறிமுக திட்டம் இது. கார் முன்னோக்கி, பின்னோக்கி நகர்ந்து, தடைகளைத் தவிர்க்க திருப்பங்களைச் செய்ய முடியும், இதனால் தானாகவே தெளிவான பாதையைக் கண்டறியும். இந்த திட்டம் SunFounder 3-in-1 Arduino கிட்டை அடிப்படையாகக் கொண்டது மற்றும் Robojax இன் Arduino பாடத்தின் ஒரு பகுதியாகும்.

28-SunFounder-Car-6-Self-Driving-path

இந்த திட்டம் ஒரு பொம்மையை உருவாக்குவது மட்டுமல்ல; தன்னாட்சி ரோபாட்டிக்ஸின் முக்கிய கருத்துக்களுக்கு ஒரு நடைமுறை அறிமுகம் இது. அதே தர்க்கமும் சென்சார்களும் ரோபோடிக் வெற்றிட கிளீனர்கள், கிடங்குகளில் தானியங்கி வழிகாட்டப்பட்ட வாகனங்கள், மற்றும் மிகவும் சிக்கலான ரோபோக்களின் வழிசெலுத்தல் அமைப்புகள் போன்ற நிஜ உலக பயன்பாடுகளில் பயன்படுத்தப்படுகின்றன. தூர உணர்வை எளிய வழிசெலுத்தல் விதிகளுடன் எவ்வாறு இணைப்பது என்பதைப் புரிந்துகொள்வதன் மூலம், நீங்கள் பல்வேறு திட்டங்களை உருவாக்கலாம், அவை:

  • ஒரு அறையில் செல்லவும் தளபாடங்களைத் தவிர்க்கவும் கூடிய சிறிய ரோபோவை உருவாக்குதல்.
  • ஒரு எளிய பாதையைப் பின்பற்றக்கூடிய அல்லது ஒரு பகுதியை ரோந்து செய்யக்கூடிய தானியங்கி வாகனத்தை உருவாக்குதல்.
  • பெரிய ரோபாட்டிக்ஸ் திட்டங்களுக்கு அடிப்படை தடை-தவிர்ப்பு வழிமுறைகளை எவ்வாறு செயல்படுத்துவது என்பதைக் கற்றல்.

வன்பொருள் கூறுகள்

இந்த திட்டம் SunFounder 3-in-1 கிட்டின் கூறுகளைப் பயன்படுத்துகிறது. அத்தியாவசிய பாகங்கள்:

  • Arduino Uno போர்டு
  • மோட்டார்களுடன் SunFounder 2WD அல்லது 3-in-1 கார் சேஸ்
  • மோட்டார் டிரைவர் தொகுதி (எ.கா., L298N அல்லது ஒத்த)
  • HC-SR04 அல்ட்ராசோனிக் தூர சென்சார்
  • இரண்டு IR தடை சென்சார்கள்
  • ஜம்பர் கம்பிகள் மற்றும் மோட்டார்களுக்கான மின்சார ஆதாரம்

வயரிங் வழிகாட்டி

car_7_8_28_self_driving

உங்கள் தானியங்கி காரை உயிர்ப்பிக்க வயரிங் முக்கியமான முதல் படியாகும். இணைப்புகள் நேரடியானவை, ஆனால் உங்கள் கூறுகளை சேதப்படுத்தாமல் இருக்க ஒவ்வொன்றையும் இருமுறை சரிபார்ப்பது அவசியம். வயரிங்கின் பின்னணியில் உள்ள தர்க்கம், Arduino இன் கட்டுப்பாட்டு பின்களை மோட்டார் டிரைவர் மற்றும் சென்சார்களுடன் இணைப்பதாகும், இதனால் Arduino தரவைப் படித்து கட்டளைகளை அனுப்ப முடியும்.

  • மோட்டார் டிரைவர் பின்கள் (A-1B, A-1A, B-1B, B-1A): இந்த பின்கள் இரண்டு மோட்டார்களின் வேகத்தையும் திசையையும் கட்டுப்படுத்துகின்றன. அவை Arduino பின்கள் 5, 6, 9, மற்றும் 10 உடன் இணைக்கப்பட்டுள்ளன, அவை PWM-திறன் கொண்டவை, மாறக்கூடிய வேக கட்டுப்பாட்டை அனுமதிக்கின்றன.
  • அல்ட்ராசோனிக் சென்சார் (Trig மற்றும் Echo): Trig பின் ஒரு அல்ட்ராசோனிக் துடிப்பை வெளியிடுகிறது, மற்றும் Echo பின் பிரதிபலித்த சிக்னலைப் பெறுகிறது. Trig பின் Arduino பின் 3 உடன் இணைக்கப்பட்டுள்ளது, மற்றும் Echo பின் Arduino பின் 4 உடன் இணைக்கப்பட்டுள்ளது.
  • IR சென்சார்கள் (இடது மற்றும் வலது): இந்த சென்சார்கள் அவற்றின் முன் நேரடியாக ஒரு தடை உள்ளதா என்பதைக் கண்டறிகின்றன. இடது IR சென்சார் Arduino பின் 8 உடன் இணைக்கப்பட்டுள்ளது, மற்றும் வலது IR சென்சார் பின் 7 உடன் இணைக்கப்பட்டுள்ளது. காரின் பக்கங்களில் உள்ள இடத்தை சரிபார்க்க அவை பயன்படுத்தப்படுகின்றன.

விரிவான காட்சி வழிகாட்டிக்கு, கீழே உள்ள வயரிங் வரைபடத்தைப் பார்க்கவும், இது ஒவ்வொரு இணைப்பையும் தெளிவாக வரைபடமாக்குகிறது.

குறியீடு விளக்கம்

குறியீடு Arduino நிரலாக்க மொழியில் (C++) எழுதப்பட்டுள்ளது. முழு நிரலையும் வீடியோ விளக்கத்தில் இணைக்கப்பட்டுள்ள ஆதார பக்கத்திலிருந்து பதிவிறக்கம் செய்யலாம். இந்த ஸ்கெட்ச்சின் முக்கிய, பயனர்-உள்ளமைக்கக்கூடிய பகுதிகளை பிரிப்போம்.

பின் வரையறைகள்

குறியீட்டின் மேலே, Arduino ஐ பல்வேறு கூறுகளுடன் இணைக்கும் பின்களை நீங்கள் வரையறுக்கிறீர்கள். உங்கள் போர்டில் வேறு பின்களைப் பயன்படுத்தினால் அவற்றை மாற்றலாம்.

const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int echoPin = 4;
const int trigPin = 3;

const int rightIR = 7;
const int leftIR = 8;

A_1B, A_1A, B_1B, மற்றும் B_1A பின்கள் H-பிரிட்ஜ் மோட்டார் டிரைவரைக் கட்டுப்படுத்துகின்றன. இந்த பின்களை வெவ்வேறு சேர்க்கைகளில் HIGH அல்லது LOW ஆக அமைப்பதன் மூலம், ஒவ்வொரு மோட்டாரின் திசையையும் கட்டுப்படுத்தலாம். echoPin மற்றும் trigPin அல்ட்ராசோனிக் சென்சாருக்கானவை, மற்றும் rightIR மற்றும் leftIR அகச்சிவப்பு சென்சார்களுக்கானவை.

நடத்தை மாறிகள் மற்றும் தர்க்கம்

தானியங்கி ஓட்டுநர் நடத்தையின் முக்கிய தர்க்கம் loop() செயல்பாட்டில் உள்ளது. IR சென்சார்கள் மற்றும் அல்ட்ராசோனிக் சென்சாரின் அளவீடுகளின் அடிப்படையில் கார் முடிவுகளை எடுக்கிறது. குறியீடு வெவ்வேறு செயல்களைத் தூண்டும் குறிப்பிட்ட தூரங்களை வரையறுக்கிறது. எடுத்துக்காட்டாக, distance மாறி சென்டிமீட்டர்களில் அளவிடப்படுகிறது. தர்க்கம் பின்வருமாறு:

  • தூரம் 50 செ.மீ க்கும் அதிகமாக இருந்தால்: முன்னால் உள்ள பாதை தெளிவாக உள்ளது, எனவே கார் 200 வேகத்தில் முன்னோக்கி நகரும்.
  • தூரம் 2 செ.மீ மற்றும் 10 செ.மீ இடையே இருந்தால்: கார் ஒரு தடைக்கு மிக அருகில் உள்ளது. இது ஒரு வினாடிக்கு பின்னோக்கி நகர்ந்து, பின்னர் புதிய பாதையைக் கண்டறிய அரை வினாடிக்கு பின்-இடதுபுறமாக திரும்பும்.
  • தூரம் 10 செ.மீ மற்றும் 50 செ.மீ இடையே இருந்தால்: கார் ஒரு "எச்சரிக்கை மண்டலத்தில்" உள்ளது. இது முன்னோக்கி நகரும், ஆனால் 150 என்ற மெதுவான வேகத்தில்.

இந்த வரம்பு மதிப்புகள் (50 செ.மீ, 10 செ.மீ, மற்றும் 2 செ.மீ) மற்றும் வேகங்கள் (200 மற்றும் 150) உங்கள் காரின் நடத்தையை மாற்ற நீங்கள் சரிசெய்யக்கூடிய முதன்மை மாறிகள் ஆகும். எடுத்துக்காட்டாக, உங்கள் கார் வேகமாக நகர்ந்தால் "பாதுகாப்பான" தூரத்தை 60 செ.மீ ஆக அதிகரிக்கலாம்.

தனிப்பயன் செயல்பாடுகள்

குறியீடு காரின் இயக்கங்களைக் கட்டுப்படுத்த பல தனிப்பயன் செயல்பாடுகளை உள்ளடக்கியது. முக்கிய லூப்பில் இவை பயன்படுத்தப்படுகின்றன, இதனால் குறியீடு தூய்மையாகவும் புரிந்துகொள்ள எளிதாகவும் இருக்கும்.

  • moveForward(int speed): இந்த செயல்பாடு மோட்டார் பின்களை அமைத்து காரை முன்னோக்கி ஓட்டுகிறது. speed அளவுரு (0-255) மோட்டார்கள் எவ்வளவு வேகமாக சுழலும் என்பதை கட்டுப்படுத்துகிறது.
  • moveBackward(int speed): moveForward போன்றது, ஆனால் இது காரை பின்னோக்கி நகர்த்த மோட்டார் திசையை மாற்றுகிறது.
  • backLeft(int speed) மற்றும் backRight(int speed): இந்த செயல்பாடுகள் ஒரு மோட்டாரை எதிர் திசையில் இயக்கி மற்றொன்றை நிறுத்துவதன் மூலம் காரை திருப்புகின்றன. இது ஒரு பிவோட் திருப்பமாகும், இது கார் திசையை திறம்பட மாற்ற உதவுகிறது.
  • stopMove(): இந்த செயல்பாடு அனைத்து கட்டுப்பாட்டு பின்களையும் LOW ஆக அமைப்பதன் மூலம் அனைத்து மோட்டார்களையும் நிறுத்துகிறது.
  • readSensorData(): இந்த செயல்பாடு அல்ட்ராசோனிக் சென்சாரிலிருந்து ஒரு துடிப்பை அனுப்பி, எதிரொலி திரும்ப வர எடுக்கும் நேரத்தை அளவிடுகிறது. பின்னர் அது தூரத்தை சென்டிமீட்டர்களில் கணக்கிட்டு மதிப்பை திருப்பி அனுப்புகிறது.

நேரடி திட்ட ஆர்ப்பாட்டம்

(வீடியோவில் 07:09 இல்) ஆர்ப்பாட்டத்தில், கார் பெட்டிகள் மற்றும் சுவர்கள் போன்ற பல்வேறு தடைகள் உள்ள சூழலில் வைக்கப்படுகிறது. கார் செல்லும்போது அதன் தர்க்கம் தெரியும். அல்ட்ராசோனிக் சென்சார் 50 செ.மீ.க்கு மேல் ஒரு சுவர் அல்லது தடையை கண்டறியும்போது, அது நம்பிக்கையுடன் முன்னோக்கி ஓட்டுகிறது. அது நெருங்கும்போது, பக்கங்களில் உள்ள IR சென்சார்கள் திறந்த இடத்தை சரிபார்க்கின்றன.

இடதுபுறத்தில் ஒரு தடை கண்டறியப்பட்டால், கார் அதைத் தவிர்க்க பின்வலது திருப்பத்தை செய்கிறது, மற்றும் நேர்மாறாகவும். கார் ஒரு இறுக்கமான இடத்தில் இருப்பதைக் கண்டால், அதாவது ஒரு மேசையின் கீழ் (வீடியோவில் 07:49 இல்), அது தன்னை விடுவித்து தெளிவான பாதையை கண்டறிய அதன் பின்னோக்கி மற்றும் திருப்பு செயல்பாடுகளைப் பயன்படுத்துகிறது. கார் தொடர்ந்து அதன் சூழலைப் படித்து முடிவுகளை எடுக்கிறது, இது முன்கூட்டியே திட்டமிடப்பட்ட பாதையை நம்பாத ஒரு எதிர்வினை கட்டுப்பாட்டு அமைப்பை நிரூபிக்கிறது.

வீடியோ அத்தியாயங்கள்

  • [00:00] சுய-ஓட்டுநர் கார் திட்டத்திற்கான அறிமுகம்
  • [00:28] SunFounder 3-in-1 கிட் பற்றி
  • [01:32] குறியீட்டைத் திறப்பது மற்றும் கண்ணோட்டம்
  • [02:02] குறியீட்டு அமைப்பு மற்றும் புதிய செயல்பாடுகளின் விளக்கம்
  • [03:11] அமைவு செயல்பாட்டில் பின்களை அமைத்தல்
  • [03:28] லூப்பில் முக்கிய முடிவெடுக்கும் தர்க்கம்
  • [05:41] நேரடி ஆர்ப்பாட்டம்: கார் செயலில்
  • [07:09] தடைகள் மற்றும் சுவர் பின்தொடர்தலுடன் ஆர்ப்பாட்டம்
  • [09:58] முடிவு மற்றும் இறுதி எண்ணங்கள்

படங்கள்

28-SunFounder-Car-6-Self-Driving-path
28-SunFounder-Car-6-Self-Driving-path
car_7_8_28_self_driving
car_7_8_28_self_driving
897-Lesson 28/31: Car-6 SunFounder self Driving Arduino car
மொழி: C++
/*
Lesson 28/31: Car-6 SunFounder self Driving Arduino car
Get this code and watch video Download and resource page https://robojax.com/RJT611
https://www.youtube.com/watch?v=IyninXUcsn0
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int echoPin = 4;
const int trigPin = 3;

const int rightIR = 7;
const int leftIR = 8;

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 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);
}

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);

  //IR obstacle
  pinMode(leftIR, INPUT);
  pinMode(rightIR, INPUT);
}

void loop() {

  int left = digitalRead(leftIR);  // 0: Obstructed   1: Empty
  int right = digitalRead(rightIR);

  if (!left && right) {
    backLeft(150);
  } else if (left && !right) {
    backRight(150);
  } else if (!left && !right) {
    moveBackward(150);
  } else {
    float distance = readSensorData();
    Serial.println(distance);
    if (distance > 50) { // Safe
      moveForward(200);
    } else if (distance < 10 && distance > 2) { // Attention
      moveBackward(200);
      delay(1000);
      backLeft(150);
      delay(500);
    } else {
      moveForward(150);
    }
  }
}

நீங்கள் தேவைப்படும் எண்ணங்கள்

வளங்கள் மற்றும் மேற்கோள்கள்

கோப்புகள்📁

ஆர்டினோ நூலகங்கள் (ஜிப்)