Spectrum Team
./عضو جديد


السمعة:
مشروع دبابة سبيكتروم

هو مشروع يعمل على مبدأ حركة الدبابة أو العربة إلى الأمام دائمًا, ولكن إن وجدت جسم أمامها من خلال Ultrasonic Sensor (مستشعر الموجات فوق الصوتية) فإنها تقوم بالنظر يمينًا ويسارًا ليجد الإتجاه الذي لا يوجد به جسم ويستطع التحرك له بدون وجود عوائق.
العربة أو الدبابة تتكون مما يلي:
- Arduino UNO
- مستشعر الموجات فوق الصوتية Ultrasonic Sensor
- مصدر طاقة و MINI SERVO MOTOR (محرك سيرفو صغير)
- جسم الدبابة وبعض الأسلاك
تمثيل لسريكت (الدارة) على برنامج محاكاة
ما يحصل هو أن الدبابة تتحرك إلى الأمام وعند رؤيتها جسم من خلال الموجات فوق الصوتية, فإن محرك السيرفو يعمل ويحرك مسشعر الموجات فوق الصوتية بزاوية مُعينة نحن نحددها يمينًا ويسارًا, ويبقى مُستشعر الموجات يرسل إشارات إلى حين رؤيته اتجاه يمكنه السير به من دون مُعوقات.معلومة: يعمل مُستشعر الموجات فوق الصوتية ( Ultrasonic Sensor ) على مبدأ إرسال الموجات بشكلٍ دائم, وعندما يتلقى رد لهذه الموجات فإنه يكتشف وجود جسم أمامه يرد الموجات المرسلة.
وللمزيد من التفاصيل عن مبدأ عمل المُستشعر شاهد هذا الفيديو

والآن هذه العملية كلها يتم برمجتها من خلال الـ Arduino و هذا هو الكود المستخدم
وبالطبع تحتاج لمصدر طاقة, وجسم الدبابة يمكن طباعته على الطابعة ثلاثية الأبعاد 3D أو يوجد عدد من الأجسام والهياكل الجاهزة للاستخدام#include <Servo.h> //Servo motor library. This is standard library
#include <NewPing.h> //Ultrasonic sensor function library. You must install this library
//our L298N control pins
const int LeftMotorForward = 5;
const int LeftMotorBackward = 4;
const int RightMotorForward = 3;
const int RightMotorBackward = 2;
//sensor pins
#define trig_pin A1 //analog input 1
#define echo_pin A2 //analog input 2
#define maximum_distance 200
boolean goesForward = false;
int distance = 100;
NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function
Servo servo_motor; //our servo name
void setup(){
pinMode(RightMotorForward, OUTPUT);
pinMode(LeftMotorForward, OUTPUT);
pinMode(LeftMotorBackward, OUTPUT);
pinMode(RightMotorBackward, OUTPUT);
servo_motor.attach(11); //our servo pin
servo_motor.write(90);
delay(200);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop(){
int distanceRight = 0;
int distanceLeft = 0;
delay(50);
if (distance <= 30){
moveStop();
delay(300);
moveBackward();
delay(700);
moveStop();
delay(300);
distanceRight = lookRight();
delay(500);
distanceLeft = lookLeft();
delay(500);
if (distance >= distanceLeft){
turnRight();
moveStop();
}
else{
turnLeft();
moveStop();
}
}
else{
moveForward();
}
distance = readPing();
}
int lookRight(){
servo_motor.write(5);
delay(500);
int distance = readPing();
delay(500);
servo_motor.write(90);
return distance;
}
int lookLeft(){
servo_motor.write(175);
delay(500);
int distance = readPing();
delay(500);
servo_motor.write(90);
return distance;
delay(500);
}
int readPing(){
delay(70);
int cm = sonar.ping_cm();
if (cm==0){
cm=250;
}
return cm;
}
void moveStop(){
digitalWrite(RightMotorForward, LOW);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorBackward, LOW);
digitalWrite(LeftMotorBackward, LOW);
}
void moveForward(){
if(!goesForward){
goesForward=true;
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
}
}
void moveBackward(){
goesForward=false;
digitalWrite(LeftMotorBackward, HIGH);
digitalWrite(RightMotorBackward, HIGH);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorForward, LOW);
}
void turnRight(){
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorBackward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorForward, LOW);
delay(500);
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
}
void turnLeft(){
digitalWrite(LeftMotorBackward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorBackward, LOW);
delay(500);
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
}
كان هذا شرح مُبسط لمبدأ عمل الدبابة وإن شاء الله سنتوسع في المستقبل في عمل كل جزء من أجزائها
المرفقات
التعديل الأخير بواسطة المشرف: