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

Arduino HMI باستخدام آلات الحالة: 9 خطوات
Arduino HMI باستخدام آلات الحالة: 9 خطوات

فيديو: Arduino HMI باستخدام آلات الحالة: 9 خطوات

فيديو: Arduino HMI باستخدام آلات الحالة: 9 خطوات
فيديو: 3:دورة hmi تطبيق عملي على شاشات hmi بإستخدام PLC | كورس HMI 2024, يوليو
Anonim
Arduino HMI باستخدام آلات الدولة
Arduino HMI باستخدام آلات الدولة

في هذا Instructable ، سأوضح لك كيفية استخدام أدوات YAKINDU Statechart لتحقيق واجهة HMI بسيطة وقابلة للتوسيع باستخدام درع لوحة مفاتيح LCD مقاس 16 × 2 لـ Arduino.

آلات الحالة المحدودة (FSM) هي نمط تصميم قوي لتطوير واجهات معقدة بين الإنسان والآلة (HMI). نظرًا لإمكانية زيادة وظائف HMI ، فمن المفيد استخدام نمط تصميم مثل آلات الحالة.

تم تضمين المثال الكامل في أدوات YAKINDU Statechart. بالإضافة إلى ذلك ، تم استخدام Eclipse C ++ IDE لـ Arduino Plugin للترجمة والوميض في IDE.

ملخص موجز لأدوات مخطط الإحصائيات YAKINDU

باستخدام هذه الأداة ، من الممكن إنشاء آلات حالة رسومية. يسمح للمستخدم بإنشاء كود C أو C ++ أو Java من جهاز الحالة. باستخدام هذا النهج ، يمكن تغيير النموذج أو توسيعه ويمكن للمستخدم ببساطة إعادة إنشاء الكود وليس عليه كتابة كود مصدر عادي.

اللوازم

القطع:

  • اردوينو (أونو ، ميجا)
  • كابل USB
  • 16x2 LCD Keypad Shield

أدوات:

  • YAKINDU Statechart Tools
  • Eclipse C ++ IDE لـ Arduino

الخطوة 1: الأجهزة

Image
Image

يمكن ببساطة توصيل لوحة مفاتيح LCD بلوحة مفاتيح Arduino. يحتوي على شاشة LCD مقاس 16 × 2 بالإضافة إلى ستة أزرار ضغط:

  • اليسار
  • حق
  • فوق
  • تحت
  • يختار
  • (إعادة ضبط)

من الواضح ، يمكن استخدام خمسة منهم. يتم توصيل المفاتيح بمقسم الجهد ويتم اكتشافها باستخدام Pin A0 حسب الجهد. لقد استخدمت برنامج debouncing لاكتشافها بشكل صحيح.

الخطوة 2: حدد كيف يجب أن يعمل

تحكم HMI
تحكم HMI

يجب أن يكون التطبيق قادرًا على القيام بثلاثة أشياء.

  1. التعامل مع الولايات هنا أريد استخدام الأزرار للتنقل بين خمس حالات: أعلى ، وسط ، أسفل ، يسار ويمين
  2. ساعة توقيت بسيطة يمكن تشغيلها وإيقافها وإعادة ضبطها. يجب زيادته كل 100 مللي ثانية
  3. يحتوي الجزء الثالث على عداد بسيط لأعلى / لأسفل. يجب أن تكون قادرة على حساب الأرقام الموجبة ويجب أن تكون قابلة لإعادة التعيين

سيتم عرض القائمة النشطة (أو الحالة) على شاشة LCD مقاس 16 × 2 في السطر العلوي. سيتم عرض التطبيق (الحالة أو المؤقت أو العداد) في الخط السفلي. للملاحة ، يجب استخدام زر الضغط الأيمن والأيسر.

الخطوة 3: الربط بين آلة الدولة

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

واجهه المستخدم:

// أزرار كأحداث إدخال في الحدث الأيمن في الحدث الأيسر في الحدث لأسفل في الحدث حدد // عرض القيم المحددة لـ HMI عرض العملية: عدد صحيح) عملية clearLCDRow (position: integer) internal: // variables for storage var cnt: Integer var timeCnt: Integer = 0

بعد إنشاء كود C ++ ، يجب إلغاء أحداث in وربطها بالواجهة. يوضح مقتطف الشفرة هذا كيفية القيام بذلك.

في البداية ، سيتم تحديد الأزرار:

#define NONE 0 # حدد SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5

ثم هناك وظيفة محددة لقراءة الزر. قد تختلف القيم حسب الشركة المصنعة لـ LCD Shield.

static int readButton () {int نتيجة = 0 ؛ النتيجة = analogRead (0) ؛ إذا (نتيجة <50) {return RIGHT؛ } if (نتيجة <150) {return UP؛ } if (نتيجة <300) {return DOWN؛ } إذا (نتيجة <550) {إرجاع LEFT؛ } if (نتيجة <850) {return SELECT؛ } إرجاع NONE؛ }

في النهاية ، سيتم إلغاء الأزرار. لقد حققت نتائج جيدة مع 80 مللي ثانية. بمجرد تحرير الزر ، سيرفع وفقًا للحدث.

int oldState = NONE؛ static void liftEvents () {int buttonPressed = readButton ()؛ تأخير (80) ؛ oldState = buttonPressed ؛ if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> lift_select ()؛ استراحة؛ } الحالة اليسرى: {stateMachine-> lift_left ()؛ استراحة؛ } الحالة DOWN: {stateMachine-> lift_down ()؛ استراحة؛ } الحالة UP: {stateMachine-> lift_up ()؛ استراحة؛ } case RIGHT: {stateMachine-> lift_right ()؛ استراحة؛ } الافتراضي: {break؛ }}}}

الخطوة 4: التحكم في HMI

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

مع هذا التصميم ، يمكن توسيع الواجهة بسهولة. يمكن إضافة قوائم إضافية ببساطة باستخدام نفس نمط التصميم. قراءة قيمة المستشعر وعرضها في عنصر قائمة رابع ليست مشكلة كبيرة.

في الوقت الحالي ، يتم استخدام اليسار واليمين فقط كعنصر تحكم. ولكن يمكن أيضًا استخدام أعلى وأسفل كامتداد تنقل في القائمة الرئيسية. سيتم استخدام زر التحديد فقط لإدخال عنصر قائمة محدد.

الخطوة 5: التعامل مع الدول

التعامل مع الدول
التعامل مع الدول

يتم استخدام قائمة حالات المقبض كمثال إضافي للتنقل. يسمح استخدام لأعلى أو لأسفل أو لليمين أو لليسار بالتبديل بين الدول. ستتم طباعة الحالة الحالية دائمًا على السطر الثاني على شاشة LCD.

الخطوة 6: ساعة التوقيف

ساعة التوقيف
ساعة التوقيف

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

الخطوة 7: العداد

عداد
عداد

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

الخطوة 8: المحاكاة

الخطوة 9: احصل على المثال

يمكنك تنزيل IDE من هنا: YAKINDU Statechart Tools

بمجرد تنزيل IDE ، يمكنك العثور على المثال عبر File -> N ew -> Example

إنه مجاني للاستخدام للهواة ، ولكن يمكنك أيضًا استخدام نسخة تجريبية مدتها 30 يومًا.

موصى به: