SL.pro
Blog · · 9 phút đọc

Ứng dụng thước thủy hoạt động thế nào: Gia tốc kế điện thoại

Điện thoại của bạn biết hướng nào là hướng xuống vì bên trong nó có một cảm biến nhỏ xíu gọi là gia tốc kế MEMS. Cảm biến đó đo lực trọng lực kéo lên điện thoại theo ba hướng cùng lúc. Một ứng dụng thước thủy đọc ba con số đó, làm một chút lượng giác rồi cho bạn thấy góc nghiêng. Nó làm việc này hàng trăm lần mỗi giây, bên trong một con chip mà mắt thường khó nhìn ra. Bài viết này sẽ giải thích chuyện thực sự diễn ra.

Những điều cốt lõi
  • Gia tốc kế đo cách trọng lực trải ra trên ba trục. Nó không đo chuyển động khi điện thoại nằm yên.
  • Góc pitch và roll được tính từ công thức arctan áp dụng cho ba số đọc trọng lực đó.
  • Spirit Level Pro đưa các số đọc thô qua một trung bình động hàm mũ (alpha=0,15) để bong bóng không nhảy loạn.
  • Cảm biến MEMS bị trôi theo nhiệt độ, nên hãy hiệu chỉnh ngay tại nơi bạn làm việc.
  • Với một điện thoại nằm yên trên bề mặt, gia tốc kế lo hết. Bạn không cần đến con quay hồi chuyển.
Ảnh chụp macro cận cảnh chip gia tốc kế ba trục MEMS Kionix từ một thiết bị di động
Chip gia tốc kế MEMS bên trong điện thoại của bạn nhỏ hơn một hạt gạo mà vẫn đo trọng lực chính xác.

Gia tốc kế MEMS là gì?

MEMS là viết tắt của Micro-Electro-Mechanical Systems (hệ vi cơ điện tử). Phần tử cảm biến bên trong gia tốc kế điện thoại rất nhỏ, chỉ vài trăm micromet ngang, nhỏ hơn một hạt muối. Nó nằm trên cùng miếng silicon với mạch điện tử thông thường và được làm ra theo cùng một cách. Đó là lý do những cảm biến này rẻ và có mặt trong hầu hết mọi điện thoại.

Cơ chế của nó đơn giản một khi bạn hình dung được. Một khối lượng nhỏ treo trên các lò xo silicon được khắc vào chip. Khi bạn nghiêng chip, trọng lực kéo khối lượng đó lệch đi một chút khỏi tâm. Sự dịch chuyển đó làm thay đổi khe hở giữa những ngón kim loại hình răng lược, và khe hở thay đổi thì điện dung giữa chúng cũng thay đổi. Chip đọc thay đổi đó và biến nó thành một con số gia tốc, tính bằng đơn vị g.

Đây là phần khiến thước thủy trở nên khả thi. Khi điện thoại nằm yên, gia tốc kế không đọc chuyển động. Nó đọc phần trọng lực kéo dọc theo mỗi trục trong ba trục của nó. Trọng lực là một lực cố định, đã biết. Một khi bạn biết nó chia ra sao giữa ba trục, bạn có thể tính chính xác điện thoại đang nghiêng thế nào.

Gia tốc kế 3 trục đo độ nghiêng thế nào?

Gia tốc kế ba trục cho điện thoại bộ hướng riêng của nó: X chạy từ trái sang phải, Y chạy từ trên xuống dưới, và Z chạy từ trước ra sau. Đặt điện thoại nằm phẳng trên bàn thì trọng lực kéo gần như hoàn toàn dọc theo Z, nên Z đọc khoảng 9,81 m/s² còn X và Y đọc gần bằng không. Nghiêng điện thoại thì trọng lực dịch chuyển, bớt trên Z, nhiều hơn trên X và Y, theo tỷ lệ với góc nghiêng.

Biến ba số đọc đó thành các góc là lượng giác cơ bản. Pitch là độ nghiêng trước-sau, roll là độ nghiêng trái-phải, và cả hai đều đến từ một hàm tang ngược:

Pitch = arctan( Y / sqrt(X² + Z²) ) Roll = arctan( X / sqrt(Y² + Z²) )

Hai dòng đó là toàn bộ phần toán cốt lõi của một ứng dụng thước thủy. Nạp ba giá trị thô vào, chạy phép tính, và bạn có được pitch và roll tính bằng radian. Nhân với 180/π để ra độ. Đó chính là con số trên màn hình của bạn.

Bạn có thể thắc mắc tại sao mẫu số lại dùng căn bậc hai của hai trục kia thay vì chỉ một trục. Cách đó giữ cho số đọc ổn định qua trọn một vòng xoay. Nếu chia cho một trục duy nhất, phép toán sẽ hỏng khi gần phương thẳng đứng, vì trục đó tụt về không và bạn rơi vào tình huống chia cho gần như không có gì. Dùng độ lớn gộp của cả hai trục còn lại thì tránh được điều đó.

Bo mạch mở rộng gia tốc kế MEMS ba trục của Freescale Semiconductor trên nền trắng
Một gia tốc kế ba trục đo lực kéo của trọng lực trên các trục X, Y và Z cùng một lúc.
Xem vật lý hoạt động ngay theo thời gian thực

Spirit Level Pro hiển thị góc pitch và roll trực tiếp với làm mượt EMA, năm mức dung sai cài sẵn và hiệu chỉnh một chạm. Không cần tải xuống.

Thử Spirit Level Pro miễn phí

Tại sao dữ liệu cảm biến thô lại nhiễu đến vậy?

Đầu ra thô của gia tốc kế nhảy nhót nhiều hơn bạn tưởng. Ngay cả một điện thoại nằm bất động cũng cho số đọc lắc lư nhẹ. Một phần là nhiễu điện trong bản thân cảm biến, một phần là rung động truyền qua bề mặt, và một phần là sai số làm tròn khi tín hiệu analog được chuyển thành số. Đưa dòng thô đó lên màn hình thì bong bóng giật liên tục, chẳng dùng được cho công việc cẩn thận.

Nhiễu đến từ vài nguồn. Nhiễu nhiệt là dao động điện ngẫu nhiên do nhiệt gây ra. Bạn không loại bỏ được nó, và nó đặt ra giới hạn cho mức độ yên lặng nhất mà cảm biến có thể đạt tới. Nhiễu rung đến từ thế giới quanh bạn: máy nén tủ lạnh, tiếng bước chân, xe cộ ngoài đường. Và điểm không của cảm biến tự nó cũng trôi chậm theo thời gian. Mỗi thứ cần một cách xử lý riêng.

Cách sửa bằng phần mềm thường dùng là một bộ lọc thông thấp. Nó cho các thay đổi chậm đi qua, như một độ nghiêng thật, và giữ lại các thay đổi nhanh, như rung động. Cách làm phổ biến là dùng trung bình động hàm mũ, gọi là EMA. Mỗi số đọc mới tính một phần, alpha, phần còn lại được mang sang từ giá trị đã lọc trước đó:

filtered = alpha × new_reading + (1 - alpha) × previous_filtered

Spirit Level Pro dùng EMA với alpha=0,15. Chúng tôi chốt con số đó sau khi thử một loạt giá trị bằng tay. Ở alpha=0,05 số đọc mượt như thủy tinh nhưng chậm, và bong bóng bị trễ so với điện thoại khi bạn di chuyển. Ở alpha=0,3 nó theo kịp tốt nhưng giật đủ để khó bắt được một số đọc chính xác. Alpha=0,15 nằm ở giữa. Bong bóng cảm thấy sống động mà không nhấp nhổm.

Cái được và cái mất: Alpha cao hơn thì màn hình bám theo độ nghiêng thật nhanh hơn, nhưng cũng cho nhiều rung động lọt qua hơn. Alpha thấp hơn thì làm mượt mạnh hơn nhưng thêm độ trễ. Alpha=0,15 cân bằng cả hai và ổn định trong khoảng 150ms.

Con quay hồi chuyển đóng vai trò gì?

Con quay hồi chuyển đo điện thoại đang xoay nhanh thế nào, tính bằng độ mỗi giây. Nó không đo điện thoại đang chỉ về hướng nào. Sự khác biệt đó quan trọng. Tự nó, con quay hồi chuyển không cho bạn biết điện thoại có cân bằng hay không. Nó chỉ biết mình có đang xoay không và xoay nhanh ra sao. Để có một số đọc cân bằng với điện thoại nằm yên, gia tốc kế đã có đủ những gì bạn cần.

Con quay hồi chuyển phát huy tác dụng khi điện thoại đang chuyển động, thông qua tích hợp cảm biến. Gia tốc kế đo độ nghiêng tĩnh tốt nhưng trở nên chậm và nhiễu khi chuyển động nhanh. Con quay hồi chuyển bám theo chuyển động xoay nhanh tốt nhưng lại trôi, vì các sai số nhỏ của nó tích lũy dần theo thời gian. Một bộ lọc bổ sung hoặc bộ lọc Kalman trộn cả hai: con quay hồi chuyển lo phần chuyển động nhanh, còn gia tốc kế kéo số đọc dài hạn về đúng.

Hầu hết ứng dụng thước thủy, kể cả Spirit Level Pro, bỏ qua tích hợp cảm biến vì công việc là tĩnh. Bạn đặt điện thoại xuống, nó ổn định, bạn đọc góc. Gia tốc kế lo chuyện đó một mình là ổn. Tích hợp cảm biến quan trọng hơn khi có gì đó đang bay, như một chiếc drone theo dõi chuyển động của chính nó, chứ không phải khi bạn kiểm tra một cái kệ.

Tại sao hiệu chỉnh lại quan trọng đến vậy?

Mỗi cảm biến MEMS ra khỏi nhà máy đều có một độ lệch nhỏ sẵn trong đó. Đó là một sai lệch đặt ra khi sản xuất, và nó giống nhau ở mọi số đọc: một lượng cố định, theo một hướng cố định. Nên con chip có thể đọc lệch một hai độ ngay cả khi điện thoại thực sự nằm phẳng. Đây là lý do lớn nhất khiến một ứng dụng thước thủy trông có vẻ sai ngay khi mới dùng.

Hiệu chỉnh sửa điều đó bằng cách đo độ lệch ấy trên một bề mặt mà bạn tin là phẳng, rồi lưu lại. Spirit Level Pro lưu các giá trị trong localStorage dưới khóa calibrationPitchcalibrationRoll. Từ đó về sau, mỗi số đọc đều trừ đi những con số đã lưu trước khi lên màn hình. Độ lệch biến mất.

Khác biệt rất lớn. Bỏ qua hiệu chỉnh thì một điện thoại lệch 1,5° sẽ đọc sai 1,5° trên mọi thứ. Nó có thể hiển thị 0,0° khi đang nằm trên một mặt dốc thật 1,5°. Hiệu chỉnh chính điện thoại đó thì sai số tụt xuống còn vài phần mười độ. Đó là mức tăng độ chính xác lớn nhất bạn có thể có, mà chỉ tốn vài giây.

Nhiệt độ ảnh hưởng thế nào đến độ chính xác?

Cảm biến MEMS phản ứng với nhiệt độ. Các lò xo silicon giữ khối lượng thử giãn ra và co lại khi chip nóng lên và nguội đi, làm dịch điểm không. Nên khi bạn mang điện thoại từ một chiếc xe hơi ấm vào một nhà kho lạnh, số đọc trôi một chút trước khi cảm biến ổn định ở nhiệt độ mới. Không phải là dịch chuyển lớn, nhưng có thật.

Điều rút ra thực tế rất đơn giản: hãy hiệu chỉnh ở nhiệt độ bạn định làm việc. Một lần hiệu chỉnh làm trong văn phòng ấm sẽ không giữ được hoàn toàn trong một nhà kho lạnh. Bạn không cần bận tâm chuyện này cho mọi công việc. Với treo tranh hay kiểm tra một cái kệ, độ trôi quá nhỏ để thấy. Với công việc chặt chẽ trong vòng vài phần mười độ, hãy cho điện thoại một hai phút để ổn định sau một thay đổi nhiệt độ lớn, rồi hiệu chỉnh.

Thước thủy gắn trên máy ảnh cho thấy cách đo góc hoạt động
Nhiều cảm biến phối hợp với nhau để xác định hướng của một thiết bị trong không gian ba chiều.

iPhone và Android: phần cứng cảm biến có khác nhau không?

Có, và nó thể hiện qua cảm giác khi dùng ứng dụng. Apple tự xây dựng ngăn xếp chuyển động của mình. iPhone từ đời 6s trở đi mang một bộ đồng xử lý chuyển động của Apple, xử lý dữ liệu cảm biến tách khỏi CPU chính. Các flagship Samsung Galaxy dựa vào linh kiện của STMicroelectronics, gói một gia tốc kế ba trục và một con quay hồi chuyển ba trục vào cùng một đế. Điện thoại Google Pixel từng dùng cảm biến của Bosch và TDK InvenSense, tùy theo năm.

Sau khi hiệu chỉnh, một iPhone flagship và một Android flagship cho kết quả gần như nhau. Khoảng cách thực sự đáng kể là giữa flagship và Android giá rẻ. Điện thoại giá rẻ dùng MEMS rẻ tiền hơn với độ phân giải thấp hơn, và đầu ra thô của chúng nhiễu hơn. Hiệu chỉnh vẫn kéo chúng lại gần, và với hầu hết công việc tự làm thì kết quả là đủ ổn.

Cái làm iPhone nổi trội trong một ứng dụng thước thủy không hẳn là gia tốc kế mà là bộ đồng xử lý chuyển động kia. Nó vẫn thu dữ liệu cảm biến ở tốc độ cao ngay cả khi ứng dụng không hiển thị phía trước, nên bộ lọc làm mượt có nhiều mẫu hơn để làm việc. Đó là lý do lớn khiến iPhone cảm thấy mượt đến vậy ở đây, kể cả khi so với điện thoại Android có cảm biến trên giấy tờ tốt ngang bằng.

Câu hỏi thường gặp

Ứng dụng thước thủy hoạt động thế nào trên điện thoại?

Chúng đọc gia tốc kế MEMS của điện thoại, thứ đo lực trọng lực kéo dọc theo ba trục (X, Y, Z). Nghiêng điện thoại thì trọng lực dịch chuyển giữa các trục đó. Ứng dụng chạy công thức arctan để ra pitch và roll, làm mượt kết quả để dịu bớt nhiễu cảm biến, rồi hiển thị dưới dạng một bong bóng hoặc một con số. Toàn bộ chuyện đó chạy hàng trăm lần mỗi giây.

Gia tốc kế điện thoại chính xác đến đâu để dùng làm thước thủy?

Một điện thoại flagship đã hiệu chỉnh đọc sai trong khoảng vài phần mười độ. Điện thoại Android giá rẻ đọc kém hơn khi chưa hiệu chỉnh, vì cảm biến của chúng rẻ hơn và chênh lệch nhiều hơn giữa các máy. Yếu tố quan trọng nhất là hiệu chỉnh: nó xóa độ lệch từ nhà máy và kéo gần như mọi điện thoại lại gần đúng. Với hầu hết công việc tự làm và công việc nghề, một điện thoại tầm trung đã hiệu chỉnh là đủ chính xác.

Ứng dụng thước thủy có dùng con quay hồi chuyển không?

Với điện thoại nằm yên thì không. Gia tốc kế tự nó cho bạn góc nghiêng. Con quay hồi chuyển đo tốc độ xoay chứ không phải vị trí, nên nó không cho bạn biết điện thoại có cân bằng hay không, chỉ biết nó đang xoay nhanh cỡ nào. Một số ứng dụng trộn cả hai cảm biến để số đọc mượt hơn khi di chuyển, nhưng để áp điện thoại vào tường và đọc góc, gia tốc kế lo hết.

Tại sao ứng dụng thước thủy của tôi đọc hơi sai ngay cả trên bề mặt phẳng?

Thường là do độ lệch từ nhà máy. Mỗi chip MEMS có một sai lệch nhỏ sẵn trong đó khiến nó đọc khác không ngay cả khi điện thoại nằm phẳng. Hiệu chỉnh trên một bề mặt bạn tin cậy sẽ xóa nó. Các nguyên nhân khác là trôi theo nhiệt độ, một vỏ điện thoại làm kênh một cạnh trên bề mặt, hoặc bụi dưới điện thoại. Hiệu chỉnh trên một mặt bàn kính sạch sau mỗi thay đổi nhiệt độ lớn sẽ xử lý được phần lớn.

Bức tranh trọn vẹn

Ứng dụng thước thủy hoạt động được vì vật lý đằng sau chúng đáng tin cậy. Trọng lực không đổi, gia tốc kế luôn đo nó, và lượng giác biến ba con số thành một góc. Con đường từ phần tử cảm biến đến bong bóng là phép toán cố định suốt cả chặng. Trong đó không có gì phải đoán.

Cái làm một ứng dụng thước thủy hơn một ứng dụng khác không phải là phần cứng. Mọi điện thoại flagship đều đã có cảm biến quá đủ tốt. Khác biệt nằm ở phần mềm: lọc dòng thô tốt đến đâu, hiệu chỉnh được lưu và áp dụng ra sao, các mức dung sai cài sẵn khớp với công việc thật thế nào. Làm đúng những cái đó thì một chip MEMS rẻ tiền vẫn đọ được với những dụng cụ chuyên dụng đắt hơn nhiều.

Hiểu cảm biến hoạt động thế nào cũng giúp bạn dùng nó giỏi hơn. Hiệu chỉnh ở nhiệt độ làm việc. Tháo vỏ ra khi cần đọc chính xác. Để con số ổn định một giây trước khi tin nó. Mỗi thói quen đó đến thẳng từ việc hiểu phần cứng đang làm gì.

Thử Spirit Level Pro miễn phí

Hoạt động trên bất kỳ điện thoại hoặc máy tính bảng nào. Không cần tải xuống. Các tính năng Pro từ $10 một lần.

Mở Spirit Level Pro

Không cần tài khoản · Hoạt động ngoại tuyến · 20 ngôn ngữ