حساس المسافة Ultrasonic

ما هو حساس المسافة Ultrasonic:

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

التوصيل

للحساس نوعين من حيث عدد المنافذ حيث يمكن أن يأتي الحساس ب 3 أو 4 أرجل. الحساس باربع منافذ  يحتوي  على الطرف trigger وهو الدخل من الأردوينو للحساس  و الطرف Echo هو الخرج و ينصح بتوصيل مقاومة 1K معه.  في الحساس بثلاث أطراف يتم دمج الطرفين (Trig و Echo   كمنفذ  واحد (SIG)

الحصول على المدة الزمنية

لاحظ استخدام  الأمر pulseIn الذي يعمل على قياس عرض النبضة القادمة من الحساس إلى الأردوينو بالمايكرو ثانية.  يجب تحويل المنفذ من خرج إلى دخل في حالة استخدام الحساس بـ 3 أطراف حيث  أن المنفذ ذاته يتسخدم للإرسال والإستقبال. في حالة استخدام حساس رباعي الأرجل يجب عليك تغير أرقم المنافذ داخل البرنامج ليتناسب مع التوصيل حيث ان البرنامج التالي مخصص إرسال (Ping) و استقبال (echo) عبر المنفذ (3).

				
					unsigned long du; // du : is the duration of the echo
void setup(){
Serial.begin(9600); }
void loop(){
pinMode(3,OUTPUT);
digitalWrite(3,LOW);
delay(2);
digitalWrite(3,HIGH);
delayMicroseconds(2);
digitalWrite(3,LOW);
pinMode(3,INPUT);
du=pulseIn(3,HIGH);
Serial.println("\n");
Serial.println(du);
delay(3000); }
				
			

الإنذار عند الأقتراب

في هذا المثال سيتم إصدار جرس تنبيه عندما تكون المسافة بين الحساس و أي جسم  أقل من 25 سم. لاحظ أن المسافة = الزمن X  السرعة وبما أن سرعة الصوت معلومة (340 متر/للثانية = 0.034 سم/مايكروثانية) ويمكن إجاد الزمن لذا يمكننا الحصول على المسافة . لاحظ أنه تم تقسيم الزمن على 2 حيث أن الزمن الذي تحصلنا عليه هو زمن إنطلاق الموجة من الحساس ورجوعها  مرة أخرى لذا فنحن بحاجة فقط للزمن من إنطلاق الموجه إلى اصتدامها في الجسم. 

				
					
unsigned long du; // du : is the duration of the echo
unsigned long di; // di : is the distance between sensor and object
void setup(){
Serial.begin(9600);
pinMode(2,OUTPUT);
pinMode(3,INPUT);
pinMode(7,OUTPUT);}
void loop(){
digitalWrite(2,LOW);
delay(2);
digitalWrite(2,HIGH);
delayMicroseconds(2);
digitalWrite(2,LOW);
du=pulseIn(3,HIGH);
Serial.println("\n");
di = (du/2)*0.034 ;
Serial.println(di);
if (x < 25 ) {digitalWrite(7,HIGH);}
else {digitalWrite(7,LOW);}
delay(3000); }

				
			

طريقة تمثيل الكود مع الإستعانة بدالة

يمكن تبسيط البرنامج من التمرين السابق حيث يتم استخدام الدالة ()Ultr . 

				
					int x; 
long Ultr(int trig, int echo)
{ pinMode(trig, OUTPUT);  // Clear the trigger
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);   // Sets the trigger pin to HIGH state for 10 microseconds
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  pinMode(echo, INPUT);
  return pulseIn(echo, HIGH);} // Reads the echo pin, and returns the sound wave travel time in microseconds
void setup()
{Serial.begin(9600);}
void loop()
{ int x = 0.01723 * Ultr(2,3);
  Serial.println(x);
  if (x < 25 ) {digitalWrite(7,HIGH);}
  else {digitalWrite(7,LOW);}
  delay(2000); } 

				
			

انتقل إلى المتجر

حساس موجات فوق صوتية

15.00 ر.س

مقاومة

1.00 ر.س

حزمة أسلاك متنوعة

20.00 ر.س

اردوينو اونو | ARDUINO UNO

50.00 ر.س
انتقال إلى الأعلى