روبوت يعمل بالاردوينو مع مستشعر بالموجات فوق الصوتية لتتبع الإنسان

 في سنوات الأخيرة، مما مكن من إنشاء آلات ذكية يمكنها التفاعل مع البيئة. أحد التطبيقات المثيرة للروبوتات هو تطوير الروبوتات التي تتبع الإن سان. يمكن لهذه الروبوتات تتبع الشخص بشكل مستقل، مما يجعلها دة في سيناريوهات مختلفة مثل المساعدة في المناطق المزدحم، تنقل، أو حتى كمرافقين. في هذه المقالة، سوف نستكشف بالتفصيل كيفية بناء روبوت يتبع الإنسان باستخدام الاردوينو وثلاثة أجهزة استشعار بالموجات فوق الصوتية.

يعد بناء روبوت يتتبع الإنسان باستخدام الأردوينو وثلاثة أجهزة استش مثيرًا للاهتمام. ما يجعل بشكل خاص هو استخدام ثلاثة أجهز ة ستشعار بالموجات فوق الصوتية، ليس واحدًا فقط. وهذا يضيف بعدًا جديدًا للتجربة، حيث نرى عادةً الإنسان يتبع الروبوت وهو يبني باستخدام محرك بالموجات فوق الصوتية ومحركين يعملان بالأشعة تحت الحمراء ومحرك مؤازر واحد. ليس لهذا المحرك المؤازر أي دور في التشغيل كما أنه أضاف تعقيدات غير ضرورية. لذلك قمت بإزالة أجهزة الاستشعار المؤازرة والأشعة تحت الحمراء واست خدمت 3 أجهزة استشعار بالموجات فوق الصوتية. باستخدام أجهزة الاستشعار بالموجات فوق الصوتية، يمكنك قياس واستخدام ومتابعة هدف بشري.

المكونات الضرورية اللازمة للإنسان الذي يتبع الروبوت

لوحة اردوينو UNO ×1

مستشعر بالموجات فوق الصوتية ×3

سائق المحرك L298N × 1

هيكل الروبوت

محركات بو ×2

العجلات ×2

بطارية ليثيوم أيون 3.7 فولت×2

حامل البطارية ×1

اللوح

حامل مستشعر بالموجات فوق الصوتية ×3

التبديل وأسلاك العبور

 مخطط الدائرة الروبوت

هنا هو الرسم التخطيطي لدائرة الروبوت التي تتبع الإنسان.


يشتمل هذا التصميم على ثلاثة أجهزة استشعار بالموجات ا يسمح بقياس المسافة في ثلاثة اتجاهات للأمام واليمين واليسار. Switch the Arduino circuit to the Arduino circuit. بالإضافة إلى ذلك، تشتمل الدائرة على محركين DC للحركة، متصلين بوحدة ت شغيل المحرك L298N. Switch to Arduino Switch ية المقابلة لها. 3.7 والتي يتم توصيلها بوحدة تشغيل المحرك عبر مفتاح.

الكود البرمجي

// Ultrasonic

#define S1Trig 2

#define S2Trig 4

#define S3Trig 6

#define S1Echo 3

#define S2Echo 5

#define S3Echo 7

// Motor control pins

#define LEFT_MOTOR_PIN1 8

#define LEFT_MOTOR_PIN2 9

#define RIGHT_MOTOR_PIN1 10

#define RIGHT_MOTOR_PIN2 11

// Distance thresholds for obstacle detection

#define MAX_DISTANCE 40

#define MIN_DISTANCE_BACK 5

// Maximum and minimum motor speeds

#define MAX_SPEED 150

#define MIN_SPEED 75

void setup() {

  // Set motor control pins as outputs

  pinMode(LEFT_MOTOR_PIN1, OUTPUT);

  pinMode(LEFT_MOTOR_PIN2, OUTPUT);

  pinMode(RIGHT_MOTOR_PIN1, OUTPUT);

  pinMode(RIGHT_MOTOR_PIN2, OUTPUT);

  //Set the Trig pins as output pins

  pinMode(S1Trig, OUTPUT);

  pinMode(S2Trig, OUTPUT);

  pinMode(S3Trig, OUTPUT);

  //Set the Echo pins as input pins

  pinMode(S1Echo, INPUT);

  pinMode(S2Echo, INPUT);

  pinMode(S3Echo, INPUT);

  // Initialize the serial communication for debugging

  Serial.begin(9600);

}

void loop() {

  int frontDistance = sensorOne();

  int leftDistance = sensorTwo();

  int rightDistance = sensorThree();

  Serial.print("Front: ");

  Serial.print(frontDistance);

  Serial.print(" cm, Left: ");

  Serial.print(leftDistance);

  Serial.print(" cm, Right: ");

  Serial.print(rightDistance);

  Serial.println("cm");

  // Find the sensor with the smallest distance

  if (frontDistance < MIN_DISTANCE_BACK) {

    moveBackward();

    Serial.println("backward");

  } else if (frontDistance < leftDistance && frontDistance < rightDistance && frontDistance < MAX_DISTANCE) {

    moveForward();

    Serial.println("forward");

  }else if (leftDistance < rightDistance && leftDistance < MAX_DISTANCE) {

    turnLeft();

    Serial.println("left");

  } else if (rightDistance < MAX_DISTANCE) {

    turnRight();

    Serial.println("right");   

   } else {

    stop();

    Serial.println("stop");

  }

  delay(100); // Delay for stability and to avoid excessive readings

}

// Function to measure the distance using an ultrasonic sensor

int sensorOne() {

  //pulse output

  digitalWrite(S1Trig, LOW);

  delayMicroseconds(2);

  digitalWrite(S1Trig, HIGH);

  delayMicroseconds(10);

  digitalWrite(S1Trig, LOW);

  long t = pulseIn(S1Echo, HIGH);//Get the pulse

  int cm = t / 29 / 2; //Convert time to the distance

  return cm; // Return the values ​​from the sensor

}

//Get the sensor values

int sensorTwo() {

  //pulse output

  digitalWrite(S2Trig, LOW);

  delayMicroseconds(2);

  digitalWrite(S2Trig, HIGH);

  delayMicroseconds(10);

  digitalWrite(S2Trig, LOW);

  long t = pulseIn(S2Echo, HIGH);//Get the pulse

  int cm = t / 29 / 2; //Convert time to the distance

  return cm; // Return the values ​​from the sensor

}

//Get the sensor values

int sensorThree() {

  //pulse output

  digitalWrite(S3Trig, LOW);

  delayMicroseconds(2);

  digitalWrite(S3Trig, HIGH);

  delayMicroseconds(10);

  digitalWrite(S3Trig, LOW);

  long t = pulseIn(S3Echo, HIGH);//Get the pulse

  int cm = t / 29 / 2; //Convert time to the distance

  return cm; // Return the values ​​from the sensor

}

// Motor control functions

void moveForward() {

  analogWrite(LEFT_MOTOR_PIN1, MAX_SPEED);

  analogWrite(LEFT_MOTOR_PIN2, LOW);

  analogWrite(RIGHT_MOTOR_PIN1, MAX_SPEED);

  analogWrite(RIGHT_MOTOR_PIN2, LOW);

}

void moveBackward() {

  analogWrite(LEFT_MOTOR_PIN1, LOW);

  analogWrite(LEFT_MOTOR_PIN2, MAX_SPEED);

  analogWrite(RIGHT_MOTOR_PIN1, LOW);

  analogWrite(RIGHT_MOTOR_PIN2, MAX_SPEED);

}

void turnRight() {

  analogWrite(LEFT_MOTOR_PIN1, LOW);

  analogWrite(LEFT_MOTOR_PIN2, MAX_SPEED);

  analogWrite(RIGHT_MOTOR_PIN1, MAX_SPEED);

  analogWrite(RIGHT_MOTOR_PIN2, LOW);

}

void turnLeft() {

  analogWrite(LEFT_MOTOR_PIN1, MAX_SPEED);

  analogWrite(LEFT_MOTOR_PIN2, LOW);

  analogWrite(RIGHT_MOTOR_PIN1, LOW);

  analogWrite(RIGHT_MOTOR_PIN2, MAX_SPEED);

}

void stop() {

  analogWrite(LEFT_MOTOR_PIN1, LOW);

  analogWrite(LEFT_MOTOR_PIN2, LOW);

  analogWrite(RIGHT_MOTOR_PIN1, LOW);

  analogWrite(RIGHT_MOTOR_PIN2, LOW);

}


إرسال تعليق

أحدث أقدم