مقدمه
کی پد وسیله ایست که می توان از آن برای دریافت اطلاعات ورودی از سوی کاربر استفاده کرد.
در این پروژه ابتدا نحوه راه اندازی کی پد 4*4 با آردوینو را می آموزیم و سپس با استفاده از کیپد یک ماشین حساب ساده خواهیم ساخت.
آنچه در این آموزش یاد می گیرید
- معرفی کیپد
- انواع کیپد
- کیپد چگونه کار میکند
- نحوه راه اندازی کیپد با آردوینو
- انواع روش های راه اندازی کیپد
- ساخت ماشین حساب
کی پد چیست و چگونه کار می کند؟
از گذشته تا کنون برای ورود اطلاعات به دستگاه ها و سیستم ها از روش های مختلفی مانند دکمه، صوت، تصویر و … استفاده می شود
یکی از روش های کارآمد برای ورود اطلاعات به سیستم استفاده از کیپد است. – به همین دلیل کیپد ها را در اطراف خود بسیار می بینیم. مانند صفحه کلید کامپیوتر شما که خود نوعی کیپد بزرگ است.
کیپد ها از 2 ورق پلاستیکی که دارای خطوط سیمی می باشد ساخته شده اند که در نقاط مشخص شده این خطوط به یکدیگر رسیده و با استفاده تکنیک های خاصی روی یکدیگر قرار میگیرند.
انواع کیپد
کیپد ها در انواع مختلفی تولید می شوند اما متداول ترین اندازه آن ها 3*4 و 4*4 است.
این اعداد نشان گر تعداد سطر و ستون های کیپد ها هستند برای مثال کیپد 3*4 شامل 4 سطر و 3 ستون می شود.
کیپد چگونه کار میکند
برای دریافت اطلاعات از 12 دکمه نیازمند استفاده از 12 عدد پین دیجیتال از میکروکنترلر (آردوینو) خود هستیم و این یعنی هدر رفتن تعداد بسیاری از پین ها اما با استفاده از کیپد فقط به 7 عدد پین دیجیتال نیاز داریم. نحوه عملکرد کیپد را می توانید در تصویر زیر مشاهده کنید.
نام گذاری پین های کیپد بر اساس تعداد سطر و ستون آنها می باشد و از این رو می توانید 2 نمونه از نام گذاری آنها را در تصویر زیر مشاهده کنید.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
آموزش راه اندازی کی پد با آردوینو
برای اتصال کیپد ها به آردوینو از 4 روش ماتریکسی ، تبدیل کننده ها ،مقاومتی و ترکیبی ماتریکسی مقاومتی استفاده میشود.
در روش اول تمام پایه های کیپد را باید به آردوینوی خود متصل کنیم.
در روش دوم از IC های خاص استفاده می کنیم.
در روش سوم با استفاده از یک ماتریکس از مقاومت ها تمام پایه های کیپد را به یکدیگر متصل کرده و در انتها به پین آنالوگ آردوینو متصل میکنیم.
در روش چهارم که ترکیبی از روش های اول و سوم می باشد. هر ستون را جداگانه به پایه آنالوگ متصل می کنیم.
مزیت و معایب روش ها در جدول زیر آمده است.
روش اول | روش دوم | روش سوم | روش چهارم | |
---|---|---|---|---|
سرعت عملکرد | بسیار بالا | بسیار بالا | پایین | متوسط |
تعداد پین های استفاده شده | بسیار بالا | پایین فقط 2 پین | فقط یک پین | متوسط |
کد نویسی | متوسط | متوسط | آسان | متوسط |
اتصال سخت افزاری | متوسط | متوسط | مشکل ( نیازمند هویه کاری) | متوسط |
هزینه | پایین | بالا | متوسط | پایین |
توجه
در این آموزش، راه اندازی کیپد و ساخت ماشین حساب را با استفاده از روش اول خواهیم آموخت.
سیم بندی
کد
کتابخانه مورد نیاز را می توانید از لینک زیر دریافت کنید.
توجه
اگر نیاز به راهنمایی بیشتر برای نصب کتابخانه بر روی آردوینو دارید، می توانید به آموزش نصب کتابخانه بر آردوینو مراجعه کنید.
نکته
این کد را میتوانید درون فایل کتابخانه نیز پیدا کنید.
/* @file CustomKeypad.pde
|| @version 1.0
|| @author Alexander Brevig
|| @contact alexanderbrevig@gmail.com
||
|| @description
|| | Demonstrates changing the keypad size and key values.
|| #
*/
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte colPins[ROWS] = {5, 4, 3, 2}; // Pins used for the rows of the keypad
byte rowPins[COLS] = {9, 8, 7, 6}; // Pins used for the columns of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( BuildKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
ساخت یک ماشین حساب
برای ساخت ماشین حساب نیازمند یک نوع کی پد هستیم که دارای تمامی اعداد 0 تا 9 و حداقل 5 کلید جداگانه برای عملگرهای ریاضی باشد.
سیم بندی
کد
کد زیر را بر روی آردوینوی خود آپلود کنید و از ماشین حساب خود لذت ببرید. دقت کنید باید حتما مرحله قبل (راه اندازی با آردوینو) را بدرستی انجام داده باشید.
نکته
در صورتی که شماره دکمه های خود را در قسمت قبل تغییر دادید به همان صورت در پروژه ماشین حساب نیز تغییر دهید.
/*
modified on 7 Jul 2020
Home
*/
#include <Keypad.h>
const byte ROWS = 4; // four rows
const byte COLS = 4; // four columns
float firstNumber = 0;
float secondNumber = 0;
float result = 0;
bool section = false;
int type = 0;
// Map the buttons to an array for the Keymap instance
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte colPins[ROWS] = {5, 4, 3, 2}; // Pins used for the rows of the keypad
byte rowPins[COLS] = {9, 8, 7, 6}; // Pins used for the columns of the keypad
// Initialise the Keypad
Keypad customKeypad = Keypad(BuildKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600); // Initialise the serial monitor
}
void loop() {
// Read the pushed button
int button = int(customKeypad.getKey()) - 48;
if (0 <= button && button <= 10) {
Serial.print(button);
if (section == false) {
firstNumber = firstNumber * 10 + button;
} else {
secondNumber = secondNumber * 10 + button;
}
} else {
switch (button) {
case 17://A
section = true;
type = 1;
Serial.print('+');
break;
case 18://///B
section = true;
type = 2;
Serial.print('-');
break;
case 19:////C
section = true;
type = 3;
Serial.print('*');
break;
case 20:////D
section = true;
type = 4;
Serial.print('/');
break;
case -6:////*
section = false;
type = 0;
Serial.println(' ');
break;
case -13://///#
Serial.print(" = ");
switch (type) {
case 1:
result = (firstNumber + secondNumber);
break;
case 2:
result = (firstNumber - secondNumber);
break;
case 3:
result = (firstNumber * secondNumber);
break;
case 4:
result = (firstNumber / secondNumber);
break;
}
type = 0;
Serial.println(result);
firstNumber = 0;
secondNumber = 0;
section = false;
break;
}
}
}
تعداد خانه های سطری و ستونی کیپد به این صورت تعریف می شود.
const byte ROWS = 4; // four rows
const byte COLS = 4; // four columns
نحوه چیدمان خانه ها در کیپد به صورت زیر مشخص می شود.
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
شماره پایه های آردوینو که به کیپد متصل میشود نیز به صورت زیر است:
byte colPins[ROWS] = {5, 4, 3, 2}; // Pins used for the rows of the keypad
byte rowPins[COLS] = {9, 8, 7, 6}; // Pins used for the columns of the keypad
استفاده از کتابخانه مربوطه جهت مشخص کردن شماره پایه ها به نام انتخابی پایه ها:
Keypad customKeypad = Keypad(BuildKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
تبدیل مقادیر کارکتر به مقادیر عددی:
int button = int(customKeypad.getKey()) - 48;
با استفاده از دستور شرطی، بخشی از کیپد که شامل اعداد 0-9 می شود، با توجه به اولویت ورود اطلاعات در حافظه ذخیره می شود:
if (0 <= button && button <= 10) {
Serial.print(button);
if (section == false) {
firstNumber = firstNumber * 10 + button;
} else {
secondNumber = secondNumber * 10 + button;
}