جدول المحتويات:
- اللوازم
- الخطوة 1: كيف تعمل الساعة الرقمية
- الخطوة 2: آلة الدولة
- الخطوة 3: LCD Keypad Shield
- الخطوة 4: الربط بين آلة الدولة
- الخطوة 5: توصيل الأشياء معًا
- الخطوة 6: احصل على المثال
فيديو: ساعة رقمية على Arduino باستخدام آلة الحالة المحدودة: 6 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:38
مرحبًا ، سأوضح لك كيف يمكن إنشاء ساعة رقمية باستخدام أدوات YAKINDU Statechart وتشغيلها على Arduino ، الذي يستخدم لوحة مفاتيح LCD.
النموذج الأصلي للساعة الرقمية مأخوذ من David Harel. لقد نشر ورقة حول
"[…] امتداد واسع للشكليات التقليدية لآلات الدولة ومخططات الدولة."
في هذه الورقة ، استخدم مثال الساعة الرقمية في بحثه. لقد استخدمتها كمصدر إلهام وأعدت تصميم الساعة باستخدام YAKINDU Statechart Tools (أداة لإنشاء نماذج رسومية لآلات الحالة وإنشاء كود C / C ++ معها) وأعدتها إلى الحياة على Arduino.
اللوازم
المعدات:
- اردوينو أونو أو ميجا
- شاشة LCD Keypad Shield
برمجة:
- YAKINDU Statechart Tools
- Eclipse C ++ IDE لـ Arduino
الخطوة 1: كيف تعمل الساعة الرقمية
لنبدأ بتحديد كيفية عمل الساعة الرقمية. هل تتذكر هذه … دعنا نقول … الساعات الرقمية "الرائعة جدًا" التي كان الجميع قد عاد إليها في التسعينيات؟ ساعة توقيت متكاملة ، منبهات مختلفة وصوتها المزعج كل ساعة كاملة. إذا لم يكن كذلك ، فقم بإلقاء نظرة: 90 ساعة رقمية.
لذلك فهي في الأساس ساعة قابلة للتكوين بأوضاع مختلفة. سيتم عرض الوقت الحالي بشكل أساسي ، ولكن هناك بعض الميزات الأخرى. كإدخال ، لديك زر تشغيل / إيقاف ، ووضع وزر ضبط. بالإضافة إلى ذلك ، يمكنك تشغيل وإطفاء الضوء. باستخدام زر الوضع ، يمكنك التمييز بين الأوضاع وتنشيط / تعطيل ميزات الساعة:
- عرض الوقت (الساعة)
- عرض التاريخ (التاريخ)
- ضبط المنبه (المنبه 1 ، المنبه 2)
- تمكين / تعطيل الرنين (ضبط الرنين)
- استخدم ساعة الإيقاف (Stop Watch)
ضمن القوائم ، يمكنك استخدام زر التشغيل / الإيقاف لتكوين الوضع. يتيح لك زر الضبط ضبط الوقت - على سبيل المثال على مدار الساعة أو أجهزة الإنذار. يمكن التحكم في ساعة الإيقاف - بدء تشغيلها وإيقافها - باستخدام زر تشغيل المصباح وإيقاف تشغيله. يمكنك أيضًا استخدام عداد حضن مدمج
علاوة على ذلك ، هناك رنين يصدر كل ساعة كاملة ، وإضاءة خلفية مدمجة يمكن التحكم فيها. في الخطوة الأولى ، لم أقم بتوصيلهم بـ Arduino.
الخطوة 2: آلة الدولة
لا أريد الخوض في الكثير من التفاصيل لشرح هذا المثال. ليس لأنه معقد للغاية ، إنه كبير جدًا قليلاً. سأحاول شرح الفكرة الأساسية لكيفية عملها. يجب أن يكون التنفيذ ذاتيًا ، من خلال إلقاء نظرة على النموذج أو تنزيله ومحاكاته. يتم تلخيص بعض أجزاء جهاز الحالة في مناطق فرعية ، مثل المنطقة الزمنية المحددة. مع هذا ، يجب ضمان سهولة قراءة آلة الحالة.
ينقسم النموذج إلى جزأين - رسومي ونصي. في الجزء النصي ، سيتم تحديد الأحداث والمتغيرات وما إلى ذلك. في الجزء الرسومي - مخطط الحالة - يتم تحديد التنفيذ المنطقي للنموذج. لإنشاء آلة حالة ، تحقق السلوك المحدد ، يلزم إدخال بعض أحداث الإدخال ، والتي يمكن استخدامها في النموذج: onoff ، و set ، و mode ، و light ، و light_r. ضمن قسم التعريف ، يتم استخدام حدث داخلي ، والذي يزيد من قيمة الوقت كل 100 مللي ثانية:
كل 100 مللي ثانية / مرة + = 1
بناءً على خطوات 100 مللي ثانية ، سيتم حساب الوقت الحالي بتنسيق HH: MM: SS:
display.first = (time / 36000)٪ 24 ؛
display.second = (time / 600)٪ 60 ؛ العرض الثالث = (الوقت / 10)٪ 60 ؛
سيتم توصيل القيم بشاشة LCD باستخدام تحديث التشغيل في كل مرة يتم استدعاء جهاز الحالة:
display.updateLCD (display.first ، display.second ، display.th third ، display.text)
تم تحديد التنفيذ الأساسي لجهاز الحالة بالفعل في قسم كيف تعمل الساعة الرقمية. داخل الأداة ، استخدمت بعض عناصر النمذجة "الخاصة" مثل CompositeState ، والتاريخ ، والمخططات الفرعية ، وعقود الخروج ، وما إلى ذلك. يمكن العثور على وصف تفصيلي في دليل المستخدم.
الخطوة 3: LCD Keypad Shield
يعد LCD Keypad Shield رائعًا جدًا للمشروعات البسيطة ، والتي تتطلب شاشة للتصور وبعض الأزرار كمدخلات - واجهة HMI بسيطة نموذجية (واجهة الإنسان والآلة). يحتوي LCD Keypad Shield على خمسة أزرار للمستخدم وآخر لإعادة التعيين. الأزرار الخمسة جميعها متصلة بدبوس A0 في Arduino. كل واحد منهم متصل بمقسم الجهد ، والذي يسمح بالتمييز بين الأزرار.
يمكنك استخدام analogRead (0) للعثور على القيم المحددة ، والتي يمكن بالطبع أن تختلف باختلاف الشركة المصنعة. يعرض هذا المشروع البسيط القيمة الحالية على شاشة LCD:
# تضمين "Arduino.h"
# تتضمن "LiquidCrystal.h" LiquidCrystal lcd (8 ، 9 ، 4 ، 5 ، 6 ، 7) ؛ إعداد باطل () {lcd.begin (16، 2) ؛ lcd.setCursor (0 ، 0) ؛ lcd.write ("القيمة المقاسة") ؛ } حلقة فارغة () {lcd.setCursor (0، 1)؛ lcd.print ("") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print (analogRead (0)) ؛ تأخير (200) ؛ }
هذه هي نتائجي التي تم قياسها:
- لا شيء: 1023
- اختر: 640
- اليسار: ٤١١
- للأسفل: 257
- لأعلى: 100
- اليمين: 0
باستخدام هذه العتبات ، يمكن قراءة الأزرار:
#define NONE 0 # حدد SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 static int readButton () {int result = 0 ؛ النتيجة = analogRead (0) ؛ إذا (نتيجة <50) {return RIGHT؛ } if (نتيجة <150) {return UP؛ } if (نتيجة <300) {return DOWN؛ } إذا (نتيجة <550) {إرجاع LEFT؛ } if (نتيجة <850) {return SELECT؛ } إرجاع NONE؛ }
الخطوة 4: الربط بين آلة الدولة
يوفر كود C ++ الذي تم إنشاؤه لجهاز الحالة واجهات ، والتي يجب تنفيذها للتحكم في جهاز الحالة. تتمثل الخطوة الأولى في ربط الأحداث بمفاتيح Keypad Shield. لقد أوضحت بالفعل كيفية قراءة الأزرار ، ولكن من أجل ربطها بجهاز الحالة ، فإن إلغاء الأزرار مطلوب - وإلا ، فسيتم رفع الأحداث عدة مرات ، مما يؤدي إلى سلوك غير متوقع. إن مفهوم رفض البرامج ليس بجديد. يمكنك إلقاء نظرة على وثائق Arduino.
في تطبيقي ، اكتشفت حافة ساقطة (تحرير الزر). قرأت قيمة الزر ، وانتظر 80 مللي ثانية (حصلت على نتائج أفضل بـ 80 بدلاً من 50) ، واحفظ النتيجة واقرأ القيمة الجديدة. إذا لم تكن النتيجة القديمة NONE (غير مضغوطة) وكانت النتيجة الجديدة NONE ، فأنا أعلم أن الزر قد تم الضغط عليه من قبل وتم تحريره الآن. بعد ذلك ، أرفع حدث الإدخال وفقًا لجهاز الحالة.
int oldState = NONE؛ static void liftEvents () {int buttonPressed = readButton ()؛ تأخير (80) ؛ oldState = buttonPressed ؛ if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button () -> lift_mode ()؛ استراحة؛ } الحالة اليسرى: {stateMachine-> getSCI_Button () -> lift_set () ؛ استراحة؛ } الحالة DOWN: {stateMachine-> getSCI_Button () -> lift_light () ؛ استراحة؛ } الحالة UP: {stateMachine-> getSCI_Button () -> lift_light_r () ؛ استراحة؛ } الحالة RIGHT: {stateMachine-> getSCI_Button () -> lift_onoff ()؛ استراحة؛ } الافتراضي: {break؛ }}}}
الخطوة 5: توصيل الأشياء معًا
البرنامج الرئيسي يستخدم ثلاثة أجزاء:
- آلة الدولة
- مؤقت
- معالج شاشة (طباعة شاشة LCD نموذجية (…))
DigitalWatch * stateMachine = new DigitalWatch () ؛ CPPTimerInterface * timer_sct = new CPPTimerInterface () ؛ DisplayHandler * displayHandler = new DisplayHandler () ؛
تستخدم آلة الحالة معالج عرض وتحصل على مؤقت ، والذي سيتم تحديثه للتحكم في الأحداث الموقوتة. بعد ذلك ، يتم تهيئة آلة الحالة وإدخالها.
إعداد باطل () {stateMachine-> setSCI_Display_OCB (displayHandler) ؛ stateMachine-> setTimer (timer_sct) ؛ stateMachine-> init () ؛ stateMachine-> أدخل () ؛ }الحلقة تفعل ثلاثة أشياء:
- رفع أحداث الإدخال
- احسب الوقت المنقضي وقم بتحديث المؤقت
- اتصل بجهاز الدولة
الوقت الحالي الطويل = 0 ؛ وقت_دورة_الأخيرة الطويلة = 0 ؛ حلقة باطلة () {liftEvents () ، وقت_دورة_الأخيرة = الوقت الحالي ؛ current_time = مللي () ؛ timer_sct-> updateActiveTimer (stateMachine ، current_time - last_cycle_time) ؛ stateMachine-> runCycle () ؛ }
الخطوة 6: احصل على المثال
هذا كل شيء. ربما لم أذكر كل تفاصيل التنفيذ ، ولكن يمكنك إلقاء نظرة على المثال أو ترك تعليق.
أضف المثال إلى IDE قيد التشغيل باستخدام: ملف -> جديد -> مثال -> أمثلة YAKINDU Statechart -> التالي -> Arduino - Digital Watch (C ++)
> يمكنك تنزيل IDE من هنا <<
يمكنك البدء بتجربة مدتها 30 يومًا. بعد ذلك ، يجب أن تحصل على ترخيص مجاني للاستخدام غير التجاري!
موصى به:
آلة الحالة المحدودة على MSP430: 6 خطوات
آلة الحالة المحدودة على MSP430: سأوضح لك كيفية برمجة MSP430G2 Launchpad مع Finite State Machines (FSM) باستخدام YAKINDU Statechart Tools مباشرة في Texas Instruments Code Composer Studio. يحتوي هذا البرنامج التعليمي على ست خطوات: تثبيت أدوات YAKINDU Statechart كـ
صنع ساعة باستخدام M5stick C باستخدام Arduino IDE - ساعة الوقت الحقيقي RTC مع M5stack M5stick-C: 4 خطوات
صنع ساعة باستخدام M5stick C باستخدام Arduino IDE | RTC Real Time Clock مع M5stack M5stick-C: مرحبًا يا رفاق في هذه التعليمات ، سوف نتعلم كيفية صنع ساعة باستخدام لوحة تطوير m5stick-C من m5stack باستخدام Arduino IDE ، لذا سيعرض m5stick التاريخ والوقت وأمبير ؛ أسبوع من الشهر على الشاشة
آلة الحالة وتعدد المهام على Arduino مع موسعات SPI: 3 خطوات
آلة الحالة وتعدد المهام على Arduino مع SPI Expanders: الأسبوع الماضي ، كنت أطلب إنشاء نظام لتجربة الألعاب النارية باستخدام اردوينو. احتاجت إلى حوالي 64 مخرجات للسيطرة على الحرائق. طريقة واحدة للقيام بذلك هي استخدام موسعات IC. لذلك يتوفر حلان: - موسع I2C ولكنه يحتاج إلى عاكس عندما تقوم
ساعة رقمية لمدة 12 ساعة باستخدام الأردوينو: 3 خطوات
ساعة رقمية مدتها 12 ساعة باستخدام Arduino: هذا مشروع قائم على اللوح يستخدم Atmel Atmega 2560 (Arduino Mega) وشاشة LCD مقاس 16 × 2 لإنشاء ساعة رقمية مدتها 12 ساعة دون الحاجة إلى أجهزة طرفية إضافية. يمكننا أيضًا ضبط الوقت وتعديله بمساعدة زرين ضغط
آلة حاسبة رقمية قائمة على TIVA: 6 خطوات
آلة حاسبة رقمية قائمة على TIVA: مرحبًا ، هذا هو طاهر الحق الذي يقدم لك مشروعًا آخر قائمًا على tiva. يهدف هذا المشروع إلى صنع آلة حاسبة رقمية قائمة على LCD تؤدي وظائف مختلفة. الآلة الحاسبة هي جهاز إلكتروني يقوم بتقييم العديد من العمليات الحسابية السريعة