تصميم روبوت متتبع للخط طافئ للحرائق

0

 بسم الله الرحمن الرحيم

بعد ان قمنا بتصميم روبوت الغرض منه اطفاء الحرائق وتصميم روبوت متتبع للخط يمكن الإطلاع عليه من هنا:
سنقوم اليوم بدمج هذه المشاريع مع بعضها البعض حيث سنحصل علي روبوت يقوم بتتبع الخط وعندما يتحسس وجود اي حرائق يقوم باطفاء الحريق


اولا الأدوات:

flame sensor
3x tracking sensor
Arduino
2x dc motors
h-bridge
battery 9v

 line sensor

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

dc motor

هذا نوع من المواتير وهو المستخدم غالبا فى الروبوتات الخاصة بالأردوينو 
سنستخدم فى هذا المشروع هذا النوع من المواتير


h-bridge 

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

Arduino

المتحكم المستخدم للقيام بمعالجة البيانات

flame sensor

حساس اللهب وهو مفيد في معرفة اذا كان هناك حرائق ام لا

ثانيا التوصيلات:


يتكون متتبع الخط من 3 منافذ منفذ الطاقة  5 فولت ومنفذ السالب الي السالب ومنفذ الإشارة حيث يتم توصيل منفذ الإشارة الخاص بالحساس الأيمن الي منفذ رقم 8 الرقمي وتوصيل الحساس الأوسط منفذ الإشارة الي منفذ رقم 9 وتوصيل منفذ الإشارة الخاص بالحساس الأيسر الي منفذ رقم 7 
ويتم توصيل حساس اللهب كالاتي منفذ الطاقة الي 5 فولت ومنفذ السالب الي السالب ومنفذ الإشارة الي 6 الرقمي
يتم توصيل المضخة الخاصة بضخ المياه عن طريق ترانزيستور npn فحيث يتم توصيل emiter الي السالب الخاص بالمضخة وتوصيل collector الي السالب الخاص ببطارية 9 فولت وتوحيد الطرف السالب مع توصيل سالب اﻷردوينو معهم و توصيل base الخاص بالترانزيستور الي منفذ 5 الرقمي
وتوصيل المواتير dc الي h-bridge وتوصيل منافذ الإشارة الخاصة ب h-bridge الي المنافذ رقم A0,A1,A2,A3,A4

مجسم الروبوت 

المجسم الذى سنستخدمه اليوم سيكون بهذا الشكل
نقوم بلصق المواتير بهذا الشكل


بعد ذلك قوموا بوضع باقى المكونات على حسب مهارتكم

يجب وضع حساس الخط فى مقدمة الروبوت وجعل مسافة 1 سم بين الحساس والأرض
ويجب وضع حساس فى اقصي يمين مقدمة الروبوت 
ووضع اخر فى اقصى يسار مقدمة الروبوت
ووضع الأخير فى وسط مقدمة الروبوت
فى الجزء المواجه الى الأرض

ثالثا الكود : 

const int LeftMotorForward =A0;
const int LeftMotorBackward =A1;
const int RightMotorForward =A2;
const int RightMotorBackward =A3;
const int EnableAB =A4;

const int sensor_right = 8;
const int sensor_middle = 9;
const int sensor_left = 7;

const int flamese = 6;
const int pump = 5;

void mforward()
  //to make robot move forward
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  Serial.println("go forward!");
}
void mleft()
{
  //to move robot left
  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(LeftMotorForward, LOW);
  Serial.println("go left!");
}
void mright()
{
  //to move robot right
  digitalWrite(LeftMotorForward, HIGH);
   digitalWrite(RightMotorForward, LOW);
}
void mstop()
{
 //to stop the robot
  digitalWrite(RightMotorForward, LOW);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  digitalWrite(LeftMotorBackward, LOW);
  Serial.println("Stop!");
}
void setup()
{   
  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
  pinMode(EnableAB,OUTPUT);
  digitalWrite(EnableAB,1);
  delay(100);
}
void loop()
{
  int right_state = digitalRead(sensor_right);
  int left_state = digitalRead(sensor_left);
  int middle_state = digitalRead(sensor_middle);
  if(right_state == 0 && left_state == 1 &&       middle_state == 1)
  {
    mright();}
  if(right_state == 1 && left_state == 0 && middle_state == 1)
  {
    mleft();}
    if(right_state == 1 && left_state == 1 && middle_state == 0)
  {
  mforward(); }
  if(right_state == 1 && left_state == 1 && middle_state == 1)
  {
  mstop();}}
void fire_fight(){
  int x = digitalRead(flamese);
  if(x==1){
    digitalWrite(pump,1);
  }else{
    digitalWrite(pump,0);}}
في البداية يجب تعريف المتغيرات الأساسية مثل منافذ المواتير والحساسات ومنفذ المضخة وتعريف المدخلات والمخرجات
ثم القيام بعمليات مقارنة هل الخط يتجه لليمين تحرك الروبوت لليمين هل الخط متجه للأمام حرك الروبوت للامام هل الخط يتجه لليسار تحرك الروبوت ناحية اليسار و اذا كانت هناك اي اشارة من حساس اللهب قم بتشغيل المضخة علي الفور 

لتحميل الكود اضغط هنا 

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

لا يوجد تعليقات

أضف تعليق