آردوینو Arduino Uno آموزش آردوینو پروژه های آردوینو

در بازکن رمزی با کیپد ماتریسی و برد آردوینو Arduino Keyless Door Lock

Arduino-Door-lock-solenoid-digispark-
نوشته شده توسط پریسا پوربلورچیان

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

 


کیپد فلت Keypad


کیپد Keypad دارای دو نوع فلت و معمولی هستند. کیپد های فلت دارای چند نوع مختلف ۱*۴، ۳*۴ و ۴*۴ می‌باشد که به ترتیب دارای ۵، ۷ و ۸ پایه است. در این آموزش از کیپد ۴*۴ با ۱۶ کلید استفاده شده است. برای راه اندازی کیپد Keypad نیاز به کتابخانه Keypad و دستورات ماکرو برای عملکرد کیپد خواهیم داشت. در آموزش بخش اول و دوم کار با کیپد به توضیحات کامل کتابخانه و استفاده از دستورات ماکرویی پرداخته شده است. برای اطلاعات بیشتر به دو آموزش زیر مراجعه کرده و ایتدا با کتابخانه و نحوه ی فراخوانی دستورات آشنا شوید.

آموزش کار با keypad آردوینو بخش اول 

آموزش راه‌اندازی کیپد keypad آردوینو با کتابخانه کیپد – بخش دوم 

 


کتابخانه آردوینو Library


برای ساخت پروژه دربازکن آردوینو با کیپد نیاز به دو کتابخانه خواهیم داشت:

کتابخانه Keypad

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

کتابخانه EEPROM

کتابخانه EEPROM برای ذخیره داده ها در آردوینو استفاده می‌شود. این کتابخانه به صورت پیش فرض در لیست قرار گرفته شده است. آن را فراخوانی کنید.

پروژه دربازکن آردوینو با کیپد ماتریسی و برد آردوینو Mega2560 - دیجی اسپارک

 


چگونگی عملکرد پروژه


در پروژه دربازکن آردوینو توسط برد آردوینو و کیپد فلت ماتریسی یک سیستم در باز کن با اعمال رمز عبور طراحی می‌کنیم. برای اجرای سخت افزاری پروژه نیاز به یک رله و قفل خواهیم داشت. با انتخاب رمز پیش فرض رله فعال شده و قفل باز خواهد شد. سپس با تاخیر ۵ ثانیه مجددا قفل بسته خواهد شد. در این پروژه امکان انتخاب رمز جدید وجود دارد که در ادامه کامل توضیح داده خواهد شد.

اتصال کیپد به آردوینو

  • ۶ پایه اول کیپد را به ترتیب به پایه A5 تا A0 آردوینو اتصال دهید.
  • ۲ پایه دیگر به ترتیب به پایه ۲ و ۳ آردوینو اتصال دهید.

 

اتصال رله به آردوینو

پایه IN سیگنال رله را به یکی از پایه های دیجیتال آردوینو اتصال دهید. در این آموزش از پایه ۹ استفاده شده است.

 


کد آردوینو Arduino


مهم‌ترین بخش پروژه دربازکن آردوینو کدهای آردوینو می‌باشد. به عبارتی توسط کدهای نوشته شده به زبان C++ برای برد آردوینو، امکان راه اندازی مدار وجود خواهد داشت. بنابراین کدهای زیر را کپی کرده و عینا در کامپایلر آردوینو قرار دهید.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 

 


تحلیل کد آردوینو Arduino


در خط اول و دوم کتابخانه های گفته شده فراخوانی و ضمیمه شده است. از کتابخانه EEPROM برای ذخیره پسورد در برد آردوینو استفاده شده است:

#include <Keypad.h>
#include<EEPROM.h>

 

دستورات کیپد Keypad

در این مرحله با فراخوانی دستورات کتابخانه Keypad مانند انتخاب نوع داده، انتخاب تعداد اعداد برای رمز ورود و تعریف سطر و ستون کیپد مورد استفاده انجام می‌گردد:

char password[6];
char initial_password[6],new_password[6];
char key_pressed=0;
const byte rows = 4; 
const byte columns = 4; 
char hexaKeys[rows][columns] = {
{'۱','۲','۳','A'},
{'۴','۵','۶','B'},
{'۷','۸','۹','C'},
{'*','۰','#','D'}
};
byte row_pins[rows] = {A0,A1,A2,A3};
byte column_pins[columns] = {A4,A5,3,2};   
Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);

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

 

توابع سریال مانیتور Serial Monitor

جهت مدیریت پروژه و اطلاع از صحیح اجرا شدن از سریال مانیتور استفاده خواهیم کرد. باد ریت در این پروژه به صورت پیش فرض بر روی ۹۶۰۰ تنظیم شده است. برای اطلاع از وضعیت هر لحظه و نمایش محتوا مورد نظر خودمان از دستور Serial.println استفاده خواهیم کرد. پیام اولیه برای ورود به سیستم، نمایش پسورد و تغییر پسورد در سریال مانیتور همزمان نمایش داده می‌شود. به دلخواه می‌توانید از LCD جهت نمایش محتوا استفاده نمایید.

void setup()
{  Serial.begin(9600);
Serial.println(" Hello Darling");
 Serial.println(" Welcome to home");
 delay(2000);
 Serial.println("Enter Password");
}
.
.
.
.

 

تابع get.key و نمایش محتوا

در این مرحله با فشرد کلید کاراکتر مربوطه در Key-pressed ذخیره شده و آن را برمیگرداند. تمامی تغییرات مانند پسورد پیش فرض و یا پسورد جدید با فشرده شدن کلیدها در این تابع ذخیره خواهد شد و پیام تایید و عدم تایید پس از اعمال تغییرات در سریال مانتیور اعلام خواهد شد.

key_pressed = keypad_key.getKey();

  if(key_pressed=='#')

    change();

if (key_pressed)

{
  password[i++]=key_pressed;

  Serial.println(key_pressed);

 }
if(i==6)
{
  delay(200);
 for(int j=0;j<6;j++)
 initial_password[j]=EEPROM.read(j);
 if(!(strncmp(password, initial_password,6)))
 {
  Serial.println("Pass Correct");
  digitalWrite(relay_pin, LOW);
   delay(5000);
   Serial.println("Pres # to change");
    delay(5000);
    Serial.println("Enter Password:");
     i=0;
     }
 else
{
 digitalWrite(relay_pin, HIGH);
 Serial.println(" Password Uncorret");
  Serial.println("Pres # to Change");
   delay(5000);
   Serial.println("Enter Password");

       i=0;
 }
 }
 }

 


تغییر پسورد Password قفل درب


در این مرحله توسط تابع change با فشردن کلید # امکان تغییر پسورد به پسورد دلخواه وجود دارد. با فشردن کلید برنامه وارد حلقه تغییر شده و درخواست وارد کردن رمز اولیه را می‌کند. با وارد کردن رمز قبل، پیغام انتخاب رمز جدید برای شما نمایش داده می‌شود. با وارد کردن رمز جدید، رمز ذخیره شده و مجددا درخواست واردکردن رمز جدید را ارسال می‌کند. با اعمال رمز جدید خروجی رله فعال شده و ققل باز می‌شود. تمامی تغییرات در حافظه EEPROM ذخیره می‌شود.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 

رمز پیش فرض ۶ رقمی ۱۲۳۴۵۶ است. با وارد کردن رمز رله فعال شده و قفل باز می‌شود. سپس با فشردن کلید # امکان تغییر رمز وجود دارد. کلید # را انتخاب کنید. سپس رمز جدید خود را وارد کنید. همزمان با وارد کردن رمز سریال مانیتور را باز کرده و تغییرات اعمال شده را مشاهده کنید. با وارد کردن رمز جدید رله فعال شده و ققل به مدت ۵ ثانیه باز خواهد شد.

 


وسایل مورد نیاز


برد آردوینو Arduino

شیلد پروتایپ آردوینو Arduino

کیپد ماتریسی ۴ * ۴

قفل برقی زبانه دار یا گرد ۱۲ ولت 

کابل فلت 

باتری ۹ یا ۱۲ ولت 

 

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

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۵۹ دیدگاه

  • سلام. بنده یه سوالی داشتم لطفا راهنماییم کنید
    بنده میخوام با کمک برد آردوینو محتوای یه فایل txt رو درون یه متغیر مثلا MyText بریزم. چجوری میتونم این کار رو بکنم؟ آیا از طریق یه لینک هم میشه اینکار رو کرد؟
    مثلا به این شکل باشه
    String MyText = LoadString(“Good/New/matn.txt”); // zzzzzz

    • با سلام
      ایمیل شما به صورت دستی تایید شد. همچنین شما اشتراک اسپارکر پلاس تهیه نکرده‌اید. جهت دسترسی به کدها بایستی اشتراک اسپارکر پلاس تهیه بفرمایید.

        • با سلام
          در صورتیکه اتصالات به درستی انجام نشده باشد، رله روشن نمی‌شود. اتصالات و تغذیه مدار را مجدد بررسی نمایید.

    • با سلام
      کاربر گرامی، حساب شما فعال شد.
      دقت کنید شما اشتراک اسپاکر تهیه کرده اید و طبق توضیحات نوشته شده دسترسی عمومی خواهید داشت و به کدها دسترسی ندارید.
      جهت دسترسی به کدهای هر آموزش می‌بایست اشتراک اسپارکر پلاس تهیه کنید که به ترتیب ۱ ماه، ۳ ماه و یک سال می‌باشد و پس از آن به تمامی کدها دسترسی خواهید داشت.
      لینک تهیه اشتراک اسپار پلاس

  • سلام خدمت شما واقعا اموزش هاتون خیلی خوبه یه سوال داشتم میخواستم بدونم چجوری میشه این پروژه رو با پروژه قفل کارتی ترکیب کرد که یک نمایشگر هم داشته باشه ؟؟ بعد اکه بخواهیم یه ماژول esp8266 هم به این پروژه اضافه کنیم که بشود با موبایل هم کنترل نمود ایا امکان پذیر هست ؟ میخواستم بدونم به خازن و مقاومت جهت اتصال نمایشگر نیازه ؟؟

    • با سلام
      از توجه شما ممنونم.
      منظور شما از قفل کارتی چیست؟
      در خصوص سوال دوم بله امکان پذیر است. سوال سوم نامفهوم است.

    • سلام
      در خصوص این پروژه امکان اینکه رمز ۶ رقمی ثابت نباشه و یک رمز بین ۴ تا ۸ رقم باشه باید چیکار کنم؟
      مثلا رمز امولیه یه رمز ۶ رقمی باشه وقتی کاربر میخواد رمز رو عوض کنه لزوما ۶ رقمی وارد نکنه و بتونه مثلا یه رمز ۷ رقمی وارد کنه یا یه رمز ۵ رقمی
      و برای تغییر بعدی هم همینطور بتونه یه رمز ۴تا ۸ رقمی جدید تعریف کنه
      چطوری باید اینکارو کرد؟

      • با سلام
        در این خصوص بایستی در کد برنامه تغییرات را اعمال کنید. بدین صورت که در خط ۳ و ۴ تعداد ارقام پسورد مشخص شده است.
        char password[6];
        حال با توجه به تعداد ارقام موردنظر آرایه را تغییر دهید. بررسی و نتیجه را از همین طریق اعلام نمایید.

        • سلام
          منظورم اینه که تعداد رقم پسوورد ثابت نباشه
          مثلا در ابتدا یه پسوورد ۶ رقمی باشه وقتی کاربر پسوورد رو تغییر میده مجبور نباشه پسوورد جدیدش رو هم ۶ رقمی انتخاب کنه و بتونه یه پسوورد مثلا ۵ رقمی بذاره دفعه ی بعد که تغییر میده یه پسوورد ۷ رقمی بذاره

          • همانطور که در پاسخ قبل گفته شد می‌توانید تعداد ارقام پسورد کنونی و پسورد جدید را تغییر دهید. در این خصوص کافیست تعداد آرایه مورد نظر را وارد نمایید.

            • سلام مجدد
              اگر من تعداد ارقام کنونی رو مثلا ۶ تعریف کنم و تعداد ارقام جدید رو ۵ و رمز پیش فرض رو یک رمز ۶ رقمی تعریف کنم، وقتی کاربر میخواد رمز رو تغییر بده باید رمزی جدیدی که وارد میکنه حتما ۵ رقمی باشه چون در کد برنامه رمز جدید ۵ رقمی تعریف شده و برای همین کاربر مجبور هست که رمز جدیدش رو ۵ رقمی تعریف کنه
              من میخوام مجبور نباشه حتما ۵ رقمی یا حتما ۴رقمی یا … وارد کنه اختیار این رو داشته باشه که رمز جدیدش رو یک رمز ۴ تا ۸ رقمی تعریف کنه
              برای مثال رمز پیش فرض ۱۲۳۴۵۶ هست و قتی کاربر با استفاده از کلید # میخواد رمز رو عوض کنه رمز جدیدشو ۱۲۳۴۵ وارد کنه یا ۱۲۳۴۵۶۷ وارد کنه یا ۱۲۳۴۵۶۷۸ وارد کنه همه ی این موارد ساپورت بشه و مجبور نباشه حتما یه رمز با تعداد رقمی که توی کد تعریف میشه رو وارد کنه

            • سلام
              اگر رمز جدید رو ارایه ی ۵ تایی تعریف کنیم وقتی کاربر میخواد رمز رو عوض کنه مجبوره که حتما رمز جدیدی که میذاره ۵ رقمی باشه من میخوام مجبور نباشه ۵ رقمی بذاره دستش باز باشه که یه رمز ۴ تا ۸ رقمی جدید بذاره
              مثلا الان رمز اولیه ۶ رقمیه وقتی رمز رو تغییر میده یه رمز ۷ رقمی بذاره چند وقت بعد که بخواد دوباره رمز رو عوض کنه یه رمز ۵ رقمی بذاره دفعه بعد یه رمز ۶ رقمی بذاره

  • منظورم از قفل کارتی تگ های rfid هست و در سوال سوم هم منظور این هست که امکانش هست به طور مستقیم یک عددLCD کاراکتری ۱۶*۲ رو به اردواینو متصل کنیم برای ال سی دی مشکل پیش نمیاد ؟؟یه سوال دیگه ایا در مورد پرسش دومم پروژه ای در سایت دارید که راهنمایی کند چجوری یه برنامه موبایل برای باز کردن در بنویسیم یا چیزی تو این مایه ها؟؟و این که برای یه همچین پروژه ای به دوتا رله نیاز دارم یا همون یدونه کافیه؟؟

  • سلام عیدتون مبارک من یه مشکلی دارم الان مدار رو کامل بستم کد هم به درستی اپلود میشه و حتی وقتی رمز رو میزنم رله فعال میشه ولی قفل که باید باز بشه باس با دست بزنم بره تو ینی منظورم اینه که خود به خود باز نمیشه باید یه کمکی کنم قفل بره تو ولی موقع بسته شدن درست کار میکنه می خواستم بدونم مشکل کجاس ؟؟؟اشکال از کده ؟اشکال از نحوه اتصال قفل به رله و باتریه(۹ ولته)؟اشکال از قفله؟؟ممنون میشم راهنمایی کنید

    • با سلام
      سال نو شما هم مبارک.
      بله اگر قفل شما ۱۲ ولت باشد، باتری ۹ ولت کافی نیست و یا شارژ کامل نشده است. با تغییر تغذیه مشکل برطرف خواهد شد.

      • ممنون از راهنماییتون الان ینی یه باتری کتابی دیگه اضافه کنم به مدار مشکل برطرف میشه یا ۱۸ ولت زیاده مشکل پیش میاد؟

        • خواهش میکنم. همانطور که در پاسخ قبل گفته شد، تغذیه باید مناسب با مصرف کننده باشد، به عنوان مثال اگر قفل ۱۲ ولت است، از باتری ۱۲ ولت استفاده نمایید.

  • با سلام . بنده میخواهم آردینو رو بخوبی یاد بگیرم که پروژه طراحی کنم خودم . چطور میتونم از منابع رایگان استفاده کنم ؟ ممنون

    • با سلام
      طبیعتا مسیر پیچیده ای می‌باشد، اگر اینگونه نبود، دیجی اسپارک به وجود نمی‌آمد.
      در خصوص یادگیری اصولی و تکنیکی می‌توانید از دوره های آموزش حضوری و یا غیر حضوری ( وبینار ) دیجی اسپارک استفاده نمایید.

  • سلام
    بدای این پرژه میخواستم بپرسم برا اینکه رمزمون ثابت ۶ رقمی نباشه و بین ۴ تا ۸ رقمی باشه چیکار باید کنم؟
    یعنی مثلا اگه رمز اولیه ۶ رقمیه وقتی کاربر میخواد رمز رو تغییر بده بتونه یه رمز ۷ رقمی بذاره یا یه رمز ۵ رقمی بذاره
    و دفعه بعد هم که میخواد تغییر بده بتونه یه رمز ۴ رقمی مثلا بذاره
    برای اینکار چیکار باید کنم

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

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

    • با سلام
      این مورد توسط بنده تست نشده است. در این صورت ممکن است کد نیاز به آپدیت داشته باشد.

  • سلام
    وقتتون بخیر
    ممنون از پروژتون
    یه سوال داشتم
    قفل تغذیه ۱۲ ولت میخواد
    اون تغذیه چطور تامین میشه و باید به کجا وصل شه
    آیا به برد آردوینو آسیب نمیزنه؟

  • سلام این پروژه رو میشه با استفاده ازProteus پیاده سازی کرد؟
    اگر امکان پذیر نیست میشه من رو راهنمایی کنید که چه پروژه ای رو میتونم داخل Proteus بصورت کامل پیاده سازی کنم؟
    ممنون

  • سلام
    اگه بخوایم کلید های A B C D یک ماژول رله ۴ کاناله را کنترل کنند باید چی کار کنم؟

    • با سلام
      برای هر کلید یک خروجی به صورت HIGH LOW تعریف کنید. از شرط نویسی if else استفاده کنید.