ความปลอดภัยเป็นเรื่องสำคัญในชีวิตประจำวันของเราและการล็อคดิจิตอลได้กลายเป็นส่วนสำคัญของระบบรักษาความปลอดภัยเหล่านี้ มีเทคโนโลยีหลายประเภทที่พร้อมให้ความปลอดภัยแก่สถานที่ของเราเช่นระบบรักษาความปลอดภัยแบบอิง PIR , ระบบรักษาความปลอดภัยด้วยRFID , สัญญาณเตือนความปลอดภัยเลเซอร์ , ระบบไบโอเมทริกซ์เป็นต้นแม้กระทั่งตอนนี้ยังมีระบบล็อคแบบดิจิตอล ความจำเป็นมากขึ้นเพื่อให้ปุ่มที่แตกต่างกันเพียงหนึ่งมาร์ทโฟนสามารถทำงานได้ทุกล็อคแนวคิดนี้จะขึ้นอยู่กับอินเทอร์เน็ตของสิ่ง 

ในโครงการนี้เราได้อธิบายการล็อครหัสอิเล็กทรอนิกส์อย่างง่าย ๆโดยใช้ 8051 Microcontorllerซึ่งสามารถปลดล็อคได้ด้วยรหัสที่กำหนดไว้ล่วงหน้าเท่านั้นหากเราใส่รหัสผิดระบบจะเตือนด้วยเสียงไซเรน เราได้สร้างDigital lock โดยใช้ Arduinoแล้ว

คำอธิบายการทำงาน:

ระบบนี้ส่วนใหญ่ประกอบด้วยไมโครคอนโทรลเลอร์AT89S52โมดูลปุ่มกดออดและจอแอลซีดี At89s52 ไมโครคอนโทรลเลอร์ควบคุมกระบวนการทั้งหมดเช่นการใช้โมดูลรหัสผ่านแบบแป้นพิมพ์การเปรียบเทียบรหัสผ่านรหัสผ่านที่กำหนดไว้ล่วงหน้ารหัสผ่านการขับรถและส่งสถานะไปยังจอแสดงผล LCD ปุ่มกดใช้สำหรับใส่รหัสผ่านลงในไมโครคอนโทรลเลอร์ Buzzer ใช้สำหรับระบุรหัสผ่านที่ไม่ถูกต้องและใช้สำหรับแสดงสถานะหรือข้อความบน LCD Buzzer มีไดรเวอร์ inbuilt โดยใช้ทรานซิสเตอร์ NPN
รหัสล็อคอิเล็กทรอนิกส์โดยใช้แผนภาพบล็อก 8051
ส่วนประกอบ:
  • 8051 ไมโครคอนโทรลเลอร์ (AT89S52)
  • โมดูลปุ่มกด 4X4
  • ออด
  • จอแอลซีดี 16x2
  • ตัวต้านทาน (1k, 10k)
  • ตัวต้านทานแบบดึงขึ้น (10K)
  • ตัวเก็บประจุ (10uF)
  • ไฟ LED สีแดง
  • บอร์ดขนมปัง
  • IC 7805
  • 11.0592 MHz Crystal
  • พาวเวอร์ซัพพลาย
  • สายเชื่อมต่อ

การป้อนข้อมูลจากเมทริกซ์ปุ่มกด 4X4 โดยใช้เทคนิคการมัลติเพล็กซ์:
ในวงจรนี้เราได้ใช้เทคนิคมัลติเพล็กซิ่งในการเชื่อมต่อปุ่มกดกับไมโครคอนโทรลเลอร์ 8051 เพื่อป้อนรหัสผ่านในระบบ ที่นี่เราใช้ปุ่มกดขนาด 4x4 ซึ่งมี 16 ปุ่ม ถ้าเราต้องการใช้ 16 ปุ่มเราจำเป็นต้องใช้ 16 พินสำหรับการเชื่อมต่อกับ 89s52 แต่ในเทคนิคมัลติเพล็กซิ่งเราจำเป็นต้องใช้เพียง 8 พินในการเชื่อมต่อ 16 ปุ่ม เพื่อให้เป็นวิธีที่ชาญฉลาดในการเชื่อมต่อโมดูลปุ่มกด
ปุ่มกดเมทริกซ์ 4X4
เทคนิคการมัลติเพล็กซ์เป็นวิธีที่มีประสิทธิภาพในการลดจำนวนพินที่ใช้กับไมโครคอนโทรลเลอร์สำหรับการป้อนข้อมูลหรือรหัสผ่าน โดยทั่วไปเทคนิคนี้ถูกนำมาใช้ในสองวิธี - หนึ่งคือการสแกนแถวและอีกหนึ่งคือการสแกนคอลัมน์
 ที่นี่เราจะอธิบายการสแกนแถว:
ก่อนอื่นเราต้องกำหนด 8 pin สำหรับโมดูลปุ่มกด หมุด 4 ตัวแรกเป็นคอลัมน์และหมุด 4 อันสุดท้ายเป็นแถว
โครงสร้างภายใน 4X4 Matrix Keypad ไดอะแกรมบล็อค 4X4 Matrix Keypad Block
สำหรับการสแกนแถวเราจำเป็นต้องให้ข้อมูลหรือสัญญาณไปยังพินคอลัมน์และอ่านข้อมูลหรือสัญญาณจากพินแถว ตอนนี้สมมติว่าเราให้ข้อมูลด้านล่างกับพินคอลัมน์:
C1 = 0; 
C2 = 1; 
C3 = 1; 
C4 = 1;
และเราอ่านข้อมูลนี้ที่หมุดแถว (โดยค่าเริ่มต้นแถวหมุดคือ HIGH เนื่องจากตัวต้านทานแบบดึงขึ้น)
หากผู้ใช้กดหมายเลขคีย์ '1' ดังนั้น R1 จะเปลี่ยนเป็น HIGH เป็น LOW หมายถึง R1 = 0; และผู้ควบคุมเข้าใจว่าผู้ใช้กดปุ่ม '1' และจะพิมพ์ '1' บน LCD และเก็บ '1' ในอาร์เรย์ ดังนั้นการเปลี่ยนแปลง HIGH to LOW ที่ R1 จึงเป็นสิ่งสำคัญที่ผู้ควบคุมเข้าใจว่ามีการกดคีย์บางตัวที่ตรงกับคอลัมน์ 1
ตอนนี้หากผู้ใช้กดหมายเลขคีย์ '2' ดังนั้น R1 จะยังคงอยู่ที่ HIGH เนื่องจาก C1 และ R1 ทั้งคู่อยู่ที่ HIGH ดังนั้นจะไม่มีการเปลี่ยนแปลงหมายความว่าไมโครคอนโทรลเลอร์เข้าใจว่าไม่มีสิ่งใดถูกกดลงในคอลัมน์ที่หนึ่ง และครูใหญ่คนนี้ก็เช่นกันสำหรับพินอื่นทั้งหมด ดังนั้นในตัวควบคุมขั้นตอนนี้จะรอคีย์ในคอลัมน์เดียวเท่านั้น: '1', '4', '7' และ '*'
ตอนนี้ถ้าเราต้องการติดตามคีย์ในคอลัมน์อื่น ๆ (เช่นในคอลัมน์ 2) จากนั้นเราต้องเปลี่ยนข้อมูลเป็นพินคอลัมน์:
C1 = 1; 
C2 = 0; 
C3 = 1; 
C4 = 1;
ตัวควบคุมเวลานี้รอคีย์ในคอลัมน์ที่สองเท่านั้น: '2', '5', '8'and' 0 'เนื่องจากการเปลี่ยนแปลง (สูงถึงต่ำ) จะเกิดขึ้นเฉพาะเมื่อมีการกดปุ่มสองคอลัมน์ หากเรากดปุ่มใด ๆ ใน col 1, 3 หรือ 4 จะไม่มีการเปลี่ยนแปลงเกิดขึ้นเนื่องจากคอลัมน์เหล่านี้อยู่ที่ HIGH และแถวอยู่ที่ HIGH
ดังนั้นคีย์เดียวกันในคอลัมน์ C3 และ C4 จึงสามารถติดตามได้ด้วยการทำให้เป็น 0 ในแต่ละครั้ง ตรวจสอบที่นี่คำอธิบายรายละเอียด: ปุ่มกดเชื่อมต่อกับ 8051 โปรดอ่านส่วนของรหัสด้านล่างเพื่อทำความเข้าใจกับตรรกะอย่างถูกต้อง
                                                                          

คำอธิบายวงจร:

แผนภาพวงจรสำหรับล็อคดิจิตอลที่ใช้ 8051ได้แสดงไว้ด้านล่างและสามารถเข้าใจได้ง่าย หมุดคอลัมน์ของโมดูลปุ่มกดเชื่อมต่อโดยตรงกับพิน P0.0, P0.1, P0.2, P0.3 และพินแถวเชื่อมต่อกับ P0.4, P0.5, P0.6, P0.6, P0.7 ของพอร์ตของไมโครคอนโทรลเลอร์ 89s52 0 . 16x2 LCD เชื่อมต่อกับไมโครคอนโทรลเลอร์ 89s52 ในโหมด 4 บิต หมุดควบคุม RS, RW และ En เชื่อมต่อโดยตรงกับขา P1.0, GND และ P1.2 และ data pin D4-D7 เชื่อมต่อกับพิน P1.4, P1.5, P1.6 และ P1.7 จาก 89s52 และหนึ่งเสียงสัญญาณเชื่อมต่อที่พิน P2.6 ผ่านตัวต้านทาน
 รหัสอิเล็กทรอนิกส์ล็อคใช้วงจร 8051

 

คำอธิบายโปรแกรม:

เราได้ใช้รหัสผ่านที่กำหนดไว้ล่วงหน้าในโปรแกรมรหัสผ่านนี้สามารถกำหนดโดยผู้ใช้ในรหัสด้านล่าง เมื่อผู้ใช้ป้อนรหัสผ่านเข้าสู่ระบบ,จากนั้นระบบจะเปรียบเทียบรหัสผ่านของผู้ใช้กับรหัสผ่านที่เก็บไว้หรือรหัสที่กำหนดไว้ล่วงหน้าใน Code of Program หากการแข่งขันเกิดขึ้น LCD จะแสดง“ Access Grated” และหากรหัสผ่านไม่ตรงกัน LCD จะแสดง“ Access Denied” และเสียงสัญญาณเตือนจะดังขึ้นอย่างต่อเนื่องเป็นระยะเวลาหนึ่ง ที่นี่เราใช้ห้องสมุด string.h โดยใช้ไลบรารีนี้เราสามารถเปรียบเทียบหรือจับคู่สองสตริงโดยใช้ฟังก์ชัน“ strncmp”

ในโปรแกรมก่อนอื่นเรามีไฟล์ส่วนหัวและกำหนดตัวแปรและอินพุตและเอาต์พุตพินสำหรับปุ่มกดและ LCD
#include <reg51.h>
#include <สตริง>
#define lcdport P1

sbit col1 = P0 ^ 0;
sbit col2 = P0 ^ 1;
sbit col3 = P0 ^ 2;
sbit col4 = P0 ^ 3;
sbit row1 = P0 ^ 4;
sbit row2 = P0 ^ 5;
sbit row3 = P0 ^ 6;
sbit row4 = P0 ^ 7;

sbit rs = P1 ^ 0;
sbit en = P1 ^ 2;
sbit buzzer = P2 ^ 6;
มีการสร้างฟังก์ชั่นการสร้างความล่าช้า 1 วินาทีพร้อมกับฟังก์ชั่น LCD บางอย่างเช่นการเริ่มต้น LCD, การพิมพ์สตริง, สำหรับคำสั่ง ฯลฯ คุณสามารถค้นหาได้ใน Code ตรวจสอบบทความนี้สำหรับการเชื่อมต่อ LCD กับ 8051และฟังก์ชั่น
หลังจากนี้ในโปรแกรมหลักเราได้เตรียมข้อมูลเบื้องต้นของ LCD แล้วเราอ่านอินพุตจาก Keypad โดยใช้ฟังก์ชั่นแผงปุ่มกด () และเก็บคีย์อินพุตลงในอาเรย์แล้วเปรียบเทียบกับข้อมูลอาเรย์ที่กำหนดไว้ล่วงหน้าโดยใช้
โมฆะหลัก ()
{
    กริ่ง = 1;
    lcd_init ();
    lcdstring ("รหัสอิเล็กทรอนิกส์");
    lcdcmd (0xc0);
    lcdstring ("ล็อคระบบ");
    ล่าช้า (400);
    lcdcmd (1); 
    lcdstring ("Circuit Digest");
    ล่าช้า (400);
    ในขณะที่ (1)
    {
            i = 0;
            ปุ่มกด ();
            ถ้า (strncmp (ผ่าน "4201" 4) == 0)
หากรหัสผ่านที่ป้อนถูกจับคู่แล้ว accept () ฟังก์ชั่นจะถูกเรียกว่า:
เป็นโมฆะยอมรับ ()
{
     lcdcmd (1);
     lcdstring ( "ยินดีต้อนรับ");
     lcdcmd (192);
     lcdstring ("ยอมรับรหัสผ่าน");
     ล่าช้า (200);
}
และหากรหัสผ่านไม่ถูกต้องจะมีการเรียกใช้ฟังก์ชัน () ผิด:
โมฆะผิด ()
{
    กริ่ง = 0;
    lcdcmd (1);
     lcdstring ("รหัสผ่านไม่ถูกต้อง");
    lcdcmd (192);
    lcdstring ("PLZ ลองอีกครั้ง");
    ล่าช้า (200);
    กริ่ง = 1;
}
ตรวจสอบฟังก์ชั่นปุ่มกดด้านล่างในรหัสที่อ่านโมดูลปุ่มกดแบบฟอร์มป้อนข้อมูล
รหัส
#include <reg51.h> 
#include < 
string.h #define lcdport P1
sbit col1 = P0 ^ 0; 
sbit col2 = P0 ^ 1; 
sbit col3 = P0 ^ 2; 
sbit col4 = P0 ^ 3; 
sbit row1 = P0 ^ 4; 
sbit row2 = P0 ^ 5; 
sbit row3 = P0 ^ 6; 
sbit row4 = P0 ^ 7;
sbit rs = P1 ^ 0; 
sbit en = P1 ^ 2; 
sbit buzzer = P2 ^ 6;
ถ่านผ่าน [4], i = 0;
void delay (int itime) 

    int i, j; 
    สำหรับ (i = 0; i <itime; i ++) 
    สำหรับ (j = 0; j <1275; j ++); 
}
เป็นโมฆะ daten () 

    rs = 1; 
    en = 1; 
    ล่าช้า (5) 
    en = 0; 
}
โมฆะ lcddata (ch ถ่านที่ไม่ได้ลงชื่อ) 

    lcdport = ch & 0xf0; 
    Daten (); 
    lcdport = (ch << 4) & 0xf0; 
    Daten (); 
}
เป็นโมฆะ cmden (เป็นโมฆะ) 

    rs = 0; 
    en = 1; 
    ล่าช้า (5) 
    en = 0; 
}
โมฆะ lcdcmd (ch ถ่านที่ไม่ได้ลงชื่อ) 

    lcdport = ch & 0xf0; 
    cmden (); 
    lcdport = (ch << 4) & 0xf0; 
    cmden (); 
}
void lcdstring (char * str) 

    ในขณะที่ (* str) 
    { 
        lcddata (* str); 
        STR ++; 
    } 
}
โมฆะ lcd_init (เป็นโมฆะ) 

    lcdcmd (0x02); 
    lcdcmd (0x28); 
    lcdcmd (0x0e); 
    lcdcmd (0x01); 
}
ปุ่มกดเป็นโมฆะ () 

        เคอร์เซอร์ int = 192, ตั้งค่า = 0; 
    lcdcmd (1); 
    lcdstring ("ป้อนรหัสผ่าน Ur"); 
    lcdcmd (0xc0); 
    i = 0; 
    ในขณะที่ (i <4) 
    { 
    flag = เคอร์เซอร์; 
     col1 = 0; 
     col2 = col3 = col4 = 1; 
     if (! row1) 
     { 
        lcddata ('1'); 
        ผ่าน [ผม ++] = '1'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! ROW1); 
          } 
     
      else if (! row2) 
     { 
        lcddata ('4'); 
        ผ่าน [ผม ++] = '4'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! ROW2); 
        } 
     
      อื่น ๆ ถ้า (! row3) 
     {
        lcddata ( '7'); 
        ผ่าน [ผม ++] = '7'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! row3); 
        } 
     
      ถ้า if (! row4) 
     { 
        lcddata ('*'); 
        ผ่าน [ผม ++] = '*'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! row4); 
        } 
     
     col2 = 0; 
     col1 = col3 = col4 = 1; 
     if (! row1) 
     { 
        lcddata ('2'); 
        ผ่าน [ผม ++] = '2' 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! ROW1); 
        } 
     
      else if (! row2) 
     { 
        lcddata ('5'); 
        ผ่าน [ผม ++] = '5'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! ROW2);

     
      อื่นถ้า (! row3) 
     { 
        lcddata ('8'); 
        ผ่าน [ผม ++] = '8'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! row3); 
        } 
     
      else if (! row4) 
     { 
        lcddata ('0'); 
        ผ่าน [ผม ++] = '0'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! row4); 
        } 
     
     col3 = 0; 
     col1 = col2 = col4 = 1; 
     if (! row1) 
     { 
        lcddata ('3'); 
        ผ่าน [ผม ++] = '3'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! ROW1); 
        } 
     
      else if (! row2) 
     { 
        lcddata ('6'); 
        ผ่าน [ผม ++] = '6';

        ในขณะที่ (! ROW2); 
        } 
     
      else if (! row3) 
     { 
        lcddata ('9'); 
        ผ่าน [ผม ++] = '9'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! row3); 
        } 
     
      ถ้า if (! row4) 
     { 
        lcddata ('#'); 
        ผ่าน [ผม ++] = '#'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! row4); 
        } 
     
      col4 = 0; 
     col1 = col3 = col2 = 1; 
     if (! row1) 
     { 
        lcddata ('A'); 
        ผ่าน [ผม ++] = 'A'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! ROW1); 
        } 
     
      else if (! row2) 
     { 
        lcddata ('B');
        ผ่าน [ผม ++] = 'B'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! ROW2); 
        } 
     
      else if (! row3) 
     { 
        lcddata ('C'); 
        ผ่าน [ผม ++] = 'C'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! row3); 
        } 
     
      else if (! row4) 
     { 
        lcddata ('D'); 
        ผ่าน [ผม ++] = 'D'; 
        เคอร์เซอร์ ++; 
        ในขณะที่ (! row4); 
          } 
     if (i> 0) 
     { 
         if (flag! = cursor) 
         ดีเลย์ (100); 
         lcdcmd (เคอร์เซอร์-1); 
         lcddata ( '*'); 
     }  
 }       
}
เป็นโมฆะ accept () 

     lcdcmd (1); 
     lcdstring ( "ยินดีต้อนรับ"); 
     lcdcmd (192); 
     lcdstring ("ยอมรับรหัสผ่าน"); 
     ล่าช้า (200); 
}
เป็นโมฆะไม่ถูกต้อง () 

    buzzer = 0; 
    lcdcmd (1); 
     lcdstring ("รหัสผ่านไม่ถูกต้อง"); 
    lcdcmd (192); 
    lcdstring ("PLZ ลองอีกครั้ง"); 
    ล่าช้า (200); 
    กริ่ง = 1; 
}
ถือเป็นโมฆะ main () 

    buzzer = 1; 
    lcd_init (); 
    lcdstring ("รหัสอิเล็กทรอนิกส์"); 
    lcdcmd (0xc0); 
    lcdstring ("ล็อคระบบ"); 
    ล่าช้า (400); 
    lcdcmd (1); 
    lcdstring ("Circuit Digest"); 
    ล่าช้า (400); 
    ในขณะที่ (1) 
    { 
            i = 0; 
            ปุ่มกด (); 
            if (strncmp (pass, "4201", 4) == 0) 
            { 
            accept (); 
            lcdcmd (1); 
            lcdstring ("Access Granted"); 
            ล่าช้า (300); 
                } 
        
        else  
        { 
           lcdcmd (1);
           lcdstring ("ปฏิเสธการเข้าถึง"); 
           ไม่ถูกต้อง(); 
           ล่าช้า (300); 
        } 
    } 
}