# پشت شیشهی صفحه چه خبر است؟
وقتی به صفحهی گوشی نگاه میکنیم، فقط یک سطح شیشهای صاف میبینیم. اما آن شیشه تنها بخش کوچکی از سیستم Touch است. در زیر آن، لایههایی بسیار نازک قرار دارند که برای تشخیص لمس ساخته شدهاند. در گوشیهای امروزی، رایجترین فناوری Capacitive Touch یا صفحهی لمسی خازنی است.
ایدهی آن بر پایهی یک ویژگی سادهی الکتریکی است:
اضافه شدن انگشت انسان میتواند ظرفیت خازنی یک ناحیه را تغییر دهد.
برای اینکه بفهمیم این جمله دقیقاً یعنی چه، اول باید کمی با خازن آشنا شویم.
# خازن چیست؟
خازن را میتوان بهصورت ساده دو ناحیهی رسانا در نظر گرفت که بین آنها یک میدان الکتریکی شکل میگیرد. مقدار ظرفیت خازنی فقط به خود این دو رسانا وابسته نیست؛ محیط اطراف آنها هم روی آن تأثیر میگذارد.
به همین دلیل اگر جسمی رسانا را به یک ساختار خازنی نزدیک کنیم، شرایط الکتریکی آن کمی تغییر میکند. انگشت انسان هم در همین دسته قرار میگیرد. پس میتوانیم کل ایده را اینطور خلاصه کنیم:
زنجیرهی تشخیص لمس
الکترودهای صفحه
میدان الکتریکی
نزدیک شدن انگشت
تغییر ظرفیت خازنی
اندازهگیری تغییر
البته گوشی قرار نیست فقط بگوید «یک چیزی صفحه را لمس کرده است». مسئلهی مهمتر این است که: کدام قسمت صفحه تغییر کرده است؟
# صفحه یک شبکهی بزرگ از حسگرهاست
برای پیدا کردن موقعیت انگشت، سطح Touch را میتوان به شکل یک شبکه تصور کرد. روی خانههای شبکه حرکت کنید تا اثر انگشت روی نواحی مجاور را ببینید:
touch_grid.exe
X0
X1
X2
X3
X4
X=-- , Y=--
▲ انگشت خود را روی شبکه حرکت دهید
در سختافزار واقعی، این ساختار بسیار ظریفتر است و الکترودها به شکلها و آرایشهای مختلف ساخته میشوند، اما مفهوم اصلی همین است. هر بخش از این شبکه رفتار الکتریکی مشخصی دارد. وقتی انگشت روی یک ناحیه قرار میگیرد، اثر آن در همان محدوده بیشتر میشود و کنترلر Touch از روی این تغییرات میتواند موقعیت تماس را محاسبه کند.
# گوشی خودِ انگشت را اندازه نمیگیرد
این بخش مهم است: اگر یک جسم روی صفحه قرار بگیرد، سیستم قرار نیست تصویر یا شکل آن جسم را ببیند. چیزی که اندازهگیری میشود، اثر الکتریکی آن روی شبکهی حسگرهاست.
فرض کنید قبل از لمس، یک ناحیه چنین مقداری داشته باشد:
sensor_readings.log
# قبل از لمس
Capacity = 10.0
# بعد از قرار گرفتن انگشت
Capacity = 10.7
اختلاف شاید خیلی کوچک باشد، اما برای مدار اندازهگیری قابل تشخیص است. پس:
قبل از لمس ← مقدار پایه | بعد از لمس ← مقدار تغییرکرده. و این اختلاف همان چیزی است که به تشخیص Touch کمک میکند.
# اما مختصات X و Y چطور به دست میآیند؟
یک نقطهی لمسی فقط یک تغییر ساده نیست. وقتی انگشت روی صفحه قرار میگیرد، چندین ناحیهی مجاور ممکن است تحت تأثیر قرار بگیرند؛ مثلاً:
delta_map.txt
0.1 0.2 0.3 0.2 0.1
0.2 0.5 0.8 0.5 0.2
0.1 0.3 0.6 0.3 0.1
0.0 0.1 0.2 0.1 0.0
در اینجا بیشترین تغییر در مرکز دیده میشود. کنترلر میتواند با تحلیل این الگو، محل تقریبی تماس را پیدا کند. بنابراین Touch Screen فقط دنبال یک «روشن/خاموش» ساده نیست؛ بلکه با یک میدان از اندازهگیریها سروکار دارد.
# این کار دائماً تکرار میشود
وقتی انگشتتان را روی صفحه نگه میدارید، کنترلر یک بار اندازهگیری نمیکند و کنار نمیرود. این فرآیند بارها تکرار میشود؛ مثلاً:
frames.log
Frame 1 → X=420 , Y=900
Frame 2 → X=425 , Y=902
Frame 3 → X=432 , Y=905
Frame 4 → X=441 , Y=909
Frame 5 → X=450 , Y=914
حالا سیستم یک مسیر دارد. اگر این مختصات در طول زمان تغییر کنند، نرمافزار میتواند بفهمد که انگشت در حال حرکت است. اینجاست که یک مفهوم ساده به اسم Touch Event شکل میگیرد.
# Tap در اصل چیست؟
آن چیزی که کاربر بهعنوان «یک ضربه» میبیند، از دید سیستم مجموعهای از رویدادهاست:
تشخیص Tap
Finger Down
مختصات پیدا میشود
حرکت یا ثابت ماندن
Finger Up
در سطح نرمافزار چیزی شبیه این اتفاق میافتد:
events.log
DOWN → (540, 910)
UP → (541, 911)
سیستمعامل متوجه میشود که انگشت تقریباً در یک نقطه قرار گرفته و خیلی سریع برداشته شده است. پس این حرکت یک
Tap محسوب میشود.
# Swipe از کجا میآید؟
Swipe چیز عجیبتری نیست؛ فقط تعداد بیشتری از همین مختصات است:
swipe_path.log
(300, 800)
(320, 800)
(350, 802)
(380, 805)
(420, 809)
(460, 812)
سیستمعامل میبیند که نقطهی لمس در مدت کوتاهی جابهجا شده است؛ پس بهجای Tap، یک حرکت تشخیص میدهد. در واقع:
از لمس تا Swipe
Touch
مختصات
مختصات
مختصات
تحلیل مسیر
Swipe
آنچه برای کاربر یک حرکت پیوسته است، برای کامپیوتر دنبالهای از اندازهگیریهای بسیار سریع است.
# Zoom با دو انگشت چطور کار میکند؟
حالا یک مرحله جلوتر برویم. اگر دو انگشت همزمان روی صفحه قرار بگیرند، سیستم باید دو نقطهی مستقل را پیدا کند:
pinch.log
# شروع
Finger 1 → (300, 700)
Finger 2 → (760, 700)
# بعد از حرکت دست
Finger 1 → (350, 700)
Finger 2 → (710, 700)
فاصلهی بین دو نقطه کمتر شده است. سیستمعامل میتواند از این تغییر نتیجه بگیرد که دو انگشت به هم نزدیک شدهاند. یا برعکس:
distance.txt
# قبل:
● ●
# بعد:
● ●
اگر فاصله بیشتر شود، معمولاً با حرکت Zoom In یا Zoom Out متناظر میشود، بسته به جهت حرکت. پس از دید نرمافزار، Pinch Zoom چیزی شبیه این است:
Pinch Zoom
Point A
تغییر فاصله
Point B
# چرا دستکش معمولاً کار نمیکند؟
اینجا اثر فیزیکی انگشت خودش را نشان میدهد. در حالت عادی، صفحه با بدن شما یک برهمکنش خازنی ایجاد میکند. اما وقتی یک لایهی عایق نسبتاً ضخیم مثل دستکش بین انگشت و صفحه قرار بگیرد، این برهمکنش میتواند بسیار ضعیف شود. در نتیجه تغییر ایجادشده ممکن است برای کنترلر سختتر قابل تشخیص باشد.
به همین دلیل دستکشهای معمولی اغلب روی صفحهی خازنی کار نمیکنند، اما بعضی دستکشهای مخصوص دارای الیاف رسانا هستند.
# پس چرا هر لمس اشتباهی ثبت نمیشود؟
صفحهی Touch همیشه در معرض تغییرات مختلف است. نویز الکتریکی، رطوبت، تماسهای ناخواسته و حتی شرایط محیطی میتوانند روی اندازهگیریها تأثیر بگذارند. برای همین کنترلر فقط یک عدد را بررسی نمیکند؛ الگوهای اندازهگیری را بررسی میکند و باید تشخیص دهد:
این تغییر طبیعی است؟ یا واقعاً یک Touch اتفاق افتاده؟ به همین دلیل سیستم Touch فقط یک حسگر ساده نیست؛ یک سیستم اندازهگیری و پردازش است.
# آب چرا میتواند صفحه را بههم بریزد؟
آب هم میتواند روی رفتار الکتریکی سطح تأثیر بگذارد. وقتی قطرات آب روی صفحه پخش میشوند، شرایط الکتریکی در نقاط مختلف تغییر میکند. در نتیجه ممکن است کنترلر با تغییراتی مواجه شود که شبیه Touch واقعی باشند یا اندازهگیری را سختتر کنند.
صفحهی خیس
قطره آب
تغییر شرایط الکتریکی
خوانش غیرعادی
Touch اشتباه یا نویز
گوشیهای جدید برای کاهش این مشکلات الگوریتمهای مختلفی دارند، اما اصل فیزیکی تغییر نمیکند.
# Touch Controller چه کاری انجام میدهد؟
یک بخش مهم دیگر، Touch Controller است. این قطعه بین لایهی حسگر و سیستمعامل قرار میگیرد و وظیفهاش این است که دادههای خام حسگرها را بخواند و از آنها اطلاعات قابل استفاده استخراج کند:
مسیر داده لمس
Touch Panel
اندازهگیریهای خام
Touch Controller
پردازش
X , Y
Driver
Operating System
به این ترتیب برنامههای معمولی لازم نیست بدانند الکترودها چه ولتاژی دارند یا ظرفیت خازنی هر نقطه چقدر تغییر کرده است. آنها فقط یک Event دریافت میکنند.
# از الکترود تا دکمهی «خرید»
اینجا میتوانیم کل مسیر را کنار هم بگذاریم. فرض کنید روی دکمهی «خرید» لمس میکنیم. در پایینترین سطح:
از فیزیک تا مختصات
انگشت
تغییر میدان الکتریکی
تغییر ظرفیت
Touch Controller
مختصات X,Y
بعد:
از مختصات تا رابط کاربری
X,Y
Driver
Operating System
Touch Event
UI
و در نهایت برنامه بررسی میکند که آن مختصات داخل محدودهی کدام عنصر قرار دارد؛ مثلاً:
hit_test.py
button = {
"x": 400,
"y": 850,
"width": 300,
"height": 120
}
x = 542
y = 913
inside = (
button["x"] <= x <= button["x"] + button["width"]
and
button["y"] <= y <= button["y"] + button["height"]
)
print(inside)
خروجی:
output
True
پس اتفاقی که برای کاربر فقط «زدن روی دکمه» است، در انتهای مسیر میتواند به یک بررسی سادهی هندسی تبدیل شود: آیا مختصات لمس داخل مستطیل دکمه قرار دارد یا نه؟
# چرا صفحههای قدیمی با قلم و ناخن هم کار میکردند؟
همهی صفحههای لمسی یک فناوری ندارند. یکی از انواع قدیمیتر، Resistive Touch است. در این فناوری، دو لایهی رسانا با فاصلهی بسیار کم از یکدیگر قرار میگیرند و فشار میتواند آنها را به هم نزدیک یا متصل کند. اینجا دیگر موضوع اصلی تغییر ظرفیت خازنی نیست؛ ایده بیشتر شبیه این است:
صفحهی مقاومتی
فشار
تغییر تماس دو لایه
تغییر الکتریکی
محاسبه مختصات
به همین دلیل صفحههای مقاومتی را میتوان با اجسام مختلف، قلم یا حتی ناخن هم کنترل کرد. اما در گوشیهای مدرن، Capacitive Touch به دلیل دقت و امکان Multi-Touch بسیار رایجتر شده است.
# صفحهی لمسی در واقع یک سنسور است
نمایشگر گوشی معمولاً آن چیزی نیست که تمام ماجرا را انجام میدهد. دو مسئلهی متفاوت داریم:
two_systems.txt
Display
→ چه چیزی را ببینیم؟
Touch Sensor
→ کاربر کجا را لمس کرده؟
این دو سیستم کنار هم کار میکنند. نمایشگر تصویر را نشان میدهد، لایهی Touch تعامل شما را دریافت میکند و نرمافزار این دو را به هم مرتبط میکند. برای همین یک دکمهی روی صفحه از نظر سختافزار واقعاً یک «دکمه» نیست؛ فقط بخشی از تصویر است که نرمافزار برای آن یک محدوده تعریف کرده است.
# نکته جالب؛ انگشت شما فقط یک ورودی است
یکی از جذابترین قسمتهای ماجرا این است که گوشی واقعاً نمیداند شما چه میکنید. یعنی Touch Screen نمیفهمد که «کاربر میخواهد وارد تنظیمات شود.» فقط این را میفهمد: نقطهای در X,Y تغییر کرده است.
بعد سیستمعامل از روی حرکت این نقاط نتیجه میگیرد: یک لمس، یک Swipe، دو انگشت، یک Pinch، یک Drag. و در نهایت خود برنامه تصمیم میگیرد این حرکت چه معنایی دارد. پس یک مسیر جالب شکل میگیرد:
از فیزیک تا عمل
فیزیک
اندازهگیری
عدد
رویداد
تفسیر
عمل
# این ایده فقط مخصوص صفحهی لمسی نیست
در واقع همین الگو را در بخشهای زیادی از فناوری میبینیم:
GPS خودش «موقعیت» را نمیبیند؛ سیگنالها را اندازه میگیرد و از آنها موقعیت را محاسبه میکند. میکروفون «کلمه» را نمیشنود؛ تغییرات فشار هوا را به سیگنال الکتریکی تبدیل میکند. دوربین «گربه» را نمیبیند؛ نور را به مقادیر عددی تبدیل میکند. و Touch Screen هم «انگشت» را نمیبیند؛ اثر الکتریکی آن را اندازه میگیرد.
در تمام این موارد، دنیای واقعی ابتدا به داده تبدیل میشود و بعد نرمافزار از روی آن داده معنی استخراج میکند.
# جمعبندی
تاچاسکرین یک صفحهی شیشهای نیست که بهنوعی بتواند لمس را تشخیص دهد. در زیر آن، شبکهای از حسگرها قرار دارد که دائماً وضعیت الکتریکی سطح را بررسی میکنند. وقتی انگشت شما نزدیک صفحه میشود، ظرفیت خازنی بعضی از این نواحی تغییر میکند. Touch Controller این تغییرات را اندازه میگیرد و از روی الگوی آنها موقعیت انگشت را محاسبه میکند.
بعد سیستمعامل این مختصات را به Eventهایی مثل Tap، Swipe، Drag، Multi-Touch و Pinch تبدیل میکند. در نتیجه، چیزی که از بیرون فقط یک لمس ساده به نظر میرسد، در پشت صحنه یک زنجیرهی کامل از فیزیک، الکترونیک، پردازش سیگنال و نرمافزار است.
takeaway.txt
گوشی هیچوقت انگشت شما را ندید؛ فقط تغییری را دید که انگشت شما در یک میدان الکتریکی ایجاد کرد.
