آردوینو, پروژه آردوینو

نحوه اتصال کیپد 3×4 و 3×3 به آردوینو

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

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

ماژول‌های کی‌پد در اندازه‌های مختلف تولید شده‌اند که رایج‌ترین آنها 12 کلیده (4×3) و 16 کلیده (4×4) هستند. ظاهر این ماژول‌ها شبیه دکمه‌های به کار رفته در تلفن‌ها می‌باشد به همین خاطر هر کسی می‌تواند از آنها استفاده کند.

به هر ترتیب، فرقی نمی‌کند که ماژول‌های کی‌پد چند کلید دارند زیرا کاربرد آنها یکسان است. حال در بلاگ بهنام رباتیک می‌خواهیم ببینیم چگونه می‌تواند اقدام به راه اندازی کیپد با آردوینو کرد؛ پس با ما همراه باشید.

فهرست مطالب

کیپد 4×4 در سمت راست و کیپد 3×4 در سمت چپ
کیپد 4×4 در سمت راست و کیپد 3×4 در سمت چپ

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

ساختار ماژول‌های کی‌پد

ماژول‌های کی‌پد روی خود یک پوشش غشاء مانند نازک و انعطاف‌پذیر دارند و معمولاً از شش لایه تشکیل شده‌اند:

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

نکته: اگر لایه پشتی کی‌پد را جدا کنید، اتصالات آن را مشاهده خواهید کرد.

ساختار ماژول کی‌پد 4×4
ساختار ماژول کی‌پد 4×4

به منظور کاهش اتصالات ورودی و خروجی I/O، همان‌طور که می‌بینید، تمامی ردیف‌ها و ستون‌ها با سیم به همدیگر وصل شده‌اند. اگر این‌چنین نبود، می‌بایست 17 سیم در اختیار می‌داشتیم؛ 16 سیم برای دکمه‌ها و 1 سیم نیز برای اتصال به زمین (GND) اما با این شیوه، به تنها 8 پین نیاز داریم تا تمامی کی‌پد 4×4 را کنترل کنیم. این تکنیک که بر مبنای آن کنترل چندین ورودی با کمترین پین را در اختیار می‌گیریم، مولتی‌پلکسینگ نام دارد.

کی‌پد ماتریکس چگونه کار می‌کند؟

کی‌پد ماتریکسی که ما داریم در اینجا در مورد آن صحبت می‌کنیم، از چندین دکمه فشاری ساخته شده که به صورت افقی و عمودی کنار هم قرار گرفته‌اند. برای هر ردیف و هر ستون، یک پین وجود دارد بنابراین کی‌پد 4+4 تعداد 8 پین و کی‌پد 4+3 تعداد 7 پین دارد.

تصویر زیر نشان می‌دهد که ردیف‌های افقی و عمودی داخلی چگونه به هم وصل شده‌اند.

نحوه قرارگیری دکمه‌های کیپد 3×4
نحوه قرارگیری دکمه‌های کیپد 3×4

زمانی که دکمه فشار داده می‌شود، یکی از ردیف‌ها به یکی از ستون‌ها وصل می‌گردد و اجازه خواهد داد جریان از میان آنها عبور کند. مثلاً، وقتی دکمه 4 را فشار می‌دهیم، ستون شماره 1 و ردیف شماره 2 به هم متصل می‌شوند.

کی‌پد ماتریکس چگونه کار می‌کند؟
کی‌پد ماتریکس چگونه کار می‌کند؟

در ادامه پس از شناسایی اینکه کدام ستون و ردیف به هم وصل هستند، می‌توانیم بگوییم که کدام دکمه فشار داده شده است.

اسکن کی‌پد

در ادامه می‌بینیم که چگونه یک میکروکنترلر ردیف‌ها و ستون‌ها را اسکن می‌کند تا ببیند کدام دکمه فشار داده شده است.

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

آشنایی با پین‌های کی‌پد 4×4 و 3×4 قبل از شروع پروژه اتصال کیپد به آردوینو

این کیپدها کانکتور مادگی دارند. وقتی به جلوی آنها نگاه می‌کنید، پین‌های ردیفی در سمت چپ قرار گرفته‌اند و معمولاً هم در نزدیکی کانکتور به یک پوشش تیره مجهز شده‌اند تا بتوانیم آنها را شناسایی کنیم. به این ترتیب، پین‌های ماژول‌های کی‌پد مانند تصویر زیر است.

پین‌های کیپد 4×4 در سمت راست و کیپد 3×4 در سمت چپ
پین‌های کیپد 4×4 در سمت راست و کیپد 3×4 در سمت چپ

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

حالا که تقریباً همه چیز را در مورد ماژول‌های کی‌پد می‌دانید، می‌توانید شروع به راه اندازی کیپد با آردوینو کنید.

وصل کردن ماژول به برد هوشمند بسیار آسان است زیرا اتصالات آردوینو نیز شبیه اتصالات کانکتور کی‌پد می‌باشند. بهتر است کار خود را با وصل کردن پین 1 کی‌پد به پین دیجیتالی شماره 9 آردوینو شروع کنید و این کار را با وصل کردن پین‌های بعدی ادامه دهید.

آسان‌ترین راه برای وصل کردن این پین‌ها، استفاده از یک کابل 8 پین مادگی به مادگی می‌باشد.

چگونگی اتصال کیپد (4×4 در سمت راست و 3×4 در سمت چپ) به آردوینو
چگونگی اتصال کیپد (4×4 در سمت راست و 3×4 در سمت چپ) به آردوینو

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

برای اینکه مشخص کنید کدام دکمه فشار داده شده، باید ردیف‌ها و ستون‌ها را مرتباً آنالیز نمایید. خوشبختانه کتابخانه Keypad.h برای راه اندازی کیپد با آردوینو نوشته شده تا پیچیدگی‌هایی که فکر می‌کردیم، از بین رفته باشند.

برای نصب کتابخانه نامبرده، به آدرس Sketch> Include Library> Manage Libraries بروید و منتظر مدیریت کتابخانه بمانید تا Keypad.h دانلود و لیست کتابخانه‌های در دسترس آپدیت شود.

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

حالا نوشتن کلمه keypad سرچ خود را فیلتر کنید. به دنبال نتیجه جستجو Keypad by Mark Stanley, Alexander Brevig بگردید. روی آن کلیک کرده و دکمه Install را بزنید.

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

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

کدهای ساده‌ای که در زیر می‌بینید، باعث می‌شود وقتی دکمه‌ای را می‌فشارید، نتیجه آن در سریال مانیتور نمایان گردد.

کدهای لازم برای راه اندازی کیپد 4×3 با آردوینو

				
					#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);
  }
}
				
			

پس از وارد کردن کدهای داده شده، سریال مانیتور را با بادریت 9600 اجرا کنید. اینک برخی از دکمه‌های روی کیپدها را فشار دهید تا مقادیر آنها را در سریال مانیتور ببینید.

خروجی‌های ماژول کیپد در سریال مانیتور آردوینو
خروجی‌های ماژول کیپد در سریال مانیتور آردوینو

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

کدهای نوشته شده با کتابخانه Keypad.h و تعیین مقادیر ردیف‌ها و ستون‌ها آغاز می‌شوند. اگر شما از یک کی‌پد متفاوت استفاده می‌کنید، این مقادیر را تغییر دهید.

				
					#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
				
			

در مرحله بعد، یک آرایه دو بعدی یعنی keys[ROWS][COLS] را تعریف می‌کنیم که شامل کاراکترهای قابل چاپ در زمان فشار دادن یک دکمه به خصوص می‌گردد. در این کدها، کاراکترها درست مانند نحوه قرارگیری دکمه‌ها در کیپدها مرتب شده‌اند.

				
					char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
				
			

با این حال، شما می‌توانید آنها را آن‌طور که دوست دارید تغییر دهید. مثلاً اگر می‌خواهید یک ماشین‌حساب بسازید، فقط کافی است آرایه را عوض کنید.

				
					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, 2}; //connect to the column pinouts of the keypad
				
			

این‌بار یک هدف کتابخانه کی‌پد می‌سازیم. این ساختارها پنج بخش دارند:

  • makeKeymap(keys) نقشه کلیدی داخلی را با زمان فشار دادن دکمه‌ها توسط کاربران را متوازن می‌کند.
  • rowPins و colPins اتصالات آردوینو را با اتصالات پین‌های عمودی و افقی کی‌پد مشخص می‌کنند.
  • ROWS و COLS نیز ردیف‌ها و ستون‌های کی‌پد را نمایش می‌دهند.
				
					//Create an object of keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
				
			

در بخش Setup، ابتدا پورت سریال را آغاز می‌کنیم.

				
					void setup(){
  Serial.begin(9600);
}
				
			

در بخش Loop هم از تابع getKey() بهره می‌بریم تا وقتی دکمه‌ای فشار داده می‌شود، مقدار آن را شناسایی کنیم. سپس آن را روی سریال مانیتور پرینت خواهیم کرد.

				
					void loop(){
  char key = keypad.getKey();// Read the key
  
  // Print if key pressed
  if (key){
    Serial.print("Key Pressed : ");
    Serial.println(key);
  }
}
				
			

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

توابع کاربردی زیادی وجود دارند که شما می‌توانید از آنها در این پروژه بهره ببرید. در ادامه برخی از آنها را مشاهده می‌کنید:

  • char waitForKey(): این تابع باعث می‌شود تا کی‌پد منتظر بماند تا کاربری یکی از دکمه‌ها را فشار دهد. فقط توجه داشته باشید که این تابع سایر کدها را مسدود می‌کند تا دکمه‌ای فشار داده شود. این یعنی LED چشمک نخواهد زد، محتویات نمایشگر آپدیت نخواهد شد و . . .
  • KeyState getState(): این تابع جریان هر کدام از دکمه‌ها را بازمی‌گرداند. چهار حالت عبارتند از بیکاری (Idle)، فشار داده شده (Pressed)، رها شده (Released) و نگه داشته شده (Hold).
  • boolean keyStateChanged(): این تابع به شما اجازه می‌دهد که ببینید چه زمانی حالت یک دکمه تغییر کرده است.
  • setHoldTime(unsigned int time): این تابع تعداد میلی‌ثانیه‌ای که کاربر باید دکمه‌ای را نگه دارد تا حالت نگه داشته شده (Hold) فعال گردد را مشخص می‌کند.
  • setDebounceTime(unsigned int time): این تابع تعداد میلی‌ثانیه‌ای که کی‌پد منتظر می‌ماند تا کاربر یکی از دکمه‌ها را فشار دهد را مشخص می‌کند.
  • addEventListener(keypadEvent): اگر کی‌پد استفاده شد، یک رویداد را فعال خواهد کرد.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *