אבטחה היא עניין מרכזי בחיי היום יום שלנו, ומנעולים דיגיטליים הפכו לחלק חשוב ממערכות האבטחה הללו. נעילת קוד דיגיטלית אחת כזו מחקה בפרויקט זה באמצעות לוח ארדואינו ומקלדת מטריצה.
רכיבים
- ארדואינו
- מודול לוח המקשים
- זַמזָם
- LCD בגודל 16x2
- טרנזיסטור BC547
- נגד (1k)
- לוח לחם
- כּוֹחַ
- חוטי חיבור
במעגל זה השתמשנו בטכניקת ריבוב כדי לממשק מקשים להזנת הסיסמה במערכת. כאן אנו משתמשים במקלדת 4x4 המכילה 16 מקשים. אם אנחנו רוצים להשתמש ב- 16 מקשים אז אנחנו צריכים 16 פינים לחיבור לארדואינו אבל בטכניקת ריבוב אנחנו צריכים להשתמש רק ב 8 פינים לממשק 16 מקשים. כך שזו דרך חכמה לממשק מודול לוח מקשים.
טכניקת ריבוב: טכניקת ריבוב היא דרך יעילה מאוד להפחית את מספר הפינים המשמשים את המיקרו-בקר לצורך קלט או סיסמה או מספרים. בעיקרון משתמשים בטכניקה זו בשתי דרכים - האחת היא סריקת שורה והשנייה סריקת המעי הגס. אך בפרויקט מבוסס ארדואינו זה השתמשנו בספריית מקשים ולכן איננו צריכים להכין קוד מרובה-ריבועים עבור מערכת זו. עלינו להשתמש בספריית לוח המקשים רק בכדי לספק קלט.
תיאור המעגל
המעגל של פרויקט זה הוא פשוט מאוד המכיל Arduino, מודול לוח מקשים, זמזם ו- LCD. Arduino שולט בתהליכים המלאים כמו לקיחת מודול לוח מקשים בטופס סיסמה, השוואת סיסמאות, נהיגת זמזם ושליחת מצב לתצוגת LCD. לוח המקשים משמש לצורך לקיחת סיסמה. זמזם משמש לאינדיקציות ו- LCD משמש להצגת סטטוס או הודעות עליו. זמזם מונע באמצעות טרנזיסטור NPN.
סיכות העמודות של מודול המקשים מחוברות ישירות לסיכה 4, 5, 6, 7 וסיכות שורות מחוברות ל -3, 2, 1, 0 של arduino uno. LCD 16x2 מחובר לארדואינו במצב 4 סיביות. סיכת הבקרה RS, RW ו- En מחוברים ישירות לסיכה הארדואינו 13, GND ו- 12. וסיכת הנתונים D4-D7 מחוברת לסיכות 11, 10, 9 ו -8 של ארדואינו. וזמזם אחד מחובר בסיכה 14 (A1) של ארדואינו דרך טרנזיסטור BC547 NPN.
עובד
השתמשנו ב- EEPROM המובנה של Arduino בכדי לשמור את הסיסמה, לכן כאשר אנו מפעילים תוכנית זו בפעם הראשונה קראו נתוני אשפה מ- EEPROM של Arduino המובנה והשוו אותה עם סיסמת קלט ונתנו הודעה על LCD שהיא גישה נדחתה מכיוון שהסיסמה אינה תואמת. לפתרון בעיה זו עלינו להגדיר סיסמת ברירת מחדל בפעם הראשונה באמצעות התכנות המופיע להלן:
עבור (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("הזן מפתח סיסמה של Ur:"); lcd.setCursor (0,1); עבור (int j = 0; j <4; j ++) לעבור = EEPROM.read (j);
זה יגדיר את הסיסמה "1234" ל- EEPROM של Arduino.
לאחר הפעלתו בפעם הראשונה עלינו להסיר זאת מהתוכנית ושוב לכתוב את הקוד לארדואינו ולהפעיל. כעת המערכת שלך תפעל בסדר. ובפעם השנייה שלך הסיסמה המשמשת כעת היא "1234". עכשיו אתה יכול לשנות את זה על ידי לחיצה על כפתור # ואז להזין את הסיסמה הנוכחית שלך ואז להזין את הסיסמה החדשה שלך.
כאשר תזין את הסיסמה שלך, המערכת תשווה את הסיסמה שהזנת עם אותה סיסמה המאוחסנת ב- EEPROM של arduino. אם התאמה התרחשה אז LCD יציג "הוענקה גישה" ואם הסיסמה שגויה אז LCD "גישה נדחתה" וזמזם ברצף צפצוף למשך זמן מה. זמזם גם מצפצף פעם אחת בכל פעם שהמשתמש ילחץ על כפתור כלשהו בלוח המקשים.
תיאור תכנות
בקוד השתמשנו בספריית לוח המקשים לצורך ממשק לוח המקשים לארדואינו.
#לִכלוֹל
שורות בתים קונסט = 4; // ארבע שורות const byte COLS = 4; // ארבע עמודות char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; בתים rowPins = {3, 2, 1, 0}; // התחבר לפסי פינים של השורה של בית המקשים colPins = {4, 5, 6, 7}; // התחבר לתפיסות העמודה של לוח המקשים // אתחל מופע של המחלקה NewKeypad Keyboard KeyKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
כללנו ספריית LCD לממשקי LCD ולממשק EEPROM כללנו את ספריית EEPROM.h, ואז אתחל סיכות משתנות ומוגדרות לרכיבים.
#define buzzer 15 LiquidCrystal lcd (13,12,11,10,9,8); סיסמת char עובר צ'אר, עובר 1; int i = 0; char customKey = 0;
ואז אתחלנו את ה- LCD ונתנו כיוון לסיכות בפונקציית ההתקנה
הגדרת חלל () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (זמזם, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); lcd.print ("אלקטרוני"); lcd.setCursor (0,1); lcd.print ("נעילת מקשים"); עיכוב (2000); lcd.clear (); lcd.print ("הזן מפתח סיסמה של Ur:"); lcd.setCursor (0,1);
לאחר מכן אנו קוראים לוח מקשים בפונקציית לולאה
customKey = customKeypad.getKey (); אם (customKey == '#') שינוי (); אם (customKey) {password = customKey; lcd.print (customKey); צפצוף (); }
ואז השווה סיסמה עם שמירת סיסמה בשיטת השוואת מחרוזות.
אם (i == 4) {עיכוב (200); עבור (int j = 0; j <4; j ++) לעבור = EEPROM.read (j); אם (! (strncmp (סיסמה, לעבור, 4))) {digitalWrite (led, HIGH); צפצוף (); lcd.clear (); lcd.print ("מפתח סיסמה התקבל"); עיכוב (2000); lcd.setCursor (0,1); lcd.print ("#. שנה סיסמה"); עיכוב (2000); lcd.clear (); lcd.print ("הזן מפתח סיסמה:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, LOW); }
זוהי פונקציית שינוי סיסמא ופונקציית צפצוף זמזם
שינוי ריק () {int j = 0; lcd.clear (); lcd.print ("UK Passk הנוכחי"); lcd.setCursor (0,1); בעוד (j <4) {char key = customKeypad.getKey (); אם (מפתח) {pass1 = מפתח; lcd.print (מפתח); בטל צפצוף () {digitalWrite (זמזם, HIGH); עיכוב (20); digitalWrite (זמזם, LOW); }