ইন্টারাপ্ট এবং টাইমার ব্যবহার করে PIR মোশন সেন্সর সহ ESP32 – Arduino IDE

Intarapta Ebam Ta Imara Byabahara Kare Pir Mosana Sensara Saha Esp32 Arduino Ide



ESP32 হল একটি IoT ভিত্তিক মাইক্রোকন্ট্রোলার বোর্ড যা ইন্টারফেস, নিয়ন্ত্রণ এবং বিভিন্ন সেন্সর পড়তে ব্যবহার করা যেতে পারে। PIR বা মোশন সেন্সর হল এমন একটি ডিভাইস যা আমরা ESP32 ব্যবহার করে মোশন সেন্সরের পরিসরে একটি বস্তুর গতিবিধি সনাক্ত করতে ESP32 এর সাথে ইন্টারফেস করতে পারি।

PIR সেন্সরের সাথে ESP32 ইন্টারফেস করা শুরু করার আগে আমাদের অবশ্যই জানতে হবে কিভাবে বাধা কাজ করে এবং কিভাবে ESP32 এ তাদের পড়তে এবং পরিচালনা করতে হয়। পরবর্তীতে আমাদের অবশ্যই ESP32 প্রোগ্রামিং-এ delay() এবং millis() ফাংশনের মূল ধারণা বুঝতে হবে।







ESP32 এর সাথে PIR এর কাজ সম্পর্কে বিস্তারিত আলোচনা করা যাক।



এই নিবন্ধের বিষয়বস্তু এখানে:



  1. বিঘ্নিত হয় কি
  • ESP32 প্রোগ্রামিং-এ টাইমার
  • ESP32 এর সাথে PIR সেন্সর ইন্টারফেসিং

    1: বাধা কি?

    ESP32 প্রোগ্রামিংয়ে যে ঘটনাগুলো ঘটে তার বেশিরভাগই ক্রমানুসারে চলে যার মানে লাইন বাই লাইন কোড এক্সিকিউশন। ইভেন্টগুলি পরিচালনা এবং নিয়ন্ত্রণ করতে যা কোডের অনুক্রমিক সঞ্চালনের সময় চালানোর প্রয়োজন হয় না বাধা দেয় ব্যবহৃত.





    উদাহরণস্বরূপ, কোনো বিশেষ ঘটনা ঘটলে আমরা একটি নির্দিষ্ট কাজ সম্পাদন করতে চাই, বা মাইক্রোকন্ট্রোলারের ডিজিটাল পিনে একটি ট্রিগার সংকেত দেওয়া হলে আমরা ইন্টারাপ্ট ব্যবহার করি।


    বাধার সাথে আমাদের ESP32 ইনপুট পিনের ডিজিটাল অবস্থা ক্রমাগত চেক করার দরকার নেই। যখন একটি বিঘ্ন ঘটে তখন প্রসেসর প্রধান প্রোগ্রামকে থামিয়ে দেয় এবং একটি নতুন ফাংশন বলা হয় যা ISR নামে পরিচিত ( বিঘ্নিত পরিষেবা রুটিন ) এই আইএসআর ফাংশন প্রধান প্রোগ্রামে ফিরে আসার পরে সৃষ্ট বাধাকে পরিচালনা করে এবং এটি কার্যকর করা শুরু করে। ISR এর একটি উদাহরণ PIR মোশন সেন্সর যা গতি শনাক্ত করা হলে একটি বিঘ্ন সৃষ্টি করে .



    1.1: ESP32-এ পিন বাধা দেয়

    একটি বাহ্যিক বা হার্ডওয়্যার ব্যাঘাত ঘটতে পারে কোনো হার্ডওয়্যার মডিউল যেমন টাচ সেন্সর বা পুশ বোতামের কারণে। ESP32 পিনে স্পর্শ শনাক্ত করা হলে টাচ ইন্টারাপ্ট হয় বা একটি কী বা পুশ বোতাম টিপলে GPIO ইন্টারাপ্টও ব্যবহার করা যেতে পারে।

    এই নিবন্ধে আমরা ESP32 এর সাথে PIR সেন্সর ব্যবহার করে গতি শনাক্ত করা হলে একটি বাধা ট্রিগার করব।

    6 SPI ইন্টিগ্রেটেড পিন ছাড়া প্রায় সব GPIO পিন যা সাধারণত আসে 36 ইএসপি 32 বোর্ডের পিন সংস্করণটি ইন্টারাপ্ট কলিংয়ের উদ্দেশ্যে ব্যবহার করা যাবে না। সুতরাং, এক্সটার্নাল ইন্টারাপ্ট পাওয়ার জন্য নিম্নোক্ত পিনগুলি বেগুনি রঙে হাইলাইট করা হল যেগুলি কেউ ESP32 এ ব্যবহার করতে পারে:

    এই ছবিটি একটি 30 পিন ESP32 এর।

    1.2: ESP32 এ একটি ইন্টারাপ্ট কল করা

    ESP32-এ interrupt ব্যবহার করার জন্য আমরা কল করতে পারি সংযুক্তি বাধা() ফাংশন

    এই ফাংশন নিম্নলিখিত তিনটি আর্গুমেন্ট গ্রহণ করে:

      • GPIO পিন
      • কার্য সম্পাদন করা হবে
      • মোড
    attachInterrupt ( digitalPinToInterrupt ( জিপিআইও ) , ফাংশন , মোড ) ;


    1: GPIO পিন হল প্রথম আর্গুমেন্ট যাকে ভিতরে ডাকা হয় attachInterrupt() ফাংশন উদাহরণস্বরূপ, ডিজিটাল পিন 12 কে একটি ইন্টারাপ্ট সোর্স হিসাবে ব্যবহার করতে আমরা এটি ব্যবহার করে কল করতে পারি DigitalPinToInterrupt(12) ফাংশন

    2: ফাংশন বাহ্যিক বা অভ্যন্তরীণ উত্স দ্বারা বাধা পৌঁছানোর বা ট্রিগার করার পরে প্রতিবার কার্যকর করা প্রোগ্রামটিকে কার্যকর করা হয়। এটি হয় একটি LED জ্বলজ্বল করতে পারে বা ফায়ার অ্যালার্ম চালু করতে পারে।

    3: মোড বিঘ্নিত ফাংশন প্রয়োজন তৃতীয় এবং শেষ যুক্তি। কখন বাধা ট্রিগার করতে হবে তা বর্ণনা করে। নিম্নলিখিত মোড ব্যবহার করা যেতে পারে:

      • নিম্ন: প্রতিবার সংজ্ঞায়িত GPIO পিন কম হলে বাধা ট্রিগার করুন।
      • উচ্চ: প্রতিবার সংজ্ঞায়িত GPIO পিন উচ্চ হলে বাধা ট্রিগার করুন।
      • পরিবর্তন: প্রতিবার GPIO পিন তার মান উচ্চ থেকে নিম্ন বা বিপরীতে পরিবর্তন করে ট্রিগার বাধা দেয়।
      • পরে যাচ্ছে: যখন একটি নির্দিষ্ট পিন উচ্চ অবস্থা থেকে নিচুতে পড়তে শুরু করে তখন এটি একটি বাধা ট্রিগার করার মোড।
      • উদীয়মান: এটি একটি বিঘ্ন ট্রিগার করার মোড যখন একটি নির্দিষ্ট পিন নিম্ন অবস্থা থেকে উঁচুতে উঠতে শুরু করে।

    আজ আমরা ব্যবহার করা হবে উদীয়মান বিঘ্নিত ফাংশনের জন্য একটি তৃতীয় যুক্তি হিসাবে মোড যখনই পিআইআর সেন্সর বিঘ্নিত এলইডি সনাক্ত করে বা সেন্সর আলোকিত হবে কারণ এটি নিম্ন অবস্থা থেকে উচ্চে যায়।

    2: ESP32 প্রোগ্রামিং-এ টাইমার

    মাইক্রোকন্ট্রোলার প্রোগ্রামিং-এ টাইমারগুলি একটি নির্দিষ্ট টাইমার সময়ের জন্য বা নির্দিষ্ট সময়ের জন্য নির্দেশাবলী কার্যকর করার জন্য একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।

    আউটপুট ট্রিগার করতে সাধারণত দুটি প্রধান ফাংশন ব্যবহৃত হয় বিলম্ব() এবং মিলিস() . ডিলে() ফাংশন হিসাবে উভয়ের মধ্যে পার্থক্যটি প্রোগ্রামের বাকি কাজগুলিকে থামিয়ে দেয় যখন এটি কার্যকর করা শুরু করে যখন millis() নির্ধারিত সময়ের জন্য চলে তারপর প্রোগ্রামটি মূল ফাংশনে ফিরে যায়।

    এখানে আমরা পিআইআর সেন্সর সহ একটি এলইডি ব্যবহার করব এবং কোনও বাধা ট্রিগার হওয়ার পরে আমরা এটিকে অবিচ্ছিন্নভাবে জ্বলতে চাই না। আমরা millis() ফাংশন ব্যবহার করব যা আমাদের কিছু নির্দিষ্ট সময়ের জন্য এটিকে আলোকিত করতে দেয় এবং সেই সময় স্ট্যাম্প পাস হয়ে গেলে আবার মূল প্রোগ্রামে ফিরে যায়।

    2.1: delay() ফাংশন

    delay() ফাংশনটি বেশ সহজ এটি শুধুমাত্র একটি আর্গুমেন্ট নেয় যা হল মাইক্রোসফট স্বাক্ষরবিহীন দীর্ঘ ডেটা টাইপের। এই যুক্তিটি মিলিসেকেন্ডে সময়ের প্রতিনিধিত্ব করে আমরা প্রোগ্রামটিকে বিরতি দিতে চাই যতক্ষণ না এটি পরবর্তী লাইনে চলে যায়।

    উদাহরণস্বরূপ, নিম্নলিখিত ফাংশন এর জন্য প্রোগ্রাম বন্ধ করবে 1 সেকেন্ড .

    বিলম্ব ( 1000 )


    delay() মাইক্রোকন্ট্রোলার প্রোগ্রামিংয়ের জন্য এক ধরনের ব্লকিং ফাংশন। delay() এই নির্দিষ্ট ফাংশন টাইম সম্পূর্ণ না হওয়া পর্যন্ত এক্সিকিউট করার জন্য বাকি কোড ব্লক করে। যদি আমরা একাধিক নির্দেশাবলী কার্যকর করতে চাই, তাহলে আমাদের বিলম্ব ফাংশন ব্যবহার করা এড়িয়ে চলা উচিত পরিবর্তে আমরা মিলি বা বাহ্যিক টাইমার RTC মডিউল ব্যবহার করতে পারি।

    2.2: millis() ফাংশন

    millis() ফাংশন ESP32 বোর্ড বর্তমান প্রোগ্রাম চালানো শুরু করার পর থেকে পাস করা মিলিসেকেন্ডের সংখ্যা প্রদান করে। কোডের কয়েকটি লাইন লিখে আমরা ESP32 কোড চালানোর সময় সহজেই বর্তমান সময়ের হিসাব করতে পারি।

    মিলি ব্যাপকভাবে ব্যবহৃত হয় যেখানে আমাদের বাকি কোড ব্লক না করে একাধিক কাজ চালাতে হবে। এখানে মিলি ফাংশনের সিনট্যাক্স রয়েছে যা গণনা করার জন্য কতটা সময় কেটেছে যাতে আমরা একটি নির্দিষ্ট নির্দেশ কার্যকর করতে পারি।

    যদি ( বর্তমান মিলিস - আগের মিলিস > = ব্যবধান ) {
    previousMillis = বর্তমানমিলিস;
    }


    এই কোডটি বর্তমান মিলিস() থেকে পূর্ববর্তী মিলিস() বিয়োগ করে যদি বিয়োগ করা সময় ব্যবধান নির্ধারণের সমান হয় তাহলে একটি নির্দিষ্ট নির্দেশ কার্যকর করা হবে। ধরা যাক আমরা 10 সেকেন্ডের জন্য একটি LED ব্লিঙ্ক করতে চাই। প্রতি 5 মিনিট পর আমরা 5 মিনিটের (300000ms) সমান সময়ের ব্যবধান সেট করতে পারি। প্রতিবার কোড চলার সময় কোডটি ব্যবধানের জন্য পরীক্ষা করবে, একবার এটি পৌঁছালে এটি 10 ​​সেকেন্ডের জন্য LED ব্লিঙ্ক করবে।

    বিঃদ্রঃ: এখানে আমরা PIR সেন্সরের সাথে ESP32 ইন্টারফেস করার জন্য millis() ফাংশন ব্যবহার করব। মিলি ব্যবহার করার এবং বিলম্ব না করার মূল কারণ হল যে মিলিস() ফাংশন কোডটিকে বিলম্ব() ফাংশনের মতো ব্লক করে না। তাই একবার পিআইআর গতি শনাক্ত করলে একটি বাধা তৈরি হবে। interrupt millis() ফাংশন ব্যবহার করে সংজ্ঞায়িত সময়ের জন্য LED ট্রিগার করবে তার পরে যদি গতি বন্ধ করা হয় millis() ফাংশন রিসেট হবে এবং পরবর্তী বাধার জন্য অপেক্ষা করবে।

    যদি আমরা delay() ফাংশন ব্যবহার করি তবে এটি কোডটিকে সম্পূর্ণভাবে ব্লক করবে এবং ESP32 দ্বারা সৃষ্ট কোনো বাধা পড়া হবে না যার ফলে প্রকল্পটি ব্যর্থ হবে।

    3: ESP32 এর সাথে PIR সেন্সর ইন্টারফেসিং

    এখানে আমরা আরডুইনো আইডিই কোডে millis() ফাংশন ব্যবহার করব কারণ PIR সেন্সর যখনই কিছু মুভমেন্ট শনাক্ত করে তখন আমরা LED ট্রিগার করতে চাই। এই এলইডি একটি নির্দিষ্ট সময়ের জন্য জ্বলবে তারপর এটি স্বাভাবিক অবস্থায় ফিরে যাবে।

    এখানে আমাদের প্রয়োজনীয় উপাদানগুলির একটি তালিকা রয়েছে:

      • ESP32 উন্নয়ন বোর্ড
      • PIR মোশন সেন্সর (HC-SR501)
      • এলইডি
      • 330 ওহম প্রতিরোধক
      • সংযোগকারী তারের
      • ব্রেডবোর্ড

    পরিকল্পিত ESP32 সহ PIR সেন্সরের জন্য:


    PIR সেন্সরের সাথে ESP32 এর পিন সংযোগগুলি হল:

    ESP32 PIR সেন্সর
    আসা ভিসিসি
    GPIO13 আউট
    জিএনডি জিএনডি

    3.1: PIR মোশন সেন্সর (HC-SR501)

    PIR এর সংক্ষিপ্ত রূপ প্যাসিভ ইনফ্রারেড সেন্সর . এটি একজোড়া পাইরোইলেকট্রিক সেন্সর ব্যবহার করে যা তার চারপাশে তাপ সনাক্ত করে। এই দুটি পাইরোইলেকট্রিক সেন্সর একের পর এক পড়ে থাকে এবং যখন কোনো বস্তু তাদের সীমার মধ্যে আসে তখন তাপ শক্তির পরিবর্তন বা এই দুটি সেন্সরের মধ্যে সংকেত পার্থক্যের কারণে পিআইআর সেন্সর আউটপুট কম হয়। PIR আউট পিন কম হয়ে গেলে, আমরা কার্যকর করার জন্য একটি নির্দিষ্ট নির্দেশ সেট করতে পারি।


    পিআইআর সেন্সরের বৈশিষ্ট্যগুলি নিম্নরূপ:

      • সংবেদনশীলতা প্রকল্পের অবস্থানের উপর নির্ভর করে সেট করা যেতে পারে (যেমন সেন্সিং মাউস বা পাতার নড়াচড়া)।
      • PIR সেন্সর কতক্ষণ এটি একটি বস্তু সনাক্ত করতে পারে সেট করা যেতে পারে।
      • হোম সিকিউরিটি অ্যালার্ম এবং অন্যান্য তাপভিত্তিক আন্দোলন সনাক্তকরণ অ্যাপ্লিকেশনগুলিতে ব্যাপকভাবে ব্যবহৃত হয়।

    3.2: পিনআউট HC-SR501

    PIR HC-SR501 তিনটি পিনের সাথে আসে। এর মধ্যে দুটি হল Vcc এবং GND এর পাওয়ার পিন এবং একটি হল ট্রিগার সিগন্যালের জন্য আউটপুট পিন।


    নিচে PIR সেন্সর পিনের বর্ণনা দেওয়া হল:

    পিন নাম বর্ণনা
    1 ভিসিসি সেন্সরের জন্য ইনপুট পিন ESP32 ভিন পিনের সাথে সংযুক্ত করুন
    দুই আউট সেন্সর আউটপুট
    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 ;
    বুলিয়ান স্টার্টিং_টাইম = মিথ্যা ;
    অকার্যকর IRAM_ATTR মুভমেন্ট সনাক্ত করে ( ) { /* চেক জন্য গতি */
    Serial.println ( 'গতি সনাক্ত করা হয়েছে' ) ;
    ডিজিটাল লিখুন ( নেতৃত্বে, উচ্চ ) ; /* LED চালু করুন যদি শর্ত হল সত্য */
    শুরুর_সময় = সত্য ;
    পূর্ববর্তী_ট্রিগ = মিলি ( ) ;
    }
    অকার্যকর সেটআপ ( ) {
    সিরিয়াল.শুরু ( 115200 ) ; /* বড হার জন্য সিরিয়াল যোগাযোগ */
     পিনমোড ( PIR_Out, INPUT_PULLUP ) ; /* PIR মোশন সেন্সর মোড সংজ্ঞায়িত */
    /* PIR কনফিগার করা হয়েছে ভিতরে রাইজিং মোড, সেট মোশন সেন্সর পিন হিসাবে আউটপুট */
    attachInterrupt ( digitalPinToInterrupt ( পির_আউট ) , শনাক্ত করে মুভমেন্ট, রাইজিং ) ;
     পিনমোড ( নেতৃত্বে, আউটপুট ) ; /* সেট LED থেকে কম */
    ডিজিটাল লিখুন ( নেতৃত্বাধীন, কম ) ;
    }
    অকার্যকর লুপ ( ) {
    বর্তমান_সময় = মিলি ( ) ; /* সঞ্চয় বর্তমান সময় */
    যদি ( শুরুর_সময় && ( বর্তমান_সময় - পূর্ববর্তী_ট্রিগ > ( সময় সেকেন্ড * 1000 ) ) ) { /* সময়ের ব্যবধান পরে যা LED বন্ধ হয়ে যাবে */
    Serial.println ( 'চলন বন্ধ' ) ; /* প্রিন্ট গতি বন্ধ যদি কোন গতি সনাক্ত করা হয়নি */
    ডিজিটাল লিখুন ( নেতৃত্বাধীন, কম ) ; /* LED কম সেট করুন যদি শর্ত হল মিথ্যা */
    শুরুর_সময় = মিথ্যা ;
    }
    }


    কোডটি LED এবং PIR আউটপুটের জন্য GPIO পিনগুলি সংজ্ঞায়িত করে শুরু হয়েছিল। এরপরে, আমরা তিনটি ভিন্ন ভেরিয়েবল তৈরি করেছি যা গতি শনাক্ত হলে LED চালু করতে সাহায্য করবে।

    এই তিনটি ভেরিয়েবল হল বর্তমান_সময়, আগের_ট্রিগ, এবং শুরুর_সময়। এই ভেরিয়েবলগুলি বর্তমান সময়, গতি সনাক্ত করার সময় এবং গতি সনাক্ত করার পরে টাইমার সংরক্ষণ করবে।

    সেটআপ অংশে প্রথমে, আমরা যোগাযোগের জন্য সিরিয়াল বড রেট সংজ্ঞায়িত করেছি। পরবর্তী ব্যবহার পিনমোড() পির মোশন সেন্সরটিকে ইনপুট পুলআপ হিসাবে সেট করুন। পিআইআর ইন্টারাপ্ট সেট করতে সংযুক্তি বাধা() বর্ণনা করা হয়েছে. GPIO 13 রাইজিং মোডে গতিবিধি সনাক্ত করার জন্য বর্ণনা করা হয়েছে।

    কোডের পরবর্তী লুপ() অংশে, millis() ফাংশন ব্যবহার করে আমরা LED চালু এবং বন্ধ করে দিয়েছি যখন একটি ট্রিগার অর্জন করা হয়।

    3.4: আউটপুট

    আউটপুট বিভাগে আমরা দেখতে পাচ্ছি যে বস্তুটি PIR সেন্সরের সীমার বাইরে, তাই এলইডি পরিণত হয় বন্ধ .


    এখন PIR সেন্সর LED দ্বারা সনাক্ত করা গতি ঘুরবে চালু জন্য 10 সেকেন্ড এর পরে যদি কোন গতি সনাক্ত না করা হয় তবে এটি থাকবে বন্ধ পরবর্তী ট্রিগার প্রাপ্ত না হওয়া পর্যন্ত।


    আরডুইনো আইডিই-তে সিরিয়াল মনিটর দ্বারা নিম্নলিখিত আউটপুট দেখানো হয়।

    উপসংহার

    ESP32 সহ একটি PIR সেন্সর তার রেঞ্জের মধ্য দিয়ে যাওয়া বস্তুর গতি সনাক্ত করতে সাহায্য করতে পারে। ESP32 প্রোগ্রামিং-এ interrupt ফাংশন ব্যবহার করে আমরা কিছু নির্দিষ্ট GPIO পিনে প্রতিক্রিয়া ট্রিগার করতে পারি। পরিবর্তন শনাক্ত হলে ইন্টারাপ্ট ফাংশনটি ট্রিগার হবে এবং একটি LED চালু হবে।