מעגל נעילת אבטחת סיסמאות באמצעות לוח מקשים 4 × 4 וארדואינו

נסה את הכלי שלנו לביטול בעיות





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

חומרה לפרויקט זה

אנו נשתמש בלוח המקשים 4x4, המורכב מערכים 0 עד 9 עשרוניים, שני תווים מיוחדים '#' ו- '*' ואלפבית A עד D. השילוב של תווים אלה יכול לשמש כסיסמה.



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

אם אינך מכיר את לוח המקשים 4x4, עיין במאמר הקודם שלי, שדן בהרחבה יסודות מקשי המטריצה ​​4x4



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

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

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

איך זה עובד

הערה: יש לחבר נגד מגביל זרם 4.7K לבסיס הטרנזיסטור, שאינו מוצג בתרשים.

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

תרשים מעגלים

מעגל נעילת אבטחת סיסמאות Arduino באמצעות לוח מקשים 4x4

להלן שני האיורים כיצד לממשק מקלדת וארדואינו:

תוצאות בדיקת נעילת אבטחת סיסמאות של Arduino

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

• הזן את הסיסמה שהזנת בתוכנית לפני הידורתה.

• תוך כדי לחיצה על המקשים, נורית LED ירוקה מהבהבת למשך עשירית שנייה, מה שמצביע על כך שהמשתמש לוחץ על מקש כלשהו.

לאחר שהזנת את הסיסמה בת 6 הספרות, לחץ על 'D' בלוח המקשים הפועל כ- 'Enter'. אם הסיסמה שלך נכונה, הממסר יופעל, נורית LED ירוקה נדלקת.

• כדי להשבית את הממסר, לחץ על 'C' בלוח המקשים. כאשר הדבר נעשה, נורית LED ירוקה נכבית והממסר מבוטל. אף מפתח אחר אינו יכול להשבית את הממסר.

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

• כאשר הממסר מבוטל לאחר ההפעלה המוצלחת, על מנת להפעיל את הממסר שוב, המשתמש צריך להזין את הסיסמה שוב וללחוץ על 'D'.

הנה מקרה מיוחד:

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

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

• המוטו של הרעיון שהוסבר לעיל הוא עיכוב מספר הניסיונות שביצע החוטף.

קוד תכנית:

//---------------------------------Program Developed by R.Girish--------------------------//
#include
const byte ROWS = 4
const byte COLS = 4
char pass[] = '123ABC' // 6 digit password only (no less or no more)
int OP=10
int green=12
int red=11
char key1
char key2
char key3
char key4
char key5
char key6
char dumpkey
char keyOK
char ok[]='D'
char offkey
char off[]='C'
int z
char keys[ROWS][COLS] =
{
{'D','#','0','*'},
{'C','9','8','7'},
{'B','6','5','4'},
{'A','3','2','1'}
}
byte rowPins[ROWS] = {6,7,8,9} //connect to the row pinouts of the keypad
byte colPins[COLS] = {2,3,4,5} //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS )
void setup()
{
Serial.begin(9600)
pinMode(OP,OUTPUT)
pinMode(green,OUTPUT)
pinMode(red,OUTPUT)
digitalWrite(OP,LOW)
}
void loop()
{
top:
Serial.println('')
Serial.println('[Press D = Enter]')
Serial.print('Enter the password: ')
key1=keypad.waitForKey()
if(key1 == pass[0])
{
digitalWrite(green,HIGH)
delay(100)
digitalWrite(green,LOW)
{
z=1
Serial.print('*')
goto A

}
}
אַחֵר
{
dump dump
}
ל:
key2 = keypad.waitForKey ()
אם (key2 == לעבור [1])
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
{
z = 2
Serial.print ('*')
הולך B
}
}
אַחֵר
{
dump dump
}
ב:
key3 = keypad.waitForKey ()
אם (key3 == לעבור [2])
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
{
z = 3
Serial.print ('*')
הולך ג
}
}
אַחֵר
{
dump dump
}
ג:
key4 = keypad.waitForKey ()
אם (key4 == לעבור [3])
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
{
z = 4
Serial.print ('*')
הולך D
}
}
אַחֵר
{
dump dump
}
D:
key5 = keypad.waitForKey ()
אם (key5 == לעבור [4])
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
{
z = 5
Serial.print ('*')
הולך E
}
}
אַחֵר
{
dump dump
}
IS:
key6 = keypad.waitForKey ()
אם (key6 == לעבור [5])
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
{
z = 6
Serial.print ('*')
הולך בסדר
}
}
אַחֵר
{
dump dump
}
בסדר:
keyOK = keypad.waitForKey ()
אם (keyOK == בסדר [0])
{
digitalWrite (OP, HIGH)
digitalWrite (ירוק, HIGH)
Serial.println ('')
Serial.println ('ממסר מופעל, לחץ על' C 'כדי לבטל את ההפעלה. N')
}
אַחֵר
{
Serial.println ('')
Serial.println ('לחץ על' D 'כדי להיכנס')
הולך בסדר
}
כבוי:
offkey = keypad.waitForKey ()
אם (offkey == off [0])
{
digitalWrite (OP, LOW)
digitalWrite (ירוק, LOW)
Serial.println ('ממסר מושבת.n')
הולך למעלה
}
אַחֵר
{
Serial.println ('לחץ על' C 'כדי לבטל את ההפעלה')
הולך כבוי
}
מזבלה:
אם (z == 0)
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
שגיאת הולך
}
אם (z == 1)
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
שגיאת הולך
}
אם (z == 2)
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
שגיאת הולך
}
אם (z == 3)
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
שגיאת הולך
}
אם (z == 4)
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
שגיאת הולך
}
אם (z == 5)
{
digitalWrite (ירוק, HIGH)
עיכוב (100)
digitalWrite (ירוק, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
שגיאת הולך
}
שְׁגִיאָה:
Serial.println ('')
Serial.print ('סיסמה שגויה, המתן 30 שניות'.)
digitalWrite (אדום, HIGH)
עיכוב (10000)
עיכוב (10000)
עיכוב (10000)
digitalWrite (אדום, LOW)
הולך למעלה
}
// --------------------------------- תוכנית שפותחה על ידי R.Girish --------- ----------------- //

פתק: להגדרת סיסמא: char pass [] = '123ABC' // סיסמה בת 6 ספרות בלבד (לא פחות או יותר)
שנה את '123ABC' באמצעות הסיסמה שלך, בתוך המרכאות.

וודא שהסיסמה שהוגדרה בתוכנית היא בת 6 ספרות בלבד, לא פחות או יותר אבל, בדיוק 6 ספרות. אחרת התוכנית לא תפעל כהלכה.

אם יש לך ספקות נוספים בנוגע למעגל נעילת האבטחה הסיסמתי, אנא אל תהסס לפרסם אותם באמצעות הערותיך




קודם: Sunrise Sunset Simulator LED Circuit הבא: מעגל בקר מנוע Bluetooth