نظام الحسّاسات لاصطفاف السيارة

مبتدئ متوسط

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

يقوم متحكم الاردوينو بتحسس الأجسام القريبة ،مستخدماً حساس الموجات فوق الصوتية (Ultrasonic sensor)  لحساب المسافة بين المستشعر والجسم ، وكلما اقترب الحساس من جسم ما، يقوم الاردوينو بإصدار تنبيه صوتي أو وميض ضوئي إلى الإقتراب واحتمالية الإصطدام.

parking-sensor

حساس الموجات فوق الصوتية (Ultrasonic sensor)

حساس الموجات فوق الصوتية (Ultrasonic sensor)  يقوم باطلاق موجات عالية التردد والتي عند اصطدامها بجسم ما ترتد هذه الموجات على شكل صدى Echo ،عند ارتداد هذه الموجه يتم حساب الزمن التي استغرقته في الارتداد ( العوده ). مثل ما يقوم به الخفاش الذي يطير في الليل مستعينا بالموجات الفوق صوتية التي يحدثها لتسقط على الاجسام امامه وتنعكس عنها ويسمعها فيحدد مساره دون الحاجة الى حاسة الابصار .

parking-sensor

يحتوي حساس الموجات الفوق صوتية على اربع دبابيس  (Vcc,Trig, Echo, GND) .
– Vcc و GND  لتزويد الحساس بالطاقة.
– Trig  لإرسال الموجات فوق الصوتية.
–   Echo  لتلقي  الموجة.

القطع المطلوبة:

سنقوم باستعمال الطنان (Buzzer) و الـ LEDs وحساس الموجات الفوق صوتي (Ultrasonic sensor) معا لتقدير قرب أو بعد مسافة الأشياء عن الحساس الفوق صوتي.

الأدوات التي تحتاجها لهذا المشروع :

-حساس الموجات الفوق صوتي (Ultrasonic)

parking-sensor

LEDs

العدد: 8 ( 3×احمر , 3× أصفر , 2× أخضر).

74HC595 Shift Register

74HC595 Shift Register

Piezo sounder

Buzzer

220 Ω resistor

مقاومة 220 اوم

العدد: 9

arduino uno r3

لوحة الاردوينو (Arduino)

Full size breadboard 830

لوحة التجارب (Breaddboard)

Jumper Wires Male/Male

 اسلاك توصيل ذكر/ذكر (Jumper Wires Male Male)

تصميم لوح التجارب:

يتم توصيل الدائرة كما هو موضح بالصورة:

parking-sensor
توصيل    74HC595 8 Bit Shift Register:
Shift Register Arduino/LEDs
IC Pin 8 , Pin 13 GND
IC Pin 10 , Pin 16 Vcc
IC Pin 11 Pin 11
IC Pin 12 Pin 12
IC Pin 14 Pin 13
IC Pin 15 1st LED
IC Pin 1 -IC Pin 8 2nd – 8th LEDs

ملاحظة : يتم توصيل shift register بالجزء الموجب (Anod) للـ LEDs.

توصيل حساس الموجات فوق الصوتية (Ultrasonic Sensor) :
Ultrasonic Sensor Arduino
VCC +5V
Trig Pin 10
Echo Pin 9
Ground GND
توصيل Buzzer:
Buzzer Arduino
Shorter lead GND
Longer lead Pin 4
توصيل LEDs :

يتم توصيل الجزء السالب (Cathod) للـ LEDs  بمقاومة 220 اوم لكل LED ثم يتم توصيلهم بالـ GND .

 *يمكنك الإطلاع على الدرس الخامس لمعرفة المزيد عن  الـ Shift Register.

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

قم برفع الكود التالي على الاردوينو :

int tonePin = 4;    //Tone - Red Jumper
int trigPin = 10;    //Trig - violet Jumper
int echoPin = 9;   //Echo - yellow Jumper
int clockPin = 11;  //IC Pin 11 - white Jumper
int latchPin = 12;  //IC Pin 12 - Blue Jumper
int dataPin = 13;   //IC Pin 14 - Green Jumper

byte possible_patterns[9] = {
  B00000000,
  B00000001,
  B00000011,
  B00000111,
  B00001111,
  B00011111,
  B00111111,
  B01111111,
  B11111111,
};
int proximity=0;
int duration;
int distance;

void setup() {
  //Serial Port
  Serial.begin (9600);
 
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(tonePin, OUTPUT);
}

void loop() {
  digitalWrite(latchPin, LOW);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
 
  proximity=map(distance, 0, 45, 8, 0);
  //Serial.println(proximity);
 
 if (proximity <= 0){
      proximity=0; 
    } 
 else if (proximity >= 3 && proximity <= 4){ 
     tone(tonePin, 200000, 200);
      } 
 else if (proximity >= 5 && proximity <= 6){ 
     tone(tonePin,5000, 200); 
      } 
 else if (proximity >= 7 && proximity <= 8){
    tone(tonePin, 1000, 200);
     }
  shiftOut(dataPin, clockPin, MSBFIRST, possible_patterns[proximity]);
  digitalWrite(latchPin, HIGH);
 
  delay(600);
  noTone(tonePin);
}

لمحة سريعة عن الكود:

لإستخدام الحساس يتم ارسال نبضة (HIGH Level)على Trig Pin لمدة تزيد عن 10 Microseconds,ثم بعد ذلك LOW, وهذه تمثل الموجه فوق الصوتية المرسلة .

digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);

إذا تم الكشف عن جسم ما أمام جهاز الاستشعار(ستصبح قيمة Echo Pin =HIGH Level)، يتم حساب مدة بقاء الإشارةHIGH   المستقبلة عن Echo pin .

duration = pulseIn(echoPin, HIGH);

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

distance = (duration/2) / 29.1;

حساب المسافة :

المسافة الكلية = الزمن x السرعة

ومن المعروف ان سرعة الصوت  في الهواء ثابت و يساوي 343 م/ث

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

بعد الجسم عن مصدر الأمواج الفوق صوتية =( الزمن x السرعة)/2