كيفية التحكم في مشغل باستخدام لوحة مفاتيح

كيفية التحكم في مشغل باستخدام لوحة مفاتيح

Josh Nigh
Josh Nigh
PA Engineer

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

إليك ما سنستخدمه:

توصيل المشغل

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

توصيل المرحّلات بالمشغل ومزود الطاقة

  • +12 فولت إلى NC1 (الطرف المغلق عادةً على المرحل الأول) (سلك أبيض).
  • -12 فولت إلى NO1 (الطرف المفتوح عادةً على المرحل الأول) (سلك أسود).
  • NC1 إلى NC2 (سلك قفز أزرق).
  • NO1 إلى NO2 (سلك قفز أخضر).
  • COMMON1 إلى المشغل (سلك المشغل البني).
  • COMMON2 إلى المشغل (سلك المشغل الأزرق).

توصيل Arduino بلوحة المفاتيح ووحدة المرحّلات

  • وصّل الأرجل 1-8 على لوحة المفاتيح بالأرجل 2-9 على Arduino (بهذا الترتيب).
  • رجل Arduino رقم 10 إلى IN1 على وحدة المرحّلات.
  • رجل Arduino رقم 11 إلى IN2 على وحدة المرحّلات.
  • 5V من Arduino إلى VCC على وحدة المرحّلات.
  • GND من Arduino إلى GND على وحدة المرحّلات.
  • مصعد طنّانة (الساق الأطول) إلى الرجل 12 (اختياري).
  • مهبط طنّانة (الساق الأقصر) إلى GND (اختياري).
    Arduino إلى لوحة المفاتيح ووحدة المرحّلات

     

    برمجة مشروعك

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

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

    استخدم متحكّمات Arduino الدقيقة لدينا لخيارات تحكم غير محدودة بمشغلك!

    شيفرة الإعداد

    في شيفرة الإعداد، سنعرّف أرجل الطنّانة والمرحّلات كمخارج. ستبدأ الطنّانة على LOW بينما تبدأ المرحّلات على HIGH. سيجعل هذا كلّها غير نشطة عند تشغيل Arduino لأول مرة. كما سنشغّل الدالة “retract ()” مرة واحدة لكي يعرف Arduino الحالة الصحيحة للمشغل.

     void setup() //runs once on startup
    {
    digitalWrite(buzzer, LOW);//deactivates buzzer
    digitalWrite(relay1,HIGH);//deactivates relay1
    digitalWrite(relay2,HIGH);//deactivates relay2
    for(int i=10;i<14;i++)
    {
      pinMode(i,OUTPUT);//sets pins 10 - 13 as outputs
    }
    
    
    Serial.begin(9600);//Starts the serial monitor at 9600 baud rate (for debugging only)
    retract();//retracts the actuator on startup if it is not already. comment this out if you do not want the actuator to retract on startup
    Serial.println("READY");//lets us know the serial monitor is running
    }
    

    شيفرة لوحة المفاتيح

    في هذا السكيتش نستخدم مكتبة Keypad.h. تحتوي هذه المكتبة على الدوال التي نستخدمها لاستقبال المدخلات من لوحة المفاتيح. لاستخدام هذه المكتبة، نحتاج إلى إنشاء مصفوفة ثنائية الأبعاد لرسم خريطة أحرف لوحة المفاتيح. يتحقق ذلك أولاً بتعريف عدد الصفوف والأعمدة في اللوحة، ثم نصنع مصفوفتنا بكل حرف على اللوحة. تحتوي لوحتنا على أربعة صفوف وأربعة أعمدة وثمانية أرجل خرج. يوجد رجل لكل صف ورجل لكل عمود. نُظهر ذلك في الشيفرة بإنشاء مصفوفة “rowPins” التي تتضمن المداخل الرقمية المتصلة بأرجل الصفوف، ومصفوفة “colPins” التي تتضمن المداخل الرقمية المتصلة بأرجل الأعمدة. عند الضغط على مفتاح، نصل أحد أرجل الصفوف بأحد أرجل الأعمدة. على سبيل المثال، إذا ضغطنا الزر 2، فإننا نُنشئ دائرة مغلقة بين رجل الصف واحد ورجل العمود اثنين.

     char customKey; //characters input by pressing keypad
    const byte ROWS = 4; //four rows
    const byte COLS = 4; //four columns 
    
    char keys[ROWS][COLS] = { //layout your "keymap" here
      {'1', '2', '3', 'A'},
      {'4', '5', '6', 'B'},
      {'7', '8', '9', 'C'},
      {'*', '0', '#', 'D'}
    };
    byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad
    byte colPins[COLS] = {6, 7, 8, 9}; //connect to the column pinouts of the keypad
    Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad 

    شيفرة كلمة المرور

    في هذا المثال للتحكم الآمن في المشغل الخطي، طول كلمة المرور لدينا 5 أرقام، لذا نعرّف “Passcode_Length” على أنها “6”. ذلك لأننا نحتاج مساحة إضافية واحدة لمحرف فارغ. إذا رغبت تغيير طول كلمة المرور، غيّر القيمة 6 إلى رقم أكبر من طول الرمز المطلوب بواحد. بعد ذلك، غيّر قيمة “Passcode” إلى الأحرف التي تريدها (القيمة الافتراضية “12345”).

    يُخزَّن الحرف المرتبط بكل مفتاح مضغوط في مصفوفة “Input”. وبمجرد أن تحتوي هذه المصفوفة على 5 أحرف، ستقارن قيمة “Input” و“Passcode” لمعرفة ما إذا كانت كلمة المرور صحيحة. إذا كانت القيم متساوية، ستخبر الشيفرة Arduino بمدّ المشغل أو سحبه (اعتماداً على حالة المشغل الحالية). وإذا كانت كلمة المرور غير صحيحة، فسترتفع إشارة رجل الطنّانة ثلاث مرات بسرعة ثم تنخفض. في كلتا الحالتين، تُستدعى الدالة “clearInput()” بعدها لمسح مصفوفة الإدخال وإفساح المجال لإدخال جديد.

    شيفرة المدّ والسحب

    لدينا وظيفتان متشابهتان جداً في هذه الشيفرة “void extend()” و“void retract()”. عند الاستدعاء، تكتب void extend() قيمة منخفضة للمرحل الأول ليصبح نشطاً. سيؤدي هذا إلى إغلاق دائرة وتطبيق جهد موجب على المشغل. سيبقى المرحل نشطاً للمدة المعينة لـ “const int extendTime” (الافتراضي 25,000 ملي ثانية). وتقوم الدالة void retract() بالشيء نفسه تماماً، ولكنها تستخدم المرحل الثاني لعكس الجهد بدلاً من المرحل الأول.

    void extend()//extend the actuator
    {
      longBeep();
      Serial.println("EXTENDING...");
      digitalWrite(relay2,HIGH);//makes sure relay2 is not active
      digitalWrite(relay1,LOW);//activates relay1
      delay(extendTime);
      digitalWrite(relay1,HIGH);//deactivates relay1
      Serial.println("DONE EXTENDING");
      extended = true; //tells the arduino that the actuator is extended 
      longBeep();
    }
    
    void retract()//extend the actuator
    {
      longBeep();
      Serial.println("RETRACTING...");
      digitalWrite(relay1,HIGH);//makes sure relay1 is not active
      digitalWrite(relay2,LOW);//activates relay2
      delay(retractTime);
      digitalWrite(relay2,HIGH);//deactivates relay2
      Serial.println("RETRACTING DONE");
      extended = false; //tells the arduino that the actuator is retracted
      longBeep();
    }

    اللمسات الأخيرة

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

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

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