صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 10 از 16
Like Tree8 لایک

موضوع: مشکل با ماژول hc-SR501

  1. #1
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    39

    مشکل با ماژول hc-SR501

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

    من دو عدد ماژول hc-SR501 خریدم یه سری مشکل با این ماژول دارم که ممنون میشم راهنمایی کنید
    برای تغذیه ماژول از پین 5 ولت آردوینو استفاده میکنم و پین خروجی (پین وسط) ماژول رو هم به یکی از پین های آردوینو دادم و اون رو هم Input تعریف کردم. داخل تابع loop گفتم :
    کد PHP:
    if(digitalRead(sensorPin) == HIGH)
    {
       
    status 1;
    }

    if(
    status)
    {
       
    // برای روشن کردن آژیر
       
    digitalWrite(alarmPinHIGH);

    اما بگیر نگیر داره ینی گاهی اوقات کار میکنه و گاهی هم نه . یه مشکل دیگه هم که هست اینه که وقتی من از اتاقی که سنسور رو داخلش گذاشتم میرم بیرون و آردوینو رو فعال میکنم بدون اینکه کسی داخل اتاق بشه آژیر شرو میکنه یه صدا دادن ! این سنسور ها مگه بر اساس حرکت بدن انسان کار نمیکنه؟ ینی مثلا اگه باد پرده رو تکون بده این حرکت پرده رو هم به عنوان حرکت تشخیص میده؟!

    توی کاتالوگ این ماژول ولتاژ ورودی رو زده بود بین 5 تا 20 ولت . من این رو به باتری 12 ولت 4.5 آمپر موتور وصل کردم و متاسفانه سوخت ! دلیلش چی میتونسته باشه؟
    یه سوال دیگه. توی عکس زیر دو تا دکمه چرخشی نارنجی رنگ هست که همون طور که توی تصویر هم نوشته شده یکی برای میزان حساسیت هست و دیگری برای time delay. منظور از time delay دقیقا چیه و اگه بخوام مثلا حساسیت رو زیاد کنم باید به کدوم طرف بچرخونم؟ (با توجه به مشکلاتی که بالا داشتم به هر طرف که میچرخوندم بازم تفاوتی نداشت و بگیر نگیر داشت . یه وقت کار میکرد و یه وقت نه!
    http://aws.robu.in/wp-content/upload...belled-alt.png
    ویرایش توسط behzad70 : 07-12-2016 در ساعت 08:32 PM

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط behzad70 نمایش پست ها
    سلام
    من در حال کار روی پروژه دزدگیر با آردوینو هستم و اولین تجربه کار با این بردهاست
    پروژه رو بر این اساس بردم جلو :*
    برای فعال و غیز فعال کردن دزدگیر ، یک کیت ریموت کنترلر رادیویی خریدم و خروجی رو به برق آردوینو وصل کردم . در واقع زمانی که ریموت رو میزنم و دزدگیر رو فعال میکنم آردوینو 9 ولت میگیره و روشن میشه و در صورتی هم که دکمه دیگه ریموت رو بزنم ، 9 ولت رو قطع میکنم و آردوینو خاموش میشه.

    من دو عدد ماژول hc-SR501 خریدم یه سری مشکل با این ماژول دارم که ممنون میشم راهنمایی کنید
    برای تغذیه ماژول از پین 5 ولت آردوینو استفاده میکنم و پین خروجی (پین وسط) ماژول رو هم به یکی از پین های آردوینو دادم و اون رو هم Input تعریف کردم. داخل تابع loop گفتم :
    کد PHP:
    if(digitalRead(sensorPin) == HIGH)
    {
       
    status 1;
    }

    if(
    status)
    {
       
    // برای روشن کردن آژیر
       
    digitalWrite(alarmPinHIGH);

    اما بگیر نگیر داره ینی گاهی اوقات کار میکنه و گاهی هم نه . یه مشکل دیگه هم که هست اینه که وقتی من از اتاقی که سنسور رو داخلش گذاشتم میرم بیرون و آردوینو رو فعال میکنم بدون اینکه کسی داخل اتاق بشه آژیر شرو میکنه یه صدا دادن ! این سنسور ها مگه بر اساس حرکت بدن انسان کار نمیکنه؟ ینی مثلا اگه باد پرده رو تکون بده این حرکت پرده رو هم به عنوان حرکت تشخیص میده؟!

    توی کاتالوگ این ماژول ولتاژ ورودی رو زده بود بین 5 تا 20 ولت . من این رو به باتری 12 ولت 4.5 آمپر موتور وصل کردم و متاسفانه سوخت ! دلیلش چی میتونسته باشه؟
    یه سوال دیگه. توی عکس زیر دو تا دکمه چرخشی نارنجی رنگ هست که همون طور که توی تصویر هم نوشته شده یکی برای میزان حساسیت هست و دیگری برای time delay. منظور از time delay دقیقا چیه و اگه بخوام مثلا حساسیت رو زیاد کنم باید به کدوم طرف بچرخونم؟ (با توجه به مشکلاتی که بالا داشتم به هر طرف که میچرخوندم بازم تفاوتی نداشت و بگیر نگیر داشت . یه وقت کار میکرد و یه وقت نه!
    http://aws.robu.in/wp-content/upload...belled-alt.png

    متاسفانه کد رو کامل نگذاشتید
    باید دقت کنید که وقتی سنسور چیزی رو سنس نمیکنه متغیر status رو باید به 0 برگردونید که من الان توی کد شما اینو نمی بینیم

    شاید علت اینکه دائم آژیر میزنه همین باشه
    کد:
    if(digitalRead(sensorPin) == HIGH) {status = 1;}
    else {status = 0; }
    if(status)
    {
       // برای روشن کردن آژیر
       digitalWrite(alarmPin, HIGH);
    }
    ***********************************************
    در مورد تایم دیلی یعنی از وقتی یه حرکت رو تشخیص میده تا ه زمانی روی پین دیجیتالش 1 باقی بمونه
    اگه تعداد رفت و آمدها زیاده بهتره این مقدار رو کم کنی ممکنه دلیل اینکه میگی بگیر نگیر داره اینه که این زمان زیاده و شما هم زودتر از این زمان از جلوش رد میشید برای تست
    *************************************************

    در مورد سوختنش هم یه مقدار عجیبه

    چون شما حتی اگه پلاریته رو هم رعایت نکرده باشید باز هم این برد نمیتونه بسوزه
    برای این که ببنید ماژول واقعا سوخت هیا نه همون 12 رو بدید خروجی رگولارتون رو بگیرید ببیند 3.3 میده یا 12
    لایک کردن

  3. #3
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    39
    خیلی متشکر
    در مورد اینکه من status رو صفر نمیکنم دلیلش اینه که من میخوام تا زمانی که آردوینو رو با ریموت قطع نمیکنم آژیر کار کنه . اگه بلاک else رو همون طور که شما گذاشتید استفاده کنم هر زمان که فرد از جلو سنسور رد میشه آژیر میزنه و هر زمان که دیگه جلوش نیست آژیر قطع میشه که این خودش یک باگ محسوب میشه. بازم اگه من اشتباه میکنم لطفا راهنمایی کنید

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

    در مورد اینکه گفتم احتمال میدم یکی از ماژول هام (که به 12 ولت وصلش کردم) سوخته اینه که در همه حال از پین وسط مقدار 3.3 ولت رو برمیگردونه حتی اگه داخل یک اتاق خالی باشه بازم این ولتاژ رو برمیگردونه! احتمال داره نسوخته باشه و مشکل دیگه ای پیش اومد

  4. #4
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط behzad70 نمایش پست ها
    خیلی متشکر
    در مورد اینکه من status رو صفر نمیکنم دلیلش اینه که من میخوام تا زمانی که آردوینو رو با ریموت قطع نمیکنم آژیر کار کنه . اگه بلاک else رو همون طور که شما گذاشتید استفاده کنم هر زمان که فرد از جلو سنسور رد میشه آژیر میزنه و هر زمان که دیگه جلوش نیست آژیر قطع میشه که این خودش یک باگ محسوب میشه. بازم اگه من اشتباه میکنم لطفا راهنمایی کنید

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

    در مورد اینکه گفتم احتمال میدم یکی از ماژول هام (که به 12 ولت وصلش کردم) سوخته اینه که در همه حال از پین وسط مقدار 3.3 ولت رو برمیگردونه حتی اگه داخل یک اتاق خالی باشه بازم این ولتاژ رو برمیگردونه! احتمال داره نسوخته باشه و مشکل دیگه ای پیش اومد

    قسمت اول: ببینید این ماژول ماکزیمم تا 18 ثانیه ( طبق دیتاشیت ممکنه در عمل کمتر هم باشه ) می تونه یک بمونه وقتی این زمان تموم بشه هر کاری کنید 0 میشه .
    بنابراین ماکزیمم 18 ثانیه وقت دارید تا ریموت رو بزنید و آردوینوتون رو خاموش کنید. حالا می تونید این زمان رو یه جوری با کد نویسی افزایش بدید.
    یعنی از زمانی که آردوینو روشن میشه بگید شروع کن هبه شمارش زمان هر وقت از 18 ثانیه رد شد و هنوز آردوینو روشن بود فلان کار رو بکنه برای این که این 18 ثانیه رو هم بشمارید میتونید از دستور millis استفاده کنید:
    https://www.arduino.cc/en/Reference/Millis

    ************************************************** *

    تو معرفی این سنسور هر جا که ببینید یمبینید نوشته human بنابراین نمیتونه اشیاء رو سنس کنه چرا که دمای بدن ما متفاوته با اشیاء

    **************************************************

    این که 3.3 برمی گردونه داره دائم یه چیزی رو سنس می کنه
    ممکنه حساسیتش رو خیلی کم کرده باشید و با توجه به اینکه زاویه تشخیصش 120 درجه هست داره خودتون رو هم میگیره.

    با پتانسیومتر تنظیم حسایت بازی کنید ببنید مشکل حل میشه !
    چرا که وقتی 3.3 میده یعنی رگولاتور روی برد سالم هست
    لایک کردن

  5. #5
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    39
    بله برای اینکه این مشکل 18 ثانیه رو حل کنم من این طور عمل کردم :*
    یک متغیر status تعریف کردم و مقدار پیش فرضش رو 0 گذاشتم. توی تایع loop هم گفتم اگه سنسور چیزی رو سنس کرد مقدار status* رو یک کنه و در نهایت هم اگه مقدار status یک بود به آژیر ولتاژ میدم .
    الان یه برنامه ساده نوشتم برای این کار . لطفا نگاه کنید و اگه پیشنهادی برای بهتر کردنش دارید بفرمایید .
    #include <SPI.h>
    int status = 0;
    int sensor = 2;
    int alarm = 10;

    void setup() {
    pinMode(alarm, OUTPUT);
    pinMode(sensor, INPUT);
    }

    void loop() {
    if(digitalRead(sensor) == HIGH){
    status = 1;
    }
    if(status)
    {

    digitalWrite(alarm, HIGH);
    }

    }
    با این کار به محض اینکه سنسور چیزی رو سنس کنه ، مقدار متغیر status رو یک میکنم و تا زمانی که آردوینو ریست یا خاموش نشه این مقدار یک خواهد بود و در نتیجه آژیر زده میشه. درسته؟

  6. #6
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط behzad70 نمایش پست ها
    بله برای اینکه این مشکل 18 ثانیه رو حل کنم من این طور عمل کردم :*
    یک متغیر status تعریف کردم و مقدار پیش فرضش رو 0 گذاشتم. توی تایع loop هم گفتم اگه سنسور چیزی رو سنس کرد مقدار status* رو یک کنه و در نهایت هم اگه مقدار status یک بود به آژیر ولتاژ میدم .
    الان یه برنامه ساده نوشتم برای این کار . لطفا نگاه کنید و اگه پیشنهادی برای بهتر کردنش دارید بفرمایید .


    با این کار به محض اینکه سنسور چیزی رو سنس کنه ، مقدار متغیر status رو یک میکنم و تا زمانی که آردوینو ریست یا خاموش نشه این مقدار یک خواهد بود و در نتیجه آژیر زده میشه. درسته؟
    این کد که همون کد قبلی شماست
    ولی با همین کد هم به محض دیده شدن حرکت وقتی status یک بشه و هیوقت دیگه 0 نشده تا خاموش نشدن آردوینو کماکان بوق میزنه

  7. #7
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    39
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    این کد که همون کد قبلی شماست
    ولی با همین کد هم به محض دیده شدن حرکت وقتی status یک بشه و هیوقت دیگه 0 نشده تا خاموش نشدن آردوینو کماکان بوق میزنه
    بله منم دقیقا همینو میخام. مشکلی که من دارم خیلی عجیبه . من دیروز بدون اینکه سنسور رو به آردوینو وصل کنم (یعنی پین 2 در این کدی که نوشتم خالی بود ) آردوینو رو روشن کردم اما بعد از حدودا 20 ثانیه خود به خود آژیر بوق زد! با اهم متر هم که پایه 10 رو اندازه گرفتم 5 ولت بود !!
    امروز هم که از یکی از افرادی که در این زمینه تخصص داشتن پرسیدم گفتن باید pullup کنم. توی سایت آردوینو نوشته از یک مقاومت 10 کیلو استفاده کنم اما هنوز نفهمیدم چرا؟!

  8. #8
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط behzad70 نمایش پست ها
    بله منم دقیقا همینو میخام. مشکلی که من دارم خیلی عجیبه . من دیروز بدون اینکه سنسور رو به آردوینو وصل کنم (یعنی پین 2 در این کدی که نوشتم خالی بود ) آردوینو رو روشن کردم اما بعد از حدودا 20 ثانیه خود به خود آژیر بوق زد! با اهم متر هم که پایه 10 رو اندازه گرفتم 5 ولت بود !!
    امروز هم که از یکی از افرادی که در این زمینه تخصص داشتن پرسیدم گفتن باید pullup کنم. توی سایت آردوینو نوشته از یک مقاومت 10 کیلو استفاده کنم اما هنوز نفهمیدم چرا؟!
    تا جایی که من میدونم این سنسور زمانی که حرکت رو تشخیص میده 1 میشه
    بنابراین اگر قصد دارید دقیق کار کنید باید pull down کنیدو

    یعنی چی

    یعنی اینکه به پین آردوینو بگید تا زمانی که سنسور تا زمانی که بهت داده 1 رو نداده الکی نرو 1 شو تا مشکل توهم وجود ادم بوجود بیاد

    با یه مقاومت pull down اش کنید.

    اینو بخون
    پول آپ (Pull-up) و پول دان(Pull-down) چیست؟ : آموزش و مثال*ها AVR
    لایک کردن

  9. #9
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    39
    مقاله رو خوندم اما درست متوجه نشدم ینی به پین وسط سنسور (که در صورتی که انسان رو سنس کنه 3.3 ولت برمیگردونه) یک مقاومت بزنم و بعد وصل کنم به آردوینو؟

  10. #10
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    39
    مشکلی که دارم رو الان دقیق تر تست کردم و نتیجه رو اینجا باهاتون مطرح میکنم شاید کمکی بکنه مشکلم رفع بشه
    من پین زمین سنسور رو به gnd آردوینو و پین ولتاژ رو هم به 5 ولت آردوینو وصل کردم . پین وسط هم که نتیجه رو برمیگردونه رو به اوهم متر . نتیجه رو عینا براتون مینویسم :
    من سیم اهم متر رو بلند کردم به طوری که سنسور رو توی اتاق گذاشتم و خودم از اتاق خارج شدم و اهم متر رو هم دائم چک میکردم . وقتی خارج اتاق بودم سنسور چیزی رو سنس نمیکرد و درنتیجه اهم متر صفر ولت رو نشون میداد که این درسته. اما مشکل اینجاست که وقتی یک بار وارد اتاق میشدم و دوباره از اتاق خارج میشدم سنسور در بازه های زمانی 4 یا 5 ثانیه ای نتیجه رو صفر و یک میکرد! مثلا 5 ثانیه 3.3 و 5 ثانیه هم صفر! این روند حدودا 7 یا 8 بار تکرار میشد تا اینکه در نهایت صفر میشد و اگه دوباره وارد اتاق بشم و برگردم دوباره همین روند تگرار میشد! مشکل من همینه . من میخام تا زمانی که سنسور فرد رو سنس میکنه خروجی یک باشه و در صورتی که دیگه فرد نبود صفر شه
    شاسی های مربوط به auto reset و no reset رو هم امتحان کردم ولی بازم درست نشد!
    ممنون میشم راهنمایی کنید

صفحه 1 از 2 12 آخرینآخرین

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO