فهرست مطالب:
تصویری: روش های زمان بندی آردوینو با Millis (): 4 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
در این مقاله ما millis () را معرفی می کنیم. استفاده کنید و از آن برای ایجاد مثالهای مختلف زمان بندی استفاده کنید.
ملیس؟ هیچ ربطی به لب لب ندارد … امیدوارم شما میلی را به عنوان پیش شماره عددی یک هزارم تشخیص داده اید. که یک واحد اندازه گیری را در 0.001 ضرب می کند (یا ده به توان منفی 3).
جالب اینجاست که سیستم های آردوینو ما تعداد میلی ثانیه (هزاران ثانیه) از شروع طرح را تا زمانی که تعداد به حداکثر تعداد قابل ذخیره در نوع متغیر بدون علامت طولانی (عدد صحیح 32 بیتی [چهار بایت]) برسد ، شمارش می کنند. -که از صفر تا (2^32) -1. (2^32) -1 ، یا 4294967295 میلی ثانیه به 49.71027 روز فرد تبدیل می شود.
هنگامی که آردوینو ریست می شود ، شمارنده بازنشانی می شود ، به حداکثر مقدار می رسد یا طرح جدیدی بارگذاری می شود. برای به دست آوردن مقدار شمارنده در یک موقعیت خاص ، فقط تابع را فراخوانی کنید - برای مثال:
شروع = millis ()؛
جایی که شروع می شود یک متغیر طولانی بدون علامت است. در اینجا یک مثال بسیار ساده برای نشان دادن millis () در عمل وجود دارد:
/ * میلیس () تظاهرات */
شروع طولانی بدون علامت ، تمام شده ، سپری شده ؛
void setup ()
{Serial.begin (9600) ؛ }
حلقه خالی ()
{Serial.println ("شروع …") ؛ شروع = millis ()؛ تاخیر (1000) ؛ تمام = millis ()؛ Serial.println ("به پایان رسید") ؛ سپری شده = پایان راه اندازی ؛ Serial.print (سپری شده) ؛ Serial.println ("میلی ثانیه سپری شد") ؛ Serial.println ()؛ تأخیر (500) ؛ }
این طرح شمارش میلی های فعلی را در ابتدا ذخیره می کند ، سپس یک ثانیه منتظر می ماند ، سپس مقدار میلی ثانیه را دوباره در حالت نهایی ذخیره می کند. در نهایت زمان سپری شده تاخیر را محاسبه می کند. در صفحه نمایش زیر صفحه نمایش مانیتور سریال ، می توانید ببینید که مدت زمان همیشه دقیقاً 1000 میلی ثانیه نبوده است ، همانطور که در تصویر نشان داده شده است.
مرحله 1:
به بیان ساده تر ، عملکرد millis از شمارنده داخلی درون میکروکنترلر ATmega در قلب Arduino شما استفاده می کند. این شمارنده هر چرخه ساعت را افزایش می دهد - که در سرعت استاندارد 16 مگاهرتز (در Arduino استاندارد و سازگار) اتفاق می افتد. این سرعت توسط کریستال روی برد آردوینو (وسیله نقره ای با مهر T16.000 روی آن کنترل می شود).
گام 2:
دقت کریستال بسته به دمای خارجی و تحمل خود بلور می تواند متفاوت باشد. این به نوبه خود بر دقت نتیجه میلی ثانیه شما تأثیر می گذارد. تجربه حدیثی گزارش کرده است که تغییر زمان می تواند در حدود سه یا چهار ثانیه در هر بیست و چهار ساعت باشد.
اگر از تخته یا نسخه شخصی خود استفاده می کنید که به جای کریستال از رزوناتور سرامیکی استفاده می کند ، توجه داشته باشید که آنها دقیق نیستند و احتمال افزایش سطوح رانش را افزایش می دهند. اگر به سطح بسیار بیشتری از دقت زمان نیاز دارید ، IC های تایمر خاص مانند Maxim DS3231 را در نظر بگیرید.
اکنون می توانیم از میلی برای عملکردهای مختلف زمان بندی استفاده کنیم. همانطور که در طرح قبلی نشان داده شد ، می توانیم زمان سپری شده را محاسبه کنیم. برای پیشبرد این ایده ، بیایید یک کرنومتر ساده بسازیم. انجام این کار می تواند به همان اندازه ساده یا پیچیده باشد ، اما در این مورد ما به سمت ساده منحرف می شویم.
از نظر سخت افزاری ، ما دو دکمه-Start و Stop-با مقاومتهای کشویی 10k اهم به ترتیب به پایه های دیجیتال 2 و 3 داریم. هنگامی که کاربر با فشار دادن شروع می کند ، طرح مقدار میلی را در نظر می گیرد - سپس پس از فشار دادن توقف ، طرح دوباره مقدار میلی را یادداشت می کند ، زمان سپری شده را محاسبه و نمایش می دهد. سپس کاربر می تواند شروع را برای تکرار روند فشار دهد یا برای به روزرسانی داده ها توقف کند. در اینجا این طرح است:
/* کرنومتر فوق اساسی با استفاده از millis ()؛ */
شروع طولانی بدون علامت ، تمام شده ، سپری شده ؛
void setup ()
{Serial.begin (9600) ؛ pinMode (2 ، ورودی) ؛ // دکمه شروع pinMode (3 ، ورودی) ؛ // دکمه توقف Serial.println ("برای شروع/تنظیم مجدد 1 ، برای زمان سپری شده 2 را فشار دهید") ؛ }
void displayResult ()
{float h، m، s، ms؛ بدون امضا از مدتها پیش ؛ سپری شده = پایان راه اندازی ؛ h = int (سپری شده/3600000) ؛ بیش = سپری شده٪ 3600000؛ m = int (بیش از/60000) ؛ بیش از = بیش از 60000؛ s = int (بیش از/1000) ؛ ms = بیش از٪ 1000 ؛ Serial.print ("زمان خام سپری شده:")؛ Serial.println (سپری شده) ؛ Serial.print ("زمان سپری شده:") ؛ Serial.print (h، 0)؛ Serial.print ("h") ؛ Serial.print (متر ، 0) ؛ Serial.print ("m") ؛ Serial.print (s، 0)؛ Serial.print ("s")؛ Serial.print (ms، 0)؛ Serial.println ("ms") ؛ Serial.println ()؛ }
حلقه خالی ()
{if (digitalRead (2) == HIGH) {شروع = millis ()؛ تأخیر (200) ؛ // برای debounce Serial.println ("شروع شد …") ؛ } if (digitalRead (3) == HIGH) {finish = millis ()؛ تأخیر (200) ؛ // برای debounce displayResult ()؛ }}
فراخوانی های تاخیر () برای حذف سوئیچ ها استفاده می شود - اینها اختیاری هستند و استفاده از آنها به سخت افزار شما بستگی دارد. تصویر نمونه ای از خروجی نمایشگر طرح اولیه است - کرونومتر شروع شده است ، و سپس دکمه دو را شش بار در دوره های مختلف فشار می دهید.
مرحله 3: سرعت سنج…
اگر سنسور در ابتدا و انتهای یک فاصله ثابت داشتید ، سرعت را می توان محاسبه کرد: سرعت = فاصله. زمان.
همچنین می توانید یک سرعت سنج برای شکل حرکت چرخدار ، به عنوان مثال دوچرخه ، بسازید. در حال حاضر ما دوچرخه ای نداریم که بخواهیم با آن کار کنیم ، اما می توانیم فرایند این کار را توضیح دهیم - این بسیار ساده است. (سلب مسئولیت - این کار را با مسئولیت خود و غیره انجام دهید)
اول از همه ، بیایید ریاضیات لازم را مرور کنیم. شما باید محیط چرخ را بدانید. سخت افزار - به سنسور نیاز دارید. به عنوان مثال - سوئیچ نی و آهن ربا. سوئیچ نی را یک دکمه معمولاً باز در نظر بگیرید و طبق معمول با یک مقاومت کششی 10 کیلو اهم متصل شوید.
دیگران ممکن است از سنسور جلوه سالن استفاده کنند-هر کدام برای خودشان). برای محاسبه دور از کلاس ریاضی به یاد داشته باشید - از فرمول استفاده کنید: circumference = 2πr که r شعاع دایره است.
اکنون که دور چرخ را دارید ، این مقدار را می توان "فاصله ثابت" ما در نظر گرفت و بنابراین سرعت را می توان با اندازه گیری زمان سپری شده بین یک دور کامل محاسبه کرد.
سنسور شما-پس از نصب-باید همانند یک دکمه معمولاً باز که در هر چرخش فشار داده می شود عمل کند. طرح ما زمان سپری شده بین هر پالس سنسور را اندازه گیری می کند.
برای انجام این کار ، مثال ما خروجی سنسور را به پین دیجیتال 2 متصل می کند - زیرا وقفه ای را برای محاسبه سرعت ایجاد می کند. در غیر این صورت این طرح سرعت را روی یک ماژول LCD معمولی با رابط I2C نمایش می دهد. رابط کاربری I2C پیشنهاد می شود زیرا این مورد فقط به 4 سیم از برد آردوینو تا LCD نیاز دارد - هرچه سیم کمتر بهتر باشد.
در اینجا طرح مطالعه شما آمده است:
/*سرعت سنج اولیه با استفاده از millis () ؛ */
#شامل "Wire.h" // برای LCD گذرگاه I2C
#شامل "LiquidCrystal_I2C.h" // برای ماژول LCD گذرگاه I2C - https://bit.ly/m7K5wt LiquidCrystal_I2C LCD (0x27 ، 16 ، 2) ؛ // آدرس LCD را روی 0x27 برای نمایش 16 کاراکتر و نمایش 2 خط تنظیم کنید
شروع شناور ، به پایان رسید ؛
شناور سپری شده ، زمان ؛ float circMetric = 1.2؛ // دور چرخ نسبت به موقعیت حسگر (بر حسب متر) float circImperial؛ // با استفاده از 1 کیلومتر = 0.621371192 مایل شناور speedk، speedm؛ // دارای سرعتهای محاسبه شده متریک و امپریالیستی است
void setup ()
{attachInterrupt (0 ، speedCalc ، RISING) ؛ // وقفه زمانی که سنسورها دیجیتال 2 بالا ارسال می کنند (هر چرخش چرخ) start = millis ()؛ // تنظیم LCD lcd.init ()؛ // مقداردهی اولیه LCD lcd.backlight ()؛ // روشن کردن نور پس زمینه LCD lcd.clear ()؛ lcd.println ("کلاه ایمنی بپوشید!") ؛ تاخیر (3000) ؛ lcd.clear ()؛ Serial.begin (115200) ؛ circImperial = circMetric*.62137؛ // تبدیل متریک به امپریالیستی برای محاسبات MPH}
void speedCalc ()
{elapsed = millis ()-شروع ؛ شروع = millis ()؛ speedk = (3600*circMetric)/سپری شده ؛ // km/h speedm = (3600*circImperial)/سپری شده ؛ // مایل بر ساعت }
حلقه خالی ()
{lcd.setCursor (0 ، 0) ؛ lcd.print (int (speedk)) ؛ lcd.print ("کیلومتر/ساعت") ؛ ال سی دی چاپ (int (سرعت)) ؛ lcd.print ("MPH") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print (int (سپری شده)) ؛ lcd.print ("ms/rev") ؛ تاخیر (1000) ؛ // تنظیم برای ترجیح شخصی برای به حداقل رساندن سوسو زدن}
چیز زیادی در جریان نیست - هر بار که چرخ یک دور را تکمیل می کند ، سیگنال سنسور از پایین به بالا می رود - وقفه ای ایجاد می شود که عملکرد را speedCalc () می نامد.
این مقدار میلی ثانیه () را می گیرد و سپس تفاوت بین قرائت فعلی و قرائت قبلی را محاسبه می کند - این مقدار زمان پوشش فاصله (که محیط چرخ نسبت به سنسور است - ذخیره شده در
float circMetric = 1.2؛
و بر حسب متر اندازه گیری می شود). در نهایت سرعت را بر حسب کیلومتر بر ساعت و MPH محاسبه می کند. بین وقفه ها ، این طرح داده های سرعت به روز شده روی LCD و همچنین مقدار زمان خام برای هر دور را برای کنجکاوی نمایش می دهد. در زندگی واقعی فکر نمی کنم کسی LCD را روی دوچرخه سوار کند ، شاید یک صفحه نمایش LED بیشتر مناسب باشد.
در همین حال ، نحوه عملکرد این مثال را می توانید در کلیپ ویدیویی کوتاه زیر مشاهده کنید. به جای ترکیب دوچرخه و کلید نی و مغناطیس ، خروجی موج مربع از ژنراتور عملکرد را به پین وقفه متصل کرده ام تا پالس های سنسور را شبیه سازی کنم ، بنابراین می توانید از نحوه عملکرد آن ایده بگیرید.
مرحله 4:
این فقط استفاده از میلی () را در حال حاضر خلاصه می کند. همچنین micros () وجود دارد. تابع که میکرو ثانیه را شمارش می کند.
بنابراین شما آن را دارید - یک عملکرد عملی دیگر که می تواند اجازه دهد مشکلات بیشتری از طریق دنیای آردوینو حل شود. مثل همیشه ، در حال حاضر به شما و تخیل شما بستگی دارد که چیزی را برای کنترل یا ارتکاب تظاهرات دیگر پیدا کنید.
این پست توسط pmdway.com برای شما ارسال شده است - همه چیز برای سازندگان و علاقه مندان به لوازم الکترونیکی ، با ارسال رایگان در سراسر جهان.
توصیه شده:
سیستم زمان بندی مبتنی بر لیزر آردوینو: 6 مرحله (همراه با تصاویر)
سیستم زمان بندی مبتنی بر لیزر آردوینو: به عنوان بخشی از آموزش ، من به سیستمی برای اندازه گیری دقیق سرعت یک وسیله نقلیه مدل 10 متری نیاز داشتم. در ابتدا ، من فکر می کردم که یک سیستم آماده ارزان از eBay یا Aliexpress بخرم ، این سیستم ها معمولاً به عنوان دروازه های نور شناخته می شوند ، pho
روش انتقال PCB-روش انتقال سرد: 7 مرحله
روش انتقال PCB-ساخت و ساز سرد: سلام در این دستورالعمل به شما نشان می دهم که چگونه صفحه های مدار چاپی خود را در خانه ساخته ام. من از روش پرس گرم داغ خوشم نمی آید به همین دلیل من از روش انتقال سرد با پیچ و تاب کمی استفاده می کنم. جدا از این ، من همچنین به شما نشان خواهم داد که چگونه می خواهید
فهرست بندی قالب بندی خودکار آردوینو: 3 مرحله
لیست بندی قالب بندی خودکار آردوینو: روش پیش فرض محیط برنامه نویسی آردوینو براکت ها (براکت های پیچ دار) سالهاست که من را آزار می دهد (تصویر اول را ببینید). من ترجیح می دهم براکت ها روی خطوط خودشان جدا شوند (تصویر دوم را ببینید) به من این را خیلی راحت تر می بینم
موارد استفاده برای باتری های خودروهای مرده و باتری های سربی سرب آب بندی شده: 5 مرحله (همراه با تصاویر)
موارد استفاده برای باتری های اتومبیل مرده و باتری های سربی سرب آب بندی شده: بسیاری از باتری های اتومبیل "مرده" در واقع باتری های کاملاً خوبی هستند. آنها دیگر نمی توانند صدها آمپر مورد نیاز برای راه اندازی ماشین را تأمین کنند. بسیاری از باتری های سرب مهر و موم شده "مرده" در واقع باتری های مرده ای هستند که دیگر نمی توانند به طور قابل اطمینان تهیه کنند
لغزنده زمان گذر زمان آردوینو: 3 مرحله (همراه با تصاویر)
لغزنده زمان گذر زمان آردوینو: بنابراین من به دنبال ساختن یک ویدیوی timelapse با dslr خود بودم و بسیاری را با استفاده از مکانیزم کشویی برای افزودن بعد دیگر مشاهده کرده بودم. من به خرید یکی نگاه کردم اما خرید آنها فقط برای "فرو بردن انگشتان پا در آب" کمی گران است. بنابراین t