راه اندازی کیپد و ال سی دی با آردوینو ، استفاده از کیپدها (یا کیپدها) یکی از بهترین راه های برقراری ارتباط کاربر با پروژه می باشد. از کیپد برای ورود پسورد، کنترل بازی، کنترل ربات و هدایت منوها استفاده میشود.
در این پروژه من به شما نشان خواهم داد که چگونه یک کیپد را با آردوینو راه اندازی کنید. در ابتدا توضیح می دهم که بورد آردوینو چطور فشرده شدن یک کلید را تشخیص می دهد بعد از آن یاد میگیرید که دقیقا کدام کلید فشرده شده است. به عنوان یک نمونه ی ساده به شما نشان می دهم که چگونه کلید فشرده شده را در نمایشگر سریال و LCD نمایش دهید.
من در این مقاله از یک کیپد غشایی4*4 استفاده میکنم اما کدها برای کیپد 4*3 هم ارائه شده است. کیپدهای غشایی نازک بوده و در قسمت پشتی آنها چسبی تعبیه شده که میتوان به راحتی آن را در سطوح صاف چسباند به همین دلیل من ترجیح میدهم از این نوع کیپد استفاده می کنم. شما همچنین می توانید از کیپد تلفنی که کلیدهای ضخیم تری هم دارد استفاده کنید. حتی کیپد مربوط به تلفنهای قدیمی نیز برای این پروژه کاربرد دارند.
کیپد چگونه کار میکند؟
کلیدهای روی کیپد در یک سری ردیفها و ستونهایی قرار گرفته است. کیپد4*3 دارای ۴ ردیف و ۳ ستون بوده و صفحهکلید 4*4 دارای ۴ ردیف و ۴ ستون می باشد.
در زیر هر کلید یک سوییچ غشایی قرار گرفته است. سوییچ های هر ردیف با استفاده از یک مسیر رسانا به یکدیگر متصل شده و به طور مشابه سوییچ های هر ستون نیز به یکدیگر متصل شده است. از هر ردیف و ستون یک پایهی مجزا به بیرون آورده شده است به طوری که مثلا برای کیپد به طور کلی ۸ پایه وجود دارد.
با فشرده شدن هر کلید در ستونها و ردیف های مختلف، یک مسیر جریان بین پایه ی مربوط به ردیف و ستون همان کلید برقرار می شود.
نمودار مربوط به صفحهکلید 4*4 در زیر مشخص شده است. این نمودار نحوه ی اتصال ستون ها و ردیف ها را نمایش می دهد.
بورد آردوینو با توجه به پایه های ستون و ردیف فشرده شده، کلید مربوط به آن ردیف و ستون را تشخیص می دهد.
تشخیص کلید فشرده شده در چهار مرحله اتفاق می افتد:
-
زمانی که کلیدی فشرده نشده باشد، تمامی پایه های مربوط به ستون ها بالا (HIGH) بوده و پایه های مربوط به ردیف ها پایین (LOW) می باشد.
-
وقتی که کلیدی فشرده شود، پایه ی ستون به وضعیت پایین تغییر حالت داده و جریان از ستون بالا به پایه ی ردیف پایین برقرار می شود.
-
حالا آردوینو ستون مربوط به کلید مورد نظر را شناسایی کرده و نوبت فهمیدن ردیف مربوط به آن است. برای این کار در هر سری یک ردیف بالا نگه داشته می شود و همزمان ستون ها خوانده می شوند تا مشخص شود که کدام ستون بالا می باشد.
-
زمانی که پایه ی ستون بالا می رود، آردوینو ردیف مربوط به کلید فشرده شده را شناسایی می نماید.
از نمودار بالا مشخص است که کلید مربوط به ردیف شماره ۲ و ستون شماره ۲ همان کلید شماره ۵ می باشد.
اتصال کیپد به آردوینو
برای بیشتر کیپدهای غشایی، پایه ها آرایشی مشابه شکل زیر دارند.
نمودار زیر نحوهی اتصال کیپدهای 4*4 و 4*3 به آردوینو UNO را نمایش می دهد.
چگونه آرایش پایه های کیپد را شناسایی کنیم؟
اگر کیپد شما آرایشی متفاوت از آنچه در قسمت قبل ارائه شد داشت با یک جستجوی ساده می توانید آرایش آن را بیابید. برای این کار شما نیاز دارید تا با استفاده از یک LED و یک مقاومت محدود کننده جریان و آردوینو (یا یک منبع ۵ ولتی)، یک مدار تست همانند شکل زیر بسازید.
ابتدا بایستی متوجه شوید که کدام پایه های کیپد به ردیف ها متصل شده است. برای این کار سیم زمین یا سیم مشکی رنگ را به به اولین پایه از سمت چپ متصل کنید. یکی از دکمه های ردیف اول را فشرده و پایین نگه دارید. حالا سیم مثبت یا قرمز را به یکی از پایه های دیگر متصل می نماییم. اگر چراغ LED در هنگام اتصال به آن پین روشن شد، کلید دیگری در ردیف اول را فشرده و نگه دارید. سپس دوباره سیم مثبت را به هریک از پین های دیگر متصل کنید. اگر چراغ LED در پایه ی متفاوتی روشن شد، به این معنی است که سیم زمین به پایه ی ردیف اول متصل شده است. اگر هیچ کدام از کلیدهای ردیف اول LED را روشن نکرد، به این معنی است که سیم زمین به هیچ کدام از کلیدهای ردیف اول متصل نشده است. بنابرین سیم زمین را به پایه ی بعدی در ردیف بعدی متصل نموده و مراحل بالا را تکرار می نماییم تا پایه ی مربوط به هر ردیف مشخص شود.
برای فهمیدن اینکه کدام پایه مربوط به چه ستونی است، سیم زمین را به پایه ای که مطمنید مربوط به ردیف اول میباشد متصل کنید. حالا یکی از دکمه های همان ردیف را فشرده و نگه دارید و سپس سیم مثبت را به یکی از پایه های باقیمانده متصل کنید. پایه ای که LED را روشن کند همان پایه ی مربوط به ستون همان دکمه است. حالا دکمه ی دیگری در همان ردیف را فشرده و نگه دارید و سیم مثبت را به هر یک از پایه های دیگر وصل کنید. این فرآیند را برای سایر ستونها نیز انجام دهید تا جای تمام ردیف ها و ستون ها مشخص گردد.
برنامه نویسی کیپد
برای نمایش نحوه ی کارکرد کیپد لازم است در ابتدا فشرده شدن هر کلید را در نمایشگر سریال نشان دهیم.
نصب کتابخانه
ما از کتابخانه ی کیپد ارائه شده توسط Mark Stanley and Alexander Brevig استفاده می کنیم. این کتابخانه برای راه اندازی پایه ها و نمونه برداری ستون ها و ردیف های مختلف کاربرد دارد. برای نصب این کتابخانه به آدرس Sketch > Include Library > Manage Libraries رفته و کلمه ی “keypad” را جستجو نمایید. روی کتابخانه کلیک کرده و سپس آن را نصب نمایید.
کد
زمانی که کتابخانه کیپد نصب شد، شما می توانید کد زیر را برای استفاده از صفحهکلید 4*4 به کار بگیرید.
#include <Keypad.h> const byte ROWS = 4; const byte COLS = 4; char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3, 2}; Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); } }
در صورتی که از صفحهکلید 4*3 استفاده می کنید کد زیر قابل استفاده است.
#include <Keypad.h> const byte ROWS = 4; const byte COLS = 3; char hexaKeys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3}; Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); } }
خط سوم و چهارم کد بالا، تعداد ردیف ها و ستونهای کیپد را مشخص می کند.
خطوط ۶ تا ۱۱ مشخص می کند که در صورت فشردن هر کلید کدام کاراکتر چاپ شود. کاراکترها مطابق با آنچه در کیپد قرار گرفته انتخاب شده اند. اگر کیپد شما طرح متفاوتی دارد، میتوانید از شکل مربوط به همان کاراکتر استفاده نمایید. به عنوان نمونه اگر بخواهید بگویید که کیپد ستونی از حروف در سمت چپ دارد باید از شکل زیر استفاده کنید.
char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} };
بعد از بارگذاری این کد، نمایشگر سریال را باز کنید. وقتی کلیدی را میفشارید،مقدار آن در این صفحه چاپ می شود.
استفاده یا راه اندازی کیپد و ال سی دی با آردوینو
در این قسمت با نحوه ی چاپ کردن کلیدهای کیپد روی LCD آشنا می شویم. کیپدهای 4*4 دارای ۸ پایه و کیپد های 4*4 دارای ۷ پایه می باشد. از آنجایی که تعداد پایه های هر دو کیپد زیاد است، من از یک I2C برای فعال شدن LCD استفاده میکنم چرا که فقط به ۴ سیم برای اتصال به آردوینو نیاز دارد.
نصب کتابخانه LIQUIDCRYSTAL_I2C
برای استفاده از I2C لازم است کتابخانه LIQUIDCRYSTAL I2C که توسط Marco Schwartz ارائه شده نصب گردد. این کتابخانه خیلی خوب است چون شامل بسیاری از عملگرهای قابل دسترسی در کتابخانه LiquidCrystal می باشد. برای نصب این کتابخانه، فایل زیپ را از آدرس زیر بارگیری کنید و سپس به آدرس Sketch > Include Library > Add .ZIP Library رفته و کتابخانه را نصب کنید.
کتابخانه wire
برای استفاده از ارتباطات I2C به کتابخانه wire نیز نیاز داریم. این کتابخانه در بسته بندی آردوینو IDE وجود دارد بنابرین نیازی به نصب آن نیست اما اگر در سیستم شما به دلایلی نصب نشده است می توانید با مراجعه به آدرس Sketch > Include Library > Manage Libraries و جستجوی کلمه ی “WIRE” آن را نصب کنید.
اتصال کیپد و LCD
بعد از نصب تمامی کتابخانه ها پایه های زمین و Vcc مربوط به LCD را به آردوینو متصل کنید و سپس پایه های SDA و SCL مربوط به LCD را مطابق جدول زیر متناسب با بوردهای مختلف آردوینو متصل نمایید.
آردوینو |
پایه ی SDA |
پایه ی SCL |
Uno |
A4 |
A5 |
Nano |
A4 |
A5 |
Mini |
A4 |
A5 |
101 |
SDA |
SCL |
Zero |
SDA |
SCL |
Leonardo |
2 |
3 |
Micro |
2 |
3 |
Duo |
20 |
21 |
Mega |
20 |
21 |
پس از آن کیپد را به آردوینو متصل کنید. مدار برای آردوینو مدل Uno مشابه شکل زیر بسته می شود.
کد مورد نیاز برای نمایش خروجی در یک LCD
پس از انجام تمامی اتصالات گفته شده، این کد را در آردوینو بارگذاری کنید.
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> const byte ROWS = 4; const byte COLS = 4; char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3, 2}; Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); LiquidCrystal_I2C lcd(0x21, 16, 2); void setup(){ lcd.backlight(); lcd.init(); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ lcd.clear(); lcd.setCursor(0, 0); lcd.print(customKey); } }
شما نیاز دارید که آدرس I2C را به LCD خود در خط ۲۰ اضافه کنید.
LiquidCrystal_I2C lcd(0x21, 16, 2);
آدرس I2C مربوط به LCD من، 0x21 است ولی برای شما احتمالا متفاوت باشد. آدرس I2C مربوط به LCD شما در دیتاشیت مربوط به آن ارائه شده است اما اگر آن را به هر دلیل نیافتید می توانید از I2C_Scanner استفاده کنید.
استفاده از پسورد برای راه اندازی رله
یکی از مفیدترین کاربردهای کیپد، استفاده از آن در وارد کردن کلمه عبور (پسورد) می باشد. شما می توانید یک کلمه عبور تنظیم کنید و با استفاده از آردوینو فعال کننده ی یک رله یا هر ماژول دیگری از این کلمه عبور، امنیت وسایل مختلف را بالا ببرید. طبق کد زیر، اگر کلمه عبور به طور صحیح وارد شود، یک رله ی ۵ ولتی فعال می گردد.
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> #define Password_Length 8 int signalPin = 12; char Data[Password_Length]; char Master[Password_Length] = "123A456"; byte data_count = 0, master_count = 0; bool Pass_is_good; char customKey; const byte ROWS = 4; const byte COLS = 4; char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3, 2}; Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); LiquidCrystal_I2C lcd(0x21, 16, 2); void setup(){ lcd.init(); lcd.backlight(); pinMode(signalPin, OUTPUT); } void loop(){ lcd.setCursor(0,0); lcd.print("Enter Password:"); customKey = customKeypad.getKey(); if (customKey){ Data[data_count] = customKey; lcd.setCursor(data_count,1); lcd.print(Data[data_count]); data_count++; } if(data_count == Password_Length-1){ lcd.clear(); if(!strcmp(Data, Master)){ lcd.print("Correct"); digitalWrite(signalPin, HIGH); delay(5000); digitalWrite(signalPin, LOW); } else{ lcd.print("Incorrect"); delay(1000); } lcd.clear(); clearData(); } } void clearData(){ while(data_count !=0){ Data[data_count--] = 0; } return; }
شما می توانید در خط ۱۰ با حذف 123A456 و وارد کردن کلمه ی دلخواه خود، کلمه عبور را تغییر دهید.
char Master[Password_Length] = “123A456”;
طول کلمه عبور در خط پنجم تنظیم می شود.
#define Password_Length 8
طول کلمه عبور در مثال بالا، ۷ است ولی طول کلمه عبور یکی بیشتر از ۷ تنظیم شده است زیراکه یک کاراکتر پوچ در انتهای دنباله وجود دارد. برای مثال اگر طول کلمه عبور شما ۵ کاراکتر داشته باشد شما باید ۶ عدد برای کلمه عبور وارد کنید.
فرمان فعال شدن پایه ی خروجی رله در خط ۷ صادر شده است.
int signalPin = 12;
بعد از اتصال همه اجزا، مدار شما باید شبیه به عکس زیر باشد.
اتصال کیپد به آردوینو و راه اندازی کیپد و ال سی دی با آردوینو اصلا سخت نیست. من فکر میکنم با یک سعی و خطای کوچک شما قادرید کد بالا را برای بسیاری از پروژه ها تغییر داده و اصلاح کنید و از آن در بسیاری کاربردها استفاده کنید. اما اگر به مشکلی برخوردید به ما اطلاع بدهید ما به شما کمک خواهیم کرد. همچنین لطفا سری به دیگر پروژه های آردوینو هم بزنید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام در پروزه دوم کیپد و ای توسی در کامپایل کردن ارور داد میشه راهنمایی کنید
سلام، کتابخانهها را اضافه کردین؟ اگر اضافه کردین و خطا داد لطفا متن خطا را اینجا بفرستین اگر قبلا دیده باشیم کمک میکنیم.
سلام ارور میده داخل پروگرام
سلام ارور میده داخل پروگرام چی کنم