آردوینو آردوینو Arduino Uno نمایشگر LCD پروژه های آردوینو

آموزش ساخت صفحه نمایشگر LCD لمسی با آردوینو + سورس برنامه

نوشته شده توسط علیرضا قربانی

آموزش ساخت صفحه نمایش لمسی به وسیله آردوینو arduino

به نظر می‌رسد که صفحه نمایش‌های لمسی بر روی تمام دستگاه‌های الکترونیکی از تلفن همراهتان گرفته تا یخچالتان ، جای خود را باز کرده‌اند. خب اگر چه این صفحه‌ نمایش‌های چند لمسی شیک کمی گران قیمت هستند و بسیار سخت هستند تا ارتقاشان دهیم ؛ اما به این معنا  نیست که نمی‌توانیم یک پنل لمسی را به پروژه‌مان اضافه کنیم. پنل لمسی Nintendo DS یک راه حل ارزان و بسیار ساده در اختیار ما می‌گذارد که هر LCD معمولی‌ ای را به یک LCD لمسی تبدیل کنیم.

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

 

تجهیزات مورد نیاز

بورد آردوینو( تمامی مدل‌ها قابل استفاده هستند)

صفحه تاچ مقاومتی ( به زودی در فروشگاه موجود می‌شود)

 

اتصالات صفجه تاچ به آردوینو

اگر یک صفحه مقاومتی بدون برد در اختیار شماست ، بتون توصیه میکنم حتما یک عدد PCB برای صفحه‌ی تاچتون تهیه کنید (طراحی کنید یا بخرید) چون که اتصال مستقیم کابل نواری صفحه تاچ به آردوینو بسیار مشکل است.در نهایت پنل را به صورت زیر به آردوینو متصل کنید:

آموزش ساخت صفحه نمایش لمسی
آموزش ساخت صفحه نمایش لمسی

 

اگر در تعجب هستید که +/-  مقاومت‌ها کجا  هستند… نگران نباشید. فقط ۴ پین را مطابق شکل فوق به آردوینو متصل کنید. حال برای کد نویسی آماده هستید. روش کار به این صورت است که در حفیفت + و – پین‌ها بر اساس چیزی‌ است که کد‌ها معین می‌کنند.

 

همانطور که مشاهده ‌می‌کنید ، صفحه‌ی تاچ دارای دو عدد پین به نام X1 و X2 برای محور افقی و دو عدد پین به نام Y1 و Y2 برای محور عمودی می‌باشد. پس در ابتدای برنامه ۴ متغیر برای نسبت دادن پین‌های صفحه تاچ به آردوینو تعریف می‌کنیم:

int y1 = A0;
int x2 = A1;
int y2 = A2;
int x1 = A3;

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

 

طریقه‌ی خواندن مقادیر به این صورت است که هرگاه بخواهیم مقدار لمس شده در راستای محور X را پیدا کنیم ، باید پین‌های متصل به X را به صورت خروجی تعریف ‌کنیم و پین‌های متصل به Y را به صورت ورودی تعریف کنیم. سپس X1 را در حالت HIGH  یعنی همان ۵ ولت و X2 را در حالتLOW  یا همان ۰ صفر ولت قرار دهیم و سپس مقدار Y1 را به صورت آنالوگ بخوانیم. برای خوانایی بهتر برنامه دراین قسمت یک تابع  به صورت زیر به نام readX تعریف می‌کنیم:

 

int readX(){
  pinMode(y1, INPUT);
  pinMode(x2, OUTPUT);
  pinMode(y2, INPUT);
  pinMode(x1, OUTPUT);

  digitalWrite(x2, LOW);
  digitalWrite(x1, HIGH);

  delay(5); //pause to allow lines to power up

  return analogRead(y1);
}

 

همچنین به صورت مشابه هرگاه بخواهیم مقدار لمس شده در راستای محور Y را پیدا کنیم ، باید پین‌های متصل به Y را به صورت خروجی تعریف ‌کنیم و پین‌های متصل به X را به صورت ورودی تعریف کنیم. سپس Y1 را در حالت HIGH  یعنی همان ۵ ولت و Y2 را در حالتLOW  یا همان ۰ صفر ولت قرار دهیم و سپس مقدار X1 را به صورت آنالوگ بخوانیم. برای خوانایی بهتر برنامه دراین قسمت یک تابع  به صورت زیر به نام readY تعریف می‌کنیم:

int readY(){

  pinMode(y1, OUTPUT);
  pinMode(x2, INPUT);
  pinMode(y2, OUTPUT);
  pinMode(x1, INPUT);

  digitalWrite(y1, LOW);
  digitalWrite(y2, HIGH);

  delay(5); //pause to allow lines to power up

  return analogRead(x2);
}

 

در نهایت تابع‌هایی که تعریف کردیم را در loop برنامه به کار می‌بریم:

int y1 = A0;
int x2 = A1;
int y2 = A2;
int x1 = A3;

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

int readX(){
  pinMode(y1, INPUT);
  pinMode(x2, OUTPUT);
  pinMode(y2, INPUT);
  pinMode(x1, OUTPUT);

  digitalWrite(x2, LOW);
  digitalWrite(x1, HIGH);

  delay(5); 

  return analogRead(y1);
}

int readY(){

  pinMode(y1, OUTPUT);
  pinMode(x2, INPUT);
  pinMode(y2, OUTPUT);
  pinMode(x1, INPUT);

  digitalWrite(y1, LOW);
  digitalWrite(y2, HIGH);

  delay(5); 

  return analogRead(x2);
}

void loop()
{
  int x = readX();
  int y = readY();


  if(x < 1000 & y < 1000){
    Serial.print("x: ");
    Serial.print(x-100);
    Serial.print(" - y: ");
    Serial.println(y- 130);  
  }

  delay(100);  

}

 

 

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

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۳ دیدگاه

  • سلام خسته نباشین اموزشی هم در این رابطه دارین ساخت برد لمسی ساده بدون نمایشگر فقط لمسی

  • سلام خسته نباشید یه سوال ذهنمو درگیر کرده
    لپ تاپی که لمسی نیست رو ممیشه لمسی کرد اگه میشه ممنوم میشم جوابشو واسم ایمیل یا هم تو همین کامنتا جواب بدید

  • سلام
    خسته نباشید
    من یک سوال داشتم
    میخواستم بدونم که این مبدلی که استفاده کردید اسمش چیه برم بخرم
    و نرم افزاری که این مدار بالایی رو طرحی کردید اسمش چیه خیلی وقته دنبال این نرم افزار هستم
    و در فروشگاه نمایش گر لمسی کوچک مناسب ساعت هوشمند دارید و اگه دارید میشه لینکش رو بزارید
    با تشکر

  • سلام
    خیلی ممنون از راهنمایی
    آخه تو نرم افزار فریتزینگ برد آردینو این جوری که تو تصویر بالا کشیده اید نیست این یک گرافیکش بالا تره
    نرم افزار دیگه ای نمیشناسید

  • با سلام و وقت بخیر
    ممنون بابت آموزشتون
    ببخشید تو محور x ها و محور y ها یه عددی رو از عدد خوانده شده کم کردین میخواستم علتش رو بدونم؟
    اگه به خاطر حاشیه هستش میخواستم بدونم که این عدد برای همه صفحه های تاچ یکیه؟
    و اگه بخاطر حاشیه هستش پس چرا از دو طرف کم نکرده؟
    ببخشید سوالام زیاد شد.
    ممنون.