ESP32 پی آئی آر موشن سینسر کے ساتھ انٹرپٹس اور ٹائمرز کا استعمال کرتے ہوئے - Arduino IDE

Esp32 Py Ayy Ar Mwshn Synsr K Sat An Rp S Awr Aymrz Ka Ast Mal Krt Wy Arduino Ide



ESP32 ایک IoT پر مبنی مائیکرو کنٹرولر بورڈ ہے جسے انٹرفیس، کنٹرول اور مختلف سینسر پڑھنے کے لیے استعمال کیا جا سکتا ہے۔ PIR یا موشن سینسر ان آلات میں سے ایک ہے جسے ہم ESP32 کے ساتھ انٹرفیس کر سکتے ہیں تاکہ ESP32 کا استعمال کرتے ہوئے موشن سینسر کی رینج میں کسی چیز کی حرکت کا پتہ لگایا جا سکے۔

اس سے پہلے کہ ہم PIR سینسر کے ساتھ ESP32 کو انٹرفیس کرنا شروع کریں ہمیں یہ جاننا چاہیے کہ رکاوٹیں کیسے کام کرتی ہیں اور انہیں ESP32 میں کیسے پڑھنا اور ہینڈل کرنا ہے۔ اس کے بعد ہمیں ESP32 پروگرامنگ میں delay() اور millis() فنکشن کے بنیادی تصور کو سمجھنا چاہیے۔







آئیے ESP32 کے ساتھ PIR کے کام پر تفصیل سے بات کرتے ہیں۔



اس مضمون کا مواد یہ ہے:



  1. رکاوٹیں کیا ہیں۔
  • ESP32 پروگرامنگ میں ٹائمر
  • ESP32 کے ساتھ PIR سینسر کو انٹرفیس کرنا

    1: رکاوٹیں کیا ہیں؟

    ESP32 پروگرامنگ میں ہونے والے زیادہ تر واقعات ترتیب وار چلتے ہیں جس کا مطلب ہے کوڈ کی لائن بہ لائن عملدرآمد۔ ان واقعات کو ہینڈل اور کنٹرول کرنے کے لیے جنہیں کوڈ این کے ترتیب وار عمل کے دوران چلانے کی ضرورت نہیں ہے۔ مداخلت کرتا ہے۔ استعمال کیا جاتا ہے.





    مثال کے طور پر، اگر ہم کسی خاص کام کو انجام دینا چاہتے ہیں جب کوئی خاص واقعہ پیش آتا ہے، یا مائکرو کنٹرولر کے ڈیجیٹل پنوں کو ٹرگر سگنل دیا جاتا ہے تو ہم انٹرپٹ کا استعمال کرتے ہیں۔


    رکاوٹ کے ساتھ ہمیں ESP32 ان پٹ پن کی ڈیجیٹل حالت کو مسلسل چیک کرنے کی ضرورت نہیں ہے۔ جب کوئی مداخلت ہوتی ہے تو پروسیسر مرکزی پروگرام کو روک دیتا ہے اور ایک نیا فنکشن کہا جاتا ہے جسے ISR کے نام سے جانا جاتا ہے ( سروس روٹین میں خلل ڈالنا )۔ یہ آئی ایس آر فنکشن اس رکاوٹ کو سنبھالتا ہے جس کے بعد مین پروگرام پر واپس لوٹنا اور اس پر عمل کرنا شروع کرنا۔ آئی ایس آر کی ایک مثال ہے۔ پی آئی آر موشن سینسر کونسا حرکت کا پتہ چلنے کے بعد ایک رکاوٹ پیدا کرتا ہے۔ .



    1.1: ESP32 میں پنوں کو روکتا ہے۔

    کسی بھی ہارڈویئر ماڈیول جیسے ٹچ سینسر یا پش بٹن کی وجہ سے بیرونی یا ہارڈ ویئر میں خلل پڑ سکتا ہے۔ ٹچ انٹرپٹ اس وقت ہوتا ہے جب ESP32 پنوں پر ٹچ کا پتہ چلتا ہے یا GPIO انٹرپٹ بھی استعمال کیا جا سکتا ہے جب کوئی کلید یا پش بٹن دبایا جاتا ہے۔

    اس آرٹیکل میں جب ESP32 کے ساتھ PIR سینسر کا استعمال کرتے ہوئے حرکت کا پتہ چل جائے گا تو ہم ایک رکاوٹ کو متحرک کریں گے۔

    6 SPI مربوط پنوں کے علاوہ تقریباً تمام GPIO پن جو عام طور پر میں آتے ہیں۔ 36 ESP32 بورڈ کا پن ورژن انٹرپٹ کالنگ کے مقصد کے لیے استعمال نہیں کیا جا سکتا۔ لہذا، بیرونی مداخلت کو حاصل کرنے کے لیے مندرجہ ذیل پنوں کو جامنی رنگ میں نمایاں کیا گیا ہے جو ESP32 میں استعمال کر سکتے ہیں:

    یہ تصویر 30 پن ESP32 کی ہے۔

    1.2: ESP32 میں مداخلت کو کال کرنا

    ESP32 میں انٹرپٹ استعمال کرنے کے لیے ہم کال کر سکتے ہیں۔ attachInterrupt() فنکشن

    یہ فنکشن درج ذیل تین دلائل کو قبول کرتا ہے:

      • GPIO پن
      • انجام دینے والا فنکشن
      • موڈ
    attachInterrupt ( digitalPinToInterrupt ( جی پی آئی او ) , فنکشن ، موڈ ) ;


    1: جی پی آئی او پن پہلی دلیل ہے جسے اندر کہا جاتا ہے۔ attachInterrupt() فنکشن مثال کے طور پر، ڈیجیٹل پن 12 کو انٹرپٹ سورس کے طور پر استعمال کرنے کے لیے ہم اسے استعمال کر کے کال کر سکتے ہیں۔ DigitalPinToInterrupt(12) فنکشن

    2: فنکشن to be executed وہ پروگرام ہے جو ہر بار ایک بار جب کسی بیرونی یا اندرونی ذریعہ سے مداخلت تک پہنچ جاتا ہے یا اسے متحرک کیا جاتا ہے۔ یہ یا تو ایل ای ڈی کو جھپکنا یا فائر الارم کو تبدیل کر سکتا ہے۔

    3: موڈ تیسری اور آخری دلیل ہے جو interrupt فنکشن کی ضرورت ہے۔ یہ بیان کرتا ہے کہ رکاوٹ کو کب متحرک کرنا ہے۔ مندرجہ ذیل طریقوں کو استعمال کیا جا سکتا ہے:

      • کم: جب بھی وضاحت شدہ GPIO پن کم ہو تو مداخلت کو متحرک کریں۔
      • اعلی: جب بھی وضاحت شدہ GPIO پن زیادہ ہو تو مداخلت کو متحرک کریں۔
      • تبدیلی: جب بھی GPIO پن اپنی قدر کو زیادہ سے کم یا اس کے برعکس تبدیل کرتا ہے تو ٹرگر انٹرپٹ۔
      • گرنا: جب کوئی خاص پن اونچی حالت سے نیچے کی طرف گرنا شروع ہو جائے تو یہ مداخلت کو متحرک کرنے کا موڈ ہے۔
      • بڑھتی ہوئی: جب کوئی مخصوص پن نچلی حالت سے اونچائی کی طرف بڑھنے لگتا ہے تو یہ مداخلت کو متحرک کرنے کا موڈ ہے۔

    آج ہم استعمال کریں گے۔ بڑھتی ہوئی موڈ کو انٹرپٹ فنکشن کے لیے تیسری دلیل کے طور پر استعمال کریں جب بھی PIR سینسر انٹرپٹ LED کا پتہ لگاتا ہے یا سینسر روشن ہو جاتا ہے کیونکہ یہ نچلی حالت سے بلندی تک جاتا ہے۔

    2: ESP32 پروگرامنگ میں ٹائمر

    مائیکرو کنٹرولر پروگرامنگ میں ٹائمر مخصوص ٹائمر مدت کے لیے یا مخصوص وقت کے لیے ہدایات پر عمل کرنے کے لیے اہم کردار ادا کرتے ہیں۔

    عام طور پر آؤٹ پٹ کو متحرک کرنے کے لیے استعمال ہونے والے دو اہم افعال ہیں۔ تاخیر() اور ملیس() . ان دونوں کے درمیان فرق کے طور پر delay() فنکشن پروگرام کے باقی کام کو روک دیتا ہے جب کہ یہ ایک مقررہ مدت تک چلتا ہے اور پھر پروگرام مین فنکشنز پر واپس چلا جاتا ہے۔

    یہاں ہم PIR سینسر کے ساتھ ایک LED استعمال کریں گے اور ہم مداخلت کے محرکات کے بعد اسے مسلسل چمکانا نہیں چاہتے۔ ہم millis() فنکشن کا استعمال کریں گے جو ہمیں کچھ متعین وقت کے لیے اسے چمکانے کی اجازت دیتا ہے اور پھر اس ٹائم اسٹیمپ کے گزر جانے کے بعد دوبارہ اصل پروگرام میں واپس چلا جاتا ہے۔

    2.1: تاخیر() فنکشن

    delay() فنکشن بہت آسان ہے اس میں صرف ایک دلیل لی جاتی ہے۔ MS غیر دستخط شدہ طویل ڈیٹا کی قسم کا۔ یہ دلیل ملی سیکنڈ میں اس وقت کی نمائندگی کرتی ہے جب ہم پروگرام کو اس وقت تک روکنا چاہتے ہیں جب تک کہ یہ اگلی لائن پر نہ جائے۔

    مثال کے طور پر، درج ذیل فنکشن پروگرام کو روک دے گا۔ 1 سیکنڈ .

    تاخیر ( 1000 )


    delay() مائیکرو کنٹرولرز پروگرامنگ کے لیے بلاکنگ فنکشن کی ایک قسم ہے۔ delay() بقیہ کوڈ کو اس وقت تک عمل میں لانے کے لیے روکتا ہے جب تک کہ اس مخصوص فنکشن کے اوقات مکمل نہ ہوں۔ اگر ہم متعدد ہدایات پر عمل درآمد کرنا چاہتے ہیں، تو ہمیں تاخیری افعال استعمال کرنے سے گریز کرنا چاہیے اس کے بجائے ہم ملی یا بیرونی ٹائمر RTC ماڈیول استعمال کر سکتے ہیں۔

    2.2: ملیس () فنکشن

    millis() فنکشن ESP32 بورڈ نے موجودہ پروگرام کو چلانے کے بعد سے گزرے ہوئے ملی سیکنڈز کی تعداد لوٹاتا ہے۔ کوڈ کی چند سطریں لکھ کر ہم ESP32 کوڈ چلاتے ہوئے کسی بھی موقع پر موجودہ وقت کا آسانی سے حساب لگا سکتے ہیں۔

    millis کا وسیع پیمانے پر استعمال کیا جاتا ہے جہاں ہمیں باقی کوڈ کو بلاک کیے بغیر متعدد کاموں کو چلانے کی ضرورت ہوتی ہے۔ یہ ملیس فنکشن کا نحو ہے جو اس حساب کے لیے استعمال کیا جاتا ہے کہ کتنا وقت گزرا تاکہ ہم ایک مخصوص ہدایات پر عمل کر سکیں۔

    اگر ( موجودہ ملی - پچھلی ملی > = وقفہ ) {
    previousMillis = currentMillis؛
    }


    یہ کوڈ پچھلی ملیس() کو موجودہ ملیس() سے گھٹا دیتا ہے اگر منہا کیا گیا وقت وقفہ کی وضاحت کرنے کے برابر ہو تو ایک مخصوص ہدایات پر عمل کیا جائے گا۔ ہم کہتے ہیں کہ ہم 10 سیکنڈ کے لیے ایل ای ڈی کو جھپکنا چاہتے ہیں۔ ہر 5 منٹ کے بعد ہم وقت کا وقفہ 5 منٹ (300000ms) کے برابر مقرر کر سکتے ہیں۔ ہر بار جب کوڈ چلتا ہے تو کوڈ وقفہ کی جانچ کرے گا، ایک بار جب یہ پہنچ جائے گا تو ایل ای ڈی کو 10 سیکنڈ کے لیے جھپکائے گا۔

    نوٹ: یہاں ہم PIR سینسر کے ساتھ ESP32 کو انٹرفیس کرنے کے لیے millis() فنکشن استعمال کریں گے۔ ملی استعمال کرنے اور تاخیر نہ کرنے کی بنیادی وجہ یہ ہے کہ millis() فنکشن کوڈ کو بلاک نہیں کرتا جیسا کہ delay() فنکشن نے کیا تھا۔ لہذا ایک بار جب PIR حرکت کا پتہ لگاتا ہے تو ایک رکاوٹ پیدا ہوجائے گی۔ انٹرپٹ ملیس() فنکشن کا استعمال ایل ای ڈی کو متعین وقت کے لیے متحرک کرے گا اس کے بعد اگر موشن روک دی جاتی ہے تو ملیس() فنکشن ری سیٹ ہو جائے گا اور اگلے انٹرپٹ کا انتظار کرے گا۔

    اگر ہم نے delay() فنکشن کا استعمال کیا تو یہ کوڈ کو مکمل طور پر بلاک کر دے گا اور ESP32 کی طرف سے کوئی بھی رکاوٹ نہیں پڑھے گا جس کے نتیجے میں پروجیکٹ ناکام ہو جائے گا۔

    3: ESP32 کے ساتھ PIR سینسر کو انٹرفیس کرنا

    یہاں ہم Arduino IDE کوڈ میں millis() فنکشن استعمال کریں گے کیونکہ جب بھی PIR سینسر کسی حرکت کا پتہ لگاتا ہے تو ہم LED کو متحرک کرنا چاہتے ہیں۔ یہ ایل ای ڈی ایک مقررہ وقت تک چمکے گی جس کے بعد یہ معمول کی حالت میں واپس آجائے گی۔

    یہاں اجزاء کی ایک فہرست ہے جس کی ہمیں ضرورت ہوگی:

      • ESP32 ترقیاتی بورڈ
      • PIR موشن سینسر (HC-SR501)
      • ایل. ای. ڈی
      • 330 اوہم ریزسٹر
      • جوڑنے والی تاریں۔
      • بریڈ بورڈ

    منصوبہ بندی ESP32 کے ساتھ PIR سینسر کے لیے:


    PIR سینسر کے ساتھ ESP32 کے پن کنکشن ہیں:

    ای ایس پی 32 پی آئی آر سینسر
    آو وی سی سی
    GPIO13 باہر
    جی این ڈی جی این ڈی

    3.1: PIR موشن سینسر (HC-SR501)

    PIR کا مخفف ہے۔ غیر فعال اورکت سینسر . یہ پائرو الیکٹرک سینسر کا ایک جوڑا استعمال کرتا ہے جو اس کے ارد گرد گرمی کا پتہ لگاتا ہے۔ یہ دونوں پائرو الیکٹرک سینسرز ایک کے بعد ایک جھوٹ بولتے ہیں اور جب کوئی چیز ان کی رینج کے اندر آتی ہے تو حرارت کی توانائی میں تبدیلی یا ان دونوں سینسر کے درمیان سگنل کا فرق PIR سینسر کی پیداوار کو کم کرنے کا سبب بنتا ہے۔ ایک بار جب PIR آؤٹ پن کم ہو جاتا ہے، تو ہم عمل کرنے کے لیے ایک مخصوص ہدایات سیٹ کر سکتے ہیں۔


    مندرجہ ذیل پی آئی آر سینسر کی خصوصیات ہیں:

      • حساسیت کو پروجیکٹ کے محل وقوع کے لحاظ سے سیٹ کیا جا سکتا ہے (جیسے ماؤس یا پتوں کی حرکت کو سینس کرنا)۔
      • پی آئی آر سینسر کو اس بات کے لیے سیٹ کیا جا سکتا ہے کہ یہ کسی چیز کا پتہ لگانے کے لیے کتنی دیر تک۔
      • بڑے پیمانے پر گھریلو سیکورٹی کے الارم اور دیگر تھرمل پر مبنی تحریک کا پتہ لگانے والے ایپلی کیشنز میں استعمال کیا جاتا ہے.

    3.2: پن آؤٹ HC-SR501

    PIR HC-SR501 تین پنوں کے ساتھ آتا ہے۔ ان میں سے دو Vcc اور GND کے لیے پاور پن ہیں اور ایک ٹرگر سگنل کے لیے آؤٹ پٹ پن ہے۔


    PIR سینسر پنوں کی تفصیل درج ذیل ہے:

    پن نام تفصیل
    1 وی سی سی سینسر کے لیے ان پٹ پن ESP32 Vin پن سے جڑیں۔
    دو باہر سینسر آؤٹ پٹ
    3 جی این ڈی سینسر GND

    3.3: کوڈ

    اب پروگرام ESP32 کے لیے Arduino IDE ایڈیٹر میں دیا ہوا کوڈ لکھیں اور اسے ESP32 پر اپ لوڈ کریں۔

    #وقت کی وضاحت کریں سیکنڈ 10
    const int led = 4 ; /* GPIO پن 4 تعریف کے لیے ایل. ای. ڈی */
    const int PIR_Out = 13 ; /* GPIO پن 13 کے لیے PIR باہر */
    غیر دستخط شدہ طویل موجودہ_وقت = ملی ( ) ; /* متغیر کی وضاحت کے لیے ملی اقدار کو ذخیرہ کرنا */
    غیر دستخط شدہ طویل Previous_Trig = 0 ;
    boolean Starting_Time = جھوٹا ;
    void IRAM_ATTR حرکت کا پتہ لگاتا ہے۔ ( ) { /* چیک کریں کے لیے تحریک */
    Serial.println ( 'حرکت کا پتہ چلا' ) ;
    ڈیجیٹل رائٹ ( قیادت، اعلی ) ; /* ایل ای ڈی کو آن کریں۔ اگر شرط ہے سچ */
    شروعاتی_وقت = سچ ;
    پچھلا_ٹریگ = ملی ( ) ;
    }
    باطل سیٹ اپ ( ) {
    سیریل شروع کریں۔ ( 115200 ) ; /* حرکت نبض کے لیے سیریل مواصلات */
    پن موڈ ( PIR_Out، INPUT_PULLUP ) ; /* PIR موشن سینسر موڈ کی وضاحت کی گئی ہے۔ */
    /* پی آئی آر کو ترتیب دیا گیا ہے۔ میں رائزنگ موڈ، سیٹ موشن سینسر پن کے طور پر آؤٹ پٹ */
    attachInterrupt ( digitalPinToInterrupt ( PIR_Out ) ، تحریک کا پتہ لگاتا ہے، بڑھتا ہے۔ ) ;
    پن موڈ ( قیادت، آؤٹ پٹ ) ; /* سیٹ ایل ای ڈی سے کم */
    ڈیجیٹل رائٹ ( قیادت، کم ) ;
    }
    باطل لوپ ( ) {
    موجودہ_وقت = ملی ( ) ; /* موجودہ ذخیرہ کریں وقت */
    اگر ( آغاز_وقت && ( موجودہ_وقت - پچھلا_ٹریگ > ( ٹائم سیکنڈ * 1000 ) ) ) { /* وقت کا وقفہ بعد میں کونسا ایل ای ڈی بند ہو جائے گا */
    Serial.println ( 'حرکت روک دی گئی' ) ; /* پرنٹس کی حرکت رک گئی۔ اگر کوئی تحریک نہیں ملی */
    ڈیجیٹل رائٹ ( قیادت، کم ) ; /* ایل ای ڈی کو کم پر سیٹ کریں۔ اگر شرط ہے جھوٹا */
    شروعاتی_وقت = جھوٹا ;
    }
    }


    کوڈ LED اور PIR آؤٹ پٹ کے لیے GPIO پنوں کی وضاحت سے شروع ہوا۔ اگلا، ہم نے تین مختلف متغیرات بنائے جو حرکت کا پتہ چلنے پر LED کو آن کرنے میں مدد کریں گے۔

    یہ تینوں متغیرات ہیں۔ موجودہ_وقت، پچھلا_ٹریگ، اور آغاز_وقت یہ متغیرات موجودہ وقت، حرکت کا پتہ لگانے کے وقت اور تحریک کا پتہ چلنے کے بعد ٹائمر کو محفوظ کریں گے۔

    پہلے سیٹ اپ حصے میں، ہم نے کمیونیکیشن کے لیے سیریل بوڈ ریٹ کی وضاحت کی۔ اگلا استعمال کرنا پن موڈ() PIR موشن سینسر کو ان پٹ پل اپ کے طور پر سیٹ کریں۔ پی آئی آر انٹرپٹ سیٹ کرنے کے لیے attachInterrupt() بیان کیا جاتا ہے. GPIO 13 کو RISING موڈ پر حرکت کا پتہ لگانے کے لیے بیان کیا گیا ہے۔

    کوڈ کے لوپ() حصے میں اگلا، millis() فنکشن کا استعمال کرتے ہوئے جب ایک ٹرگر حاصل ہوتا ہے تو ہم نے LED کو آن اور آف کیا۔

    3.4: آؤٹ پٹ

    آؤٹ پٹ سیکشن میں ہم دیکھ سکتے ہیں کہ آبجیکٹ PIR سینسر کی حد سے باہر ہے، لہذا ایل. ای. ڈی بدل گیا ہے بند .


    اب پی آئی آر سینسر ایل ای ڈی کے ذریعہ پائی جانے والی حرکت بدل جائے گی۔ آن کے لیے 10 سیکنڈ اس کے بعد اگر کوئی حرکت نہیں پائی جاتی ہے تو یہ باقی رہے گی۔ بند جب تک اگلا ٹرگر موصول نہیں ہوتا۔


    مندرجہ ذیل آؤٹ پٹ کو Arduino IDE میں سیریل مانیٹر کے ذریعے دکھایا گیا ہے۔

    نتیجہ

    ESP32 کے ساتھ ایک PIR سینسر اس کی رینج سے گزرنے والی اشیاء کی حرکت کا پتہ لگانے میں مدد کر سکتا ہے۔ ESP32 پروگرامنگ میں انٹرپٹ فنکشن کا استعمال کرتے ہوئے ہم کچھ مخصوص GPIO پن پر ردعمل کو متحرک کر سکتے ہیں۔ جب تبدیلی کا پتہ چل جائے گا تو انٹرپٹ فنکشن شروع ہو جائے گا اور ایک ایل ای ڈی آن ہو جائے گی۔