الأحد، 14 يوليو، 2013

حساس الأشعة تحت الحمراء SHARP 2Y0A02

SHARP 2Y0A02


 Distance Measuring Sensor Measuring distance 



 في مقالة سابقة تحدثت عن حساس الأشعة تحت الحمراء SHARP 2Y0A21 و قلنا أنه حساس يقرأ المسافة ما بين 10- 80 سم , هناك نوع مماثل له من نفس العائلة و يدعى SHARP 2Y0A02 يتميز بأن له مدى قراءة أوسع يصل ما بين 20 -150 سم .

لا يختلف كثيراً عن النوع السابق سوى بالمدى و السعر , بالأضافة إلى أنه لا نستطيع قراءة باستخدام المايكروكنترولر لمسافة أقل من 20 سم نظراً لطبيعة منحنى العلاقة بين الفولتية و المسافة لهذا الحساس .

ما ستحتاجه لتنفيذ هذه التجربة :



1) بطاقة اردوينو 
2) حساس الاشعة تحت الحمراء SHARP 2Y0A02 .
3) اسلاك توصيل .

التوصيل :


طريقة حساب المسافة :

تختلف طريقة حساب المسافة بينه و بين الحساس SHARP 2Y0A12 نظراً لاختلاف العلاقة المبينة بالمنحنى لذلك علينا باستخدام قانون ايجاد المسافة بين نقطتين و الميل ايجاد هذه العلاقة من المنحنى , يمكنك مراجعة المقال الخاص ب SHARP 2Y0A02 لتتعرف على كيفية ايجادها .

بالمحصلة وجدت أن المعادلة التي تربط مقلوب المسافة X و الفولتية Y تعطى بعدة  علاقات : 

للمسافة بين 150سم - 30 سم 
للمسافة بين 30-20 سم .
للمسافة بين 20-15 سم .

كل واحدة منهم في معادلة في جملة if statement  

لأن المنحنى بشكل عام متغير بين هذه النقاط تقريباً .
شيء مهم أخير أضيفه , قد تحصل أخطاء في القراءات عند استعمالك لهذا الحساس , أحرص على اتباع التالي :


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


ثانياً سيعطي الحساس خطأ اذا كان الجسم الذي أمامه يتحرك عمودياً , هذا يسبب بطء استجابة الحساس و يعطي اجابات غير منطقية , الحركة للجسم الذي امامه تكون أفقية , كما هو مبين بالرسم .

اعطي هذا الحساس الوقت الكافي لقراءة المسافة لأنه على الأقل يحتاج ل 60ملي ثانية حتى يعطي تحديثاً للمسافة .




البرنامج :
//****************************************************
//Name :Mohannad Rawashdeh .
//Date "1/7 /2013 3:00pm
// Description: This  Code for SHARP IR 2Y0A02 
// Connect V0 To analog pin A0
// Programmed for http://www.genotronex.com/
//****************************************************************void setup() {
  // initialize serial communication at 9600 bits per second:
  void setup(){
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  float voltageValue=sensorValue*4.88E-3;
   Serial.print("VOLTAGE");
     Serial.println(voltageValue);
  if(voltageValue>=0 && voltageValue<2){
     float inverseDistance=(0.017*voltageValue)-0.001;
      float Distance=1/inverseDistance;  
     Serial.print(Distance);
     Serial.println(" cm ");
  }
  //...............................
  if(voltageValue>=2 && voltageValue<2.45){//30 -20 cm
    float inverseDistance=(0.036*voltageValue)-0.039;
    float Distance=1/inverseDistance;  
    Serial.print(Distance);
    Serial.println(" cm ");
  }
   if(voltageValue>=2.45 && voltageValue<2.78){//20-15cm
     float inverseDistance=(0.07*voltageValue)-0.12;
      float Distance=1/inverseDistance;  
     Serial.print(Distance);
     Serial.println(" cm ");
  }
  delay(1000);
}
 

بإمكانك فتح شاشة السيريال في الأردوينو لترى القراءات التي يعطيها الحساس .




الكود دقيق لغاية 15 سم و بخطأ +-2سم و يعتمد حسب الجسم الذي ترتد عنه الأشعة . 


0 التعليقات :

إرسال تعليق

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.