امروزه استفاده از قفل های دیجیتالی بین اکثریت مردم فراگیر شده است. و تقریباً می توان گفت یکی از وسایل و تجهیزات پر کاربرد امروزی محسوب می شود. اما به نظر شما ساختمان داخلی یک قفل رمزی دیجیتالی چقدر پیچیده است؟
اگر این سوال را قبل از ورود میکروکنترلرها به بازار مطرح می کردیم به طور حتم ساخت یک قفل رمزی دیجیتالی یا ساخت دربازکن برقی با تراشه های مدار مجتمع یا گیت های منطقی و تایمرها کار پیچیده و بسیار سخت و خسته کننده بود. اما امروزه با وجود میکروکنترلرها و یا بردهای 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 من به جای scl دارای sck است ایا تفاوتی در کد ها باید بدهم ؟
و اینکه نیازی به نصب کتابخانه دیگری هست؟
سلام اداپتوری که گفتید استفاده بشه ۵ولته و قفل برقی ۱۲ولته
و قفل باز نمیشه الان برای من میشه بگید مشکل از کجاست؟
سلام وقتتون بخیر ممنون از پروژه خوبتون
یه سوال داشتم
تو پروژه شما از قفل ۱۲ ولت استفاده کردین تغذیه این قفل از کجا تامین میشه؟ شما آردوینو رو به اداپتور ۵ ولت وصل میکنین تو فیلم و بعد از زدن رمز قفل عمل میکنه نیاز به یک مدار اضافی برای قفل ۱۲ ولت نیست؟ اگه بخوایم ۱۲ ولت به آردوینو بدیم میسوزه پس باید از یک مدار اضافی استفاده کنیم ولی توضیحی دربارش ندادین؟ تو فیلم چطور بدون اینکه ولتاژش تامین بشه کار میکنه
میشه بگید چطور میتونیم قفل فعال کنیم که باز شه؟
سلام دوست عزیز
تنها نکته مهم برای استفاده در استفاده از این کتابخانه، این است که تراشه راه انداز نمایشگر شما باید یکی از موارد زیر باشد:
SSD1306 – SSD1309 – SSD1327 – NHD27OLED – DOGS102 – DOGM128 – DOGM132 – ST7920 – LM6059 – LM6063 – DOGXL160 – PCF8812 – KS0108 – LC7981 – ILI9325D – SBN1661 – SH1106 – UC1611 – NHD_C12864 – NHD_C12832 – LD7032 – UC1608 – T6963 – HT1632 – SSD1351
سلام دوست عزیز
آداپتور 5 ولت مربوط به راه اندازی برد آردوینو است، برای راه اندازی قفل برقی باید از یک آداپتور 12 ولتی و یا باتری 12 ولتی استفاده کنید، همچنین می توانید از یک منبع تغذیه 12 ولتی با حداقل جریان 2 آمپر برای راه اندازی کل مدار استفاده کنید.
سلام اداپتوری که شما استفاده کردید در فیلم چند ولت است؟
میشه راجب نحوه راه اندازی قفل راهنمایی کنید که چطور باید متصل کنیم به اداپتور یا باتری ۱۲ولت
استفاده از باتری باعث اسیب به قطعات و رله نمیشه؟؟
سلام دوست عزیز
آداپتور استفاده شده 12 ولت DC با جریان 2 آمپر است. همچنین نحوه اتصال قفل برقی به ماژول رله در توضیحات پروژه به صورت نقشه گرافیکی درج شده است.
سلام میشه لطفا دایرکت های پیج اینستا پاسخ بدید
سلام دوست عزیز
به دلیل حجم بالای سوالات کاربران که روزانه از طریق سایت و ایمیل مطرح می شود امکان بررسی و پاسخگویی به سوالات دیگر کاربران در شبکه های اجتماعی در حال حاضر برایمان مقدور نیست.
سلام اگه خواسته باشیم ال سی دی نزاریم اگه همین کد رو بزنیم اجرا میشه یا باید کد دیگه ای رو بزنیم
سلام دوست عزیز
عدم اتصال نمایشگر به مدار اختلالی در عملکرد آن ایجاد نمی کند و از همین کد می توانید استفاده کنید.
سلام نمایشگر I2C من کار نمیکنه ولی همه چی اوکی هست آیا دلیلی داره ؟
فکر میکنم که اتصالات مشکلی داره در بخش دوم که با i2c ساخته شده لطفا راهنمایی کنید