امروزآذر ۱۵, ۱۴۰۲

قفل در دیجیتالی رمز دار با استفاده از ۸۰۵۱ ؛سیستمی ساده و کارا برای درب خانه شما

مدار قفل دیجیتالی در یک قفل رمز دار بر اساس کد الکترونیکی است بر مبنای میکروکنترلر ۸۰۵۱ ، یک صفحه کلید و یک رله ۱۲ ولت DC طراحی شده است. در این متن، یک قفل دیجیتالی در طراحی شده که با استفاده از میکروکنترلر ۸۰۵۱ می تواند به عنوان یک سیستم امنیتی الکترونیکی استفاده شده و از آن برای محدود کردن دسترسی یک مکان یا اتاق برای افراد مشخص توسط رمز عبور بهره گرفته شود. به همین دلیل، این پروژه قفل الکترونیکی را می توان به اسم های مختلفی مانند قفل ترکیبی دیجیتالی با استفاده از ۸۰۵۱، قفل رمزی امنیتی دیجیتالی، سیستم امنیتی مرزی با استفاده از ۸۰۵۱ یا قفل رمز الکترونیکی یا دیجیتالی نامگذاری کرد. اگرچه این نوع سیستم های امنیتی به نامهای مختلفی خوانده می شوند اما منهور از آنها یک سیستم امنیتی رمزدار با استفاده از میکروکنترلرهایی چون ۸۰۵۱، AVR ، PIC یا آردوینو است که ویژگی های اضافی مانند امکان قفل یا باز کردن اتوماتیک در، آلارم صوتی، ارسال هشدار با استفاده از GSM و به صورت SMS و …

خلاصه ای از پروژه قفل در دیجیتالی

این پروژه یک سیستم قفل الکترونیکی ساده است که یک رمز ۵ رقمی از قبل درون برنامه آن تنظیم شده است. سیستم ۵ رقم را از ورودی کاربر دریافت می کند و این ارقام را با رمز عبور از قبل ذخیره شده مقایسه می کند و اگر این ارقام مشابه یکدیگر باشند، به کاربر اجازه دسترسی داده می شود (بوسیله باز کردن در که این کار توسط یک باز شدن چند ثانیه ای یک رله صورت می گیرد و پس از طی زمان مشخصی به صورت خودکار بسته می شود). اگر ارقام وارد شده توسط کاربر با رمز عبور تعیین شده همخوانی نداشته باشد، اجازه دسترسی داده نمی شود (در باز نمی شود و رله در حالت خاموش باقی می ماند).

اکنون به سراغ ساخت این قفل دیجیتالی در می رویم. دیاگرام مدار این پروژه در تصویر زیر نشان داده شده است که اجزای آن بر اساس همین تصویر به هم متصل می شوند.

تجهیزات مورد نیاز:

  • ۱ میکروکنترلر ۸۰۵۱-AT89S51
  • ۱ نمایشگر LCD به ابعاد ۲*۱۶
  • صفحه کلید ۴*۴
  • ۱ مقاومت شبکه ۱۰ کیلواهم
  • ۱ رله ۱۲ ولتی
  • ۱ ترانزیستور BC548
  • ۱ دیود ۱N4007
  • ۱ کلید فشاری
  • ۱ کریستال ۱۱٫۰۵۹ مگاهرتز
  • ۲ خازن ۳۳ پیکوفاراد
  • ۱ خازن ۰٫۱ میکروفاراد
  • ۱ خازن ۱۰ میکرو فاراد
  • ۱ مقاومت ۱۰ کیلواهم
  • ۱ مقاومت ۱۰۰ اهم
  • ۱ مقاومت ۸٫۲ کیلواهم
  • ۱ مقاومت ۴٫۷ کیلواهم
  • ۱ مقاومت ۳۳۰ اهم

شرح اتصالات مدار

اتصالات قفل دیجیتالی به شکلی که در تصویر شماتیک مدار نشان داده شده انجام می شود که شرح آن در ادامه بیان می شود.

  • اتصال صفحه کلید به میکروکنترلر: در این بخش از پروژه قفل در دیجیتالی، یک صفحه کلید ۴*۴ به پورت ۳ میکروکنترلر ۸۰۵۱ متصل شده است. پینهای ردیف صفحه کلید به ترتیب به پینهای P3.0 تا P3.3 متصل هستند و پینهای ستون صفحه کلید نیز به ترتیب به پینهای P3.4 تا P3.7 متصل شده اند. نحوه خواندن صفحه کلید ۴*۴ توسط ۸۰۵۱ را می توان با جستجو در اینترنت یا در این لینک مشاهده کرد.
  • اتصال ماژول LCD به میکروکنترلر: در این پروژه از نمایشگر LCD استفاده شده تا بتوان پیغام هایی برای نمایش وضعیت پروژه را بر روی آن مشاهده کرد. این ماژول در حالت ۸ بیتی ( استفاده از ۸ بیت دیتا) قرار گرفته که خطوط ۸ بیت دیتا به پورت ۰ در میکروکنترلر ۸۰۵۱ متصل شده اند. یک مقاومت Pull up خارجی توسط یک مقاومت ۱۰ کیلواهمی شبکه ( با ۸ پین) در پورت ۰ قرار گرفته است تا اتصال ۸ خط دیتای LCD از طریق آن انجام شود. پین های کنترلی LCD که RS، R/W و E هستند نیز به ترتیب به پینهای P2.7، P2.6 و P2.5 متصل شده اند. برای دریافت اطلاعات بیشتر در مورد چگونگی اتصال ماژول LCD به میکروکنترلر ۸۰۵۱ و همچنین آموزش اینکه چگونه می توان پیام های متنی را بر روی این نمایشگر نشان داد می توان از این لینک استفاده کرد.
  • اتصال کلید فشاری: از این کلید برای ریست کردن میکروکنترلر ۸۰۵۱ استفاده شده همچنین از یک کریستال خارجی برای تأمین کلاک مورد نیاز ۸۰۵۱ استفاده شده است.
  • رله: در پروژه قفل در دیجیتالی از یک رله ۱۲ ولتی SPDT استفاده شده که به پین P2.0 متصل است. همچنین یک ترانزیستور از نوع BC548 استفاده شده تا بتوان رله را با جریان مورد نیاز راه اندازی کند.

نحوه عملکرد پروژه

هدف پروژه قفل دیجیتالی این است که اجازه دسترسی به افرادی که ۵ رقم رمز عبور را به درستی وارد کنند بدهد و این اجازه به افرادی که رمز صحیح را وارد نکنند داده نخواهد شد. برای وارد کردن ۵ رقم یک صفحه کلید ۴*۴ به میکروکنترلر متصل شده و همچنین کنترل قفل سلونوئیدی در ( در تصویر دیاگرام مدار نشان نداده شده است) توسط یک رله ۱۲ ولتی انجام می شود. رمز عبور در برنامه میکروکنترلر ۸۰۵۱ ذخیره می شود ( حافظه برنامه). در نمونه کدی که در ادامه آورده شده است رمز عبور ۱۲۳۴۵۵ با برچسب PASSW در حافظه برنامه ذخیره شده است.

PASSW: DB 49D,50D,51D,52D,53D,0 // Decimal equivalent of 1,2,3,4,5 is stored in address label PASSW

زمانی که تغذیه مدار وصل می شود، سیستم به همراه روشن شدن پیغام “Password Based Security System” را بر روی LCD نمایش می دهد. زمانی که پروسه راه اندازی به صورت کامل انجام شد، سیستم درخواست می کند که ۵ رقم وارد شود و کاربر پس از نمایش پیام “Input 5 Digits” می تواند ۵ رقم را به صورت متوالی وارد کند. پس از وارد شدن ۵ رقم، سیستم شروع به بررسی رمز ورود می کند ( ارقام وارد شده را با رمز ذخیره شده مقایسه می کند). قبل از اینکه زیر روال مربوطه عملیات بررسی رمز عبور را آغاز کند ( زیر روال مقایسه با برچسب CHECK_PASSWORD)، یک پیغام وضعیتی به صورت “Cheking Password” بر روی نمایشگر LCD ظاهر می شود. زیر روال بررسی رمز عبور تمامی ارقام را تک به تک مقایسه می کند و اگر ۵ رقم وارد شده صحیح باشند ( یعنی هر کدام از رقمهای وارد شده با رمز عبور ذخیره شده یکی باشند) سیستم پردازش صدور اجازه دسترسی را را آغاز می کند و رله را روشن می کند (در برنامه به صورت دستور SETB P2.0 انجام شده است). در این صورت دو پیغام بر روی نمایشگر نشان داده می شود که یکی “Access Granted” و دیگری پیغام “Door Opens” است. پس از چند ثانیه با استفاده از دستور CLR P2.0 رله خاموش می شود که این کار در تکرار بعدی دستورات قسمت Main برنامه انجام می شود. در صورتی که ارقام وارد شده با رمز عبور یکی نباشند رله روشن نشده و پیغامهای “Wrong Password” و “Access Denied” بر روی نمایشگر LCD نشان داده می شوند.

کد برنامه سیستم امنیتی با رمز عبور:

RS EQU P2.7
RW EQU P2.6
E  EQU P2.5
SEL EQU 41H



ORG 000H 
CLR P2.0
MOV TMOD,#00100001B
MOV TH1,#253D
MOV SCON,#50H
SETB TR1
ACALL LCD_INIT
MOV DPTR,#TEXT1
ACALL LCD_OUT
ACALL LINE2
MOV DPTR,#TEXT2
ACALL LCD_OUT



MAIN:ACALL LCD_INIT
     MOV DPTR,#TEXT1
     ACALL LCD_OUT
     ACALL LINE2
     MOV DPTR,#TEXT2
     CLR P2.0
     ACALL LCD_OUT
     ACALL DELAY1
     ACALL DELAY1
     ACALL READ_KEYPRESS
     ACALL LINE1 
     MOV DPTR,#CHKMSG
     ACALL LCD_OUT
     ACALL DELAY1
     ACALL CHECK_PASSWORD      
     SJMP MAIN

LCD_INIT: MOV DPTR,#INIT_COMMANDS
          SETB SEL
          ACALL LCD_OUT
          CLR SEL
          RET      

LCD_OUT:  CLR A
           MOVC A,@A+DPTR
           JZ EXIT
           INC DPTR
           JB SEL,CMD
           ACALL DATA_WRITE
           SJMP LCD_OUT
CMD:      ACALL CMD_WRITE 
           SJMP LCD_OUT
EXIT:	   RET          

LINE2:MOV A,#0C0H 
    ACALL CMD_WRITE
    RET   
    
LINE1: MOV A,#80H    
ACALL CMD_WRITE
RET

CLRSCR: MOV A,#01H
ACALL CMD_WRITE
RET

CMD_WRITE: MOV P0,A
    CLR RS
    CLR RW
    SETB E
    CLR E
    ACALL DELAY
    RET

DATA_WRITE:MOV P0,A
    SETB RS
    CLR RW
    SETB E
    CLR E
    ACALL DELAY
    RET

DELAY: CLR E
    CLR RS
    SETB RW
    MOV P0,#0FFh
    SETB E
    MOV A,P0
    JB ACC.7,DELAY
    CLR E
    CLR RW
    RET
    
DELAY1:MOV R3,#46D
BACK:  MOV TH0,#00000000B   
       MOV TL0,#00000000B   
       SETB TR0             
HERE1: JNB TF0,HERE1         
       CLR TR0             
       CLR TF0             
       DJNZ R3,BACK
       RET
       
DELAY2: MOV R3,#250D
BACK2:   MOV TH0,#0FCH 
        MOV TL0,#018H 
        SETB TR0 
HERE2:  JNB TF0,HERE2 
        CLR TR0 
        CLR TF0 
        DJNZ R3,BACK2
        RET       


READ_KEYPRESS: ACALL CLRSCR
ACALL LINE1
MOV DPTR,#IPMSG
ACALL LCD_OUT
ACALL LINE2
MOV R0,#5D
MOV R1,#160D
ROTATE:ACALL KEY_SCAN
MOV @R1,A
ACALL DATA_WRITE
ACALL DELAY2
INC R1
DJNZ R0,ROTATE
RET



CHECK_PASSWORD:MOV R0,#5D
MOV R1,#160D
MOV DPTR,#PASSW 
RPT:CLR A
MOVC A,@A+DPTR
XRL A,@R1
JNZ FAIL
INC R1
INC DPTR
DJNZ R0,RPT
ACALL CLRSCR
ACALL LINE1
MOV DPTR,#TEXT_S1
ACALL LCD_OUT
ACALL LINE2
ACALL DELAY1
SETB P2.0
MOV DPTR,#TEXT_S2
ACALL LCD_OUT
ACALL DELAY1
SJMP GOBACK
FAIL:ACALL CLRSCR 
ACALL LINE1
MOV DPTR,#TEXT_F1
ACALL LCD_OUT
ACALL DELAY1
ACALL LINE2
MOV DPTR,#TEXT_F2
ACALL LCD_OUT
ACALL DELAY1
GOBACK:RET



KEY_SCAN:MOV P3,#11111111B 
CLR P3.0 
JB P3.4, NEXT1 
MOV A,#49D
RET

NEXT1:JB P3.5,NEXT2
MOV A,#50D

RET
NEXT2: JB P3.6,NEXT3
MOV A,#51D

RET
NEXT3: JB P3.7,NEXT4
MOV A,#65D

RET
NEXT4:SETB P3.0
CLR P3.1 
JB P3.4, NEXT5 
MOV A,#52D

RET
NEXT5:JB P3.5,NEXT6
MOV A,#53D

RET
NEXT6: JB P3.6,NEXT7
MOV A,#54D
RET
NEXT7: JB P3.7,NEXT8
MOV A,#66D

RET
NEXT8:SETB P3.1
CLR P3.2
JB P3.4, NEXT9 
MOV A,#55D

RET
NEXT9:JB P3.5,NEXT10
MOV A,#56D

RET
NEXT10: JB P3.6,NEXT11
MOV A,#57D

RET
NEXT11: JB P3.7,NEXT12
MOV A,#67D

RET
NEXT12:SETB P3.2
CLR P3.3
JB P3.4, NEXT13 
MOV A,#42D

RET
NEXT13:JB P3.5,NEXT14
MOV A,#48D

RET
NEXT14: JB P3.6,NEXT15
MOV A,#35D

RET
NEXT15: JB P3.7,NEXT16
MOV A,#68D
RET
NEXT16:LJMP KEY_SCAN




INIT_COMMANDS:  DB 0CH,01H,06H,80H,3CH,0    

TEXT1: DB "PASSWORD BASED",0 
TEXT2: DB "SECURITY SYSTEM",0 
IPMSG: DB "INPUT 5 DIGITS",0
CHKMSG: DB "CHECKING PASSWORD",0
TEXT_S1: DB "ACCESS - GRANTED",0
TEXT_S2: DB "DOOR OPENED",0
TEXT_F1: DB "WRONG PASSWORD",0
TEXT_F2: DB "ACCESS DENIED",0
PASSW: DB 49D,50D,51D,52D,53D,0
END

کد این برنامه به زبان اسمبلی نوشته شده است که در ادامه مهترین بخشها و زیر روالهای آن توضیح داده خواهند شد.

کد برنامه قفل در دیجیتالی

  • KEY_SCAN: این زیر روال برای تشخیص دادن کلید فشرده شده استفاده می شود که در آن برای تشخیص دادن کلید از روش بررسی ستون بهره گیری شده است. با این روش کلید فشرده شده تشخیص داده می شود و یک مقدار معادل دسیمال به آن نسبت داده می شود ( مقدار اسکی). برای دریافت اطلاعات بیشتر در این زمینه می توان به این لینک مراجعه کرد.
  • READ_KEYPRESS: یک زیر روال برای جمع آوری ورودی از کاربر است. با استفاده از رجیستر R0 یک شمارنده تنظیم شده که ۵ مرتبه شمرده می شود و با این کار تعداد ارقام ورودی توسط کاربر به ۵ رقم محدود می شود. رجیستر R1 با آدرس محل ۱۶۰D مقدار دهی شده است. ارقام ورودی توسط کاربر در آدرس محلی که با ۱۶۰D آغاز شده، ذخیره می شوند. این آدرس محل با استفاده از دستور INC R1 در میکروکنترلر ۸۰۵۱ افزایش پیدا می کند. بنابرین اولین ورودی کاربر در خانه ۱۶۰D، دومین ورودی در خانه ۱۶۱D، سومی در خانه ۱۶۲D و به همین ترتیب آخرین رقم در خانه ۱۶۴D ذخیره می شود. دسترسی به این آدرس  محل ها با استفاده از رجیستر R1 و توسط روش آدرس دهی غیر مستقیم  انجام می شود.

نکته: در این برنامه دو روال برای ایجاد تأخیر وجود دارد. DELAY1 برای ایجاد تأخیر در پیغام های خروجی LCD استفاده می شود. پس از ارسال پیغام یا دیتا به ماژول LCD، DELAY1 فراخوانی می شود تا پیغام برای زمان تعیین شده در تابع تأخیر بر روی نمایشگر باقی بماند. DELAY2 که تأخیر ایجاد شده توسط آن ۲٫۵ ثانیه است، برای فراهم کردن زمان تأخیر لازم برای سلامت کارکرد صفحه کلید (debouncing effect) استفاده می شود. یک کلید فشاری یا هر نوع دیگری از سوییچ های مکانیکی دارای اثر پرش ولتاژ هستند. این اثر را می توان هم به طریق سخت افزاری ( قرار دادن برخی خازن ها) و هم با ترفندهای نرم افزاری (مثلا ۱ یا ۲ ثانیه تأخیر ایجاد کردن پس از فشردن و بررسی شدن یک کلید) از بین برد.

  • CHECK_PASSWORD: این زیر روال برای مقایسه ۵ رقم ورودی کاربر با رمز حقیقی ذخیره شده در برنامه استفاده می شود. مقایسه به صورت رقم به رقم انجام می شود و هر رقم از رمز ذخیره شده با استفاده از DPTR انتخاب شده و توسط MOVC A, @A+DPTR در Accumulator قرار می گیرد. سپس هر رقمی که در Accumulator قرار گرفته با رقم متناظر ذخیره شده که کاربر وارد کرده مقایسه می شود ( در آدرس ۱۶۰D تا ۱۶۴D) که این ارقام به صورت تک به تک در رجیستر R1 قرار می گیرند. رقم ها توسط عملیات XOR شدن مقایسه می شوند که این کار با دستور XRL A,@R1 انجام می شود. با توجه به نتیجه مقایسه، این زیر روال نوشتن دستور اجازه دسترسی دادن ( و روشن شدن رله) یا اجازه دسترسی ندادن را انجام می دهد و پیام مربوط به هر قسمت بر روی LCD نمایش داده می شود.

نتیجه گیری

پس از انجام این مراحل ساخت سیستم امنیتی رمز دار به پایان می رسد. این مدار تست شده و به خوبی عمل می کند. پروژه های مشابه دیگری نیز در این زمینه در ساختنی وجود دارد که می توانید در صورت علاقه از آنها نیز استفاده کنید.

منبع

اشتراک‌گذاری

دیدگاهتان را بنویسید