رفتن به مطلب

شروع به کار با بوردهای اردوینو Arduino


Eng.KouRosH

ارسال های توصیه شده

  • پاسخ 362
  • ایجاد شد
  • آخرین پاسخ

بهترین ارسال کنندگان این موضوع

بهترین ارسال کنندگان این موضوع

دوستان تو بحث باتن یک نکته خیلی مهم وجود داره و اونم بحث دیبانس هست یعنی اینکه وقتی ما باتن رو فشار میدیم به علت لرزشی که حین قطع و وصل کلید هست و میکروی ما با سرعت این تغییرات رو حس میکنه باعث اختلال تو کار ما میشه و خروجی ممکنه کار کنه ولی ثبات نداره باید برنامه رو طوری نوشت که این دیبانس رو گرفت داخل خود اردوینو مثالش هست

 

من تو محیط کدویژن یه تیکه کد داشتم همیشه اونو استفاده میکردم هرچند برنامه برای رفع دیبانس زیاده و هرکس ممکنه یک جور برنامه اش رو بنویسه و قاعدتا برنامه ای بی عیب و نقص هست که هم این خطا رو رفع کنه و هم وقفه ای تو کار cpu نندازه همون تاخیرهایی که داخل برنامه میندازیم هرچند در حد میلی ثانیه خودش سرعت cpu رو میگیره برای کارای خیلی حساس همین میلی ثانیه ها هم مهمه !

شما فرض کنید کلاک میکرو 1 مگا هرتز هست زمان اجرای دستورات میشه در حد میکرو ثانیه حالا داخل برنامه وقتی یک تاخیر میلی ثانیه ای بدیم حساب کنید چقدر تاخیر ایجاد میشه !

 

من برنامه اش رو آنالیز کردم چیز خاصی نداره توضیح میدم تستش هم میکنیم ............

 

:a030:

 

خب کدش چی هست ؟

  • Like 1
لینک به دیدگاه

خب اینم همون برنامه که توضیح دادم و برق رفت و همه چی پرید:icon_pf (34):

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

 

خب اول برنامه ما دوتا پین از اردوینو رو برای خودمون نام گذاری میکنیم تا توی برنامه بجای نوشتن 2 یا 13 اسمی که گذاشتیم رو جاش بنویسیم(برای درک بهتر برنامه)

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

خب اینجا سه تا متغییر تعریف میکنیم و به دوتاش مقدار دادیم اولی وضعیت led دومی وضعیت باتن و اخری اخرین وضعیت باتن هست ..........خب وضعیت ال ای دی رو اول کار HIGH گرفته اگر برنامه رو چک کنید قاعدتا باید led همون اول کار روشن باشه پس میتونید پیش فرض رو LOW بگیرید

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

خب اینجا هم دوتا متغیر دیگه تعریف کرده یکیش اولی زمان اخرین دیبانس این یه متغیره که میخواد تایم دیبانس رو بریزه داخلش و با تاخیری که واسه دیبانس در نظر گرفتیم مقایسه کنه .......دومی همون تایم دیبانسمون هست که 50 در نظر گرفته

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

این تابع فقط یکبار اجرا میشه با استارت اردوینو یا ریست شدنش.........واسه تعیین حالت ورودی خروجی ها و تعریف متغییر و ..............

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

تو این قسمت که مشخص هست اون پین هایی که نامگذاری کردیم رو تعیین کرده کدوم ورودی باشه و کدوم خروجی

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

اینجاهم که فرمان روشن شدن led هست و طبق پیش فرض که واسه وضعیت ال ای دی در نظر گرفته باید روشن بشه .......

 

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

حلقه اصلی برنامه که دائم دستورات داخل اون اجرا میشه...........

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

اینجا یک متغیر از نوع int تعریف کرده که نیازی هم نیست واسه خوندن باتن که یا صفر هست یا یک نیازی نیست int تعریف کنیم!!! با این دستور میاد وضعیت پین رو میخونه و داخل متغیر reading میریزه

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

حالا میاد شرط میذاره میگه اگر متغیر reading که دیتای وضعیت باتن رو داخل خودش داره رو چک میکنه با اخرین وضعیت باتن چک کردنش هم به این نحو هست که میگه اگر وضعیت باتن که خوندیم نامساوی اخرین وضعیت باتن بود بیا و دستوراتی که میگم اجرا کن داخل شرط هم میاد با تابع millis() زمان رو میگیره این تابع رو اورده که مقدار دیبانس رو چک کنه باهاش زمان رو میگیره و بعد میریزه داخل متغیر lastDibounceTime

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

خب بازم اینجا شرط داریم داخل شرط میگه اگر زمانی که تابع millis() گرفته رو از lastDebounseTime که داخل این هم توسط تابع مقدار داده شده از هم کم کن خب الان شاید بگید خود lastDebounceTime از millis() مقداردهی شده از هم کم بشن صفر میشه و شرط کلا اجرا نمیشه! اما اینطورم نیست بعد اینکه مقدار دهی میشه مقدار millis بازهم تغییر میکنه چون داره همینجوری کنتور میندازه چون تابع هست و هی داره زمان میگیره و وقتی اختلاف تابع millis با lastDibounceTime بزرگتر از debounceDelay که همون 50 میلی ثانیه هست ، شد اونوقت شرط برقراره امیدوارم متوجه شده باشین :ws3:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

خب اگر این شرط برقرار شه تازه میاد شرط بعدی رو چک میکنه میگه اگر متغیر reading که همون وضعیت باتن ما داخلشه نامساوی buttonstate یا همون وضعیت باتن بود شرط برقراره ..........متغیر buttonstate رو ما پیش فرض LOW گرفتیم و با وضعیت فعلی که داخل reading هست چک میکنیم

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

اگر شرط برقرار بشه میاد وضعیت پین رو میریزه داخل متغییر buttonstate

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

بعد از این دو شری میرسیم به سومین شرط که میگه اگه buttonstate که الان مقدار دهی شد اگر HIGH شده دستور زیر رو اجرا کن

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

اینجارو دقت کنید این دستور با اونی که داخل پرانتز شرط هست فرق داره فرقشم تو اینه که اول مساویاومده بعد علامت ! این یعنی اینکه هرچی هست عکسش کن تو دستور زیر گفته وضعیت led هرچی هست عکسش کن اگر HIGH باشه LOW میشه و برعکس............

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

اینجا میاد و فرمان رو میده مقداری که داخل ledstate هست رو اعمال میکنه همون دستور روشن و خاموش خودمونه فقط عدد نیست با متغییر سروکار داریم...........

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

انتهای برنامه باز میاد وضعیت پین رو میگیره و میریزه داخل متغیری که اخرین وضعیت باتن رو داخل خودش ذخیره میکنه

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

 

امیدوارم متوجه شده باشین این استدلال من بود از برنامه اگر نظری انتقادی دارین بگین ولی من زیر بار نمیرم همینجور که گفتم رو قبول دارم :ws3:

  • Like 3
لینک به دیدگاه

اینم شبیه سازیش داخل پروتئوس

یه توضیحی هم در رابطه با پول دان و پول آپ کردن بدم .........

ورودی های ما علاوه بر قضیه دیبانس که موقع فشردن باتن ایجاد میشه نویز هم میگیرن چون تو محیط های صنعتی نویزی که تو محیط هست میتونه روی پین میکرو تاثیر بذاره با توجه به اینکه سطح منطقی میکرو 5ولت هست (معمولا چون ممکنه با تغذیه های دیگه کمتر یا یکم بیشترهم کارکنه میکروی ما)..........

پس این نویز راحت میتونه روی پین ما تاثیر بذاره و میکرو این رو تغییر وضعیت باتن در نظر میگیره و این اصلا خوب نیست...........

 

واسه همین میان با توجه به برنامه و اینکه شرط باتن رو HIGH شدن یا LOW شدن در نظرگرفتیم میایم پول آپ یا پول دان میکنیم اینجا تو برنامه چون گفته اگر ورودی HIGH شد پس ما میایم پین میکرومون رو با یک مقاومت زمین میکنیم خب این چه فایده داره؟

وقتی با یک مقاومت ما پین ورودی رو پول دان کنیم در واقع اگرم نویزی بیاد چون زمین شده هیچ تاثیری نمیذاره اما وقتی باتن رو بزنیم وضعیت از صفر به یک منطقی تغییر میکنه

برای حالتی که تو شرط صفر شدن رو مبنا قرار بدیم بدیهیه که برعکس باید کارکنیم و پین میکرو رو پول آپ میکنیم ..........

ooiak4zc9trw5g01mswj.jpg

  • Like 4
لینک به دیدگاه
اینم شبیه سازیش داخل پروتئوس

یه توضیحی هم در رابطه با پول دان و پول آپ کردن بدم .........

ورودی های ما علاوه بر قضیه دیبانس که موقع فشردن باتن ایجاد میشه نویز هم میگیرن چون تو محیط های صنعتی نویزی که تو محیط هست میتونه روی پین میکرو تاثیر بذاره با توجه به اینکه سطح منطقی میکرو 5ولت هست (معمولا چون ممکنه با تغذیه های دیگه کمتر یا یکم بیشترهم کارکنه میکروی ما)..........

پس این نویز راحت میتونه روی پین ما تاثیر بذاره و میکرو این رو تغییر وضعیت باتن در نظر میگیره و این اصلا خوب نیست...........

 

واسه همین میان با توجه به برنامه و اینکه شرط باتن رو HIGH شدن یا LOW شدن در نظرگرفتیم میایم پول آپ یا پول دان میکنیم اینجا تو برنامه چون گفته اگر ورودی HIGH شد پس ما میایم پین میکرومون رو با یک مقاومت زمین میکنیم خب این چه فایده داره؟

وقتی با یک مقاومت ما پین ورودی رو پول دان کنیم در واقع اگرم نویزی بیاد چون زمین شده هیچ تاثیری نمیذاره اما وقتی باتن رو بزنیم وضعیت از صفر به یک منطقی تغییر میکنه

برای حالتی که تو شرط صفر شدن رو مبنا قرار بدیم بدیهیه که برعکس باید کارکنیم و پین میکرو رو پول آپ میکنیم ..........

ooiak4zc9trw5g01mswj.jpg

 

نرم افزاری نمیشه پول آپ کرد ؟

آخه فکر کنم یه سری مقاومت رو برد آردوینو هست که اگه تو برنامه بنویسیم ازون استفاده میکنیم

همچین چیزی 5c6ipag2mnshmsf5ju3z.gif

اشتباه میگم ؟

  • Like 2
لینک به دیدگاه
نرم افزاری نمیشه پول آپ کرد ؟

آخه فکر کنم یه سری مقاومت رو برد آردوینو هست که اگه تو برنامه بنویسیم ازون استفاده میکنیم

همچین چیزی 5c6ipag2mnshmsf5ju3z.gif

اشتباه میگم ؟

 

چرا میشه فکرکنم بجای input باید نوشت input_pullup ..............

  • Like 1
لینک به دیدگاه
چرا میشه فکرکنم بجای input باید نوشت input_pullup ..............

 

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

  • Like 2
لینک به دیدگاه
آخه خودم یه برنامه نوشتم ازین دستور استفاده کردم

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

تو میکروها پول اپ داخلی داریم اما نمیشه اعتماد کرد و مقاومت میذاریم ........... شاید اینم پول اپ داخلی رو فعال میکنه

  • Like 2
لینک به دیدگاه

راستی من چنتایی ماژول گرفتم

 

ماژول سنسور دما و رطوبت DHT11

 

DHT11_Module_1-350x350.jpg

 

 

ماژول ساعت DS1307 دارای ارتباط I2C

 

 

 

DS1307_Mini_3-350x350.jpg

 

 

 

ماژول سنسور دیجیتالی دما DS18b20

 

 

 

 

2 سه تای دیگه هم هست

  • Like 2
لینک به دیدگاه
راستی من چنتایی ماژول گرفتم

 

ماژول سنسور دما و رطوبت DHT11

 

DHT11_Module_1-350x350.jpg

 

 

ماژول ساعت DS1307 دارای ارتباط I2C

 

 

 

DS1307_Mini_3-350x350.jpg

 

 

 

ماژول سنسور دیجیتالی دما DS18b20

 

 

 

 

2 سه تای دیگه هم هست

 

وضعت خوبه :ws3:

 

بلوتوث و وای فای چی داری :ws38:

  • Like 3
لینک به دیدگاه
نگرفتم :ws3:

 

بلوتوث به غیر از ارتباط نرم افزاری با موبایل کاربرد دیگه ای داره ؟

 

مدل های مختلفی داره من این مدلی که کار کردم برای ارسال دیتا متنی و ایناس ...........پروژه های خوبی میشه راه انداخت باهاش برای مدیریت وسایل خونه و شرکت و..........

برای انتقال صوت و تصویر فکرکنم ماژول هاش متفاوته از نظر برد هم همینطور

  • Like 2
لینک به دیدگاه

×
×
  • اضافه کردن...