جدول المحتويات:

طرق توقيت اردوينو بالملي (): 4 خطوات
طرق توقيت اردوينو بالملي (): 4 خطوات

فيديو: طرق توقيت اردوينو بالملي (): 4 خطوات

فيديو: طرق توقيت اردوينو بالملي (): 4 خطوات
فيديو: القيام بأشياء متعددة التوقيت باستخدام Arduino: أطلق العنان للميلي ()! 2024, شهر نوفمبر
Anonim
طرق توقيت الأردوينو بالملي ()
طرق توقيت الأردوينو بالملي ()

في هذه المقالة نقدم ميلي () ؛ وظيفة واستخدامها لإنشاء أمثلة توقيت مختلفة.

ميلي؟ لا علاقة لمزامنة الشفاه … آمل أن تكون قد تعرفت على الملي على أنها البادئة العددية لألف جزء من الألف ؛ وهو ضرب وحدة قياس في 0.001 (أو عشرة أس سالب 3).

ومن المثير للاهتمام أن أنظمة Arduino الخاصة بنا ستحسب عدد المللي ثانية (آلاف من الثانية) من بداية تشغيل الرسم حتى يصل العدد إلى أقصى عدد يمكن تخزينه في نوع متغير طويل بدون إشارة (عدد صحيح 32 بت [أربعة بايت] - التي تتراوح من صفر إلى (2 ^ 32) -1. (2 ^ 32) -1 ، أو 4294967295 مللي ثانية تتحول إلى 49.71027 يومًا فرديًا.

يتم إعادة ضبط العداد عند إعادة تعيين Arduino ، أو يصل إلى القيمة القصوى أو يتم تحميل رسم جديد. للحصول على قيمة العداد عند منعطف معين ، ما عليك سوى استدعاء الوظيفة - على سبيل المثال:

البداية = ميلي () ؛

حيث البداية هي متغير طويل بدون إشارة. إليك مثال بسيط للغاية يوضح لك طريقة عمل الملي ():

/ * عرض بالمللي () * /

بداية طويلة غير موقعة ، منتهية ، انقضت ؛

الإعداد باطل()

{Serial.begin (9600) ، }

حلقة فارغة()

{Serial.println ("Start…") ، البداية = ميلي () ؛ تأخير (1000) ؛ انتهى = مللي () ؛ Serial.println ("انتهى") ؛ انقضاء = بداية نهائية ؛ Serial.print (منقضي) ؛ Serial.println ("مللي ثانية انقضت") ؛ Serial.println () ، تأخير (500) ؛ }

يخزن الرسم عدد الميلي الحالي في البداية ، ثم ينتظر ثانية واحدة ، ثم يخزن قيمة المللي مرة أخرى في النهاية. أخيرًا ، يقوم بحساب الوقت المنقضي للتأخير. في تفريغ الشاشة التالي للشاشة التسلسلية ، يمكنك أن ترى أن المدة لم تكن دائمًا 1000 مللي ثانية بالضبط ، كما هو موضح في الصورة.

الخطوة 1:

صورة
صورة

ببساطة ، تستخدم وظيفة المللي عدادًا داخليًا داخل متحكم ATmega في قلب Arduino. يعمل هذا العداد على زيادة كل دورة على مدار الساعة - والذي يحدث (في Arduino القياسي والمتوافقين) بسرعة ساعة تبلغ 16 ميجاهرتز. يتم التحكم في هذه السرعة من خلال الكريستال الموجود على لوحة Arduino (الشيء الفضي الذي تم ختمه بـ T16.000).

الخطوة 2:

صورة
صورة

يمكن أن تختلف دقة الكريستال اعتمادًا على درجة الحرارة الخارجية وتحمل البلورة نفسها. سيؤثر هذا بدوره على دقة نتيجة المللي. أفادت التجربة القصصية أن الانحراف في دقة التوقيت يمكن أن يكون حوالي ثلاث أو أربع ثوانٍ لكل أربع وعشرين ساعة.

إذا كنت تستخدم لوحة أو نسختك الخاصة التي تستخدم مرنانًا خزفيًا بدلاً من الكريستال ، فلاحظ أنها ليست دقيقة وستقدم إمكانية مستويات انجراف أعلى. إذا كنت بحاجة إلى مستوى أعلى بكثير من دقة التوقيت ، ففكر في دوائر مؤقتة خاصة بالمؤقت مثل Maxim DS3231.

يمكننا الآن الاستفادة من المللي في وظائف التوقيت المختلفة. كما هو موضح في المثال السابق ، يمكننا حساب الوقت المنقضي. للمضي قدمًا بهذه الفكرة ، دعنا نصنع ساعة إيقاف بسيطة. يمكن أن يكون القيام بذلك بسيطًا أو معقدًا حسب الضرورة ، ولكن في هذه الحالة سوف نتجه نحو البساطة.

من منظور الأجهزة ، سيكون لدينا زران - Start and Stop - مع مقاومات منسدلة 10 كيلو أوم متصلة بالدبابيس الرقمية 2 و 3 على التوالي. عندما يضغط المستخدم على بدء ، سيلاحظ الرسم قيمة الميلي - ثم بعد الضغط على التوقف ، سوف يلاحظ الرسم مرة أخرى قيمة الميلي ، ويحسب ويعرض الوقت المنقضي. يمكن للمستخدم بعد ذلك الضغط على بدء لتكرار العملية ، أو التوقف عن البيانات المحدثة. هنا الرسم:

/ * ساعة توقيت فائقة الأساسية باستخدام مللي () ؛ * /

بداية طويلة غير موقعة ، منتهية ، انقضت ؛

الإعداد باطل()

{Serial.begin (9600) ، pinMode (2 ، الإدخال) ؛ // بدء زر pinMode (3 ، INPUT) ؛ // زر الإيقاف Serial.println ("اضغط 1 لبدء / إعادة تعيين ، 2 للوقت المنقضي") ؛ }

عرض باطل النتيجة ()

{عائم h ، m ، s ، ms ؛ غير موقعة منذ فترة طويلة ؛ انقضاء = بداية نهائية ؛ ح = int (انقضاء / 3600000) ؛ تجاوز = انقضاء٪ 3600000 ؛ م = كثافة العمليات (أكثر من / 60000) ؛ فوق = أكثر من٪ 60000 ؛ ق = كثافة العمليات (أكثر من / 1000) ؛ مللي ثانية = أكثر من 1000٪ ؛ Serial.print ("الوقت المنقضي الخام:") ؛ Serial.println (منقضي) ؛ Serial.print ("الوقت المنقضي:") ؛ Serial.print (ح ، 0) ؛ Serial.print ("h") ؛ Serial.print (م ، 0) ؛ Serial.print ("م") ؛ Serial.print (s ، 0) ؛ Serial.print ("s") ؛ Serial.print (مللي ثانية ، 0) ؛ Serial.println ("مللي ثانية") ؛ Serial.println () ، }

حلقة فارغة()

{if (digitalRead (2) == HIGH) {start = millis () ؛ تأخير (200) ؛ // من أجل debounce Serial.println ("بدأ …") ؛ } if (digitalRead (3) == HIGH) {finish = millis () ؛ تأخير (200) ؛ // من أجل debounce displayResult () ؛ }}

تُستخدم استدعاءات التأخير () للتراجع عن المفاتيح - وهي اختيارية وسيعتمد استخدامها على أجهزتك. الصورة هي مثال على إخراج الشاشة التسلسلية للرسم التخطيطي - بدأت ساعة الإيقاف ، ثم تم الضغط على الزر مرتين ست مرات عبر فترات زمنية.

الخطوة 3: عداد السرعة …

Image
Image

إذا كان لديك جهاز استشعار في بداية ونهاية مسافة ثابتة ، فيمكن حساب السرعة: السرعة = المسافة ÷ الوقت.

يمكنك أيضًا عمل عداد سرعة لشكل حركة بعجلات ، على سبيل المثال دراجة. في الوقت الحالي ليس لدينا دراجة نعبث بها ، ولكن يمكننا وصف العملية للقيام بذلك - إنها بسيطة للغاية. (إخلاء المسؤولية - قم بذلك على مسؤوليتك الخاصة وما إلى ذلك)

بادئ ذي بدء ، دعونا نراجع الرياضيات اللازمة. سوف تحتاج إلى معرفة محيط العجلة. الأجهزة - ستحتاج إلى جهاز استشعار. على سبيل المثال - مفتاح القصب والمغناطيس. ضع في اعتبارك أن مفتاح القصب هو زر مفتوح بشكل طبيعي ، وقم بتوصيله كالمعتاد بمقاوم منسدل 10 كيلو أوم.

قد يستخدم الآخرون مستشعر تأثير القاعة - كل منهم خاص بهم). تذكر من فئة الرياضيات ، لحساب المحيط - استخدم الصيغة: محيط = 2πr حيث r هو نصف قطر الدائرة.

الآن بعد أن أصبح لديك محيط العجلة ، يمكن اعتبار هذه القيمة "مسافة ثابتة" ، وبالتالي يمكن حساب السرعة عن طريق قياس الوقت المنقضي بين دورة كاملة.

يجب أن يعمل المستشعر - بمجرد تركيبه - بنفس الطريقة التي يعمل بها الزر الذي يتم فتحه بشكل طبيعي والذي يتم دفعه في كل دورة. سيقيس مخططنا الوقت المنقضي بين كل نبضة من جهاز الاستشعار.

للقيام بذلك ، سيحتوي مثالنا على إخراج المستشعر متصلاً بالدبوس الرقمي 2 - حيث سيؤدي ذلك إلى مقاطعة لحساب السرعة. وإلا سيعرض الرسم التخطيطي السرعة على وحدة LCD عادية بواجهة I2C. يُقترح استخدام واجهة I2C لأن هذا يتطلب 4 أسلاك فقط من لوحة Arduino إلى شاشة LCD - فكلما قل عدد الأسلاك كان ذلك أفضل.

هذا هو الرسم التخطيطي لإطلاعك:

/ * عداد السرعة الأساسي باستخدام المللي () ؛ * /

# تضمين "Wire.h" // لـ I2C bus LCD

# تضمين "LiquidCrystal_I2C.h" // لوحدة I2C bus LCD - https://bit.ly/m7K5wt LiquidCrystal_I2C lcd (0x27، 16، 2) ؛ // قم بتعيين عنوان LCD على 0x27 لعرض 16 حرفًا وخطين

بداية تعويم ، منتهية ؛

تعويم انقضى الوقت ؛ تعويم circMetric = 1.2 ؛ // محيط العجلة بالنسبة لموضع المستشعر (بالأمتار) دائري عائم إمبراطوري ؛ / / استخدام كيلومتر واحد = 0.621371192 ميل تعويم السرعة ، السرعة ؛ // يحمل قيم السرعة المحسوبة بالمتر والإمبراطوري

الإعداد باطل()

{attachInterrupt (0، speedCalc، RISING) ؛ // المقاطعة تسمى عندما ترسل المستشعرات 2 رقمي مرتفع (كل دوران للعجلة) start = millis () ؛ // إعداد LCD lcd.init () ؛ // تهيئة شاشة lcd lcd.backlight () ؛ // قم بتشغيل الإضاءة الخلفية لشاشات الكريستال السائل lcd.clear () ؛ lcd.println ("ارتداء خوذة!")؛ تأخير (3000) ؛ lcd.clear () ؛ Serial.begin (115200) ؛ CircIm Imperial = CircMetric *.62137 ؛ // تحويل المتر إلى الإمبراطوري لحسابات MPH}

سرعة باطلة

{انقضاء = مللي () - بداية ؛ البداية = ميلي () ؛ speedk = (3600 * circMetric) / انقضاء ؛ // km / h speedm = (3600 * دائري إمبراطوري) / انقضاء ؛ // ميل في الساعة }

حلقة فارغة()

{lcd.setCursor (0، 0) ؛ lcd.print (int (speedk)) ؛ lcd.print ("كم / ساعة") ؛ lcd.print (int (speedm)) ؛ lcd.print ("ميلا في الساعة") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print (int (المنقضية)) ؛ lcd.print ("مللي ثانية / مراجعة") ؛ تأخير (1000) ؛ // ضبط لتفضيل شخصي لتقليل الوميض}

لا يوجد الكثير مما يحدث - في كل مرة تكمل العجلة دورة واحدة ، تنتقل الإشارة من المستشعر من منخفض إلى مرتفع - مما يؤدي إلى مقاطعة تستدعي وظيفة speedCalc ().

يستغرق هذا قراءة بالمللي () ثم يحسب الفرق بين القراءة الحالية والقراءة السابقة - تصبح هذه القيمة هي الوقت اللازم لتغطية المسافة (وهو محيط العجلة بالنسبة إلى المستشعر - المخزن في

تعويم circMetric = 1.2 ؛

ويقاس بالمتر). أخيرًا يحسب السرعة بالكيلو متر في الساعة و MPH. بين المقاطعات ، يعرض الرسم البياني بيانات السرعة المحدثة على شاشة LCD بالإضافة إلى قيمة الوقت الخام لكل ثورة من أجل الفضول. في الحياة الواقعية ، لا أعتقد أن أي شخص قد يقوم بتركيب شاشة LCD على دراجة ، ربما تكون شاشة LED أكثر ملاءمة.

في غضون ذلك ، يمكنك أن ترى كيف يعمل هذا المثال في مقطع الفيديو القصير التالي. بدلاً من مجموعة عجلة الدراجة ومفتاح القصب / المغناطيس ، قمت بتوصيل خرج الموجة المربعة من مولد الوظيفة إلى دبوس المقاطعة لمحاكاة النبضات من المستشعر ، حتى تتمكن من الحصول على فكرة عن كيفية عملها.

الخطوة الرابعة:

هذا يلخص استخدام الميلي () في الوقت الحالي. هناك أيضًا micros () ؛ وظيفة تحسب ميكروثانية.

إذن فهناك - وظيفة عملية أخرى يمكن أن تسمح بحل المزيد من المشكلات عبر عالم Arduino. كما هو الحال دائمًا ، الأمر متروك لك ولخيالك للعثور على شيء يمكنك التحكم فيه أو الوصول إلى الخدع الأخرى.

هذا المنشور يقدمه لك pmdway.com - كل شيء للصانعين وعشاق الإلكترونيات ، مع التوصيل المجاني في جميع أنحاء العالم.

موصى به: