بسم الله الرحمن الرحيم
بعد اخر مشروع صممناه وهو التحكم بسيارة باستخدام ir remote
ويمكن الإطلاع عليه من هنا
سنقوم اليوم بتصميم احد التطبيقات المهمه لروبوت السيارة وهو طافئ الحريق حيث سنقوم بتصميم روبوت سيارة يتنقل فى المكان ويتعقب اماكن النيران الى ان يصل اليها ثم يضخ المياه لإطفاءها
اولا الأدوات :
3x flame sensor
Arduino uno
2x motor dc
h-bridge
transistor pnp
pump 9v
battery 9v
flame sensor
او حساس اللهب ولهذا الحساس القدرة على تعقب اماكن النيران
ويحتوى على 4 منافذ سبق لنا وقمنا بشرحه فى الدروس المتوسطه
arduino uno
المتحكم الذي سنستخدمه لقيام بمعالجه البيانات
motor dc
المواتير التى سنستخدمها لكى يستطيع الروبوت الحركة
water pump
مضخة المياه التى سنستخدمها لإطفاء اللهب
h-bridge
شريحة من اهم الشرائح التى سنستخدمها والتى منها سيتم التحكم بالمواتير و عملها واتجاه دورانها
ثانيا التوصيلات :
تحتوى حساسات flame على 4 منافذ نحن سنستخدم 3 فقطمنفذ الطاقة ومنفذ السالب ومنفذ الخرج التماثلى يتم توصيل منفذ الطاقة الى 5 فولت وتوصيل منفذ السالب الى السالب وتوصيل منفذ الخرج التماثلي الى الأردوينو
من ثم توصيل المواتير الى h-bridge كما هو موضح فى الأعلى
من ثم توصيل منافذ الداتا الى الأردوينو منافذ in الخاصه H-bridge
من ثم توصيل شريحة h-bridge بالطاقة من بطارية 9 فولت
من ثم توصيل المضخه الى emiter الخاص بالترانزيستور وتوصيل collecotr الى البطارية 9 فولت +
وتوصيل الطرف السالب من المضخة الى -
وفى النهاية توصيل base الى الأردوينو
ثالثا المجسم :
ونتجه الأن الى تركيب جسم الروبوت
اولا نحضر مثل هذا المجسم لا تهم المادة المصنعة لكن المهم هو ان تكون المادة وزنها خفيف
ونقوم بتوصيل المواتير بالعجلات كما هو موضح بالصورة
ونقوم بلصق المواتير كما هو موضح فى الصورة
فينتج لدينا هذا الشكل
كل ما عليكم وضع باقى التوصيلات على هذا المجسم وهذا الأمر يقف على حسب مهارتكم
رابعا الكود :-
#define IN1 6
#define IN2 5
#define IN3 4
#define IN4 3
#define EN1 7
const int pump = 8;
const int sensor_right = A2;
const int sensor_middle = A0;
const int sensor_left = A1;
void forward()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void reverse()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void left()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void right()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void stoprobot()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(EN1,OUTPUT);
pinMode(pump,OUTPUT);
digitalWrite(EN1,1);
delay(100);
}
void loop()
{
int right_state = analogRead(sensor_right);
int left_state = analogRead(sensor_left);
int middle_state = analogRead(sensor_middle);
if(right_state > left_state && right_state > middle_state)
{
right();
}
if(left_state > right_state && left_state > middle_state)
{
left();
}
if(middle_state < 800)
{
forward();
}
if(middle_state > 800)
{
digitalWrite(pump,1);
}
else{
digitalWrite(pump,0);
stoprobot();
}
}
خامسا شرح الكود :-
الكود كما هو موضح فى الأعلى يؤدى الغرض الأتي :
في البداية تعريف المنافذ الخاصه بالموتور
#define IN1 6
#define IN2 5
#define IN3 4
#define IN4 3
#define EN1 7
من ثم تعريف منافذ الحساسات والمضخه
const int pump = 8;
const int sensor_right = A2;
const int sensor_middle = A0;
const int sensor_left = A1;
من ثم انشاء الدالات المسئولة عن تحريك الموتور
void forward()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void reverse()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void left()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void right()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void stoprobot()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
ومن بعد ذلك القيام بتعريف جميع المنافذ السابقة كخرج ماعدا منافذ الحساسات التى لا يجب تعريفها لان المنافذ التماثليلة تمكون معرفة مسبقا كدخل
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(EN1,OUTPUT);
pinMode(pump,OUTPUT);
من ثم انشاء ثلاثة متغيرات والقراءة من ثلاث حساسات وجعل القيمة كل حساس فى احد المتغيرات الثلاثة
int right_state = analogRead(sensor_right);
int left_state = analogRead(sensor_left);
int middle_state=analogRead(sensor_middle);
بعد ذلك القيام بالشروط :
فإذا كانت قراءة الحساس الأيمن هى الأكبر قم بدوران ناحية اليمين
اذا كانت قراءة الحساس الأيسر هى الأكبر قم بدوران ناحية اليسار
اذا كانت قراءة الحساس الأوسط اقل من 800 قم بالتقدم الى الأمام
اذا كانت قراءة الحساس الأوسط اكبر من 800 قم بتشغيل المضخة واطفاء الروبوت
لتحميل الكود اضغط هنا
تصميم وبرمجة : بلال حسان سعدى