מנעול קומבינציה יוצא דופן על ארדואינו

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

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

מנעול שילוב

איכות התמונה אינה הטובה ביותר, אך החיבור נוצר לקרקע, D3, D5, D7, D9 ו- D11.

הקוד מוצג להלן:

const int ina = 3;

const int inb = 5;

const int inc = 9;

const int ledPin = 13;

int i = 1000;

בתים a = 0;

בתים b = 0;

בתים c = 0;

בתים d = 0;

זמן לא חתום = 0; // אל תשכח את כל מה שדורש ערך של מיליוני ()

זמנית ארוכה לא חתומה = 0; // לאחסן זמן לא חתום

בתים keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // קודים למעשה

בתים מקש [] = {1, 1, 1, 1, 0, 1, 0, 0};

בייט keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};

בתים k = 0;

 

הגדרת ביטול () {

pinMode (ina, INPUT_PULLUP); // 3 כניסות המחוברות לכפתורים

pinMode (inb, INPUT_PULLUP);

pinMode (inc, INPUT_PULLUP);

pinMode (ledPin, OUTPUT); // LED מובנה בסיכה ה -13

pinMode (7, פלט);

pinMode (11, פלט);

digitalWrite (7, נמוך); // להחליף את האדמה

digitalWrite (11, נמוך);

זמן = מילי (); // צריך לספור זמן

}

 

void blinktwice () {// LED מהבהב כפול

digitalWrite (ledPin, HIGH);

עיכוב (100);

digitalWrite (ledPin, LOW);

עיכוב (100);

digitalWrite (ledPin, HIGH);

עיכוב (100);

digitalWrite (ledPin, LOW);

עיכוב (200);

}

 

לולאת חלל () {

אם (k == 0) {

blinktwice (); // בקש קוד

}

אם (k == 8) {

digitalWrite (ledPin, HIGH);

עיכוב (3000);

k הוא 0;

}

a = digitalRead (אינה); // לקרוא רמות אות מכפתורים - לחוץ / לא לחוץ

b = digitalRead (inb);

c = digitalRead (inc);

עיכוב (100); // הבא אם - הגנה מפני פוזיטיביות כוזבות, אינך יכול להשתמש

אם ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {

אם (a == keya [k]) {

אם (b == keyb [k]) {

אם (c == keyc [k]) {

 

k ++;

}

}

}

}

אם (k == 1) {

אם (d == 0) {

זמן = מילי ();

d ++;

}

}

temp = מיליס ();

temp = temp - זמן;

אם (temp> 10000) {

k הוא 0;

d הוא 0;

זמן = מילי ();

}

}


כדי להימנע משאלות מיותרות לגבי הקוד, יש להבהיר כמה נקודות. פונקציית ההגדרה משמשת להקצאת יציאות. הפונקציה הבאה היא Input_Pullup, הנחוצה כדי להגדיל את מתח הסיכה ב -5 V. זה נעשה באמצעות נגדי. בשל כך, לא יתקיימו מעגלים קצרים שונים. לנוחות רבה יותר, מומלץ להשתמש בפונקציה blinktwice. באופן כללי, בעת יצירת תוכניות שונות, אתה צריך לנסות פונקציות אחרות.

לאחר הקצאת הפונקציות נקרא האות מהיציאות. אם נלחץ על הכפתור, הוא יצוין על ידי המספר 1, ואם לא - 2. לאחר מכן, ניתוח כל הערכים. לדוגמה, היה שילוב כזה כמו 0,1,1. משמעות הדבר היא לחיצה על המקש הראשון ושני האחרים אינם. אם כל הערכים נכונים, אז גם מצב 8 נכון. עדות לכך היא על ידי נורית LED מוארת בלוח הקדמי. בשלב הבא עליכם להזין קוד ספציפי שישמש לפתיחת הדלת.

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

 

(3 הצבעות)
טעינה...

הוסף תגובה