Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Arduino
150 min
Share

بناء روبوت يتتبع مصدر الضوء باستخدام الأردوينو

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

Project Video

Overview

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

Getting the Items

Arduino Uno R3 (Voltaat Version)
Get Item
Photoresistor Module
Get Item
2Amp 7V-30V L298N Motor Driver / Stepper Driver (2 Channels)
Get Item
3×18650 Battery Holder
Get Item
Lithium ion 3.7 V 3800mah rechargeable battery – 18650
Get Item
DC Female Jack Plug Extensioin cable (5.5 x 2.1mm)
Get Item
4 Wheel Arduino Car Kit
Get Item
Half-size Breadboard
Get Item
Jumper Wires - Male to Male (40 Pack)
Get Item
Jumper Wires – Male to Female (40 Pack)
Get Item

Steps

فى البداية, قم بتجميع السيارة ذات الاربع عجلات, يمكنك رؤية كيفية تجميعها من خلال الفيديو التالى :

Wiring it Up

قم بتوصيل الأسلاك بين حساسات الضوء ولوحة الأردوينو وقائد المحركات والمحركات كما هو موضح في الصورة أدناه.

التوصيلات من الاردوينو الى لوحة التجارب :

• منفذ ال 5 فولت ← المنافذ الموجبة بلوحة التجارب

• منفذ الجراوند ← المنافذ السالبة بلوحة التجارب

التوصيلات من مدخل البطارية:

‍ نقوم بتوصيل الطرف الموجب لمدخل البطارية ← منفذ ال12V  بقائد المحركات

ونقوم بتوصيل طرف الجراوند لمدخل البطارية ← منفذ الGND بقائد المحركات

التوصيلات من قائد المحركاتL298N   الى لوحة التجارب :

•   منفذ ال 5 فولت من قائد المحركات ← المنافذ الموجبة بلوحة التجارب

•   منفذ الجراوند من قائد المحركات ← المنافذ السالبة بلوحة التجارب

التوصيلات من وصلة مدخل البطارية الى قائد المحركات :

• الطرف الموجب لوصلة مدخل البطارية ← منفذ ال 12+ بقائد المحركات

• الطرف السالب لوصلة مدخل البطارية ← منفذ الجراوند بقائد المحركات

التوصيلات من قائد المحركاتL298N  :

• المنفذ EnA من قائد المحركات ← المنفذ رقم 5 فى لوحة الاردوينو

• المنفذ IN1 من قائد المحركات ← المنفذ رقم 11 فى لوحة الاردوينو

• المنفذ IN2 من قائد المحركات ← المنفذ رقم 10 فى لوحة الاردوينو

• المنفذ ENB من قائد المحركات ← المنفذ رقم 6 فى لوحة الاردوينو

• المنفذ IN3 من قائد المحركات ← المنفذ رقم 9 فى لوحة الاردوينو

• المنفذ IN4 من قائد المحركات ← المنفذ رقم 8 فى لوحة الاردوينو

التوصيلات من المحركات اليمنى :

•  احد اطراف المحرك الأول الأيمن ← احد اطراف المحرك الثانى الأيمن  ← المنفذ OUT1 فى قائد المحركات

•  الطرف الاخر للمحرك الأول الأيمن ← الطرف الاخر للمحرك الثانى الأيمن ← المنفذ OUT2 فى قائد المحركات

التوصيلات من المحركات اليسرى :

•  احد اطراف المحرك الأول الأيسر ← احد اطراف المحرك الثانى الأيسر  ← المنفذ OUT3 فى قائد المحركات

•  الطرف الاخر للمحرك الأول الأيسر ← الطرف الاخر للمحرك الثانى الأيسر ← المنفذ OUT4 فى قائد المحركات

التوصيلات من حساس الضوء الأيمن  :

• منفذ ال VCC من حساس الضوء الأيمن ← المنافذ الموجبة بلوحة التجارب

• منفذ ال GND من حساس الضوء الأيمن ← المنافذ السالبة بلوحة التجارب

• منفذ ال D0 من حساس الضوء الأيمن ← منفذ رقم A0 فى لوحة الاردوينو

التوصيلات من حساس الضوء الأوسط  :

• منفذ ال VCC من حساس الضوء الأوسط ← المنافذ الموجبة بلوحة التجارب

• منفذ ال GND من حساس الضوء الأوسط ← المنافذ السالبة بلوحة التجارب

• منفذ ال D0 من حساس الضوء الأوسط ← منفذ رقم A1 فى لوحة الاردوينو

التوصيلات من حساس الضوء الأيسر  :

• منفذ ال VCC من حساس الضوء الأيسر ← المنافذ الموجبة بلوحة التجارب

• منفذ ال GND من حساس الضوء الأيسر ← المنافذ السالبة بلوحة التجارب

• منفذ ال D0 من حساس الضوء الأيسر ← منفذ رقم A2 فى لوحة الاردوينو

Coding

/*

Voltaat learn (https://www.voltaat.com)

The function of this sketch is to controll a robot equipped with light sensors

that enable it to determine the direction of the light source and accurately

track its movement using the Arduino board.

Connections from the Arduino to the breadboard:

• Arduino 5v pin → breadboard 5v line

• Arduino GND pin → breadboard GND line

The connections from the L298N motor driver to the breadboard:

• 5V pin from the motor driver → breadboard 5v line

• GND pin from the motor driver → breadboard GND line

The connections from the battery input to the motor driver:

• Positive terminal of the battery input → +12V port on the motor driver

• Ground terminal of the battery input → Ground (GND) port on the motor driver

Connections from the l298n motor driver :

• ENA pin → Arduino pin 5

• In1 pin → Arduino pin 11

• In2 pin → Arduino pin 10

• In3 pin → Arduino pin 9

• In4 pin → Arduino pin 8

• ENB pin → Arduino pin 6

The connections from the right motors:

• One terminal of the first right motor → One terminal of the second right motor → OUT1 port in the motor driver

• The other terminal of the first right motor → The other terminal of the second right motor → OUT2 port in the motor driver

The connections from the left motors:

• One terminal of the first left motor → One terminal of the second left motor → OUT3 port in the motor driver

• The other terminal of the first left motor → The other terminal of the second left motor → OUT4 port in the motor driver

Connections from the Right Light Sensor:

• The VCC pin of the right light sensor → breadboard 5v line

• The GND pin of the right light sensor → breadboard GND line

• The D0 pin of the right light sensor → Pin A0 on the Arduino board

Connections from the Middle Light Sensor:

• The VCC pin of the middle light sensor → breadboard 5v line

• The GND pin of the middle light sensor → breadboard GND line

• The D0 pin of the middle light sensor → Pin A1 on the Arduino board

Connections from the Left Light Sensor:

• The VCC pin of the left light sensor → breadboard 5v line

• The GND pin of the left light sensor → breadboard GND line

• The D0 pin of the left light sensor → Pin A2 on the Arduino board

*/

#define L1 A0  // المستشعر الأيسر

#define M1 A1  // المستشعر الأوسط

#define R1 A2  // المستشعر الأيمن

#define IN1 11 // L298n Motor Driver pins.

#define IN2 10

#define IN3 9

#define IN4 8

#define ENA 5

#define ENB 6

void setup() {

 // إعداد دبابيس المستشعرات

 pinMode(L1, INPUT);

 pinMode(M1, INPUT);

 pinMode(R1, INPUT);

 // إعداد دبابيس المحركات

 pinMode(ENA, OUTPUT);

 pinMode(IN1, OUTPUT);

 pinMode(IN2, OUTPUT);

 pinMode(ENB, OUTPUT);

 pinMode(IN3, OUTPUT);

 pinMode(IN4, OUTPUT);

 Serial.begin(9600);  // تهيئة الاتصال التسلسلي

}

void loop() {

 int LSensor = digitalRead(L1);  // قراءة قيمة المستشعر الأيسر

 int MSensor = digitalRead(M1); // قراءة قيمة المستشعر الأوسط

 int RSensor = digitalRead(R1); // قراءة قيمة المستشعر الأيمن

 Serial.print("LSensor: ");

 Serial.println(LSensor);

 Serial.print("MSensor: ");

 Serial.println(MSensor);

 Serial.print("RSensor: ");

 Serial.println(RSensor);

 if ((LSensor == 0) && (MSensor == 0) && (RSensor == 0)) {

   // الحركة للأمام

   moveForward(120, 120);

 } else if ((LSensor == 0) && (MSensor == 0) && (RSensor == 1)) {

   // الانعطاف لليسار

   turnLeft(120, 120);

 } else if ((LSensor == 1) && (MSensor == 0) && (RSensor == 0)) {

   // الانعطاف لليمين

   turnRight(120, 120);

 } else if ((LSensor == 1) && (MSensor == 1) && (RSensor == 1)) {

   // التوقف

   stopMotors();

 }

}

// وظيفة لتحريك المحركات للأمام

void moveForward(int speedLeft, int speedRight) {

 analogWrite(ENA, speedLeft);  // ضبط سرعة المحرك الأيسر

 digitalWrite(IN1, HIGH);

 digitalWrite(IN2, LOW);

 analogWrite(ENB, speedRight); // ضبط سرعة المحرك الأيمن

 digitalWrite(IN3, LOW);

 digitalWrite(IN4, HIGH);

}

// وظيفة للانعطاف لليسار

void turnLeft(int speedLeft, int speedRight) {

 analogWrite(ENA, speedLeft);  // عكس المحرك الأيسر

 digitalWrite(IN1, HIGH);

 digitalWrite(IN2, LOW);

 analogWrite(ENB, speedRight); // المحرك الأيمن للأمام

 digitalWrite(IN3, HIGH);

 digitalWrite(IN4, LOW);

}

// وظيفة للانعطاف لليمين

void turnRight(int speedLeft, int speedRight) {

 analogWrite(ENA, speedLeft);  // المحرك الأيسر للأمام

 digitalWrite(IN1, LOW);

 digitalWrite(IN2, HIGH);

 analogWrite(ENB, speedRight); // عكس المحرك الأيمن

 digitalWrite(IN3, LOW);

 digitalWrite(IN4, HIGH);

}

// وظيفة لإيقاف المحركات

void stopMotors() {

 analogWrite(ENA, 0); // إيقاف المحرك الأيسر

 digitalWrite(IN1, LOW);

 digitalWrite(IN2, LOW);

 analogWrite(ENB, 0); // إيقاف المحرك الأيمن

 digitalWrite(IN3, LOW);

 digitalWrite(IN4, LOW);

}

Testing it Out

بعد رفع الكود البرمجي، قم بتقريب مصدر ضوء قوي من الروبوت، ستجد أن الروبوت يتتبع مصدر الضوء ويسير ورائه أو يبحث عنه.

Resources

No items found.