無障礙設計

公共服務機台,不應只服務站得穩的人

從輪椅迴轉、視線高度、觸控範圍到逾時機制,重新設計一台真正可完成任務的公共自助機。

760–1220 mm示例可觸及高度帶
1500 mm輪椅迴轉設計直徑
44 px介面觸控目標下限
120 s可延長操作時間

可達範圍剖面

把螢幕、付款、票據和求助按鈕放進同一條可觸及帶,並保留正面接近與側面接近兩種姿勢。

01 · 現場不是平均使用者

一位推著助行器的長者在醫院大廳掛號,倒數計時在他閱讀第二個選項時歸零;旁邊的輪椅使用者看得見螢幕,卻碰不到讀卡器。這不是使用者不熟科技,而是設備把「站立、快速、視力良好」當成了預設身體。

這一場景提醒我們,設計對象不是抽象的平均值,而是會在壓力、時間限制與不同身體條件下完成具體任務的人。

02 · 機制從哪裡開始

機台可用性由接近空間、操作高度、視覺層級、輸入方式與錯誤復原共同決定。任何一環失敗,都會讓原本簡短的流程變成人員求助。評估時要沿著完整任務逐步量測,而不是只檢查螢幕是否能亮。

因此不能用單一指標代表整個系統;量測必須與流程節點對應,並讓讀者知道數據能夠解釋什麼、不能解釋什麼。

03 · 證據要怎樣收集

記錄不同身高與坐姿的眼高、前伸距離、觸控誤差、閱讀時間、環境反光及語音提示可懂度。數據需按使用情境分組,不能用一位熟練測試員的最快完成時間代表所有人。

所有精確數字都應記錄來源、時間和適用邊界;本頁指標屬於設計示例,用來說明結構,不冒充研究結論。

04 · 把原則變成流程

先畫出地面淨空區,再把高頻操作放在核心觸及區;關鍵資訊同時提供文字、圖示與語音;逾時前要詢問是否延長;錯誤頁保留返回、重試與人工協助。這條順序能直接減少被迫中斷。

實施時應先小規模驗證,保留人工覆蓋與退出路徑,再根據真實反饋迭代;自動化只能執行已說明的邊界。

05 · 最容易出現的誤判

最常見的假改善是把字放大,卻沒有處理反光、對比、讀卡器位置和流程逾時。另一種失敗是提供無障礙模式,但入口本身太小或藏在第二層選單,等於把可用性變成尋寶。

對異常與失敗保留記錄比隱藏警報更重要。若系統只展示成功案例,管理者就無法看見結構性缺口。

06 · 如何作出可解釋決定

驗收不以「能操作」為終點,而看首次完成率、求助率、可恢復錯誤比例與不同能力群體之間的落差。若某群體只能依賴工作人員,系統就還沒有達到自主使用的設計目標。

最終報告應同時呈現收益、代價、未覆蓋人群與剩餘不確定性,避免把複雜公共問題壓縮成單一漂亮分數。

07 · 部署前的實務檢核

「公共服務機台,不應只服務站得穩的人」不應停留在概念展示。正式投入使用前,需把使用者、設備、資料與例外情境放進同一輪小規模測試,事先寫清成功條件、停止條件與人工接管方式。測試紀錄要保留失敗與缺漏,不能只挑選最順利的流程作為成果。

  • 邀請輪椅、助行器、低視力與手部動作受限者完成掛號、付款及取票全流程
  • 分別測試正面與側面接近,確認膝部淨空、螢幕反光和讀卡器位置
  • 把逾時、輸入錯誤、票據用盡和網路中斷納入復原測試
  • 記錄求助發生在哪個步驟,並由使用者判斷改善是否真正降低依賴

完成檢核後,應由實際受影響的人參與復盤:哪些步驟變得更容易,哪些人仍被排除,資料是否足以支持判斷,以及新增流程是否帶來隱私、時間或維護負擔。若證據不足,就把結論標示為待驗證,而不是用精確分數製造確定感。

編輯檢核:本文提出的是可測試的設計框架,不是已完成的產品結論。正式部署前應由實際使用者、維護者與受影響群體共同複核資料邊界、例外情境、人工接管和停止條件,並保留失敗紀錄供後續修正。

METHOD / PYTHONSIMULATED INPUT
from dataclasses import dataclass
from typing import List, Tuple

@dataclass
class Observation:
    name: str
    value: float
    weight: float
    confidence: float

def normalize(value: float, low: float, high: float) -> float:
    # 將觀測值限制在示例區間並轉換為 0 到 1
    if high <= low:
        raise ValueError("high 必須大於 low")
    clipped = min(max(value, low), high)
    return (clipped - low) / (high - low)

def evaluate(rows: List[Observation]) -> Tuple[float, List[str]]:
    weighted_sum = 0.0
    weight_total = 0.0
    notes = []
    for row in rows:
        reliable_weight = row.weight * row.confidence
        weighted_sum += row.value * reliable_weight
        weight_total += reliable_weight
        if row.confidence < 0.6:
            notes.append(f"{row.name}: 資料可信度偏低")
    if weight_total == 0:
        return 0.0, ["沒有可用觀測"]
    return weighted_sum / weight_total, notes

# 以下均為說明方法的模擬輸入,並非真實量測
samples = [
    Observation("示例可觸及高度帶", normalize(62, 0, 100), 1.0, 0.9),
    Observation("輪椅迴轉設計直徑", normalize(48, 0, 100), 0.8, 0.7),
    Observation("介面觸控目標下限", normalize(75, 0, 100), 1.2, 0.8),
    Observation("可延長操作時間", normalize(35, 0, 100), 0.7, 0.5),
]
score, warnings = evaluate(samples)
print("綜合示例分數:", round(score, 3))
for warning in warnings:
    print("檢查:", warning)