سيارة روبوت ذكية اكتب تعليقُا

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

مقدمة عن المشروع

العالم اليوم يتطلع للراحة والرفاهية ,فوسائل النقل أو المواصلات واحدة من محققات ذلك التطلع , أذا أصبح اليوم أمتلاك سيارة فارحة شيئ من المتعة والراحة في التنقل بعيدا عن زحمة المواصلات .

تخيل معي لو أن هذه السيارة الفارحة أو دعنا نسميها فاخرة كانت تسير بك لوحدها من دون أن تضغظ على الوقود أو حتي تمسك بعجلة القيادة , وتوصل بك للمكان الذي حددته لها مسبقا , ماذا سوف يكون شعورك حينها ؟؟؟؟ . بلا شك هذا ما سنناقشه اليوم هنا فدعنا نبدأ الان ……

مشروع السيارة الذكية باستخدام الاردوينو يمكن تطبيقه علي مستو السيارة العادية أو الفعلية . ففكرة المشروع هي عبارة عن روبوت ذكية يسير بوحده بالاستفادة من حساس الالتراسونيك أو حساس الموجات فوق الصوتية  الذي تطرقنا له سلفا يمكنك مراجعته من هنــا  يمكن الاستعانة به في توفير مسار خالي من العوائق  . حيث تسير السيارة في الاتجاه الامامي بأقصي سرعة ويكون الحساس فى وضع البحث عن العوائق أمامه , أذا تواجد أي جسم امام الحساس تتوقف السيارة ويبدأ الحساس في البحث عن مسار خالي من العوائق وذلك بمساعدة محرك السيرفو موتور الذي يحمل الالتراسوينك فوقه . يتم البحث في الاتجاهين الجانبين للسيارة أي في أتجاه 0 درجة  و أتجاه 180 درجة  وأذا كان كلا المسارين خالي يتم المقارنة بينهما ليحدد المسار الاكثر خلوا  من العوائق  وحينها تتجهة السيارة نحوه .

متطلبات المشروع

  • Arduino UNO R3
  • L293D motor drive shield
  • HC-SR04 ultrasonic sensor
  • holder for HC-SR04
  • TowerPro SG90 servo motor
  • SG90 servo arms
  • mount for HC-SR04 and SG90 servo
  • 2 gear motors (1:48) 3V-6V DC
  • 2 tire wheels (65mm)
  • wheel mounts
  • 2 speed encoders
  • caster wheel
  • 4 AA battery pack
  • rocker switch
  • car chassis
  • screws
  • nuts
  • extender nuts
  • wires
  • male headers
  • 4 AA batteries
  • 9v battery (optional)
  • 9v battery power cord (optional)

هنالك بعض أدوات العمل وهي أدوات مساعدة في تصميم المشروع وأذا لم تتوفر لديك يمكن العمل بأدوات بديلة تأدي نفس الغرض . وهي موضحة كالتالي .

  • soldering iron (Weller WLC100)
  • silver bearing solder
  • solder wick
  • Phillips-head screwdriver
  • needle nose pliers
  • wire stripper
  • breadboard or foam pad (optional)
  • multimeter (optional)
تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.

طريقة العمل والتوصيل

الادوات المطلوبة لتنفيذ هذا المشروع بالصور التالية

FUM39UOJ9EH3S30.LARGE

في البداية يتم تجميع هيكل السيارة والمحركات  وربط كل مكوناته كما بالصور التالية

F1FFI1AJ9EH3SVY.LARGE
F6DSIVKJ9EH3T3J.LARGE

الان نقوم بأضافة العجلة المتحركة وباقي العجلتين وربطهم في رؤس المحركات كما بالصور التالية

F7V5ZDFJ9EH3T5N.LARGE
FK89R9AJ9EH3TBV.LARGE
FDEO9G8J9EH3TFF.LARGE

نأتي الان الي تثبيت محرك السيرفو موتو  في مقدمة الهيكل من أتجاه العجلتين كما بالصور التالية

FIOR7O4J9EH3TGG.LARGE
FEDF4GLJ9EH3THG.LARGE

والان نقوم بتثبيت  الدريفر موتور على لوحة الاردوينو وتثبيتهما على الهيكل مع تثبيت حساس الالتراسونيك علي محرك السيرفو موتور كما يتضح بالصور التالية

FVHBJJWJ9EH3SUC.LARGE
F8KFQAJJ9EH3UPN.LARGE

وأخيرا يتم وضع حاوي البطاريات  ووضع البطاريات عليه مع لحام جميع الاسلاك في مواضعها  . حيث يوصل المحركات الي الدريفر ويوصل الدرايفر مع الاردوينو بعد تغذيته بمصدر الطاقة الخارجي , ويتم توصيل محرك السيرفو موتور وحساس الالتراسونيك الي الاردوينو كما بالصور التالية .

FR4E50JJ9EH5XZX.LARGE
F3NV0GIJ9EH5XZ7.LARGE

الان يتم توصيل الاردوينو بمنفذ الي أس بي  وتحميل الكود البرمجي عليها.

مخطط التوصيل:

مخطط توصيل سيارة روبوت
لتحميل الكود البرمجي اضغط هنا

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

// ielectrony.com //

#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>

#define TRIG_PIN A5
#define ECHO_PIN A4
#define MAX_DISTANCE 200
#define MAX_SPEED 190 // sets speed of DC motors
#define MAX_SPEED_OFFSET 20

NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(3, MOTOR12_1KHZ);

Servo myservo;

boolean goesForward=false;
int distance = 100;
int speedSet = 0;

void setup() {

myservo.attach(9);
myservo.write(115);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}

void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);

if(distance<=15)
{
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);

if(distanceR>=distanceL)
{
turnRight();
moveStop();
}else
{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance = readPing();
}

int lookRight()
{
myservo.write(50);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
}

int lookLeft()
{
myservo.write(170);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
delay(100);
}

int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}

void moveStop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
}

void moveForward() {

if(!goesForward)
{
goesForward=true;
motor1.run(FORWARD);
motor2.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
}

void moveBackward() {
goesForward=false;
motor1.run(BACKWARD);
motor2.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}

void turnRight() {
motor1.run(FORWARD);
motor2.run(BACKWARD);
delay(300);
motor1.run(FORWARD);
motor2.run(FORWARD);
}

void turnLeft() {
motor1.run(BACKWARD);
motor2.run(FORWARD);
delay(300);
motor1.run(FORWARD);
motor2.run(FORWARD);
}

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *