سنسور حرکت بدون آردوینو سنسور حرکتی مادون قرمز پیرو الکتریک (PIR) و آردوینو

سلام به همه، امروز دستگاهی به نام حسگر حرکتی را بررسی خواهیم کرد. بسیاری از ما در مورد این چیز شنیده ایم، برخی حتی با این دستگاه سروکار داشته اند. سنسور حرکتی چیست؟ بیایید سعی کنیم آن را بفهمیم، بنابراین:

سنسور حرکت یا سنسور جابجایی - وسیله ای (دستگاهی) که حرکت هر جسمی را تشخیص می دهد. اغلب از این دستگاه ها در سیستم های امنیتی، هشدار و نظارت استفاده می شود. فاکتورهای زیادی برای این سنسورها وجود دارد، اما ما ماژول سنسور حرکت را برای اتصال به بردها در نظر خواهیم گرفت. آردوینو،و به طور خاص از شرکت RobotDyn. چرا این شرکت؟ من نمی‌خواهم این فروشگاه و محصولاتش را تبلیغ کنم، اما محصولات این فروشگاه بودند که به دلیل کیفیت بالای ارائه محصولاتشان به مصرف‌کننده نهایی، به عنوان نمونه آزمایشگاهی انتخاب شدند. بنابراین، ما ملاقات می کنیم - سنسور حرکت(سنسور PIR)از RobotDyn:


این سنسورها اندازه کوچکی دارند، انرژی کمی مصرف می کنند و به راحتی قابل استفاده هستند. علاوه بر این، سنسورهای حرکتی RobotDyn همچنین دارای تماس های با صفحه نمایش ابریشم هستند، البته این یک چیز کوچک است، اما بسیار دلپذیر است. خوب، کسانی که از حسگرهای مشابه استفاده می کنند، اما فقط از شرکت های دیگر، نباید نگران باشند - همه آنها عملکرد یکسانی دارند، و حتی اگر مخاطبین علامت گذاری نشده باشند، پین اوت چنین سنسورهایی به راحتی در اینترنت پیدا می شود.

پایه ای مشخصات فنیسنسور حرکت (سنسور PIR):

منطقه عملکرد سنسور: از 3 تا 7 متر

زاویه ردیابی: تا 110 درجه

ولتاژ کاری: 4.5...6 ولت

مصرف جریان: تا 50 µA

توجه داشته باشید:عملکرد استاندارد سنسور را می توان با اتصال سنسور نور به پین ​​های IN و GND گسترش داد و سپس سنسور حرکت فقط در تاریکی کار می کند.

مقداردهی اولیه دستگاه

وقتی سنسور روشن می شود، تقریباً یک دقیقه طول می کشد تا مقداردهی اولیه شود. در طول این مدت، سنسور ممکن است سیگنال‌های نادرستی بدهد؛ این باید هنگام برنامه‌ریزی یک میکروکنترلر با سنسور متصل به آن، یا در مدارهای محرک اگر اتصال بدون استفاده از میکروکنترلر انجام شود، در نظر گرفته شود.

زاویه و مساحت تشخیص

زاویه تشخیص (ردیابی) 110 درجه است، محدوده فاصله تشخیص از 3 تا 7 متر است، تصویر زیر همه آن را نشان می دهد:

تنظیم حساسیت (فاصله تشخیص) و تاخیر زمانی.

جدول زیر تنظیمات اصلی سنسور حرکت را نشان می دهد؛ در سمت چپ یک تنظیم کننده تاخیر زمانی وجود دارد، به ترتیب، در ستون سمت چپ شرح تنظیمات ممکن وجود دارد. ستون سمت راست تنظیمات فاصله تشخیص را توصیف می کند.


اتصال سنسور:

  • سنسور PIR - آردوینو نانو
  • سنسور PIR - آردوینو نانو
  • سنسور PIR - آردوینو نانو
  • سنسور PIR - برای سنسور نور
  • سنسور PIR - برای سنسور نور

یک نمودار اتصال معمولی در نمودار زیر نشان داده شده است؛ در مورد ما، سنسور به طور معمول از سمت عقب نشان داده شده و به برد آردوینو نانو متصل است.

طرحی که عملکرد سنسور حرکت را نشان می دهد (ما از برنامه استفاده می کنیم):

/* * سنسور PIR -> آردوینو نانو * سنسور PIR -> آردوینو نانو * سنسور PIR -> آردوینو نانو */ void setup() ( //ایجاد اتصال به مانیتور پورت Serial.begin(9600); ) void loop( ) (//مقدار آستانه را از پورت A0 بخوانید //معمولاً اگر سیگنالی وجود داشته باشد از 500 بالاتر است if(analogRead(A0) > 500) (//سیگنال از سنسور حرکت Serial.println("حرکت وجود دارد! !!"); ) else ( / /بدون سیگنال Serial.println("همه چیز ساکت است...")؛ ))

این طرح یک آزمایش رایج برای عملکرد سنسور حرکت است که دارای معایب زیادی است، مانند:

  1. هشدارهای کاذب احتمالی، حسگر نیاز به راه‌اندازی خودکار در عرض یک دقیقه دارد.
  2. اتصال سخت به مانیتور پورت، بدون محرک خروجی (رله، آژیر، نشانگر LED)
  3. زمان سیگنال در خروجی سنسور بسیار کوتاه است، هنگامی که حرکت تشخیص داده می شود، لازم است سیگنال را برای مدت زمان طولانی تری به تعویق بیندازید.

با پیچیده کردن مدار و گسترش عملکرد سنسور، می توانید از معایب ذکر شده در بالا جلوگیری کنید. برای این کار باید مدار را با یک ماژول رله تکمیل کنید و یک لامپ معمولی 220 ولتی را از طریق این ماژول وصل کنید. خود ماژول رله به پایه 3 برد آردوینو نانو متصل خواهد شد. بنابراین نمودار شماتیک:

اکنون زمان آن رسیده است که طرحی را که حسگر حرکتی را آزمایش کرده است، کمی بهبود دهیم. در این طرح است که تاخیر در خاموش کردن رله اعمال می شود، زیرا سنسور حرکت خود زمان سیگنال در خروجی هنگام راه اندازی بسیار کوتاه است. این برنامه یک تاخیر 10 ثانیه ای را در هنگام فعال شدن سنسور اجرا می کند. در صورت تمایل می توان این زمان را با تغییر مقدار متغیر کم یا زیاد کرد DelayValue. در زیر یک طرح و ویدئو از کل کار آمده است مدار مونتاژ شده:

/* * سنسور PIR -> آردوینو نانو * سنسور PIR -> آردوینو نانو * سنسور PIR -> آردوینو نانو * ماژول رله -> آردوینو نانو */ //ریلوت - پین (سیگنال خروجی) برای ماژول رله const int relout = 3 ; //prevMillis - متغیر برای ذخیره زمان چرخه اسکن برنامه قبلی //فاصله - فاصله زمانی برای شمارش ثانیه قبل از خاموش کردن رله طولانی بدون علامت prevMillis = 0; interval int = 1000; //DelayValue - دوره ای که در طی آن رله در حالت روشن نگه داشته می شود. DelayValue = 10; //initSecond - متغیر تکرار حلقه اولیه int initSecond = 60; //countDelayOff - شمارنده بازه زمانی static int countDelayOff = 0; //trigger - ماشه سنسور حرکت پرچم static bool trigger = false; void setup() ( //رویه استاندارد برای مقدار دهی اولیه پورتی که ماژول رله به آن وصل شده است //مهم!!! - برای اینکه ماژول رله در حالت اولیه خاموش بماند //و در حین راه اندازی راه اندازی نشود، باید برای نوشتن //مقدار HIGH در پورت ورودی/خروجی، این کار از "کلیک کردن" کاذب جلوگیری می کند و //وضعیت رله را همانطور که قبل از عملیاتی شدن کل مدار بود حفظ می کند. pinMode(relout, OUTPUT). digitalWrite(relout, HIGH)؛ //همه چیز در اینجا ساده است - ما منتظر می مانیم تا 60 چرخه پایان (متغیر initSecond) //1 ثانیه طول بکشد، در این مدت سنسور برای (int i = 0; i) "self-initialize" می کنیم.< initSecond; i ++) { delay(1000); } } void loop() { //Считать значение с аналогового порта А0 //Если значение выше 500 if(analogRead(A0) >500) ( //تنظیم پرچم ماشه سنسور حرکت if(!trigger) ( trigger = true; ) ) //در حالی که پرچم ماشه سنسور حرکت تنظیم می شود در حالی که(trigger) ( //Execute دستورالعمل های زیر//ذخیره در متغیر currMillis //مقدار میلی ثانیه ای که از شروع //اجرای برنامه بدون علامت طولانی سپری شده currMillis = millis(); //مقایسه با مقدار میلی ثانیه قبلی //اگر تفاوت بیشتر است فاصله مشخص شده، سپس: if(currMillis - prevMillis > interval) ( //مقدار فعلی میلی ثانیه را در متغیر prevMillis ذخیره کنید prevMillis = currMillis؛ // شمارنده تاخیر را با مقایسه آن با مقدار دوره //در طی آن رله باید بررسی کنید. در حالت روشن نگه داشته شود if( countDelayOff >= DelayValue) (//اگر مقدار برابر است، پس: // بازنشانی پرچم ماشه حسگر حرکتی فعال = نادرست؛ // بازنشانی شمارنده تاخیر countDelayOff = 0؛ // DigitalWrite رله را خاموش کنید(relout, HIGH)؛ // وقفه چرخه را قطع کنید؛ ) در غیر این صورت ( //اگر مقدار همچنان کمتر است، سپس // شمارنده تاخیر را یک countDelayOff ++ افزایش دهید؛ //رله را در در حالت DigitalWrite (reout، LOW)؛ ) ) )

این برنامه شامل ساختار زیر است:

طولانی بدون امضا prevMillis = 0;

interval int = 1000;

...

طولانی بدون علامت currMillis = millis();

if(currMillis - prevMillis > interval)

{

prevMillis = currMillis;

....

// عملیات ما در بدنه سازه محصور شده است

....

}

برای روشن شدن موضوع، تصمیم بر این شد که به طور جداگانه در مورد این طرح نظر بدهیم. بنابراین، این طرحبه شما اجازه می دهد تا یک کار موازی را در برنامه انجام دهید. بدنه سازه تقریباً یک بار در ثانیه عمل می کند، این توسط متغیر تسهیل می شود فاصله. اول، متغیر currMillisمقدار بازگشتی هنگام فراخوانی تابع اختصاص داده می شود millis(). تابع millis()تعداد میلی ثانیه هایی که از شروع برنامه گذشته است را برمی گرداند. اگر تفاوت currMillis - prevMillisبزرگتر از مقدار متغیر فاصلهپس این بدان معنی است که بیش از یک ثانیه از شروع اجرای برنامه گذشته است و شما باید مقدار متغیر را ذخیره کنید. currMillisبه یک متغیر prevMillisسپس عملیات موجود در بدنه سازه را انجام دهید. اگر تفاوت currMillis - prevMillisکمتر از مقدار متغیر فاصله، سپس یک ثانیه هنوز بین چرخه های اسکن برنامه سپری نشده است و عملیات موجود در بدنه سازه نادیده گرفته می شود.

خوب، در پایان مقاله، ویدئویی از نویسنده:

لطفا جاوا اسکریپت را فعال کنید تا نظرات کار کنند.

در این آموزش نحوه ساخت حسگر حرکتی با استفاده از حسگر اولتراسونیک (HC-SR04) را به شما نشان خواهیم داد که هر بار LED را روشن می کند. اجزای این درس را می توان در هر فروشگاه مناسب و در نهایت در وب سایت ما سفارش داد.

این درس برای مبتدیان مناسب است، اما برای مهندسین با تجربه تر نیز جالب خواهد بود.

در زیر لیست کاملی از اجزایی که برای درس خود به آن نیاز خواهیم داشت آمده است.

1 عدد برد آردوینو (ما از Arduino Uno استفاده کردیم)
1 x LED (LED، رنگ مهم نیست)
1 x مقاومت / مقاومت 220 اهم
1 x تخته توسعه
1 عدد کابل USB آردوینو
باتری 1 x 9 ولت با گیره (اختیاری)
6 عدد سیم

مرحله 2: تعیین موقعیت قطعات

ابتدا سنسور اولتراسونیک و LED را روی تخته نان وصل کنید. کابل LED کوتاه (کاتد) را به پین ​​GND (زمین) سنسور وصل کنید. سپس مقاومت را در همان ردیف سیم LED بلندتر (آند) نصب کنید تا به هم متصل شوند.

مرحله 3: اتصال قطعات

اکنون باید چند سیم را در پشت سنسور وصل کنید. چهار پین وجود دارد - VCC، TRIG، ECHO و GND. پس از قرار دادن سیم ها، باید اتصالات زیر را انجام دهید:

مقاومت را به یک پین دیجیتال انتخابی خود پایان دهید، فقط به یاد داشته باشید که آن را بعداً در کد تغییر دهید.

سنسور -> آردوینو
VCC -> 5 ولت (قدرت)
TRIG -> 5*
ECHO -> 4*
GND -> GND (زمین)

* - می تواند به هر دو پین دیجیتال آردوینو متصل شود، فقط مطمئن شوید که بعداً آنها را در کد تغییر دهید.

اکنون می توانید آردوینو را با استفاده از کابل USB به رایانه خود متصل کنید. نرم افزار آردوینو را باز کنید و کد آن را دانلود کنید که در زیر می توانید پیدا کنید. ثابت ها نظر داده می شوند، بنابراین شما دقیقاً می دانید چه کاری انجام می دهند و احتمالاً می توانید آنها را تغییر دهید.

Const int ledPin = 6; // خروجی LED دیجیتال int trigPin = 5; // خروجی دیجیتال برای اتصال TRIG const int echoPin = 4; // خروجی دیجیتال برای اتصال ECHO const int ledOnTime = 1000; // زمان روشن ماندن LED پس از تشخیص حرکت (بر حسب میلی ثانیه، 1000 میلی ثانیه = 1 ثانیه) const int trigDistance = 20; // فاصله (و مقدار کوچکتر) که در آن سنسور فعال می شود (بر حسب سانتی متر) مدت زمان داخلی. فاصله بین‌المللی؛ void setup() (pinMode(ledPin, OUTPUT)؛ pinMode(trigPin, OUTPUT)؛ pinMode(echoPin, INPUT)؛ ) void loop() (digitalWrite(trigPin, LOW); digitalWrite(trigPin, HIGH)؛ تاخیر(1) ؛ digitalWrite (trigPin، LOW)؛ مدت زمان = pulseIn (echoPin، HIGH)؛ فاصله = مدت * 0.034 / 2؛ اگر (فاصله<= trigDistance) { digitalWrite(ledPin, HIGH); delay(ledOnTime); digitalWrite(ledPin, LOW); } delay(100); }

مرحله 5: نتیجه نهایی (ویدئو)

نتیجه نهایی سنسور حرکتی و عملکرد آن را می توانید در فیلم زیر مشاهده کنید.

پروژه های مبارک همه!

سنسورهای PIR (غیر قرمز غیرفعال) به شما امکان می دهد حرکت را تشخیص دهید. اغلب در سیستم های هشدار استفاده می شود. این سنسورها اندازه کوچکی دارند، ارزان هستند، انرژی کمی مصرف می کنند، به راحتی کار می کنند و عملاً در معرض سایش نیستند. علاوه بر PIR، چنین حسگرهایی را سنسورهای حرکتی پیرو الکتریک و مادون قرمز می نامند.

نیاز به خرید چند سنسور برای استفاده خانگی در صنایع دستی شما بر اساس نور پس زمینه LED وجود داشت.
از آنجایی که مصرف فعلی من نسبتاً کم است و ولتاژ تغذیه 12 ولت است، من سنسورهای حرکتی مادون قرمز پیرو الکتریک فشرده را در محفظه خریداری کردم.

بسته:

من دو سنسور با حساسیت نور قابل تنظیم سفارش دادم:

سنسورها از منبع تغذیه 12 تا 24 ولت پشتیبانی می کنند. آنها در حال حاضر دارای سیم استاندارد به طول حدود 30 سانتی متر با سوکت برای ورودی و خروجی، با تماس مرکزی 2.1 میلی متر هستند، و این یک مزیت بزرگ است. نیازی به لحیم کاری نیست، فقط منبع تغذیه را وصل کرده و استفاده کنید:



خود سنسورها کاملا جمع و جور هستند. ظاهر:





ابعاد:







برای رسیدن به تابلو و تنظیمات، باید کیس را باز کنید. قاب پشتی دارای چفت است و می توان آن را با پیچ گوشتی باز کرد:





تابلو به شکل زیر است:

من یک نمودار از این دستگاه پیدا کردم، ممکن است رتبه بندی ها متفاوت باشد، اما به طور کلی، برای درک اصل کار، درست است:

در اینجا یک تثبیت کننده ولتاژ در ورودی برای تغذیه ریز مدار می بینیم:


به هر حال، در اینجا برگه داده این عنصر است، واضح است که علامت های مختلف نشان دهنده ولتاژ تثبیت شده متفاوت در خروجی است. اما نکته اصلی این است که ولتاژ ورودی را تا 24 ولت پشتیبانی می کند، به همین دلیل نباید از آن بیشتر شود.

علاوه بر این، طبق نمودار، یک ترانزیستور اثر میدانی در خروجی وجود دارد که کلید مدار بار قدرت است:

دیتاشیت حداکثر جریان پیوسته را در دمای معمولی اتاق 15 A نشان می دهد، اما از آنجایی که خنک کننده ترانزیستوری نداریم، در توان خروجی محدود هستیم.

قلب دستگاه تراشه Biss0001 است. این تراشه یک منبع تشعشع خارجی را درک می کند و حداقل پردازش سیگنال را برای تبدیل آن از آنالوگ به دیجیتال انجام می دهد:



یک حسگر حرکتی PIR اساساً از یک عنصر حسگر پیروالکتریک (یک قطعه استوانه‌ای با کریستال مستطیلی در مرکز) تشکیل شده است که سطح تابش مادون قرمز را تشخیص می‌دهد. سنسور در واقع به دو قسمت تقسیم می شود. این به این دلیل است که آنچه برای ما مهم است سطح تابش نیست، بلکه حضور فوری حرکت در منطقه حساسیت آن است. دو نیمه سنسور طوری تنظیم شده اند که اگر یک نیمه اشعه بیشتری نسبت به دیگری دریافت کند، خروجی مقدار زیاد یا کم تولید می کند.

حالا بیایید مستقیماً به تنظیمات بپردازیم. من دستگاه را راه اندازی کردم و بر این اساس تنظیم کردم که چه چیزی را بچرخانم و کجا:



زمان از 1 ثانیه تا 500 ثانیه قابل تنظیم است. هنگامی که نوار لغزنده به طور کامل روشن می شود، چراغ به سادگی چشمک می زند.

در مورد آستانه روشن کردن سنسور، من به طور تجربی کشف کردم که این ولتاژ از 11.5 ولت است، اگر کمتر باشد، سنسور به سادگی روشن نمی شود:

از نمودار مشخص است که ولتاژ خروجی از سنسور کمتر یا مساوی با ورودی است. روی 12 ولت گذاشتم. یک خطا در شکل نشان دادن نادرست منبع تغذیه وجود دارد، بنابراین مصرف خود سنسور البته کمتر است:

در حالت آماده به کار، سنسور 84 µA مصرف می کند و ولتاژ خروجی 170 میلی ولت است.

راستش را بخواهید، پیکربندی سنسور با برداشتن برد بسیار ناخوشایند است، بنابراین من سوراخ هایی روی قاب پشتی ایجاد کردم، و این بسیار بهتر است:

مدار را مونتاژ کردم و همه چیز را تنظیم کردم:

بررسی شد:

الان دو روزه سنسور کار میکنه، دومی رو روی نور پس زمینه پایه هدفون نصب کردم و دوست دارم بر خلاف قبلی که روی 220 ولت کار میکرد بزرگتر بود و رله میزد، این یکی بیشتره جمع و جور و البته بی صدا.
من حداکثر برد را اندازه گیری نکردم، اما در یک آپارتمان قطعا از 3 متر کار می کند

آیا از خرید راضی هستم - بله. یک دستگاه کامل و با کیفیت بالا.

چیزی که دوست داشتم:
+ حالت عملکرد کاملاً قابل تنظیم
+ حداقل مصرف خود
+ کیفیت ساخت و جمع و جور بودن
+ وضوح عملکرد بدون حذفیات
+.وجود سیم با پریز

چیزی که دوست نداشتم:
- عدم دسترسی مستقیم به تنظیمات بدون جدا کردن کیس (حل شد)
- گوش های نصب بسیار کوچک هستند (ولی بهتر است با چسب دو طرفه نوع 3M بسته شوند)

درپوش سفید سنسور از محفظه مشکی خارج شده است، اما در گزینه بدون سنسور نور مشکی است.

همین.

من قصد خرید +43 را دارم اضافه کردن به علاقه مندی ها من نقد را دوست داشتم +40 +75

در دنیای ناقص ما، چیزهای فنی مختلفی مورد تقاضا هستند که برای محافظت از دارایی و آرامش ذهن شهروندان طراحی شده اند. بنابراین، به اعتقاد من، یافتن شخصی که هرگز هشدارهای امنیتی مجهز به سنسورهای حرکتی را ندیده باشد، دشوار است. اصول فیزیکی عملکرد آنها، و همچنین اجرای آنها، می تواند متفاوت باشد، اما سنسورهای مادون قرمز منفعل پیروالکتریک (PIR) احتمالاً رایج ترین هستند.

چیزی شبیه به این:


آنها به تغییرات تابش در محدوده مادون قرمز، یعنی در قسمت میانی آن - 5-15 میکرون (بدن یک فرد سالم متوسط ​​در محدوده حدود 9 میکرون ساطع می کند) واکنش نشان می دهند. از نقطه نظر کاربر نهایی، چیز بسیار ساده است - یک ورودی برق (معمولا 12 ولت) و یک خروجی رله (معمولا حالت جامد و با تماس های معمولی بسته). یک نفر گرم دزدکی از کنارش گذشت - رله کار کرد. کسالت. اما همه چیز در داخل به این سادگی نیست.
امروز زمان کمی را به تئوری اختصاص خواهیم داد، و سپس یکی از این دستگاه‌ها را استخراج می‌کنیم و آن را نه تنها حسگری می‌کنیم که به واقعیت حرکت واکنش نشان می‌دهد، بلکه جهت حرکت را ثبت می‌کند.

بیایید به تمرینات عملی برویم

با داشتن اطلاعات تئوری، بیایید یک آهن لحیم کاری تهیه کنیم. عکس یک سنسور جدا شده را نشان می دهد (قاب جلویی با لنزهای فرنل و صفحه فلزی برداشته شده است).


ما به علائم ریزمدار نزدیک به سنسور پیروالکتریک نگاه می کنیم (فلزی گرد با پنجره - این همان چیزی است که هست) و (اوه، موفق باشید!) معلوم می شود LM324 - یک آپمپ چهارگانه. با بررسی عناصر اطراف، پین op-amp را پیدا می کنیم که به احتمال زیاد برای اهداف ما مناسب است (در مورد من معلوم شد که پایه 1 میکرو مدار است). حالا بهتر است بررسی کنیم که آیا آن را پیدا کرده ایم یا خیر. معمولاً برای این کار از اسیلوسکوپ استفاده می شود. من آن را در دست نداشتم. اما معلوم شد که آردوینو است. از آنجایی که سطح سیگنال پس از تقویت در حد چند ولت است و نیازی به دقت اندازه گیری خاصی نداریم (یک ارزیابی کیفی کافی است)، ورودی های ADC آردوینو کاملاً مناسب هستند. سیم ها را به خروجی آپ امپ و منبع تغذیه منهای لحیم می کنیم و به تخته نان می آوریم. سیم ها نباید بلند باشند. در غیر این صورت، شانس اندازه گیری نه سیگنال سنسور، بلکه چیزی کاملا متفاوت وجود دارد.
حالا بیایید به این فکر کنیم که چقدر سریع باید سیگنال را بخوانیم تا چیزی معقول به دست آوریم. در بالا گفته شد که محدوده فرکانس سیگنال مفید تقریباً به 10 هرتز محدود شده است. با یادآوری قضیه Kotelnikov (یا قضیه Nyquist، هر کدام که ترجیح می دهید)، می توانیم نتیجه بگیریم که اندازه گیری سیگنال با فرکانس بالای 20 هرتز هیچ فایده ای ندارد. آن ها دوره نمونه برداری 50 میلی ثانیه خوب است. ما در حال نوشتن یک طرح ساده هستیم که پورت A1 را هر 50 میلی‌ثانیه می‌خواند و مقدار آن را به سریال می‌ریزد (به بیان دقیق، اندازه‌گیری سیگنال کمتر از هر 50 میلی‌ثانیه اتفاق می‌افتد، زیرا نوشتن در پورت نیز زمان می‌برد، اما برای اهداف ما اینطور نیست. مهم).

مدت طولانی بدون امضا؛ void setup() ( Serial.begin(9600); pinMode(A1, INPUT); time=millis(); ) void loop() ( if ((millis()-time) >= 50) ( Serial.println(analogRead (A1)); ) time=millis();)

ما آن را روشن می کنیم و دستان خود را جلوی سنسور تکان می دهیم (می توانید بدوید، حتی مفیدتر است). در سمت کامپیوتر، داده ها را از پورت در یک فایل تخلیه می کنیم.
stty -F /dev/ttyUSB0 خام ispeed 9600 ospeed 9600 -ignpar cs8 -cstopb -echo cat /dev/ttyUSB0 > output.txt
ما یک نمودار می سازیم (یک ستون با شماره گذاری قرائت ها به فایل اضافه شده است):
gnuplot> "output.txt" را با استفاده از 1:2 با خطوط ترسیم کنید


و ما آنچه را که واقعاً می خواستیم می بینیم - افزایش ولتاژ چند قطبی. هورا، تئوری کار می کند و سیم در جایی که باید باشد لحیم می شود. یک تجزیه و تحلیل ساده (به عبارت دیگر، بررسی) نمودار به ما امکان می دهد نتیجه بگیریم که تثبیت کم و بیش قابل اعتماد واقعیت وجود حرکت را می توان انحراف سیگنال به میزان 150 واحد از مقدار متوسط ​​در نظر گرفت.
بالاخره زمان ساخت یک حسگر جهت حرکت فرا رسیده است.
بیایید نمودار را اصلاح کنیم. علاوه بر سیگنال سنسور آنالوگ، یک جفت LED را به آردوینو وصل می‌کنیم (درگاه‌های 2 و 3، مقاومت‌های محدودکننده جریان را فراموش نکنید) و یک طرح کمی پیچیده‌تر می‌نویسیم.

بسط دادن

int a1; int state2=0; میانگین طولانی = 0; int n=0; بدون امضا طولانی مدت؛ void setup() (pinMode(2, OUTPUT)؛ pinMode(3, OUTPUT)؛ pinMode(A1, INPUT)؛ digitalWrite(2, LOW); digitalWrite(3, LOW)؛ تاخیر (30000)؛ //سنسور من بعد از روشن کردن //قبل از شروع کار به مدت 30 ثانیه کند می شود=millis(); //سیگنال را هزار بار اندازه می گیریم تا //مقدار متوسط ​​آن را محاسبه کنیم // تا چیزی برای شمارش انحرافات از while داشته باشیم (n)<= 1000) { ++n; a1=analogRead(A1); average=average+a1; delay(50); } average=average/1000; //одновременным включением светодиодов //сигнализируем, что система готова digitalWrite(2, HIGH); digitalWrite(3, HIGH); delay(1000); digitalWrite(2, LOW); digitalWrite(3, LOW); time=millis(); } void loop() { //опрашиваем датчик каждые 50 мс if ((millis()-time) >= 50) (//با این عبارت ساده سیگنال آنالوگ // را به یک سیگنال گسسته با مقادیر -1/0/1 a1=(analogRead(A1)-average)/150 تبدیل می کنیم؛ // اگر وجود داشت قطبیت سیگنال را تغییر دهید، سپس // کلید LED مورد نظر (a1) را روشن کنید (مورد 1: if (state2=-1) (digitalWrite(2, HIGH);digitalWrite(3, LOW);) state2= a1؛ break; case -1: if (state2=1) (digitalWrite (2, LOW);digitalWrite(3, HIGH);) state2=a1; break; ) //تکرار اولین بار=millis(); ) )


برای اینکه فقط یک جفت از کل مجموعه پرتوهای الگوی تابشی حسگر باقی بماند، همه لنزهای فرنل به جز یکی از آنها را با صفحه کاغذی می پوشانیم.


از نتیجه لذت می بریم.

نمای کلی سنسور فضایی HC-SR501

ماژول حسگر حرکت (یا حضور) HCSR501 بر اساس اثر پیرو الکتریک شامل یک سنسور PIR 500BP (شکل 1) با ایزولاسیون الکتریکی اضافی روی تراشه BISS0001 و یک لنز فرنل است که برای افزایش شعاع دید و افزایش استفاده می شود. سیگنال مادون قرمز(شکل 2). این ماژول برای تشخیص حرکت اجسامی که تابش مادون قرمز ساطع می کنند استفاده می شود. عنصر حساس ماژول یک سنسور PIR 500BP است. اصل کارکرد آن بر پایه pyroelectricity است. این پدیده ظاهر شدن میدان الکتریکی در کریستال ها هنگام تغییر دمای آنها است.

عملکرد سنسور توسط تراشه BISS0001 کنترل می شود. دو پتانسیومتر روی برد وجود دارد که با اولی می توانید فاصله تشخیص جسم (از 3 تا 7 متر) را تنظیم کنید، با دومی می توانید تاخیر را پس از اولین فعال سازی سنسور (5 تا 300 ثانیه) تنظیم کنید. ماژول دارای دو حالت L و H است. حالت عملکرد با استفاده از یک جامپر تنظیم می شود. حالت L – حالت تک عملکرد؛ هنگامی که یک جسم متحرک شناسایی می شود، خروجی OUT روی تنظیم می شود سطح بالاسیگنال برای زمان تاخیر تنظیم شده توسط پتانسیومتر دوم. در این مدت سنسور به اجسام متحرک پاسخ نمی دهد. از این حالت می توان در سیستم های امنیتی برای ارسال آلارم به آژیر استفاده کرد. در حالت H، هر بار که حرکت تشخیص داده می شود، سنسور فعال می شود. از این حالت می توان برای روشن کردن چراغ ها استفاده کرد. هنگامی که ماژول روشن می شود، کالیبره می شود؛ مدت زمان کالیبراسیون تقریباً یک دقیقه است، پس از آن ماژول آماده کار است. توصیه می شود سنسور را دور از آن نصب کنید منابع بازسوتا.

شکل 1. سنسور PIR 500BP

شکل 2. لنز فرنل

مشخصات HC-SR501

  • ولتاژ تغذیه: 4.5-20 ولت
  • مصرف جریان: 50 میلی آمپر
  • ولتاژ خروجی: بالا - 3.3 ولت، پایین - 0 ولت
  • فاصله تشخیص: 3-7 متر
  • مدت زمان تاخیر پس از فعال سازی: 5 - 300 ثانیه
  • زاویه دید تا 120
  • زمان مسدود کردن تا اندازه گیری بعدی: 2.5 ثانیه.
  • حالت های عملیاتی: L - تک ماشه، H - راه اندازی با هر رویداد
  • دمای کاریاز -20 تا +80 درجه سانتیگراد
  • ابعاد 32x24x18 میلی متر

اتصال سنسور حرکت مادون قرمز به آردوینو

ماژول دارای 3 خروجی است (شکل 3):
  • VCC - منبع تغذیه 5-20 ولت؛
  • GND - زمین؛
  • OUT - خروجی دیجیتال (0-3.3V).

شکل 3. تخصیص پین و تنظیم HC-SR501

بیایید ماژول HC-SR501 را به برد آردوینو وصل کنیم (نمودار اتصال در شکل 4) و یک سیگنالینگ طرح ساده بنویسیم. سیگنال صوتیو یک پیام به پورت سریال در هنگام شناسایی یک شی متحرک. برای ثبت عملیات توسط میکروکنترلر، از وقفه های خارجی در ورودی 2 استفاده می کنیم. این یک وقفه int0 است.

شکل 4. نمودار اتصال برای اتصال ماژول HC-SR501 به برد آردوینو

بیایید طرح را از لیست 1 در برد آردوینو آپلود کنیم و ببینیم سنسور چگونه به موانع واکنش نشان می دهد (شکل 5 را ببینید). بیایید ماژول را روی حالت عملیاتی L تنظیم کنیم. فهرست 1 // طرحی برای بررسی سنسور حرکت/حضور HC-SR501 // سایت // مخاطب برای اتصال خروجی سنسور #define PIN_HCSR501 2 // trigger flag boolean flagHCSR501=false; // پین اتصال بلندگو int soundPin=9; // فرکانس سیگنال صدا int freq=587; void setup() (// مقداردهی اولیه پورت سریال Serial.begin(9600)؛ // شروع پردازش وقفه int0 attachInterrupt(0, intHCSR501,RISING)؛ ) void loop() ( if (flagHCSR501 == true) (/ / پیام در پورت سریال Serial.println("توجه!!!"); // زنگ صوتیبرای تن 5 ثانیه (صدا پین، فرکانس، 5000)؛ // بازنشانی پرچم ماشه flagHCSR501 = false; ) ) // پردازش وقفه void intHCSR501() ( // تنظیم پرچم ماشه حسگر flagHCSR501 = true؛ )

شکل 5. خروجی مانیتور پورت سریال

با استفاده از پتانسیومترها، مدت زمان سیگنال در خروجی OUT و حساسیت سنسور (فاصله تثبیت شی) را آزمایش می کنیم.

مثال استفاده

بیایید نمونه ای از ارسال پیامک زمانی که یک حسگر حرکت/حضور در یک شی محافظت شده فعال می شود ایجاد کنیم. برای این کار از محافظ GPS/GPRS استفاده خواهیم کرد. ما به قطعات زیر نیاز خواهیم داشت:
  • برد آردوینو Uno
  • سپر GSM/GPRS
  • ترانزیستور NPN، به عنوان مثال C945
  • مقاومت 470 اهم
  • بلندگو 8 اهم 1 وات
  • سیم ها
بیایید نمودار اتصال را مطابق شکل مونتاژ کنیم. 6.

شکل 6. نمودار اتصال

هنگامی که سنسور فعال می شود، روش ارسال اس ام اس با یک پیام متنی را فراخوانی می کنیم حضور داشته باشیدیون!!!به شماره PHONE محتویات طرح در فهرست 2 ارائه شده است. محافظ GSM/GPRS در حالت ارسال پیامک تا 2 آمپر جریان مصرف می کند، بنابراین از منبع تغذیه خارجی 12 ولت 2 آمپر استفاده می کنیم. فهرست 2 // طرح 2 برای بررسی سنسور حرکت/حضور HC-SR501 // ارسال پیامک هنگام فعال شدن سنسور // سایت // تماس برای اتصال خروجی سنسور #define PIN_HCSR501 2 // trigger flag boolean flagHCSR501 false; // پین اتصال بلندگو int soundPin=9; // فرکانس سیگنال صدا int freq=587; // کتابخانه SoftwareSerial #include // شماره تلفن برای ارسال پیامک #define PHONE "+79034461752" // خروجی برای SoftwareSerial (شما ممکن است 2،3) SoftwareSerial GPRS(7, 8) داشته باشید. void setup() (// مقداردهی اولیه پورت سریال Serial.begin(9600)؛ // شروع پردازش وقفه int0 attachInterrupt(0, intHCSR501,RISING)؛ // برای تبادل با سپر GPG/GPRS GPRS.begin(19200); ) void loop() (اگر (flagHCSR501 == true) (// پیام به پورت سریال Serial.println("توجه!!!")؛ // زنگ صدا برای تون 5 ثانیه (soundPin,freq,5000) . () (// حالت متنی تنظیمات فرمان AT GPRS.print("AT+CMGF=1\r")؛ تاخیر(100)؛ // شماره تلفن GPRS.print("AT + CMGS = \"")؛ GPRS. print(PHONE)؛ GPRS. println("\""); delay(200); // GPRS message.println("توجه!!!")؛ تاخیر(200)؛ // کد اسکی ctrl+z - پایان GPRS transmission.println((char) 26); delay(200); GPRS.println(); )

سوالات متداول سوالات متداول

1. وقتی جسم حرکت می کند ماژول کار نمی کند
  • بررسی کنید که ماژول به درستی وصل شده باشد.
  • فاصله ماشه را با استفاده از پتانسیومتر تنظیم کنید.
2. سنسور اغلب فعال می شود
  • تأخیر مدت سیگنال را با استفاده از پتانسیومتر تنظیم کنید.
  • جامپر را روی حالت تک عملکرد L قرار دهید.
اگر خطایی پیدا کردید، لطفاً یک متن را انتخاب کنید و Ctrl+Enter را فشار دهید.