מנעול שילוב Arduino - סכמה

click fraud protection

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; byte a = 0; byte b = 0; byte c = 0; byte d = 0; unsigned long time = 0; // אל תשכח את כל מה ש-millis () לוקח על טמפ' ארוכה ללא סימן = 0; // לאחסן בתים ארוך ללא סימן keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // קודים תקין byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0}; byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0}; byte k = 0; void setup () {pinMode (ina, INPUT_PULLUP); // 3 כניסות מחוברות לכפתורים pinMode (inb, INPUT_PULLUP); pinMode (inc, INPUT_PULLUP); pinMode (ledPin, OUTPUT); // LED מובנה בפין 13 pinMode (7, OUTPUT); pinMode (11, OUTPUT); digitalWrite (7, LOW); // להחליף את digitalWrite הקרקע (11, LOW); זמן = מיליס (); // צורך לספור את הזמן} void blinktwice () {// הבהוב כפול של LED digitalWrite (ledPin, HIGH); עיכוב (100); digitalWrite (ledPin, LOW); עיכוב (100); digitalWrite (ledPin, HIGH); עיכוב (100); digitalWrite (ledPin, LOW); עיכוב (200); } לולאה void () {if (k == 0) {blinktwice (); // הנחיה להזין קוד} if (k == 8) {digitalWrite (ledPin, HIGH); עיכוב (3000); k = 0; } a = digitalRead (ina); // רמות האות נקראות מכפתורים - לחוץ / לא לחוץ b = digitalRead (inb); c = digitalRead (inc); עיכוב (100); // הבא if - הגנה מפני תוצאות חיוביות שגויות, אינך צריך להשתמש ב-((digitalRead (ina) == א) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {if (a == keya [k]) {if (b == keyb [k]) {if (c = = keyc [k]) {k ++; }}}} if (k == 1) {if (d == 0) {זמן = מיליס (); d ++; }} טמפ' = מיליס (); temp = temp - זמן; if (temp> 10000) {k = 0; d = 0; זמן = מיליס (); } } 


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

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

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

כמו(0)אני לא אוהב(0)

instagram viewer