مقدمة
في هذا الدرس سنقوم بعمل نظام حساسات اصطفاف السيارة، بحيث نبرمج متحكم الاردوينو على تحسس المسافة باستخدام حساس الموجات فوق الصوتية (Ultrasonic sensor) لحساب المسافة بين المستشعر والجسم ، وكلما اقترب الحساس من جسم ما، يقوم النظام بإصدار تنبيه صوتي أو وميض ضوئي لتنبية من احتمالية الإصطدام.
المواد والأدوات
X1 حساس الموجات الفوق صوتي (Ultrasonic)
الثنائي المشع للضوء ( 3×احمر , 3× أزرق , 2× أخضر).
X1 طنان كهربائي
X9 مقاومة 220 اوم
اسلاك توصيل ذكر/ذكر (Jumper Wires Male Male)
حساس الموجات فوق الصوتية (Ultrasonic sensor)
حساس الموجات فوق الصوتية (Ultrasonic sensor) يقوم باطلاق موجات عالية التردد، وإذا اصطدمت بجسم ما ترتد الموجات على شكل صدى،عند ارتداد هذه الموجة يتم حساب الزمن التي استغرقته في الارتداد ( العودة ). مثل ما يقوم به الخفاش الذي يطير في الليل مستعينا بالموجات الفوق صوتية حيث تسقط على الأجسام أمامه وتنعكس عنها ويسمعها فيحدد مساره دون الحاجة إلى حاسة النظر.
- يحتوي حساس الموجات الفوق صوتية على أربع دبابيس .
Vcc و GND لتزويد الحساس بالطاقة. - Trig إرسال الموجات فوق الصوتية.
- Echo إستقبال صدى الموجة الصوتية.
توصيل الدائرة
توصيل 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 بالجزء الموجب (Anode) للـ الثنائي المشع للضوء .
توصيل حساس الموجات فوق الصوتية (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 |
*يمكنك الإطلاع على الدرس الخامس لمعرفة المزيد عن الـ 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