مشروع مستشعر الحركة | PIR motion detector with Arduino Uno

 

عارف يعني ايه مستشعر الحركة PIR motion detector وبيشتغل ازاي؟



خلونا نعمل المشروع الصغير دا عشان نتعرف على حساس الحركة ونفهمه أكتر.

هنحتاج ايه؟

  • Arduino UNO
  • PIR Motion Sensor
  • LED
  • Jumper wires
  • USB-A to USB-B Cable
  • Breadboard

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

تعريف المكونات

  1. Arduino Uno + USB-A to USB-B cable

    الـArduino هو عبارة عن جهاز كمبيوتر صغير بنكتب عليه برنامج والـArduino بينفذه، العقل المدبر جوا الـArduino هو الـmicrocontroller، ودا فيه منه انواع كتير، اللي موجود في الـ Arduino Uno اسمه ATMega328P-PU، ودي نبذة مختصرة عن الـArduino.

    احنا هنستخدم كابل USB-A to USB-B، ودا الكابل اللي بيجي مع الـArduino عشان نقدر نوصله على الكمبيوتر. مدخل الـUSB ليه أكتر من شكل، USB-A يعني USB-Standard A وكذلك USB-B، شكلهم زي الصورة كدة:

     
  2. PIR Motion Sensor


  3. المستشعر دا ببساطة بيستخدم الأشعة تحت الحمراء عشان يكتشف أي حركة على بعد 10 متر منه (النطاق بتاعه من 5 لـ 12 متر تقريبا) ولما يكتشف حركة بيبعت إشارة للأردوينو وساعتها نقدر نعمل حاجة بناء على الحركة دي.


    دا شكل المستشعر من الداخل، المستشعر ليه 3 رجول، واحدة power  وواحدة ground  وواحدة signal.
    بيشتغل ازاي؟ لما الحساس يلاقي انه فيه جسم بيتحرك قدامه بيبعت على رجل الإشارة logic 1 يعني 3 فولت.

    دلوقتي لازم نتعرف على خصائص المستشعر دا، زي ما قولنا لما المستشعر بيحس بحركة بيطلع 3 فولت على رجل الإشارة، طب لمدة قد ايه؟ دا اللي بيتحكم فيها الOutput timing لما نغير قيمة المقاومة دي بنزود الوقت أو نقلله.
    طب لو الحركة مستمرة قدام المستشعر، هيعمل ايه؟ فيه خيارين:
    1. auto-reset: يعني هيفضل المدة اللي متحددة Logic 1 وبعدين يرجع logic 0، هيلاقي فيه حركة؟ يقوم يرجع logic 1 وبعدين loigc 0 وهكذا لحد ما الحركة تقف.
    2. no reset: طول ما فيه حركة يفضل logic 1 لحد ما الحركة تقف.

    اخر حاجة المقاومة بتاعة الـ sensitivity ودي بتحدد المستشعر هيستجيب للحركة لحد كام متر؟

  4. LED
    الـLED هو عبارة عن diode بس بيشع ضوء لما بنحط جهد على طرفيه، زي الـdiode العادي ما بيحتاج عالاقل 0.7 فولت على طرفيه عشان يشتغل، الـLED كذلك محتاج عالاقل جهد معين عشان يشتغل، كام الجهد دا؟ بيختلف باختلاف لون الـLED ونوعه، بيكون غالبا 1.5 فولت او اكتر، زي ما الـdiode ليه طرف موجب وسالب، كذلك الـLED، الطرف الموجب بيتعرف بالرجل الطويلة شوية عن الرجل التانية، أو لو الـLED رجليه متساويين هنلاقي انه الرجل السالب جوا الـLED عريضة شوية، والموجب رفيعة، زي الصورة كدة:

    فيه طريقتين عشان نشغل الـLED باستخدام الـArduino:الطريقة الأولى: نوصل الطرف الموجب بالـ5 فولت أو الVcc بشكل عام، ونوصل الطرف التاني على أحد المخارج بتاعة الـArduino، ونتحكم فيه من جوا، لما المخرج يكون عليه OUTPUT HIGH طرفين الـLED هيكون عليهم 5 فولت وبالتالي الـLED مش هينور، طب لو OUTPUT LOW هيبقا طرف عليه 5 فولت والتاني عليه صفر فولت أو ground وبالتالي هينور.الطريقة التانية: نوصل الطرف السالب بالأرضي (الـpin اللي مكتوب عليه gnd) ، ونوصل الطرف التاني على أحد المخارج بتاعة الـArduino، ونتحكم فيه من جوا، لما المخرج يكون عليه OUTPUT LOW طرفين الـLED هيكون عليهم صفر فولت وبالتالي الـLED مش هينور، طب لو OUTPUT HIGH هيبقا طرف عليه 5 فولت والتاني عليه صفر فولت أو ground وبالتالي هينور.

    اخر حاجة يهمنا نعرفها عن الـLED انه بيعدي تيار قيمته 30 ميللي امبير بحد أقصى، لو اكتر من كدة ممكن يتحرق، بالتالي بنحتاج نحط مقاومة على التوالي مع الـLED قيمتها 220 اوم غالبا عشان تقلل التيار اللي بيعدي، ازاي؟

    فرق الجهد على طرفي الـLED هيكون 5-0=5 فولت، والمقاومة بتاعة الـLED نفسه بتكون قليلة جدا فلما نحط قبلها ال220 اوم بيبقا المقاومة الكلية تقريبا 220 اوم، بالتالي التيار اللي هيمر هيكون:
    5/220=22.7 ميللي امبير تقريبا ودا كويس جدا واقل من الحد الاقصى.

الدايرة



** لاحظ انه الـLED مش متوصل معاه مقاومة في الدايرة بس مننساش انه لازم نضيفها عشان نحافظ عالـArduino وعلى الـLED.

الكود

int led = 13;                // the pin that the LED is atteched to
int sensor = 2;              // the pin that the sensor is atteched to
int state = LOW;             // by default, no motion detected
int val = 0;                 // variable to store the sensor status (value)

void setup() {
  pinMode(led, OUTPUT);      // initalize LED as an output
  pinMode(sensor, INPUT);    // initialize sensor as an input
  Serial.begin(9600);        // initialize serial
}

void loop(){
  val = digitalRead(sensor);   // read sensor value
  if (val == HIGH) {           // check if the sensor is HIGH
    digitalWrite(led, HIGH);   // turn LED ON
    delay(500);                // delay 100 milliseconds 
    
    if (state == LOW) {
      Serial.println("Motion detected!"); 
      state = HIGH;       // update variable state to HIGH
    }
  } 
  else {
      digitalWrite(led, LOW); // turn LED OFF
      delay(500);             // delay 200 milliseconds 
      
      if (state == HIGH){
        Serial.println("Motion stopped!");
        state = LOW;       // update variable state to LOW
    }
  }
}

الخطوات

  1. نوصل الدايرة زي الصورة وبعدين نوصل الـArduino بالكمبيوتر عن طريق الكابل.
  2. نفتح برنامج Arduino IDE وننسخ الكود ونحطه في البرنامج.
  3. نختار من قايمة Tools>board>Arduino Uno.
  4. من نفس القايمة نختار Tools>Port>COM4 أو COM3 حسب الكمبيوتر.
  5. هندوس على زرار السهم اللي موجود فوق هيرفع الكود على الـArduino وبكدة نكون خلصنا.
  6. حرك ايدك قدام المستشعر ولاحظ ازاي الـLED بينور.

وبكدة نكون خلصنا، اتمنى تكونوا استفدتم من المشروع ده ومعادنا مع مشروع تاني مع إلكترون.

 
 


Comments

Popular Posts