امروزه استفاده از قفل های دیجیتالی بین اکثریت مردم فراگیر شده است. و تقریباً می توان گفت یکی از وسایل و تجهیزات پر کاربرد امروزی محسوب می شود. اما به نظر شما ساختمان داخلی یک قفل رمزی دیجیتالی چقدر پیچیده است؟
اگر این سوال را قبل از ورود میکروکنترلرها به بازار مطرح می کردیم به طور حتم ساخت یک قفل رمزی دیجیتالی یا ساخت دربازکن برقی با تراشه های مدار مجتمع یا گیت های منطقی و تایمرها کار پیچیده و بسیار سخت و خسته کننده بود. اما امروزه با وجود میکروکنترلرها و یا بردهای Embedded ساخت یک قفل رمزی کاربردی دیگر کار سخت و پیچیده ای نیست! بلکه بلعکس شما می توانید با کمترین سطح دانش الکترونیک و برنامه نویسی یک قفل رمز دیجیتالی کاربردی بسازید. اگر هنوز به این جمله شک دارید پس با ما همراه باشید تا در یک دقیقه قفل رمزی دیجیتالی خود را با برد آردوینو (Arduino) بسازید.
لیست قطعات مورد نیاز
برد آردوینو Arduino UNO R3 مدل DIP | 1 عدد |
ماژول رله 5 ولت مدل 1 کانال | 1 عدد |
قفل الکترونیکی درب مدل Push-Pull زبانه ای کوچک | 1 عدد |
ماژول نمایشگر OLED تک رنگ آبی I2C سایز 0.96 | 1 عدد |
صفحه کلید فلت حروفی مدل 4×4 | 1 عدد |
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی) | 1 عدد |
مرحله اول : اتصال صفحه کلید یا کیپد به برد آردوینو
ابتدا مطابق نقشه شماتیک زیر کیپد را به برد آردوینو متصل کنید.
مرحله دوم : نحوه اتصال نمایشگر OLED به برد آردوینو
اگر پروتکل ارتباطی نمایشگر OLED شما SPI است به شکل زیر آنرا به برد آردوینو متصل کنید:
و اما، اگر پروتکل ارتباطی نمایشگر OLED شما I2C است به شکل زیر آنرا به برد آردوینو متصل کنید:
مرحله سوم : اتصال ماژول رله 5 ولت 1 کانال به برد آردوینو
1- پایه GND ماژول رله را به پایه GND بر روی برد آردوینو متصل کنید.
2- پایه +5V یا VCC ماژول رله را به پایه 5V بر روی برد آردوینو متصل کنید.
3- پایه IN ماژول رله را به پایه آنالوگ A0 بر روی برد آردوینو متصل کنید.
مرحله چهارم : اتصال قفل برقی 12 ولتی مدل زبانه دار به ماژول رله
1- پایه VIN بر روی برد آردوینو را به پایه COM (پایه مشترک رله) بر روی ماژول رله متصل کنید.
2- پایه NO (پایه نرمال باز رله) را به پایه مثبت قفل برقی 12 ولت متصل کنید.
3- پایه منفی قفل برقی 12 ولت را به پایه GND بر روی برد آردوینو متصل کنید.
مرحله پنجم : نصب کتابخانه U8glib.h در نرم افزار آردوینو
1- نرم افزار آردوینو را بر روی سیستم خود اجرا کنید، اگر بار اول است که با برد Arduino کار می کنید و این نرم افزار را بر روی سیستم خود ندارید، می توانید نرم افزار آردوینو و نحوه نصب آن را از اینجا دریافت نمائید.
2- کتابخانه U8glib.h را از اینجا دانلود کنید.
3- مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه U8glib را که دانلود کرده اید، جهت افزودن انتخاب کنید.
Sketch > Include Library > Add .ZIP Library…
مرحله ششم : نصب کتابخانه Keypad.h در نرم افزار آردوینو
1- کتابخانه Keypad.h را از اینجا دانلود کنید.
2- مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه Keypad را که دانلود کرده اید، جهت افزودن انتخاب کنید.
Sketch > Include Library > Add .ZIP Library…
مرحله هفتم : پروگرام کردن برنامه بر روی برد آردوینو
1- برد آردوینو را از طریق کابل USB به کامپیوتر متصل کنید.
2- نرم افزار آردوینو را بر روی سیستم خود اجرا کنید، اگر بار اول است که با برد Arduino کار می کنید و این نرم افزار را بر روی سیستم خود ندارید، می توانید نرم افزار آردوینو و نحوه نصب آن را از اینجا دریافت نمائید.
3- پس از اجرای نرم افزار آردوینو، از طریق منوی File بر روی گزینه New کلیک کنید.
4- در صورتیکه پروتکل ارتباطی نمایشگر OLED شما SPI است، تمامی کدهای زیر را کپی کنید و در پنجره جدید باز شده بچسبانید (Paste).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
//*********************************************Setup LCD ISP #include "U8glib.h" const int Reset = 10; const int VccLcd = 13; U8GLIB_SSD1306_128X64 u8g(12, 11, 8, 9); // SW SPI Com: SCK = 12, SDA = 11, CS = 8, DC = 9 ,(RES = 10) int x = 0; //*********************************************Setup Keypad #include <Keypad.h> const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //*********************************************Config Pin_Keypad const byte Pin_ROW1 = 7; const byte Pin_ROW2 = 6; const byte Pin_ROW3 = 5; const byte Pin_ROW4 = 4; const byte Pin_column1 = 3; const byte Pin_column2 = 2; const byte Pin_column3 = 1; const byte Pin_column4 = 0; byte rowPins[ROWS] = {Pin_ROW1, Pin_ROW2, Pin_ROW3, Pin_ROW4}; byte colPins[COLS] = {Pin_column1, Pin_column2, Pin_column3, Pin_column4}; //*********************************************Layout Keypad char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); const int relay = A0; const int Waitms = 5000; char customKey; String key; String show; const String Password = "12345678"; //*********************************************Start Program void setup() { pinMode(Reset, OUTPUT); pinMode(VccLcd, OUTPUT); pinMode(relay, OUTPUT); digitalWrite(VccLcd, HIGH); digitalWrite(Reset, HIGH); digitalWrite(relay, HIGH); u8g.setFont(u8g_font_unifont); } void loop() { u8g.firstPage(); do { u8g.drawStr( x, 11, " electronics98 electronics98 "); u8g.setScale2x2(); u8g.setPrintPos(0, 22); customKey = customKeypad.getKey(); if (customKey) { if (customKey == '*') { key = ""; show = ""; } else if (customKey == '#') { CheckPass(); } else if (customKey != 'A' && customKey != 'B' && customKey != 'C' && customKey != 'D' && customKey != '*' && customKey != '#' && key.length() < 8 ) { key += customKey; show += "*"; } } if (key == "") { u8g.print("Password"); } else { u8g.print(show); } u8g.undoScale(); } while ( u8g.nextPage() ); x++; if (x > 128) { x = 0; } } void CheckPass() { int Wait = 1000; u8g.firstPage(); do { u8g.setScale2x2(); u8g.setPrintPos(0, 22); if (Password == key) { u8g.print("***OK***"); digitalWrite(relay, LOW); Wait = Waitms; } else { u8g.print("Error!!!"); } u8g.undoScale(); } while ( u8g.nextPage() ); delay (Wait); digitalWrite(relay, HIGH); key = ""; show = ""; } |
5- اما، اگر پروتکل ارتباطی نمایشگر OLED شما I2C است، کدهای زیر را کپی کنید و در پنجره جدید باز شده بچسبانید (Paste).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
//*********************************************Setup LCD ISP #include "U8glib.h" U8GLIB_SSD1306_128X64 u8g(12,11); // I2C > SCL = 12 , SDA = 11 const int VccLcd = 13; int x = 0; //*********************************************Setup Keypad #include <Keypad.h> const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //*********************************************Config Pin_Keypad const byte Pin_ROW1 = 7; const byte Pin_ROW2 = 6; const byte Pin_ROW3 = 5; const byte Pin_ROW4 = 4; const byte Pin_column1 = 3; const byte Pin_column2 = 2; const byte Pin_column3 = 1; const byte Pin_column4 = 0; byte rowPins[ROWS] = {Pin_ROW1, Pin_ROW2, Pin_ROW3, Pin_ROW4}; byte colPins[COLS] = {Pin_column1, Pin_column2, Pin_column3, Pin_column4}; //*********************************************Layout Keypad char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); const int relay = A0; const int Waitms = 5000; char customKey; String key; String show; const String Password = "12345678"; //*********************************************Start Program void setup() { pinMode(VccLcd, OUTPUT); pinMode(relay, OUTPUT); digitalWrite(VccLcd, HIGH); digitalWrite(relay, HIGH); u8g.setFont(u8g_font_unifont); } void loop() { u8g.firstPage(); do { u8g.drawStr( x, 11, " electronics98 electronics98 "); u8g.setScale2x2(); u8g.setPrintPos(0, 22); customKey = customKeypad.getKey(); if (customKey) { if (customKey == '*') { key = ""; show = ""; } else if (customKey == '#') { CheckPass(); } else if (customKey != 'A' && customKey != 'B' && customKey != 'C' && customKey != 'D' && customKey != '*' && customKey != '#' && key.length() < 8 ) { key += customKey; show += "*"; } } if (key == "") { u8g.print("Password"); } else { u8g.print(show); } u8g.undoScale(); } while ( u8g.nextPage() ); x++; if (x > 128) { x = 0; } } void CheckPass() { int Wait = 1000; u8g.firstPage(); do { u8g.setScale2x2(); u8g.setPrintPos(0, 22); if (Password == key) { u8g.print("***OK***"); digitalWrite(relay, LOW); Wait = Waitms; } else { u8g.print("Error!!!"); } u8g.undoScale(); } while ( u8g.nextPage() ); delay (Wait); digitalWrite(relay, HIGH); key = ""; show = ""; } |
6- حال از طریق منوی File گزینه Save را انتخاب کنید و برنامه را در محل دلخواه خود ذخیره کنید.
7- پس از ذخیره برنامه از طریق منوی Tools به زیر منوی Board رفته و از لیست کشویی باز شده آیتم Arduino/Genuino Uno را انتخاب کنید.
8- دوباره از طریق همان منوی Tools به زیر منوی Port رفته و از لیست کشویی باز شده شماره پورت USB که از طریق آن برد آردینو به کامپیوتر متصل شده است را انتخاب کنید.
9- در پایان برای انتقال برنامه به برد آردوینو کافیست تا بر روی آیکون در نرم افزار آردوینو کلیک کنید.
مرحله هشتم : راه اندازی پروژه
1- برد آردوینو را به صورت کامل از کامپیوتر جدا کنید.
2- توسط یک آداپتور 5 ولت DC با حداقل جریان 1 آمپر برد آردوینو را راه اندازی کنید.
3- در صورتیکه اتصالات را به درستی انجام داده باشید و برنامه را به صورت صحیح بر روی برد آردوینو پروگرام کرده باشید باید پیغام Password را بر روی نمایشگر مشاهده نمائید.
4- رمز ورود پیش فرض 12345678 می باشد که شما می توانید برای تغییر آن دستور const String Password = “12345678”; را در برنامه پیدا کنید و رمز مورد نظر خود را به جای رمز پیش فرض وارد کنید و برنامه را به صورت مجدد بر روی برد آردوینو پروگرام نمائید.
5- حال رمز ورود را از طریق صفحه کلید وارد نمائید و برای تائید دکمه “#” را بر روی کیپد فشار دهید. اگر رمز ورود به درستی وارد شده باشد، رله برای 5 ثانیه فعال شده و بر روی نمایشگر پیغام “***OK***” نمایش داده می شود، ولی اگر رمز وارد شده اشتباه باشد برای مدت یک ثانیه عبارت “Error!!!” بر روی نمایشگر نشان داده خواهد شد.
6- در هر مرحله، هنگام وارد کردن رمز عبور دچار اشتباه شدید می توانید کلید “*” را بر روی صفحه کلید فشار دهید، و عملیات وارد کردن رمز عبور را دوباره انجام دهید.
ممنون از راه نمایی شما من این پروژه رو انجام دادم کار کرد
سلام.وقت بخیر
بنده هرچ سعی کردم تا نمایشگر I2C را روشن کنم نشو
ولی وقتی رمز را میزدم رله روشن مشود چه کاری اننجام دهم؟
سلام من هر کاری کردم که برنامه را داخل آردوینو بریزم ارور کامپایل میومدچیکار کنم این ارورU8glib.h
با سلام و احترام
احتمالا این خطا به این دلیل است که شما کتابخانه U8glib.h را به درستی در مخزن کتابخانه نرم افزار آردوینو خود وارد نکرده اید.
چرا کتابخانه U8glib نمیاره
سلام.وقت بخیر
بنده هرچ سعی کردم تا نمایشگر I2C را روشن کنم نشو
ولی وقتی رمز را میزدم رله روشن مشود چه کاری اننجام دهم لطفا زود جواب دهید مرسی