تشخیص الگوی حرکتی در آردوینو
ابتدا مدار زیر را ایجاد کنید:
پین های تاچ پد خازنی و پین های کنترلر آن(که در وسط تصویر بالا قرار دارد) به صورت متناظر به یکدیگر متصل شده اند. اتصالات بین کنترلر و آردوینو نیز به ترتیب به صورت زیر هستند:
- GND به GND
- VCC به 5V
- SCL به A5 (پین آنالوگ شماره 5)
- SDA به A4
- IQR به D2 (پین دیجیتال شماره 2)
- ADDR اتصال آن ضروری نیست.
اگر تاچ پد شما که خریداری کرده اید دقیقا مانند این تاچ پد نیست نگران نباشید. زیرا اگر اتصالات به درستی متصل شده باشند، همه چیز به درستی کار خواهد کرد. اکنون نرم افزار آردوینو را باز کنید و از منوها به آدرس زیر بروید:
File | Examples | MPR121 | Examples | Touchpad
و یا اینکه کدهای زیر را کپی کنید و در آردوینو الصاق کنید:
#include <Wire.h>
#include <mpr121.h>
int X ; // مختصات ایکس
int Y ; // مختصات وای
// ========= setup =========
void setup()
{
// مقداردهی اولیه ی تابع
Serial.begin(19200);
Wire.begin();
CapaTouch.begin();
delay(500);
Serial.println("START");
}
// ========= loop =========
void loop()
{
X=CapaTouch.getX(); // گرفتن موقعیت ایکس
Y=CapaTouch.getY(); // گرفتن موقعیت وای
if(X>=1 && X<=9 && Y>=1 && Y<=13)
{
// بررسی اینکه آیا مختصات در محدوده قرار دارند یا نه
Serial.print("X=");
Serial.print(X);
Serial.print(" Y=");
Serial.println(Y);
}
delay(300);
}
اکنون این برنامه را اجرا(run) کنید، سپس Serial Monitor را باز کنید و نرخ علامت در ثانیه(baud rate) را به 19200 تنظیم کنید. با استفاده از انگشتان خود، کمی با تاچ پد کار کنید، چیزی شبیه تصویر زیر به شما نشان داده خواهد شد:
قبل از اینکه توضیح دهیم که چگونه می خواهیم از این دستگاه استفاده کنیم، اجازه دهید کمی توضیح دهیم که دقیقا با این دستگاه می خواهیم چه کار کنیم. با استفاده از این تاچ پد، کارهای مختلفی می توانیم انجام دهیم اما در این پروژه می خواهیم با استفاده از این تاچ پد و آردوینو و نرم افزار Processing ترسیم های انگشت را به حروف الفبا تبدیل کنیم. قبل از اینکه به سراغ نرم افزار Processing برویم نیاز داریم تا بیاموزیم که چگونه با مسائل پردازش تصویر، که دهه ها مهندسان را به خود مشغول کرده است برخورد کنیم. پردازش تصویر خیلی هم پیچیده نیست اما به ایده پردازی های مختلفی نیاز دارد. لطفا به تاچ پد خازنی خود نگاهی بیاندازید:
لطفا حدس بزنید که برای آنالیز الگوهای حرکتی به چه چیزی نیاز داریم؟ اگر در جواب بگویید: به یک آرایه ی دوبعدی، درست پاسخ داده اید. یک آرایه یا ماتریس دوبعدی مانند همان که در بازی دوز به کار بردیم، برای حل این مسئله به ما کمک می کند. اگر تاکنون با تاچ پد کار کرده باشید، و اگر تاچ پد شما مشابه نمونه ی به کار رفته در این فصل باشد، X(ایکس) دو ردیف اول برابر با 1 است، و X دو ردیف آخر برابر با 13 است، Y دو ستون سمت چپ برابر با 1 است و Y دو ستون سمت راست برابر با 9 است.
چینش تاچ پد ما به صورت زیر است و مختصات به صورت زیر در نظر گرفته می شوند:
ما می خواهیم یک ماتریس 13x9 ایجاد کنیم به طوری که مقدار اولیه برای تمامی عناصر آن 0 باشد. وقتی که سنسور تاچ پد خازنی لمس می شود، مقدار متناظر آن در ماتریس ما به 1 تبدیل می شود. به این وسیله، یک راه چاره برای تعیین مسیر حرکت توسط ریاضیات پیدا کرده ایم. برای کمتر کردن پیچیدگی این مسئله و دردسر محاسبه ی پیچ و خم های حروف الفبا، فقط خط های صاف را در نظر می گیریم:
اگر حرف D را به صورت یک مستطیل در نظر بگیریم، دیگر نمی توانیم حرف O را ترسیم کنیم. چون این حروف تنها از خط های صاف تشکیل می شوند، پردازش آنها ساده تر است.
اجازه دهید به حرف A نگاهی بیاندازیم:
اکنون اجازه دهید تا هریک از خط های مستقیم حرف A را نام گذاری کنیم:
- خط افقی بالایی: T
- خط افقی پایینی: B
- خط افقی وسط: H
- خط عمودی سمت چپ: L
- خط عمودی سمت راست: R
- خط عمودی وسط: V
اگر بخواهیم این نام ها را روی تصویر نشان دهیم، به صورت زیر خواهد بود:
توجه کنید که خط افقی پایینی و خط عمودی وسطی محو هستند. زیرا حرف A از این خط ها استفاده نمی کند. ما در ماتریسی که قبلا ذکر کردیم، می توانیم محاسبه کنیم که آیا یک ترکیب خاص از خط های T و B و H و L و R و V که نشان دهنده ی یک حرف الفبا باشند، وجود دارد یا نه. اگر وجود داشتن یک خط را با عدد 1 نشان دهیم(که نشانگر true است) برای حرف A داریم:
- T = 1
- B = 0 (یعنی این خط وجود ندارد و محو است)
- H = 1
- L = 1
- R = 1
- V = 0
با این روش می توانیم تمام حروف الفبا را نشان دهیم ، اما نشان دادن برخی از حروف نکته دار است. بعنوان مثال حرف P به صورت زیر رسم می شود:
مشکلی که وجود دارد این است که چگونه خط عمودی R را نمایش دهیم. برای حل مشکل خط های نصفه، ما مقدار آنها را با عدد 2 نشان می دهیم. اگر از مقدار \(1^2\) استفاده کنیم ارتباط بیشتری خواهد داشت اما چون این مقدار کسری در فمت اعداد صحیح(integer) به 0 تبدیل می شود، از مقدار 2 استفاده کرده ایم. بنابراین حرف p به صورت زیر نشان داده می شود:
- T = 1
- B = 0
- H = 1
- L = 1
- R = 2
- V = 0
اکنون برای نشان دادن مدل تاچ پد به صورت واقعی باید از ماتریس ها استفاده کنیم. از این رو، چینش ساده ی زیر را در نظر می گیریم:
اگر بخواهیم در تصویر بالا حرف A را ترسیم کنیم به صورت زیر خواهد بود:
اکنون که فهمیدیم چگونه این مسئله را حل کنیم، به سراغ کدنویسی می رویم. پس آردوینو را باز کنید و کدهای زیر را در آن کپی و الصاق کنید. همچنین می توانید فایل touch_pad.ide که در پوشه ی دانلودی این کتاب قرار دارد را در آردوینو باز کنید.
// Connections:
// SDA (MPR121) -> PIN A4 (Arduino)
// SCL (MPR121) -> PIN A5 (Arduino)
// IRQ (MPR121) -> PIN A2 (Arduino)
// Libraries
#include <Wire.h>
#include <mpr121.h> // کتابخانه ی تاچ پد
int X ; // X-coordinate
int Y ; // Y-coordinate
int inByte = 0; // incoming serial byte
void setup()
{
Serial.begin(57600); // Begin serial at 57600 baud rate (faster)
Wire.begin(); // intiialize wire library
CapaTouch.begin(); // initialize the capacitive touch library
delay(500); // brief delay for initialization
}
void loop()
{
X = CapaTouch.getX(); // Get X position.
Y = CapaTouch.getY(); // Get Y position.
// Determine whether in the range.If not,do nothing.
if(X>=1&&X<=9&&Y>=1&&Y<=13)
{
// Debug lines, can be uncommented to check inputs
//Serial.print("X=");
//Serial.write(X);
//Serial.print(" Y=");
//Serial.write(Y);
// convert X and Y coordinates into one variable
if(Y<10)
{
Serial.print(X*10+Y); // prints to serial port
}
else if(Y>9)
{
Serial.print(X*100+Y); // prints to serial port
}
}
delay(200); // delay for message to be relayed
}
حالا این sketch را با نام touch_pad در فولدری به نام Chapter 3 ذخیره(save) کنید. به این نکته توجه کنید که ما چگونه مختصات X و Y را به اعداد صحیح تبدیل کردیم و این نقاط به دست آمده را از طریق پورت سریال ارسال کردیم. اکنون در نرم افزار Processing فایلی به نام touch_pad_pro.pde را باز کنید و آن را Run کنید. سپس آن را با نام touch_pad_pro ذخیره کنید. سپس کدهای آردوینو را آپلود کنید و تنها پس از این برنامه ی processing را run کنید. اگر برای کتابخانه ها با خطا مواجه شدید و error دریافت کردید، اطمینان حاصل کنید که آنها در پوشه ی Processing که در Documents قرار دارد نصب شده باشند.
حالا سعی کنید کمی با تاچ پد بازی کنید. توصیه می کنیم که ابتدا حرف I را رسم کنید، چون رسم آن بسیار ساده است. خط ها را ظریف رسم کنید. شما می توانید روی خط های قبلی نیز بروید. به زودی متوجه خواهید شد که برای تشخیص خط ها توسط نرم افزار لازم نیست بی عیب و نقص باشند. نتایج باید مانند زیر باشند و یا شبیه به آنها باشند:
با استفاده از این دانش، تقریبا می توانید هر چیزی را با تاچ پد رسم کنید. مثلا می توانید بازی مارپیچی یا قفل دیجیتالی را شبیه سازی کنید.
- نوشته شده توسط احسان عباسی
- بازدید: 2773