כיצד לשלוט במפעיל באמצעות לוח מקשים

כיצד לשלוט במפעיל באמצעות לוח מקשים

Josh Nigh
Josh Nigh
PA Engineer

לפעמים הפרויקטים שלנו זקוקים לאבטחה נוספת. זה יכול להיות המקרה במגוון יישומים שונים כגון מנגנוני נעילת דלתות, מניעת שימוש לא בטוח או לא מורשה במכונות או השגת אביזרים נישתיים אפילו יותר לחדרי בריחה. במאמר זה נסקור אתכם בהרכבת מפעיל לוח מקשים ונדון כיצד ניתן להגן בסיסמה על פעולת המפעיל הליניארי שלכם.

הנה מה שנשתמש בו:

חיווט המפעיל שלך

ראשית, נתחיל עם החיווט. על מנת שנוכל לפרוש ולסגור את המפעיל, נצטרך להשתמש בשני הערוצים של מודול הממסר בעל 2 הערוצים שלנו. בדרך זו, כאשר ממסר אחד פעיל, הזרם יזרום בכיוון אחד וכאשר ממסר שני פעיל, הזרם יזרום בכיוון ההפוך. אם אף אחד מהממסרים או שניהם אינם פעילים, לא יזרום זרם למפעיל. לשם כך, נצטרך לבצע את החיבורים הבאים.

ממסרים למפעיל ולספק הכוח

  • +12V ל- NC1 (הדק סגור בדרך כלל בממסר הראשון) (חוט לבן).
  • 12V- ל-NO1 (הדק פתוח בדרך כלל בממסר הראשון) (חוט שחור).
  • NC1 עד NC2 (חוט מגשר כחול).
  • NO1 עד NO2 (חוט מגשר ירוק).
  • COMMON1 למפעיל (חוט חום של המפעיל).
  • COMMON2 למפעיל (חוט כחול של המפעיל).

ארדואינו למקלדת ולמודול הממסר

  • חברו את פינים 1-8 במקלדת לפינים 2-9 בארדואינו (בסדר הזה).
  • ארדואינו פין 10 ל-IN1 על מודול ממסר.
  • ארדואינו פין 11 ל-IN2 על מודול ממסר.
  • ארדואינו 5V ל-VCC על מודול ממסר.
  • ארדואינו GND ל-GND על מודול ממסר.
  • אנודת זמזם (מוליך ארוך יותר) לפין 12 (אופציונלי).
  • קתודה של זמזם (מוליך קצר יותר) ל- GND (אופציונלי).
    Arduino to the Keypad and the Relay Module

     

    קידוד הפרויקט שלך

    כעת, לאחר שביצענו את כל החיבורים, אנו מוכנים לקוד. מטרת הקוד היא לקרוא את הקלטים מלוח המקשים, לחפש את הקלט בן 5 הספרות הנכון ולהפעיל את הממסרים שלנו בהתאם. ישנו גם קוד לזמזם אופציונלי כדי לספק משוב. אם אינך מעוניין להשתמש בזמזם, תוכל פשוט לא לחבר אותו ולהשאיר את הקוד כפי שהוא. אם עליך להשתמש בפין הזמזם למשהו אחר, מחק או הסר הערות מכל הקוד המשמש לפונקציות הזמזם או ה"צפצוף".

    בקוד למטה, תמצאו הערות כמעט בכל שורה (טקסט אפור בהיר שאחרי "//"). הערות אלו יתארו את מה שקורה בסקיצה, כמו גם שינויים שתוכלו לבצע. כמו כן, נפרק כאן כמה סעיפים חשובים להסבר יסודי יותר.

    השתמשו במיקרו-בקרים של ארדואינו שלנו לקבלת אפשרויות בקרה בלתי מוגבלות של המפעיל שלכם!

    קוד התקנה

    בקוד ההתקנה שלנו, נגדיר את פיני הזמזם והממסר שלנו כיציאות. הזמזם יתחיל במצב נמוך והממסרים יתחילו במצב גבוה. זה יגרום לכולם להיות לא פעילים כשאנחנו מפעילים לראשונה את הארדואינו. כמו כן, נריץ את הפונקציה "retract()" פעם אחת כדי שהארדואינו ידע את המצב הנכון של המפעיל.

     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. ספרייה זו מכילה את הפונקציות בהן אנו משתמשים כדי לקבל קלט מלוח המקשים שלנו. על מנת להשתמש בספרייה זו, עלינו ליצור מערך דו-ממדי כדי למפות את התווים של לוח המקשים שלנו. ניתן להשיג זאת על ידי הגדרת מספר השורות ומספר העמודות בלוח המקשים. לאחר מכן, אנו יוצרים את המערך שלנו עם כל תו בלוח המקשים. ללוח המקשים שלנו יש ארבע שורות, ארבע עמודות ושמונה פיני פלט. יש פין אחד לכל שורה ופין אחד לכל עמודה. אנו מראים זאת בקוד שלנו על ידי יצירת "פיני שורהמערך " המכיל את הכניסות הדיגיטליות המחוברות לפיני השורה ו-"קולפיניםמערך " המכיל את הכניסות הדיגיטליות המחוברות לפיני העמודה. כאשר אנו לוחצים על מקש, אנו מחברים אחד מפיני השורה עם אחד מפיני העמודה. לדוגמה, אם אנו לוחצים על כפתור 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 ספרות, לכן אנו מגדירים "אורך_קוד_הגישה" כ-"6 inch. הסיבה לכך היא שאנו דורשים רווח נוסף אחד עבור תו ריק. אם ברצונך לשנות את אורך קוד הגישה, פשוט שנה את ה-6 למספר הגדול מאורך הקוד הרצוי באחד. לאחר מכן, שנה את הערך של "קוד גישה" לכל תו שתרצו (הגדר את הערך "12345 inch כברירת מחדל).

    התו המשויך לכל מקש שנלחץ יישמר ב-"Iקלטמערך ". ברגע שמערך זה מכיל 5 תווים, הוא ישווה את הערך של "קֶלֶט"ו"קוד גישה" כדי לראות אם יש לנו את קוד הגישה הנכון. אם הערכים שווים, הקוד שלנו יגיד לארדואינו להאריך או לסגת את המפעיל (בהתאם למצב הנוכחי של המפעיל). אם קוד הגישה שגוי, פין הזמזם יעלה גבוה שלוש פעמים במהירות ואז ירד נמוך. בכל מקרה, ה-"קלט ברור ()הפונקציה " תיקרא לאחר מכן כדי לנקות את מערך הקלט ולפנות מקום לערך חדש.

    הארכה ונסיגה של קוד

    יש לנו שתי פונקציות דומות מאוד בקוד הזה "void extend()"ו"ריק (retract)כאשר הפונקציה void extend() תקרא לפונקציה Relay One low, מה שיהפוך אותה לפעילה. פעולה זו תסגור מעגל ותפעיל מתח חיובי על המפעיל. הממסר יישאר פעיל למשך הזמן שהוקצה לפונקציה.const int הארכת זמן". (מוגדר כברירת מחדל ל-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();
    }

    נגיעות אחרונות

    לאחר שביצענו את כל החיבורים והעלינו את הקוד, אמורה להיות לנו מערכת בקרת מפעילים תקינה המוגנת בסיסמה. אם אתם נתקלים בבעיות בהגדרה הראשונה, נסו להשתמש בכלי הניטור הטורי ב-IDE של ארדואינו. זה יכול להיות מועיל ביותר בקביעת האם הבעיות שלכם נגרמות על ידי קוד, חיווט או רכיבים פגומים.

    ניתן לשנות קוד זה מעבר לשינוי קוד הגישה בלבד. ייתכן שתרצו לשקול להחליף את לוח הממסר שלכם במגן MegaMoto כדי שתוכלו לקבל בקרת מהירות או להשתמש במפעיל עם משוב אפקט הול לבקרת מיקום.

    אנו מקווים שמאמר זה היה מועיל! אם יש לכם שאלות בנוגע למפעיל ליניארי אחר הנשלט מרחוק, או שאתם רוצים לשתף אותנו בפרויקט שלכם, אל תהססו לפנות אלינו. התקשרו אלינו או שלחו לנו דוא"ל.