هدف ما از فراهم کردن این مقاله، آموزش راه اندازی کیپد 3×4 و 4×4 با آردوینو است. اگر شما هم قصد انجام این کار را دارید، این مقاله را از دست ندهید.
کیپدهای ماتریسی از نمونه صفحه کلیدهایی هستند که شما در موبایل، ماشین حساب، مایکرویو، اجاق، قفل در و … میبینید. شاید بتوان گفت که این صفحه کلید در همه جا وجود دارد! در پروژههای الکترونیک، این صفحه کلید یکی از بهترین روشهایی است که با استفاده از آن میتوانید به کاربران این فرصت را دهید تا با پروژه شما ارتباط برقرار کنند. به علاوه، این صفحه کلید اغلب برای دسترسی به منو، وارد کردن رمز و کنترل کردن ربات لازم است.
در ادامه، سخت افزار این کیپدها را با هم بررسی خواهیم کرد.
نگاهی به سختافزار – کپیدهای ممبرین
کیپدهای مختلفی وجود دارد، اما ما در این پروژه به بررسی کیپدهای ممبرین 3×4 و 4×4 میپردازیم و البته راه اندازی آنها را به شما آموزش میدهیم. کیپدهای ممبرین از ماده ممبرین منعطف و نازک ساخته شدهاند و در ابعاد مختلف 3×4, 4×4, 1×4 و غیره عرضه میشوند. این صفحه کلیدها علیرغم سایزی که دارند، همگی به یک شکل کار میکنند.
یکی از نکات بسیار جالب در مورد این صفحه کلیدها، برچسبی است که در پشت آنها قرار دارد. با کندن کاغذی که بر روی این برچسبها وجود دارد، میتوانید صفحه کلید را تقریبا به هر چیزی بچسبانید.
بیایید کیپد 4×4 را به عنوان نمونه باهم بررسی کنیم. همانطور که در تصویر بالا میبینید، این کیپد 16 کلید دارد و پشت هر کلید سوئیچ ممبرین خاصی قرار گرفته است. همه سوئیچهای این کیپدها با مسیرهای هادی بهم متصل شدهاند و زیر این پدها یک ماتریس 4×4 را تشکیل میدهند.
اگر از 16 کلید این کیپد استفاده کنید، به 17 پایه ورودی نیاز خواهید داشت ( برای هر کلید یک پایه و یک پایه برای زمین). با این حال، با این آرایش ماتریس، شما تنها به 8 پایه میکروکنترلر (4 سطر و 4 ستون) برای اسکن کردن همه کلیدها نیاز خواهید داشت.
پایههای کیپد 4×3 و 4×4
شناخت پایههای کیپد 4×3 و 4×4 برای راه اندازی آنها ضروری است. پایههای این دو صفحه کلید را میتوانید در تصویر زیر مشاهده کنید:
نحوه کار و نحوه اسکن کردن کیپد 3×4 و 4×4
نحوه عمکلرد کیپدها بسیار ساده است. با فشردن یک کلید، یکی از خطهای سطر به یکی از خطهای ستون وصل میشود. برای مثال همانطور که در انیمیشن زیر مشاهده میکنید، با فشردن کلید 4، ستون 1 و سطر 2 به یکدیگر متصل میشوند.
یک میکروکنترلر میتواند این خطوط را برای تعیین وضعیت یک کلید فشرده شده اسکن کند. برای انجام این کار، میکروکنترلر فرایند زیر را طی میکند:
- میکروکنترلر، سطرها را خروجی و ستونها را ورودی در نظر میگیرد.
- سپس به یکی از سطرها مقدار HIGH میدهد.
- بعد از آن، خطوط ستون را یکی یکی بررسی میکند.
- اگر اتصال یک ستون LOW بماند، کلید آن سطر فشرده نشده است.
- اگر همین ستون HIGH شود، میکروکنترلر تشخیص میدهد کدام سطر و ستون HIGH شده است.
- در آخر، متناسب با سطر و ستون شناسایی شده، کلید فشرده شده را تشخیص میدهد.
سیمکشی – راه اندازی کیپد 3×4 و 4×4 با آردوینو
اکنون که همه چیز را در مورد این کیپدها میدانید، باید راه اندازی کیپد 3×4 و 4×4 با آردوینو را شروع کنید. اما ابتدا میتوانید قطعات و لوازم مورد نظر خود را از طریق لینکهای زیر تهیه کنید:
اتصال کیپد به آردوینو ساده است. در ابتدا، پایه 1 صفحه کلید را به پایه دیجیتال 9 آردوینو متصل کنید و به همین ترتیب اتصالات را انجام دهید یعنی پایه 2 کیپد را به پایه 8 آردوینو وصل کنید و این روند را ادامه دهید.
نصب کتابخانه کیپد
برای اینکه بفهمید کدام کلید فشرده شده است، باید سطرها و ستونها را دائما اسکن کنید. خوشبختانه کتابخانه Keypad.h پیچیدگیهای غیر ضروری را برای شما کم کرده است تا با دستورات ساده بتوانید تشخیص دهید که کدام یک از کلیدها فشرده شده است. با کلیک بر روی لینک زیر میتوانید این کتابخانه دانلود کنید:
برای نصب کتابخانه مسیر زیر را دنبال کنید:
Sketch > Include Library > Manage Libraries…
پس از آن، کمی صبر کنید تا Library manager، فهرست کتابخانهها را دانلود کند و لیست کتابخانههای نصب شده را بروز نماید.
کلمه keypad را در Library manager جستجو کنید. با این کار، کتابخانههای متعددی ظاهر میشود. شما باید کتابخانه نوشته شده توسط Mark Stanley, Alexander Brevig را پیدا و نصب کنید.
کد آردوینو
دستورات زیر به شما نشان میدهد که چگونه کلید فشرده شده کیپد 4×4 و 3×4 را تشخیص دهید. حتی میتوانید از این دستورات به عنوان مبنایی برای سایر پروژههای خود استفاده کنید.
نمونه کد برای کیپد 3×4:
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3}; //connect to the column pinouts of the keypad
//Create an object of keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();// Read the key
// Print if key pressed
if (key){
Serial.print("Key Pressed : ");
Serial.println(key);
}
}
نمونه کد برای کیپد 4×4:
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
//Create an object of keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();// Read the key
// Print if key pressed
if (key){
Serial.print("Key Pressed : ");
Serial.println(key);
}
}
خروجی این کد بر روی سریال به شکل زیر خواهد بود:
توضیحات کد:
دستوراتی که در بالا دیدید، ابتدا کتابخانه Keypad.h را فراخوانی میکند. سپس، تعداد سطرها و ستونهای کیپدی را که میخواهید از آن استفاده کنید، تعریف میکند.
پس از آن، شما باید آرایه 2 بعدی keys[ROWS][COLS] را که نقشه کیپد را مشخص میکند، تعریف کنید. زمانیکه یک کلید خاص از صفحه کلید فشرده شود، کاراکتر متناظر با آن کلید بر روی سریال مانیتور نمایش داده میشود. در کدهای بالا، کاراکترهایی که داخل آرایه آورده شدهاند، به همان شکلی هستند که بر روی کیپد قرار دارند. با این حال، شما میتوانید کاراکترهای مختلفی تعریف کنید. به عنوان مثال اگر میخواهید یک ماشین حساب بسازید، تنها کافی است آرایه را به شکل زیر تعریف کنید:
char keys[ROWS][COLS] = {
{'1','2','3','4'},
{'5','6','7','8'},
{'9','0','+','-'},
{'.','*','/','='}
};
پس از تعریف آرایه، باید یک شئ از کتابخانه Keypad ایجاد کنید. ساختار Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS )
پنج پارامتر دارد:
makeKeymap(keys)
: این پارامتر، نقشه داخلی کیپد را مقداردهی میکند تا با نقشهای که توسط کاربر تعریف شده است، یکسان باشد.rowPins
وcolPins
: این دو پارامتر، پایههای آردوینو هستند که به سطرها و ستونهای صفحه کلید متصل شدهاند.ROWS
وCOLS
: این دو پارامتر، تعداد سطرها و ستونهای صفحه کلید هستند.
زمانیکه شی کیپد ایجاد شد، میتوانید با استفاده از دستور ساده ()getKey بفهمید که کدام یک از کلیدها فشرده است.
توابع مفید در کتابخانه Keypad
در کتابخانه Keypad، توابع مفیدی وجود دارد که شما میتوانید از آنها برای ساخت شئ Keypad استفاده کنید. برخی از آنها را میتوانید در ادامه مشاهده کنید:
- ()char waitForKey: این تابع همیشه منتظر است تا یک کلید فشرده شود. هشدار! این تابع همه کدها را تا زمانی که یک کلید فشرده شود، متوقف میکند. این موضوع به این معنا است که اگر شما از LED و LCD استفاده کنید، به استثنای وقفهها، خبری از LED چشمک زن و به روزرسانی شدن نمایشگر LCD نخواهد بود.
- ()KeyState getState: این تابع، حالت فعلی هر کلید را برمیگرداند. 4 حالت کلید عبارت اند از: IDLE, PRESSED, RELEASED و HOLD.
- ()boolean keyStateChanged: این تابع شما را از تغییر وضعیت هر کلید با خبر میکند. یعنی هر زمان که کلیدی، حتی به صورت اتفاقی، روی کیپد فشرده شود ، این تابع شما را از این تغییر وضعیت مطلع میکند.
- setHoldTime(unsigned int time): بهوسیله این تابع میتوان مدت زمانی (برحسب میلی ثانیه) را که یک کاربر باید یک کلید را نگه دارد تا حالت HOLD برای کلید تشخیص داده شود، تنظیم کرد.
- setDebounceTime(unsigned int time): با این تابع، شما میتوانید مدت زمان Debounce را برحسب میلی ثانیه تنظیم کنید. یعنی هر زمان که کلیدی فشرده شود، با استفاده از این تابع میتوانید از خطایی که به دلیل نوسانات کلید به وجود میآید، جلوگیری کنید.
- addEventListener(keypadEvent): با استفاده از این تابع میتوانید هر نوع تغییری در صفحه کلید از جمله فشرده شدن، نگه داشتن و رها شدن کلیدها را تشخیص دهید.
خلاصه
کیپدهای 4×4 و 3×4 ممبرین معمولا به عنوان ورودی یک پروژه مورد استفاده قرار میگیرند. در این مقاله یاد گرفتید که کیپد 3×4 دارای 12 کلید و کیپد 4×4 دارای 16 کلید است. این کلیدها از طریق یک مسیر رسانا به هم وصل شده و ماتریس 3×4 و 4×4 را شکل دادهاند.
علاوه بر این، با هم مروری بر نحوه عمکلرد این دو صفحه کلید و چگونگی اسکن کردن آنها داشتیم و در ادامه آن، راه اندازی کیپد 3×4 و 4×4 با آردوینو را آغاز کردیم. با این اطلاعات، اکنون شما میتوانید از این دو صفحه کلید در پروژههای خود استفاده کنید. اما به یاد داشته باشید که میتوانید سوالات خود را در مورد این صفحه کلید و نحوه راه اندازی آنها، با ما مطرح کنید.
۱۸ دیدگاه. Leave new
عالی و کارامد بود
سلام ابوالفضل عزیز،
خیلی ممنون از شما
باسلام
خسته نباشید ممنون از سایت خوبتون
بسیار مفید بود
یه سوال داشتم
برای ذخیره کردن اعداد دورقمی یا بیشتر باید چه کار کرد ؟
ممنون میشم راهنمایی کنید
سلام بنیامین عزیز،
ممنون از شما که همراهی میکنی،
برای دریافت اعداد دو رقمی، کافیه توجه کنی که شما دو رقمِ یکان و دهگان از کیپد دریافت میکنی و باید رقم دهگان رو در ۱۰ ضرب کرده و با یکان جمع کنی.
سلام وقت بخیر.آموزشاتون در مورد آردوینو خیلی عالیه.من بجز آموزش کیپد آموزش ماژول سون سگمنت ۱۶۳۷ شما رو هم خوندم و واقعا خیلی برام مفید بود.ممنون از شما برای آموزش های خوبتون
سلام زانیار عزیز،
خواهش میکنم، شما لطف داری،
باعث خوشحالی ماست که مقالات رو دوست داشتی.
سلام
لطفا آموزش استفاده از کیپد از طریق TM1637 رو بگذارید
ممنونم
سلام و درود برشما آرش عزیز
لطفاً پروژه مدنظرتون رو بیشتر توضیح بدید.
برای راه اندازی ماژول TM1637 میتونید این مقاله رو مطالعه کنید:
https://roboeq.ir/blog/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%B3%D9%88%D9%86-%D8%B3%DA%AF%D9%85%D9%86%D8%AA-tm1637-%D8%A8%D8%A7-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88/
ممنونیم از همراهی شما 🙂
سلام
ممنون از اموزشتون
برای اینکه بتونم با این صفحه کلید تو محیط نوتپد یا ورد تایپ کنم باید چه دستوری بهش اضافه کنم
من الان کد هارو نوشتم فقط تو محیط سریال مانیتور تایپ میکنه و تو محیط های دیگه تایپ نمیشه
ممنون میشم راهنمایی کنید
سلام و درود برشما مجید عزیز
عملکردی که مدنظر شماست خودش یه پروژه جداست و به سادگی اضافه کردن یک دستور نیست. این عبارت رو گوگل کنید میتونید پروژه های ساخت کیبورد با آردوینو رو ببینید:
make usb keyboard with arduino and keypad
درود بر شما ، امیدوارم حال دلتون خوب باشه . مهندس عزیز یه سوال داشتم . من یه کد rfid رو با یه کد کیپد ترکیب کردم ولی تو هر بار ترکیب نتونستم جواب بگیرم . یا فقط rfid کار میکنه ، یا فقط کیپد 😥 کد رو تو کامنت بعدی ارسال میکنم . سپاس از شما 🙏🧿🌱
سلام برشما مجید عزیز
بعد از ارسال کد خودتون میتونید پاسخ ما را دریافت کنید.
🙂
چجوری میتونم با اردوینو یه کیوب ۸ در۸ رو راه اندازی کنم
درود برشما معصومه عزیز
راه اندازی کیوب led شبیه دات ماتریس هست. با آموزش راه اندازی ماژول دات ماتریس MAX7219 با آردوینو به راحتی میتوانید اینکار رو انجام بدهید.
موفق باشید:)
سلام و خسته نباشید پستتون خیلی عالی بود
روی اردیوینو اوکی بود ولی روی nodemcu کامپایل میشه ولی روی سریال مانیتور هیچ عکس العملی نشون نمیده و یه سره علامت سوال و حروف عجیب نشون میده میشه به زحمت بگید مشکل کجاست و روی چه پایه هایی میشه پیاده سازی کرد
با تشکر
سلام یاسر عزیز
خوشحالیم که این آموزش مورد رضایت شما قرار گرفته :)،
احتمالاً کتابخانه مورد استفاده برای آردوینو، با esp8266 سازگاری ندارد. لازم به ذکر است که خواندن کیپد لزوماً نیازی به کتابخانه خاصی نداره و با توضیحات مقاله میتونید یه تابع براش بنویسید. برای اینکه بدونید از چه پایههایی از nodemcu میتونید استفاده کنید مقاله راهنمای جامع پایه های ماژول ESP8266 رو مطالعه کنید.
سلام وقت بخیر من میخوام وقتی یه پسورد مثلا ۶یا۸ رقمی فشرده شد یه خروجی دیجیتال رو چند ثانیه فعال کنه (بدون نمایشگر که پسورد وارد شده رو نشون بده) ممنون میشم راهنماییم کنید
درود برشما امیرحسین عزیز
داخل برنامه این مقاله، نحوه خواندن یک عدد تک رقمی آورده شده است. برای اینکه بتوانید یک عدد چند رقمی را بخوانید، باید رقمها را یکی یکی بخوانید، در ۱۰ ضرب کنید و با هم جمع کنید. مثلا برای عدد ۱۲۳، کاربر به ترتیب ۱، ۲ و ۳ را وارد میکند. ابتدا ۱ را دریافت میکنیم و در متغیری میریزیم. سپس عدد ۲ را دریافت کرده، عدد ۱ را که از قبل داریم در ۱۰ ضرب کرده و با ۲ جمع میکنیم (پس تا اینجا ۱۲ داریم). پس از گرفتن عدد سوم ۱۲ را در ۱۰ ضرب کرده و با عدد سوم (۳) جمع میکنیم. در نهایت عدد به دست آمده را با پسورد صحیح مقایسه میکنیم. اگر عدد صحیح بود خروجی را فعال کرده، یک delay چند ثانیهای قرار میدهیم و خروجی را صفر میکنیم.