الكود المرفق يستخدم لتحكم في روبوت يتبع الإنسان باستخدام لوحة Arduino. أدناه شرح مفصل لكل سطر مع شرح عام للكود:
```c
// تعليق: روبوت تتبع الإنسان باستخدام Arduino
// تعليق: تم إنشاء الكود بواسطة DIY Builder
// تعليق: يجب تثبيت مكتبات AFMotor و NewPing قبل تحميل الشيفرة
// تعليق: يمكن العثور على جميع المكتبات الضرورية من مدير مكتبات Arduino.
// تعليق: تواصل معي على Instagram لأي استفسار (Insta Id: diy.builder)
// تعليق: تم التعديل في 7 مارس 2022
// تعليق: الإصدار 1.1
// تضمين شيفرة المكتبة:
#include <NewPing.h>
#include <Servo.h>
#include <AFMotor.h>
// تعريف توصيلات الأقراص والمحركات:
#define RIGHT A2 // مستشعر الأشعة تحت الحمراء الأيمن متصل بالمدخل التناظري A2 في Arduino Uno:
#define LEFT A3 // مستشعر الأشعة تحت الحمراء الأيسر متصل بالمدخل التناظري A3 في Arduino Uno:
#define TRIGGER_PIN A1 // دبوس الإرسال متصل بالمدخل التناظري A1 في Arduino Uno:
#define ECHO_PIN A0 // دبوس الاستقبال متصل بالمدخل التناظري A0 في Arduino Uno:
#define MAX_DISTANCE 200 // المسافة القصوى لقياس المسافة:
// متغيرات لتخزين قراءات المستشعرات:
unsigned int distance = 0; // متغير لتخزين مسافة مستشعر الموجات فوق الصوت:
unsigned int Right_Value = 0; // متغير لتخزين قراءة مستشعر الأشعة تحت الحمراء الأيمن:
unsigned int Left_Value = 0; // متغير لتخزين قراءة مستشعر الأشعة تحت الحمراء الأيسر:
// إعداد NewPing مع تعريف الدبابات والمحركات:
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
// إنشاء كائنات المحركات:
AF_DCMotor Motor1(1, MOTOR12_1KHZ);
AF_DCMotor Motor2(2, MOTOR12_1KHZ);
AF_DCMotor Motor3(3, MOTOR34_1KHZ);
AF_DCMotor Motor4(4, MOTOR34_1KHZ);
// إنشاء كائن سيرفو للتحكم في المحرك:
Servo myservo;
int pos = 0; // متغير لتخزين وضعية المحرك:
void setup() {
// تهيئة التواصل التسلسلي:
Serial.begin(9600);
// توصيل المحرك السيرفو بالدبوس 10 في Arduino UNO:
myservo.attach(10);
// دورة لتحريك المحرك السيرفو إلى وضعية ابتدائية:
for (pos = 90; pos <= 180; pos += 1) {
myservo.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15);
}
for (pos = 0; pos <= 90; pos += 1) {
myservo.write(pos);
delay(15);
}
// تعيين وضع الدبابات كإدخال:
pinMode(RIGHT, INPUT);
pinMode(LEFT, INPUT);
}
void loop() {
// انتظار 50 مللي ثانية بين القياسات:
delay(50);
// قياس المسافة باستخدام مستشعر الموجات فوق الصوت:
distance = sonar.ping_cm();
// طباعة المسافة في منفذ التسلسل:
Serial.print("distance");
Serial.println(distance);
// قراءة قيم أقراص الأشعة تحت الحمراء وطباعتها:
Right_Value = digitalRead(RIGHT);
Left_Value = digitalRead(LEFT);
Serial.print("RIGHT");
Serial.println(Right_Value);
Serial.print("LEFT");
Serial.println(Left_Value);
// فحص ما إذا كانت قيمة مستشعر الموجات فوق الصوت في النطاق من 1 إلى 15:
if ((distance > 1) && (distance < 15)) {
// التحرك إلى الأمام:
Motor1.setSpeed(130);
Motor1.run(FORWARD);
Motor2.setSpeed(130);
Motor2.run(FORWARD);
Motor3.setSpeed(130);
Motor3.run(FORWARD);
Motor4.setSpeed(130);
Motor4.run(FORWARD);
} else if ((Right_Value == 0) && (Left_Value == 1)) {
// الدوران لليسار:
Motor1.setSpeed(150);
Motor1.run(FORWARD);
Motor2.setSpeed(150);
Motor2.run(FORWARD);
Motor3.setSpeed(150);
Motor3.run(BACKWARD);
Motor4.setSpeed(150);
Motor4.run
حول الكود اسمبلي