جدول المحتويات:
- الخطوة 1: استخدام الطوابع الزمنية من Arduino Millisecond ، بالمللي ()
- الخطوة 2: إضافة مخطط إلى القائمة
- الخطوة 3: تحرير مصدر المؤامرة و Lables
- الخطوة 4: اختيار تنسيق التاريخ / الوقت
- الخطوة 5: إنشاء واختبار Arduino Sketch
- الخطوة 6: كيف يتم تحديد تاريخ / وقت PfodApp مؤامرة من ملي ()؟
- الخطوة 7: إعادة إنتاج مخططات التاريخ / الوقت على جهاز الكمبيوتر الخاص بك
- الخطوة الثامنة: كيف تتجنب حد 49.7 يومًا بالمللي () ولماذا لا يجب عليك ذلك
- الخطوة 9: استخدام RTC (ساعة الوقت الحقيقي)
- الخطوة 10: استخدام وحدة GPS
- الخطوة 11: الخاتمة
فيديو: تاريخ / وقت Arduino الرسم / التسجيل باستخدام Millis () و PfodApp: 11 خطوة
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:38
لا حاجة لبرمجة Arduino أو Android ، كما تدعم وحدات RTC و GPS أيضًا التصحيح التلقائي للمناطق الزمنية وانحراف RTC ونظام تحديد المواقع العالمي (GPS) في عداد الثواني الكبيسة
مقدمة
يوضح لك هذا البرنامج التعليمي كيفية استخدام الطوابع الزمنية لـ Arduino millis () لرسم البيانات مقابل التاريخ والوقت على هاتف Android باستخدام pfodApp.
لا حاجة لبرمجة Arduino أو Android. يسجل pfodApp أيضًا بيانات كافية بحيث يمكنك لاحقًا إعادة إنتاج مخططات التاريخ / الوقت في جدول بيانات.
ليست هناك حاجة إلى وحدة RTC أو GPS ، ولكن إذا كان مشروع Arduino الخاص بك يحتوي على RTC (Real Time Clock) أو وحدة GPS ، فيمكن استخدامها أيضًا. في هذه الحالات ، سوف تصحح مخططات pfodApp تلقائيًا للمنطقة الزمنية ، وانجراف RTC و GPS في عداد الثواني الكبيسة. لا يلزم وجود كود اردوينو خاص لهذه التصحيحات. كما هو الحال دائمًا مع pfodApp ، يتم تسجيل البيانات المستلمة كما هي تمامًا ، غير مصححة ، ومع ذلك يحتوي ملف السجل أيضًا على معلومات كافية للسماح لك بتطبيق هذه التصحيحات بنفسك عند تنزيل السجلات على جهاز الكمبيوتر الخاص بك. انظر أدناه للحصول على أمثلة لهذه المعالجة اللاحقة.
يتم دعم مجموعة متنوعة من تنسيق المحور X للوقت والتاريخ ، وكلها يتم التحكم فيها بالكامل بواسطة سلاسل نصية قصيرة في مخطط Arduino الخاص بك. لا حاجة لبرمجة أندرويد.
سيتصل pfodApp عبر WiFi و Bluetooth Classic و BLE و SMS. يقوم pfodDesigner المجاني بإنشاء رسومات Arduino كاملة لتخطيط / تسجيل التاريخ / الوقت للاتصال بمجموعة متنوعة من اللوحات. لا حاجة لبرمجة اردوينو.
ستستخدم هذه التعليمات Adafruit Feather52 كمثال على لوحة Arduino ، والتي تتصل عبر BLE.
يغطي هذا التوجيه ثلاث حالات: - 1) يحتوي مشروع المعالج الدقيق الخاص بك على طوابع زمنية بالمللي ثانية فقط - مللي () 2) يحتوي مشروع المعالج الدقيق الخاص بك على ساعة Real Time Clock (RTC) - يقوم pfodApp تلقائيًا بتصحيح الانجراف. 3) يحتوي مشروع المعالج الدقيق الخاص بك على وحدة GPS - يقوم pfodApp تلقائيًا بالتصحيح للثواني الكبيسة عند حدوثها (حاليًا 18 ثانية كما في 2018).
الخطوة 1: استخدام الطوابع الزمنية من Arduino Millisecond ، بالمللي ()
هناك جزءان لاستخدام المللي ثانية للتاريخ والوقت. أحدهما لتخطيط البيانات مقابل الوقت المنقضي أو التاريخ / الوقت والجزء الآخر هو إعادة إنشاء التاريخ والوقت من الطوابع الزمنية التي تم تسجيلها بالمللي ثانية للبيانات الأولية. لا يقوم pfodApp بتعديل البيانات الأولية الواردة من pfodDevice (Arduino micro). إنه يسجل بالضبط البايت المتلقاة.
استخدم أولاً pfodDesigner المجاني لإنشاء رسم تخطيطي من Arduino للميكرو الخاص بك والذي سيرسل قياسات البيانات بالمللي ثانية إلى pfodApp للتخطيط / التسجيل. ينشئ هذا المثال قائمة للوحة Adafruit Feather 52 BLE تقرأ A0. يمر البرنامج التعليمي على Adafruit Feather nRF52 LE - عناصر التحكم المخصصة مع pfodApp عبر خطوات pfodDesigner لإنشاء قائمة لـ Feather nRF52 تتضمن زر مخطط ، لذا تحقق من ذلك لمزيد من التفاصيل. سنضيف في هذا البرنامج التعليمي زر مخطط فقط ونستخدم خيارات تنسيق المحور X الجديدة لرسم قراءات A0 مقابل الوقت المنقضي والتاريخ / الوقت.
سيستمر الجزء الأول من هذا البرنامج التعليمي باستخدام pfodDesigner المجاني لإنشاء مخطط تاريخ / وقت نموذجي على هاتف Android المحمول الخاص بك. عندما تكون راضيًا عن الشاشة ، يمكنك إنشاء رسم Arduino الذي سيعيد إنتاج ذلك عند الاتصال بـ pfodApp. لا يلزم برمجة Android وبما أن pfodDesigner ينشئ رسومات Arduino كاملة لمجموعة متنوعة من لوحات Arduino ، فلا يلزم برمجة Arduino أيضًا.
الخطوة 2: إضافة مخطط إلى القائمة
قم بتنزيل تطبيق pfodDesigner من Google Play ، وافتحه وانقر على "Start new Menu"
انقر فوق "Target Serial" ثم على زر "Bluetooth Low Energy" لعرض قائمة تضم حوالي 11 لوحة BLE (قم بالتمرير لأسفل لرؤية الخيارات الأخرى). اختر Adafruit Bluefruit Feather52.
ارجع إلى قائمة التحرير وانقر على "موجه تحرير" وحدد موجهًا مناسبًا لهذه القائمة ، على سبيل المثال "Feather52" ونص غامق وحجم +7. تم ترك لون الخلفية باللون الأبيض "الافتراضي"
ارجع وانقر على "إضافة عنصر قائمة" ، وانتقل لأسفل وحدد "زر المخطط" الذي يفتح شاشة تعديل زر الرسم البياني. يمكنك إجراء أي تغيير على مظهر الزر هنا. في هذه الحالة ، تم تغيير نص الزر إلى "مخطط التاريخ / الوقت لـ A0" وتم ترك القيم الافتراضية الأخرى كما هي.
يمنحك هذا زرًا في القائمة سيفتح شاشة الرسم البياني.
الخطوة 3: تحرير مصدر المؤامرة و Lables
انقر فوق الزر "تاريخ / وقت قطعة الأرض من A0" لفتح شاشة تحرير المخططات ، حيث يمكنك الوصول إلى تسمية المخطط ، وتنسيق المحور X ، وفاصل بيانات الرسم (عن طريق التمرير لأسفل) إعدادات الرسم نفسها. قم بتحرير تسمية المخطط إلى شيء مناسب ، على سبيل المثال "A0 فولت".
قم بالتمرير لأسفل وللحصول على Plots 2 و 3 ، افتح Edit Plot وانقر فوق Hide Plot لإزالتها من عرض المخطط.
ثم انقر فوق "تحرير قطعة الأرض 1" وقم بتعيين تسمية قطعة الأرض (على سبيل المثال A0) ، ووحدات yAxis (على سبيل المثال فولت) ، واعرض أقصى 3.6 فولت واتصل بدبوس الإدخال / الإخراج A0.
قم بالتمرير لأعلى ثم انقر فوق "معاينة المخطط" لأحدث 0 نقطة بيانات نموذجية ، على فترات زمنية تبلغ 1 ثانية ، تم رسمها مقابل الوقت المنقضي بالدقائق: ثانية.
بالنسبة لجميع المخططات الزمنية المنقضية ، لا يتم عرض الوحدات البادئة للصفر ، لذلك في هذه المؤامرة فقط تظهر الدقائق البادئة في هذه الفترة> دقيقة واحدة.
الخطوة 4: اختيار تنسيق التاريخ / الوقت
بالنسبة إلى مخططات الوقت المنقضي ، تستمر الوحدة الرائدة في الزيادة مع مرور الوقت. لمشاهدة مثال على ذلك ، ارجع إلى شاشة "تحرير المخططات" وقم بزيادة الفاصل الزمني لبيانات الرسم إلى 15 دقيقة (أسفل هذه الشاشة)
ثم انقر فوق معاينة المخطط لإظهار نفس البيانات النموذجية ولكن الآن بفواصل زمنية تبلغ 15 دقيقة بين العينات. كما ترون جزء الدقائق من mm: ss يستمر في الزيادة.
عد الآن وانقر على زر X-axis لإظهار مجموعة صغيرة من جميع تنسيقات بيانات / وقت المحور X الممكنة (قم بالتمرير لأسفل لمزيد من المعلومات)
يوجد أعلاه مجموعة مختارة من معاينات الرسم البياني باستخدام تنسيقات مختلفة لمحور X.
مخططات التاريخ / الوقت المعروضة هنا هي حسب المنطقة الزمنية "المحلية". هناك أيضًا خيارات تنسيق لرسم التاريخ / الوقت بالتوقيت العالمي المنسق. للحصول على مجموعة كاملة من خيارات تنسيق التاريخ / الوقت الممكنة ، راجع pfodSpecification.pfd.
الخطوة 5: إنشاء واختبار Arduino Sketch
بمجرد أن تكون سعيدًا بتنسيق الرسم البياني الخاص بك وفاصل البيانات ، يمكنك الانتقال إلى شاشة "Editing Menu_1" والتمرير لأسفل و "إنشاء رمز" للوحة الهدف التي اخترتها. فيما يلي رسم تخطيطي لعينة Adafruit Feather52 باستخدام فترات بيانات 1 ثانية و mm: ss تنسيق الوقت المنقضي ، pfodFeather52_timeplot.ino
أعلاه قطعة أرض A0 من الريشة 52
يؤدي تغيير التنسيق إلى أيام الأسبوع hr: mins: sec (~ E HH: mm: ss) وإعادة إنشاء الكود (pfodFeather52_dateplot.ino) إلى الحصول على مخطط مثل الثاني أعلاه.
يمكنك تحرير تنسيق المحور X مباشرة في رسم Arduino الخاص بك ، كما هو موضح أدناه.
الخطوة 6: كيف يتم تحديد تاريخ / وقت PfodApp مؤامرة من ملي ()؟
عندما يتصل pfodApp ، فإنه يتذكر وقته `` المحلي '' ووقت UTC ويطلب الطوابع الزمنية لبيانات المؤامرة الحالية لـ pfodDevice (لوحة Arduino). باستخدام هذه المعلومات ، يمكن لـ pfodApp رسم الطوابع الزمنية بالمللي ثانية إما كوقت منقضي ، أي تحويل المللي ثانية إلى ساعة دقيقة ، إلخ ، أو رسم التاريخ والوقت الذي تمثله الطوابع الزمنية بالمللي ثانية بالنسبة إلى وقت إجراء الاتصال وطلب الوقت الحالي لجهاز pfodDevice.
بالنظر إلى الرسم الذي تم إنشاؤه في Arduino (مثل pfodFeather52_dateplot.ino) ، هناك ثلاثة أجزاء صغيرة من التعليمات البرمجية التي تتعامل مع جانب Arduino من المؤامرات.
قسم رمز الحلقة () الذي يعالج طلب الوقت الحالي لـ pfodApp {@}
// handle {@} request} else if ('@' == cmd) {// pfodApp طلب الوقت "الحالي" plot_mSOffset = millis ()؛ // التقاط المللي الحالي كإزاحة للطوابع الزمنية Rawdata parser.print (F ("{@` 0} ")) ؛ // إرجاع "0 كـ" أجزاء "بيانات أولية" حالية "بالمللي ثانية
يمكنك فقط إرجاع القيمة الحالية للميلي () ، لكن المللي () يلتف حول العودة إلى الصفر كل 49.7 يومًا ، مما يجعل الحبكة تقفز إلى الوراء. لذا ، بدلاً من ذلك ، يتذكر الرمز قيمة الملي () الحالية عند {@} تقديم الطلب ، ويعيد {@ `0} أي طابع زمني بالمللي ثانية حالي بقيمة صفر. ثم عند إرسال نقاط البيانات الأولية يستخدم الرسم التخطيطي
plot_1_var = analogRead (A0) ، // قراءة الإدخال للرسم // plot_2_var مؤامرة مخفية لذلك لا توجد بيانات معينة هنا // plot_3_var plot مخفية لذلك لا توجد بيانات معينة هنا // أرسل بيانات قطعة الأرض بتنسيق CSV parser.print (millis () - plot_mSOffset) ؛ // الوقت بالمللي ثانية ….
بحيث يبدأ الطابع الزمني بالمللي ثانية المرسل مع البيانات من 0 ويزيد حتى 49.7 يومًا. إذا بقيت متصلاً بشكل مستمر لمدة 49.7 يومًا ، فسترى أن الحبكة تقفز للخلف بمقدار 50 يومًا تقريبًا. يؤدي قطع الاتصال وإعادة الاتصال مرة واحدة كل 49.7 يومًا إلى تجنب ذلك.
الجزء الثالث من مخطط التاريخ / الوقت هو رسالة الرسم البياني.
} else if ('A' == cmd) {// user pressed - 'Date / Time plot of A0' // في القائمة الرئيسية لـ Menu_1 // return plotting msg. parser.print (F ("{= A0 Volts ~ E HH: mm: ss | date | A0 ~~~ Volts ||}"))؛
عندما يضغط المستخدم على الزر "مخطط التاريخ / الوقت لـ A0" ، يرسل pfodApp {A} cmd إلى pfodDevice ويستجيب pfodDevice برسالة الرسم ، {= … {= A0 Volts ~ E HH: mm: ss | التاريخ | A0 ~~~ Volts ||} الذي يحتوي على تنسيق المحور X E HH: mm: ss
تنسيقات Java SimpleDateFormat مقبولة هنا. يحتوي pfodApp Data Logging and Plotting و pfodSpecification.pdf على مزيد من التفاصيل حول رسالة المؤامرة.
الخطوة 7: إعادة إنتاج مخططات التاريخ / الوقت على جهاز الكمبيوتر الخاص بك
بشكل افتراضي ، يسجل pfodApp جميع البيانات الأولية الواردة في ملف سجل على هاتفك المحمول ، ما لم تقم بتعطيل هذا التسجيل في شاشة تحرير الاتصال ، انظر pfodAppForAndroidGettingStarted.pdf
عندما تقوم بتحرير pfodApp ، تظهر رسالة مختصرة مع موقع واسم ملف السجل ، على سبيل المثال /pfodAppRawData/pfod_bluefruit52.txt هذا الملف بتنسيق CSV ، محدد بفواصل ، وبعد نقله إلى جهاز الكمبيوتر الخاص بك (انظر pfodAppForAndroidGettingStarted.pdf لمعرفة خيارات النقل) ، يمكنك فتحه في جدول بيانات لرسم البيانات.
فيما يلي الأسطر القليلة الأولى من ملف السجل.
// pfodApp V3.0.360 ، بالتوقيت المحلي ، UTC ، مللي ثانية في اليوم ، pfod bluefruit52 الوقت الحالي (مللي ثانية) ، pfod bluefruit52 الوقت الحالي ، // متصل في ، 2019/04/20 11:32: 50.238 ، 2019/04/20 01: 32: 50.238 ، 86400000 ، 0 ، 366 ، 0.25 ، 1366 ، 0.29 ، 2366 ، 0.31 ، 3366 ، 0.33 ، 4366 ، 0.33 ،
أعلاه ، يمكنك مشاهدة التوقيت المحلي والتوقيت العالمي المتفق عليه (UTC) الذي تم توصيله بواسطة pfodApp بـ Feather52 والوقت الحالي بالمللي ثانية الذي أبلغ عنه Feather52 عبر استجابة {@..}. العمود الأخير فارغ ، لأنه لا يوجد RTC أو GPS وبالتالي لم يتم الإبلاغ عن الوقت الحالي في yyyy / MM / dd بواسطة Feather52.
لرسم البيانات مقابل الوقت المنقضي ، اطرح الوقت الحالي (مللي ثانية) من الطابع الزمني بالمللي ثانية ثم قسّمه على قيمة مللي ثانية لكل يوم. فيما يلي جدول البيانات مع الصيغة المضافة والنتيجة المرسومة. جدول البيانات أدناه (pfod_bluefruit52.xls) هو جدول بيانات OpenOffice محفوظ بتنسيق Excel.
في OpenOffice ، المؤامرة عبارة عن مخطط مبعثر وتم تنسيق المحور x للمخطط في HH: MM: SS ملاحظة: تنسيقات تاريخ / وقت جدول البيانات ليست هي نفسها تنسيقات الرسم التي يستخدمها pfodApp. على سبيل المثال في pfodApp ، MM هي شهور و mm دقيقة.
للتخطيط مقابل التاريخ والوقت ، ما عليك سوى إضافة وقت الاتصال إلى وقت جدول البيانات وإعادة التسجيل. (pfod_bluefruit52_date.xls)
ملاحظة: تم استيراد التوقيت المحلي والتوقيت العالمي المنسق كنص في جدول البيانات الخاص بي ، لذا كنت بحاجة إلى إزالة البادئة قبل استخدامها في صيغة.
الخطوة الثامنة: كيف تتجنب حد 49.7 يومًا بالمللي () ولماذا لا يجب عليك ذلك
كما هو مذكور أعلاه في كيف يقوم pfodApp برسم التاريخ / الوقت من ميلي ()؟ ، إذا بقيت متصلاً بشكل مستمر لأكثر من 49.7 يومًا ، فإن الطوابع الزمنية بالمللي ثانية ستلتف حول العودة إلى الصفر. يمكن تجنب ذلك ببضعة أسطر من التعليمات البرمجية ولكن لا يوصى بذلك.
أولا كيف تتجنب الالتفاف. أضف متغير int آخر غير موقع لتتبع عدد المرات التي تلتف فيها الطوابع الزمنية وطباعة النتيجة المجمعة في HEX.
uint_t mSwrapCount = 0 ؛ uint32_t lastTimeStamp = 0 ؛
… plot_1_var = analogRead (A0) ؛ // قراءة الإدخال للرسم // plot_2_var مؤامرة مخفية لذلك لا توجد بيانات معينة هنا // plot_3_var plot مخفية لذلك لا توجد بيانات معينة هنا // أرسل بيانات قطعة الأرض بتنسيق CSV uint32_t timeStamp = millis () - plot_mSOffset؛ إذا كان (timeStamp <lastTimeStamp) {// timeStamp ملفوفًا إلى 0 mSwrapCount ++ ؛ // add one to count} lastTimeStamp = timeStamp؛ parser.print ("0x") ؛ parser.print (msWrapCount ، HEX) ، parser.print (طابع زمني ، HEX) ؛ // الوقت بالمللي ثانية في HEX….
عند إرجاع استجابة {@.. ، امسح mSwrapCount أيضًا.
// handle {@} request} else if ('@' == cmd) {// pfodApp طلب الوقت "الحالي" plot_mSOffset = millis ()؛ // التقاط المللي الحالي كطوابع زمنية لـ Rawdata معادلة mSwrapCount = 0 ؛ // مسح التفاف العد. parser.print (F ("{@` 0} ")) ؛ // إرجاع "0 كـ" أجزاء "بيانات أولية" حالية "بالمللي ثانية
ستقدم الطوابع الزمنية الآن القيمة "الصحيحة" للأربعين يومًا القادمة * 65536 ~ = 7308 سنة.
سيقوم pfodApp تلقائيًا بتحويل الطوابع الزمنية السداسية للتخطيط وتسجيلها تمامًا كما تم استلامها ، أي في سداسي عشري. في جدول البيانات (OpenOffice) ، يمكنك استخدام هذه الصيغة لتحويل السلسلة السداسية ، في A2 ، إلى mS (حيث A1 هي أي خلية فارغة) = HEX2DEC (REPLACE (A2؛ 1؛ 2؛ A1))
لماذا لا تريد أن تفعل هذا
كما هو مبين أعلاه ، من السهل تمديد الطوابع الزمنية للملل ثانية إلى أكثر من 50 يومًا. ومع ذلك ، ربما لا ترغب في القيام بذلك لأنهم أصبحوا غير دقيقين بشكل متزايد. ينتج البلورة النموذجية التي تبلغ 16 ميجاهرتز المستخدمة في إنشاء الميلي () دقة تصل إلى 50 جزء في المليون (أجزاء في المليون). هذا يعني أنه بعد 49.7 يومًا ، يمكن أن يخرج الطابع الزمني بالمللي ثانية بمقدار 3 دقائق ، وهذا يتجاهل تأثير درجة الحرارة على دقة الكريستال.
خلال فترات الاتصال القصيرة ، لا يمثل هذا الدقة مشكلة لأن {@.. الاستجابة تعيد مزامنة الطابع الزمني بالمللي ثانية مع تاريخ / وقت الهاتف المحمول في كل إعادة اتصال. ومع ذلك ، إذا كنت ترغب في البقاء على اتصال لفترات طويلة من الوقت (أيام) وتسجيل البيانات باستمرار ، فيجب عليك استخدام شيء أكثر دقة من الميلي المدمجة () ، مثل وحدة RTC أو GPS.
الخطوة 9: استخدام RTC (ساعة الوقت الحقيقي)
هناك عدد من وحدات RTC المتاحة ، واحدة من أكثرها دقة هي DS3231 على سبيل المثال وحدة DS3231 في Adafruit. الدقة المذكورة هي +/- 2 جزء في المليون فوق 0 إلى 40 درجة مئوية. أي ~ +/- 5 ثوانٍ / شهر.
إذا كنت تريد رسم البيانات التي تحتوي على طوابع زمنية / وقت ، على سبيل المثال 2019/04/19 20: 4: 34 ، فأنت بحاجة إلى تعديل {@ استجابة لإرجاع التاريخ / الوقت الحالي ، على سبيل المثال {@ `0 ~ 2019/4/19 3: 33: 5}. فيما يلي بعض تغييرات التعليمات البرمجية النموذجية لتطبيقها على الرسم التخطيطي الذي تم إنشاؤه بواسطة pfodDesigner لاستخدام وحدة RTC ، على افتراض أنك تستخدم مكتبة RTClib وأضفت الكود لتهيئة وحدة RTC.
// handle {@} request} else if ('@' == cmd) {// pfodApp طلب الوقت "الحالي" plot_mSOffset = millis ()؛ // التقاط المللي الحالي كإزاحة للطوابع الزمنية rawdata parser.print (F ("{@` 0 "}) ؛ // إرجاع" 0 كـ "current" بيانات خام parser.print ('~') ؛ // بدء سلسلة من التاريخ / الوقت DateTime now = rtc.now () sendDateTime (& now)؛ // أرسل yyyy / M / d / H: m: s إلى parser.print ، تمرير العنوان & as arg. parser.print ('}')؛ // نهاية {@ response على سبيل المثال {@ `0 ~ 2019/4/19 3: 33: 5}….
// إرسال تاريخ الوقت إلى المحلل اللغوي printvoid sendDateTime (DateTime * dt) {parser.print (dt-> year ()، DEC) ؛ parser.print ('/') ؛ parser.print (dt-> month ()، DEC) ؛ parser.print ('/') ؛ parser.print (dt-> day ()، DEC) ؛ parser.print ('') ؛ parser.print (dt-> hour ()، DEC) ؛ parser.print (':') ؛ parser.print (dt-> minutes () ، DEC) ؛ parser.print (':') ؛ parser.print (dt-> second ()، DEC) ؛ }
sendData () باطل {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat () ؛ // إعادة تشغيل مؤقت بيانات المخطط ، بدون drift // قم بتعيين قيم لرسم متغيرات من متغيرات الحلقة أو قراءة مدخلات ADC plot_1_var = analogRead (A0) ؛ // قراءة المدخلات للرسم // plot_2_var مؤامرة مخفية لذلك لا توجد بيانات معينة هنا // plot_3_var plot مخفية لذلك لا توجد بيانات معينة هنا // أرسل بيانات قطعة الأرض بتنسيق CSV DateTime now = rtc.now () ؛ sendDateTime (الآن) ؛ // أرسل yyyy / M / d / H: m: s إلى parser.print ، تمرير العنوان & as arg. parser.print ('،')؛ parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin) ؛ parser.print ('،')؛ // قطعة الأرض 2 مخفية. لم يتم إرسال أي بيانات. parser.print ('،')؛ // القطعة 3 مخفية. لم يتم إرسال أي بيانات. parser.println () ، // نهاية سجل بيانات CSV}}
يتيح جزء ~ 2019/4/19 3:33: 5 من {@ response لـ pfodApp معرفة ما يعتقده pfodDevice بالتاريخ والوقت الحاليين. يمكن للرسم بعد ذلك إرسال البيانات باستخدام الطوابع الزمنية yMd Hms وسيقوم pfodApp برسمها إما على أنها الوقت المنقضي من وقت الاتصال أو كتاريخ ووقت ، اعتمادًا على تنسيق المحور X الذي تحدده.
عند التخطيط مقابل التاريخ والوقت ، يقوم روتين مخطط pfodApp بتصحيح أي "انحراف" في RTC من خلال مقارنة الوقت الحالي الذي تم الإبلاغ عنه لـ pfodDevice مقابل الوقت الحالي للجوال. يعالج هذا التصحيح أيضًا تعيين RTC على منطقة زمنية مختلفة عن المنطقة الزمنية المحلية لهاتفك المحمول. تستمر الطوابع الزمنية millis () في العمل كما هو الحال في استخدام الطوابع الزمنية من Arduino بالمللي ثانية ، الخطوة 5 أعلاه.
فيما يلي مثال لجدول بيانات لدرجات حرارة الغرفة خلال فترة 8 أيام ، Office_Temp.xls عندما تم استيراد ملف السجل ، تم وضع علامة على العمود الأول على أنه YMD لتحويل النص إلى تاريخ / وقت. ما زلت بحاجة إلى إزالة إدخالات الوقت الحالي بالتوقيت المحلي و UTC و Office Temp البادئة لجعل جدول البيانات يفسرها على أنها تواريخ وأوقات.
للحصول على نفس المؤامرة التي يعرضها pfodApp ، تحتاج إلى حساب "التاريخ / الوقت المصححين". في هذه الحالة ، يكون وقت RTC متأخرًا بمقدار ثانيتين عن التوقيت المحلي للهاتف المحمول ، لذلك تتم إضافة طابع زمني RTC (التوقيت المحلي - Office Temp الوقت الحالي) للحصول على التوقيت المحلي الحقيقي.
بالنسبة لمخططات الوقت المنقضي ، أنشئ عمودًا جديدًا يحتوي على (الطابع الزمني للتاريخ / الوقت - الوقت الحالي لوقت المكتب) واستخدمه كمحور X في المخطط (Office_TempElapsed.xls) في الواقع في هذه الحالة ، ينتج pfodApp مخططات أفضل للوقت المنقضي بالأيام hr: mins: sec.
الخطوة 10: استخدام وحدة GPS
استخدام وحدة GPS مشابه لاستخدام وحدة RTC ، باستثناء أن وحدات GPS متوفرة بالمللي ثانية ، والسنوات تبدأ في 2000 والوقت يفتقد الثواني الكبيسة بالتوقيت العالمي المنسق (انظر https://tycho.usno.navy.mil/leapsec.html) تاريخ ووقت نظام تحديد المواقع العالمي (GPS) حاليًا قبل 18 ثانية من التوقيت العالمي المنسق (UTC) ، اعتبارًا من يناير 2018.
مكتبة Adafruit GPS الخاصة بـ Adafruit Ultimate GPS ، على عكس RTClib ، لا تضيف إزاحة 2000 سنة إلى سنوات GPS ، لذلك يجب إضافتها عند إرسال التاريخ والوقت الطابع الزمني. أيضًا على الرغم من أن مكتبة GPS توفر أجزاء من الألف من الثانية تتميز بدقة جيدة جدًا على المدى الطويل ، إلا أنها ليست دقيقة جدًا. تحديثات وقت GPS هي مرة واحدة فقط لكل 100 مللي ثانية ، ثم هناك تأخير إضافي في تلقي البيانات التسلسلية على باود بطيء 9600 وتأخير آخر في تحليلها. كل ذلك يضيف إلى المللي ثانية في الدقة عند ختم قراءات البيانات.
فيما يلي بعض تغييرات التعليمات البرمجية النموذجية لتطبيقها على الرسم التخطيطي الذي تم إنشاؤه بواسطة pfodDesigner لاستخدام وحدة GPS ، على افتراض أنك تستخدم مكتبة Adafruit's GPS وقمت بإضافة الكود لتلقي الرسائل وتحليلها في كائن GPS.
// handle {@} request} else if ('@' == cmd) {// pfodApp طلب الوقت "الحالي" plot_mSOffset = millis ()؛ // التقاط المللي الحالي كإزاحة للطوابع الزمنية rawdata parser.print (F ("{@` 0 "}) ؛ // إرجاع" 0 كـ "current" بيانات خام parser.print ('~') ؛ // بدء سلسلة من التاريخ / الوقت sendDateTime (& GPS) ؛ // أرسل yyyy / M / d / H: m: s إلى parser.print وعنوان المرور & as arg. parser.print ('}')؛ // نهاية {@ response eg {@ `0 ~ 2019/4/19 3: 33: 5}….
// إرسال وقت التاريخ إلى المحلل اللغوي printvoid sendDateTime (Adafruit_GPS * GPS) {parser.print (F ("20")؛ // 20.. year parser.print (gps-> year، DEC)؛ parser.print ('/ ')؛ parser.print (gps-> month، DEC)؛ parser.print (' / ')؛ parser.print (gps-> day، DEC)؛ parser.print (' ')؛ parser.print (GPS- > ساعة، DEC)؛ parser.print (':')؛ parser.print (gps-> minutes، DEC)؛ parser.print (':')؛ parser.print (gps-> second، DEC)؛ // parser.print ('.') ؛ إذا كنت ترسل مللي ثانية // إذا كنت تريد إرسال مللي ثانية ، فأنت بحاجة إلى ملء قيمة GPS-> مللي ثانية مع الأصفار البادئة // أي يجب إضافة 3 إلى 003}
sendData () باطل {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat () ؛ // إعادة تشغيل مؤقت بيانات المخطط ، بدون drift // قم بتعيين قيم لرسم متغيرات من متغيرات الحلقة أو قراءة مدخلات ADC plot_1_var = analogRead (A0) ؛ // قراءة الإدخال للرسم // plot_2_var مؤامرة مخفية لذلك لا توجد بيانات معينة هنا // plot_3_var plot مخفية لذلك لا توجد بيانات معينة هنا // أرسل بيانات قطعة الأرض بتنسيق CSV sendDateTime (& GPS) ؛ // أرسل yyyy / M / d / H: m: s إلى parser.print ، تمرير العنوان & as arg. parser.print ('،')؛ parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin) ؛ parser.print ('،')؛ // قطعة الأرض 2 مخفية. لم يتم إرسال أي بيانات. parser.print ('،')؛ // القطعة 3 مخفية. لم يتم إرسال أي بيانات. parser.println () ، // نهاية سجل بيانات CSV}}
عند التخطيط مقابل التاريخ والوقت ، يقوم pfodApp تلقائيًا بالتصحيح للثواني الكبيسة. اعتبارًا من يناير 2018 ، كان وقت نظام تحديد المواقع العالمي (GPS) متقدمًا بمقدار 18 ثانية عن التوقيت العالمي المنسق (UTC). يصحح pfodApp ذلك من خلال مقارنة التاريخ / الوقت الذي يتم إرجاعه بواسطة GPS عند الاتصال ، عبر {@ response ، مقابل تاريخ ووقت UTC الخاص بالهاتف المحمول. إنشاء المخططات في جدول بيانات من ملف سجل pfodApp هو نفسه بالنسبة لوحدات RTC النمطية أعلاه. تؤدي إضافة (التوقيت المحلي - Office Temp الحالي) إلى الطوابع الزمنية لنظام تحديد المواقع العالمي (GPS) إلى تصحيح الثواني الكبيسة.
تستمر الطوابع الزمنية millis () في العمل كما هو الحال في استخدام الطوابع الزمنية من Arduino بالمللي ثانية ، الخطوة 5 أعلاه.
الخطوة 11: الخاتمة
يتيح لك استخدام pfodApp على هاتفك المحمول الذي يعمل بنظام Android رسم البيانات مقابل التاريخ والوقت أو الوقت المنقضي ، باستخدام وظيفة ميلي () فقط في Arduino. باستخدام ملف سجل pfodApp ، يمكنك إعادة إنتاج مخططات التاريخ / الوقت هذه في جدول بيانات. إذا كان مشروع Arduino الخاص بك يحتوي على وحدة RTC ، فيمكنك تسجيل التاريخ ورسمه والطوابع الزمنية لوقت RTC ، وتصحيح `` الانجراف '' تلقائيًا لـ RTC. إذا كان لديك مشروع Arduino يحتوي على وحدة GPS ، فيمكنك تسجيل الطوابع الزمنية عالية الدقة ورسمها ، وسيقوم pfodApp تلقائيًا بتصحيح الثواني الكبيسة المفقودة في GPS.
في جميع الحالات ، يتم تسجيل البيانات الأولية من مشروع Arduino الخاص بك تمامًا كما تم استلامها ، دون تصحيحها. ومع ذلك ، يتضمن ملف سجل pfodApp بيانات إضافية للسماح لك بإعادة إنتاج هذه التصحيحات في جدول بيانات من ملف السجل الذي تم تنزيله.
لا يلزم تشفير Android. يتم تحديد جميع تنسيقات المؤامرة بواسطة سلاسل نصية صغيرة في رسم Arduino الخاص بك. يُنشئ pfodDesigner المجاني تسجيل بيانات Arduino ورسومات تخطيطية لمجموعة متنوعة من لوحات Arduino المتصلة عبر WiFi و Classic Bluetooth و BLE و SMS
موصى به:
وقت عرض Arduino على شاشة LED TM1637 باستخدام RTC DS1307: 8 خطوات
وقت عرض Arduino على شاشة TM1637 LED باستخدام RTC DS1307: في هذا البرنامج التعليمي سوف نتعلم كيفية عرض الوقت باستخدام وحدة RTC DS1307 وشاشة LED TM1637 و Visuino
التسجيل التلقائي للعبة الجولف التنفيذية من المستوى الثالث: 12 خطوة (بالصور)
التسجيل التلقائي للعبة الجولف التنفيذية من المستوى 3: لقد قمت مؤخرًا بنشر Instructable حول بناء لعبة وضع ممتعة يمكن حملها ويمكن لعبها في الداخل والخارج. يطلق عليه "لعبة الجولف التنفيذية بالمساواة 3". لقد صممت نسخة طبق الأصل من بطاقة تسجيل النقاط لتسجيل كل لاعب يسجل 9 "ثقوب". كما في
ممارسة التسجيل باستخدام Makey Makey: 7 خطوات (بالصور)
ممارسة التسجيل مع Makey Makey: يتعين على طلاب الموسيقى لدينا إكمال الأغاني الموجودة على المسجل لكسب الأحزمة (قطع من الخيوط الملونة) حتى يصلوا إلى حالة الحزام الأسود. في بعض الأحيان يواجهون مشكلة في مواضع الإصبع و & quot؛ السمع & quot؛ الأغنية تنبض بالحياة
ARUPI - وحدة التسجيل الآلي منخفضة التكلفة / وحدة التسجيل الذاتي (ARU) لعلماء البيئة في Soundscape: 8 خطوات (بالصور)
ARUPI - وحدة التسجيل الآلي منخفضة التكلفة / وحدة التسجيل الذاتي (ARU) لعلماء البيئة في Soundscape: كتب هذا التوجيه أنتوني تيرنر. تم تطوير المشروع بمساعدة كبيرة من Shed in the School of Computing، University of Kent (كان السيد Daniel Knox مفيدًا جدًا!). سيوضح لك كيفية إنشاء تسجيل صوتي آلي
التسجيل الحديث لأشرطة الكاسيت القديمة باستخدام ملفات MP3: 8 خطوات (بالصور)
التسجيل الحديث لأشرطة الكاسيت القديمة مع ملفات MP3: مع ظهور أشرطة الكاسيت القديمة في الثقافة الشعبية الآن أكثر من أي وقت مضى ، يرغب العديد من الأشخاص في إنشاء نسخ خاصة بهم. في هذا البرنامج التعليمي ، سأوجهك حول كيفية (إذا كان لديك مسجل شرائط) تسجيل أشرطة الكاسيت الخاصة بك باستخدام التكنولوجيا الحديثة