آموزش ساخت صفحه نمایش لمسی به وسیله آردوینو 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); }
سلام خسته نباشین اموزشی هم در این رابطه دارین ساخت برد لمسی ساده بدون نمایشگر فقط لمسی
سلام
در این خصوص میتوانید از سنسور تاچ استفاده کنید که در سایت آموزش داده شده است. لینک زیر را مطالعه کنید.
آموزش و راه اندازی سنسور تاچ
دست شما درد نکنه خیلی مطلب جالبی بود. امیدوارم که موفق باشی
سلامت باشید.
سلام این برنامه انگار مشکل داره متغیرو در if خطا میگیره
سلام
با تشکر از توجه شما
کد اصلاح شد و میتوانید استفاده کنید.
سلام خسته نباشید یه سوال ذهنمو درگیر کرده
لپ تاپی که لمسی نیست رو ممیشه لمسی کرد اگه میشه ممنوم میشم جوابشو واسم ایمیل یا هم تو همین کامنتا جواب بدید
با سلام
در خصوص نمایشگرهای LCD این امکان توسط یک شیلد مقاومتی صورت میگیرد. ولی برای لپ تاپ قابل اجرا نیست.
سلام
خسته نباشید
من یک سوال داشتم
میخواستم بدونم که این مبدلی که استفاده کردید اسمش چیه برم بخرم
و نرم افزاری که این مدار بالایی رو طرحی کردید اسمش چیه خیلی وقته دنبال این نرم افزار هستم
و در فروشگاه نمایش گر لمسی کوچک مناسب ساعت هوشمند دارید و اگه دارید میشه لینکش رو بزارید
با تشکر
با سلام
مبدل راه انداز تاچ است. در خصوص نرم افزار هم Fritzing را بررسی کنید.
سلام
خیلی ممنون از راهنمایی
آخه تو نرم افزار فریتزینگ برد آردینو این جوری که تو تصویر بالا کشیده اید نیست این یک گرافیکش بالا تره
نرم افزار دیگه ای نمیشناسید
با سلام
برای این منظور میتوانید تصویری جدید به مخازن اضافه کنید.
با سلام و وقت بخیر
ممنون بابت آموزشتون
ببخشید تو محور x ها و محور y ها یه عددی رو از عدد خوانده شده کم کردین میخواستم علتش رو بدونم؟
اگه به خاطر حاشیه هستش میخواستم بدونم که این عدد برای همه صفحه های تاچ یکیه؟
و اگه بخاطر حاشیه هستش پس چرا از دو طرف کم نکرده؟
ببخشید سوالام زیاد شد.
ممنون.