نمایش نتایج: از 1 به 10 از 29
Like Tree9 لایک

موضوع: ساخت تایمر با آردیونو+کنترل با میکروسوئیچ

Hybrid View

  1. #1
    Junior Member
    تاریخ عضویت
    May 2016
    نوشته ها
    22
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    دوست گرامی ، برای اینکه برنامه تون درست در بیاد بهتره اول فلوچارت رسم کنین و بعد بر اساس اون کدتون رو بنویسین
    در مورد if و else if هم این مثال رو ببینید
    میخوایم اگه بارون اومد یه لامپ روشن بشه و همچنین اگه هوا گرم بود و بارون هم نمیومد کولر آبی روشن بشه
    حالا اگه شما دوتاش رو if بذارین میاد میبینه بارون میاد یا نه اگه میاد لامپ رو روشن میکنه بعد هم میره میبینه هوا گرمه یا نه ، اگه گرم بود فارع از اینکه بارون میاد یا نه کولر رو روشن میکنه
    حالا اگه اولی رو if و دومی رو else if بذارین میبینه بارون میاد یا نه اگه میاد لامپ رو روشن میکنه ، تو قسمت بعد که else if هست میگه "در غیراینصورت اگر:" در غیرکدوم صورت؟ همون صورت که بارون بیاد ، پس اگه بارون میاد این شرط اصلا چک نمیشه و اگه بارون نیاد میره میبینه هوا گرمه یا نه اگه گرم بود کولر رو روشن میکنه

    سلام
    بنده با استفاده از کدی ک خودم نوشته بودم مدار رو روی برد بورد بستم و امتحان کردم تمامی شروط خیلی عالی کار میکنه و مشکلی با عدم وجود else ندارم .تنها مشکل باقی مونده اینه ک مدتی ک رله به واسطه حرکت کند موتور هنوز روشنه(4 دقیقه)تابع millis همچنان در حالت شمارشه در حالی ک من میخوام بعد از فشرده شدن کلید ها شمارش انجام بشه.آیا باز هم تابع millis جوابگو هست؟
    تو اینترنت زیاد گشتم چیزهایی ک به زهنم خطور میکنه:
    1. این ک از ی مازول ساعتds3231 استفاده کنم (اما نمیدونم چطوری بر اساس ساعت اون دستورات رو از میکرو دریافت کنم)
    2.استفاده از کریستال ساعت32.768 و دریافت ساعت دقیق(اینم مثل بالایی بلد نیستم)

    فلوچارت:http://s6.picofile.com/file/8255108634/000.JPG

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط abbasjavanmardi نمایش پست ها
    سلام
    بنده با استفاده از کدی ک خودم نوشته بودم مدار رو روی برد بورد بستم و امتحان کردم تمامی شروط خیلی عالی کار میکنه و مشکلی با عدم وجود else ندارم .تنها مشکل باقی مونده اینه ک مدتی ک رله به واسطه حرکت کند موتور هنوز روشنه(4 دقیقه)تابع millis همچنان در حالت شمارشه در حالی ک من میخوام بعد از فشرده شدن کلید ها شمارش انجام بشه.آیا باز هم تابع millis جوابگو هست؟
    تو اینترنت زیاد گشتم چیزهایی ک به زهنم خطور میکنه:
    1. این ک از ی مازول ساعتds3231 استفاده کنم (اما نمیدونم چطوری بر اساس ساعت اون دستورات رو از میکرو دریافت کنم)
    2.استفاده از کریستال ساعت32.768 و دریافت ساعت دقیق(اینم مثل بالایی بلد نیستم)

    فلوچارت:http://s6.picofile.com/file/8255108634/000.JPG
    نه تابع MILLIS این حرفا سرش نمیشه
    از وقتی پاور میدی میشماره

    برای ماژول های ساعت ترجیحا از دقیقش استفاده کن
    البته من اخیرا این تایمر رو کشف کردم :
    Make an accurate Arduino clock using only one wire - NO external hardware needed! - All
    لایک کردن

  3. #3
    Senior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    229
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    نه تابع millis این حرفا سرش نمیشه
    از وقتی پاور میدی میشماره

    برای ماژول های ساعت ترجیحا از دقیقش استفاده کن
    البته من اخیرا این تایمر رو کشف کردم :
    make an accurate arduino clock using only one wire - no external hardware needed! - all
    ممنون جالب بود ،
    چنتا سوال
    1- اینکه فرکانس pwm همیشه ثابته و با گرم شدن و در طول زمان تغییر نمیکنه؟
    2- به جای اینکه pwm رو روی 127 قرار بده ، اگه مثلا روی 50 یا هر عدد دیگه ای غیر از 0 و 255 قرار میداد نتیجه فرق میکرد؟
    3- الان تو این برد آردوینو چنتا نوسان ساز هست کلا و کدوم دقتش بیشتره؟

  4. #4
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    ممنون جالب بود ،
    چنتا سوال
    1- اینکه فرکانس pwm همیشه ثابته و با گرم شدن و در طول زمان تغییر نمیکنه؟
    2- به جای اینکه pwm رو روی 127 قرار بده ، اگه مثلا روی 50 یا هر عدد دیگه ای غیر از 0 و 255 قرار میداد نتیجه فرق میکرد؟
    3- الان تو این برد آردوینو چنتا نوسان ساز هست کلا و کدوم دقتش بیشتره؟

    اگه روی هر عددی به جز 127 قرار می داد جای لبه های بالا رونده دیکه سر ضرب در نمیومد و اون عددی که توی تابع اینتراپتش نوشته عملا دیگه معنی نداشت.

  5. #5
    Senior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    229
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    اگه روی هر عددی به جز 127 قرار می داد جای لبه های بالا رونده دیکه سر ضرب در نمیومد و اون عددی که توی تابع اینتراپتش نوشته عملا دیگه معنی نداشت.
    منظورتون از "سر ضرب در اومدن" نفهمیدم ، من با اعداد مختلف امتحان کردم نتیجه یکسان بود
    اینتراپت رو هم این شکلی نوشتم : (attachInterrupt(digitalPinToInterrupt(2),timer,FA LLING
    timer هم تابعی هست که کار شمارش نوسان ها رو انجام میده

  6. #6
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    منظورتون از "سر ضرب در اومدن" نفهمیدم ، من با اعداد مختلف امتحان کردم نتیجه یکسان بود
    اینتراپت رو هم این شکلی نوشتم : (attachInterrupt(digitalPinToInterrupt(2),timer,FA LLING
    timer هم تابعی هست که کار شمارش نوسان ها رو انجام میده
    نمیدونم چطوری این اتفاق افتاد براتون
    چون با نوشتن عدد 127 در واقع قصد داشته شکل موجی با dutycycle برابر 50 درصد بوجود بیاره ولی وقتی عدد تغییر کنه شکل موج های زیر بوجود میاد در واقع
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 512e869bce395fbc64000002.JPG
مشاهده: 202
حجم: 26.5 کیلو بایت
    بعد داستانی که هست اینه که اینتراپت میاد روی لبه های بالارونده تابه اینتراپتوش صدا میزنه
    اگه قرارباشه با عددهای به جز 127 هم این کار رو بکنه زمان مساوی از بین میره چون در دو شکل پایین یک پریود به صورت مساوی زمانی پخش نمیشه

    این برای من بسیار عجیبه !

    کار یکه شما کردید با لبه پایین رونده فعال کردید که باز هم همین ایده تکرار میشه !
    طبق چیزی که من از کد متوجه شدم کاری که شما کردید تغییر 127 باید داغون کنه برنامه رو

    شما از کد چه چیزی متوجه شدید؟

  7. #7
    Senior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    229
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    نمیدونم چطوری این اتفاق افتاد براتون
    چون با نوشتن عدد 127 در واقع قصد داشته شکل موجی با dutycycle برابر 50 درصد بوجود بیاره ولی وقتی عدد تغییر کنه شکل موج های زیر بوجود میاد در واقع
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 512e869bce395fbc64000002.JPG
مشاهده: 202
حجم: 26.5 کیلو بایت
    بعد داستانی که هست اینه که اینتراپت میاد روی لبه های بالارونده تابه اینتراپتوش صدا میزنه
    اگه قرارباشه با عددهای به جز 127 هم این کار رو بکنه زمان مساوی از بین میره چون در دو شکل پایین یک پریود به صورت مساوی زمانی پخش نمیشه

    این برای من بسیار عجیبه !

    کار یکه شما کردید با لبه پایین رونده فعال کردید که باز هم همین ایده تکرار میشه !
    طبق چیزی که من از کد متوجه شدم کاری که شما کردید تغییر 127 باید داغون کنه برنامه رو

    شما از کد چه چیزی متوجه شدید؟
    شما هم اگه بخواین میتونین امتحان کنین
    خب تصور من اینه که این عدد هرچیزی باشه فرکانس موج مقدار ثابتی هست(490 هرتز) و همینطور دوره (T=1/490)،
    و در همه حالات هم ( pwm های متفاوت) در مدت زمان T یک نوسان اتفاق میوفته و اون تابع شمارنده زمان هم داره این نوسان ها رو میشماره
    چه اینکه ولتاژ بره بالا زود بیاد پایین یا بره بالا و بیشتر بمونه و بعد بیاد پایین از اون جایی که در هر دورهT یه بار فقط بالا میره و تابع شمارنده فقط بالا رفتن (یا پایین اومدن ها رو میشماره) مقدار pwm روی نتیجه شمارش تاثیر نداره

  8. #8
    Senior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    229
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    نه تابع MILLIS این حرفا سرش نمیشه
    از وقتی پاور میدی میشماره

    برای ماژول های ساعت ترجیحا از دقیقش استفاده کن
    البته من اخیرا این تایمر رو کشف کردم :
    Make an accurate Arduino clock using only one wire - NO external hardware needed! - All
    قبلا با millis() که ساعت رو اجرا کردم توی هر ساعت 4 ثانیه خطا داشت و آردوینو از زمان واقعی جلو میفتاد ، یا این سیم هم که اجرا کردم (با توجه به اینکه فرکانس pwm معمول برای پایه های آردیونو 490 هست) خطایی که به دست اومد 5 ثانیه بود و باز هم آردوینو جلو افتاد از زمان واقعی ، به نظر میاد این هم اونقدا دقیق نیست
    و اونقدری که من میدونم همون millis() هم با استفاده از وقفه و یه کانتر داخلی داره شمرده میشه

  9. #9
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    قبلا با millis() که ساعت رو اجرا کردم توی هر ساعت 4 ثانیه خطا داشت و آردوینو از زمان واقعی جلو میفتاد ، یا این سیم هم که اجرا کردم (با توجه به اینکه فرکانس pwm معمول برای پایه های آردیونو 490 هست) خطایی که به دست اومد 5 ثانیه بود و باز هم آردوینو جلو افتاد از زمان واقعی ، به نظر میاد این هم اونقدا دقیق نیست
    و اونقدری که من میدونم همون millis() هم با استفاده از وقفه و یه کانتر داخلی داره شمرده میشه
    من به تازگی دستور tone رو کشف کردم

    خوشم اومد ازش

    البته ربطی به این موضوع نداشت زیاد

  10. #10
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط siib نمایش پست ها
    قبلا با millis() که ساعت رو اجرا کردم توی هر ساعت 4 ثانیه خطا داشت و آردوینو از زمان واقعی جلو میفتاد ، یا این سیم هم که اجرا کردم (با توجه به اینکه فرکانس pwm معمول برای پایه های آردیونو 490 هست) خطایی که به دست اومد 5 ثانیه بود و باز هم آردوینو جلو افتاد از زمان واقعی ، به نظر میاد این هم اونقدا دقیق نیست
    و اونقدری که من میدونم همون millis() هم با استفاده از وقفه و یه کانتر داخلی داره شمرده میشه
    .

    این مشکل دقیقا به خود atmega و البته کریستال بر می گرده

    کریستال هر چی دماش بره بالا انحراف معیارش از فرکانس اصلیش بیشتر میشه
    لایک کردن

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

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

SEO by vBSEO