BinRange: Dùng sóng vô tuyến siêu rộng (UWB) để biết bạn đã đổ rác hay chưa
Một kỹ sư đã tự chế hệ thống BinRange dùng công nghệ UWB gắn lên sáu thùng rác, kết hợp Home Assistant để theo dõi vị trí và nhắc nhở việc đổ rác. Dự án kéo dài nhiều tuần với firmware tùy chỉnh, cập nhật không dây và vỏ in 3D không dùng ốc vít.

Home Assistant vốn đã biết thùng rác nào cần đổ vào ngày nào. Nó có thể thông báo "đêm nay là đêm đổ rác", tô màu đúng loại thùng trên bảng điều khiển, và gửi nhắc nhở. Nhưng có một điều nó không thể biết: liệu bạn đã thực sự mang thùng ra ngoài hay chưa.
Tác giả của dự án này thừa nhận mình đã "tối ưu hóa quá mức" mọi thứ. Ý tưởng gắn thẻ lên thùng rác đã có từ nhiều năm trước, ban đầu với thẻ Bluetooth giá rẻ, nhưng thất bại vì pin nhanh hết và tín hiệu không ổn định. Lần này, anh quyết định thử lại với công nghệ UWB (Ultra-Wideband) — và BinRange ra đời.
Sáu thùng rác, nhiều lịch thu gom khác nhau
Gia đình tác giả có tới sáu thùng rác: một thùng rác thải chung, một thùng phân compost thực phẩm, một thùng rác làm vườn, hai thùng tái chế và một thùng thủy tinh. Khó hơn nữa, chúng không được thu gom theo cùng một lịch.
Với thẻ Bluetooth cũ, khoảng cách được ước tính qua RSSI (chỉ số cường độ tín hiệu nhận được). Vấn đề là cường độ tín hiệu phụ thuộc vào rất nhiều yếu tố ngoài khoảng cách: tường, xe đậu, phản xạ sóng, hướng ăng-ten, thậm chí cả điện áp pin. Đó là lý do hệ thống cũ hoạt động chập chờn.
UWB giải quyết vấn đề này bằng cách đo thời gian sóng vô tuyến truyền giữa các thiết bị, từ đó tính ra khoảng cách mà không cần đoán qua cường độ tín hiệu. Tuy nhiên, sóng vẫn phải xuyên qua môi trường xung quanh — chọn loại sóng khác không làm xe đậu biến mất.
Hai bo mạch và một lần đi bộ ngoài trời
Thí nghiệm đầu tiên dùng hai bo Makerfabs ESP32-WROVER/DW3000, cả hai đều cấp nguồn qua USB. Kết quả đáng kinh ngạc: ở khoảng cách mười mét, chỉ cần thay đổi hướng ăng-ten từ nằm ngang sang dựng đứng đã đưa tỷ lệ thành công từ 37% lên 100%.
Bo mạch Makerfabs WROVER/DW3000 dùng trong thí nghiệm
Trong lần hiệu chuẩn đầu tiên bằng thước dây, sai số đo được dưới hai xentimét. Ở bài kiểm tra ghi lại sau đó, khoảng cách thực tế 10,1 mét cho kết quả trung bình khoảng 10,09 mét với độ lệch chuẩn ba xentimét.
Buổi đi bộ ngoài trời tiết lộ nhiều điều hơn: tín hiệu ổn định tới khoảng ba mươi mét, sau đó chập chờn dần. Khoảng cách xa nhất ghi nhận được là 37,28 mét nhưng có nhiều khoảng mất tín hiệu. Một chiếc xe hơi có thể chặn hoàn toàn đường truyền.
Bài kiểm tra đi bộ với hai bo mạch UWB ngoài trời
Neo (anchor) phát dữ liệu qua MQTT, Home Assistant tự nhận diện từng thẻ như một thiết bị riêng. Không có server BinRange nào, không có dịch vụ đám mây, và các thiết bị vẫn đo được khoảng cách ngay cả khi Home Assistant hoặc kết nối MQTT gặp sự cố.
Thiết bị nhỏ gọn đủ để gắn lên thùng rác
Các bo mạch phát triển chỉ dùng để chứng minh kết nối hoạt động. Tác giả cần một thiết bị nhỏ gọn, tự chứa, gắn được lên thùng rác. Sau khi tìm hiểu thẻ UWB tùy chỉnh và thương mại, anh chọn mua KKM K4W với vi xử lý nRF52833, radio DW3110 và cảm biến gia tốc LIS3DH, dùng pin CR2477 có thể thay thế.
Chi phí thí nghiệm: hai bo Makerfabs hết 123,64 USD (kể cả vận chuyển), mười thẻ mẫu giá 25 USD mỗi chiếc cùng đồ gá nạp và vận chuyển tốn thêm 330 USD.
Điểm quan trọng là nhà cung cấp xác nhận thẻ có thể chạy firmware riêng và cung cấp đồ gá để truy cập các chân nạp. Cảm biến gia tốc được nối vào một chân GPIO của nRF52833 — cực kỳ hữu ích, vì nó cho phép chip ngủ rất lâu, không phát sóng trong lúc ngủ, và chỉ thức dậy khi có sự kiện vật lý xảy ra.
Firmware mặc định báo cáo mười phút một lần khi thùng đứng yên, nhưng tác giả đã đổi thành ba mươi phút cho toàn bộ hệ thống đã lắp đặt, trong khi vẫn giữ tần suất năm giây khi thùng đang di chuyển.
Thẻ K4W gắn dưới vành thùng rác màu xanh
Cập nhật sáu thùng rác mà không cần tháo ra
Một khi thẻ đã gắn lên thùng, việc tháo ra rồi đặt lại lên đồ gá nạp mỗi lần đổi phần mềm là điều rất phiền. Giải pháp: neo có thể gửi bản cập nhật firmware đã ký tới các thẻ đã ghép nối qua Bluetooth. Ứng dụng cũ được giữ lại để có thể khôi phục nếu bản cập nhật lỗi, và hệ thống chỉ báo thành công khi thẻ đang chạy đúng phiên bản mong đợi và xác nhận tình trạng khỏe mạnh của chính nó.
Quá trình kiểm thử mô phỏng nhiều tình huống: ảnh firmware hỏng, truyền tải bị ngắt, mất điện ở các điểm khác nhau, và khả năng phục hồi qua watchdog. Cũng có bài kiểm tra quan trọng: khi neo không phản hồi, thẻ phải tự xác nhận mình khỏe mạnh thay vì từ bỏ firmware đang chạy tốt.
Khi mở rộng từ một thẻ lên nhiều thẻ, một lỗi khác lộ ra: một bản ghi trong thư viện Bluetooth được cấp phát theo số kết nối đồng thời thay vì số thiết bị đã ghép nối. Sửa lỗi này cho phép thẻ mới ghép nối mà không xóa các thẻ cũ.
Chiếc hộp cần vài lần thử
Vỏ neo bắt đầu từ thiết kế OpenSCAD dùng ốc vít, nhưng các chi tiết nhỏ và dung sai in PLA khiến việc lắp ráp khó chịu. Tác giả chuyển sang thiết kế hoàn toàn bằng PLA in, không dùng ốc vít: chốt định vị hình nón cho bo mạch, lò xo in để giữ bo mạch, và nắp đậy cố định.
Các phiên bản đầu thất bại — nắp có thể bị kéo ra quá dễ, hoặc các ngàm quá sâu bị gãy khi lắp. Giải pháp cuối cùng là chồng mép tường đế và nắp, kết hợp nhiều ngàm nông.
Neo hiện được gắn lên tường, với vỏ in đặt bên trong một hộp điện ngoài trời lớn hơn cùng các linh kiện nguồn: hộp IP67, nguồn 12V DC gắn DIN, module chuyển DC sang USB-C PD, RCBO bảo vệ, và cáp điện.
Nhắc nhở và thông báo
Tích hợp Waste Collection Schedule của Home Assistant chịu trách nhiệm đọc lịch thu gom từ hội đồng địa phương, còn BinRange bổ sung thông tin vật lý về vị trí thùng rác. Home Assistant kết hợp cả hai.
Các nhắc nhở được gộp thành một tin nhắn cho những thùng liên quan: lúc 6 giờ chiều và 9 giờ tối trước ngày thu gom, nhắc nhở cuối lúc 6 giờ sáng nếu thùng vẫn còn ở nhà. Đến 6 giờ chiều hôm sau sẽ có nhắc nhở mang thùng vào nếu chúng vẫn còn ở ngoài.
Nhờ cảm biến gia tốc, một sự kiện nghiêng quá chín mươi độ so với vị trí thẳng đứng chuẩn được ghi nhận là sự kiện đổ rác. Thẻ lưu sự kiện này qua khoảng mất tín hiệu và báo cáo khi kết nối lại với neo. Home Assistant có thể coi một lần nghiêng gần đây trên thùng đáng lẽ được đổ là giả định rằng thùng đã được làm rỗng.
Lần thử đầu tiên trong thực tế
Ngày 28 tháng 9, một đợt thu gom rác làm vườn cho cơ hội kiểm tra thực tế. Thùng bắt đầu di chuyển lúc khoảng 7 giờ 05 sáng và vượt qua ranh giới mười mét ngay sau đó. Các báo cáo ngừng đến khi thùng ở xa.
Khi thùng xuất hiện trở lại lúc khoảng 10 giờ 25 sáng, nó mang theo một sự kiện nghiêng được lưu từ khoảng 9 giờ 27 sáng, rồi vượt trở lại vào vùng Home và ổn định. Nhưng sự kiện nghiêng đã cũ khoảng năm mươi tám phút khi Home Assistant nhận được — vượt quá giới hạn chấp nhận ba mươi phút của automation, nên thông báo "vừa đổ rác" đã không được gửi.
Tác giả vẫn chưa có lời giải thích rõ ràng cho việc thiếu tín hiệu của thẻ đó tại vị trí thu gom. Đây là một bài học hữu ích: radio có thể cho số đo thuyết phục, thẻ có thể phát hiện sự kiện nghiêng, bảng điều khiển có thể trông đúng — mà điện thoại vẫn có thể bỏ lỡ thông báo.
Hệ thống hiện tại cũng thay đổi cách hiển thị thùng đã mất liên lạc. Ban đầu, trạng thái Out trở thành Unknown khi dữ liệu cũ. Nhưng sau khi thấy thùng rời đi rồi mất liên lạc ở lề đường, việc thay Out bằng Unknown tỏ ra không hữu ích. Giờ đây hệ thống ghi nhớ sự rời đi đã quan sát được như Out giả định, ngay cả khi mất liên lạc hoặc Home Assistant khởi động lại.
Chờ thêm những ngày đổ rác
BinRange đã được lắp đặt và đang hoạt động. Vẫn còn một số quan sát thông thường cần làm: vùng phủ sóng tại từng vị trí lưu trữ và thu gom, vài chu kỳ hoàn chỉnh với thông báo đúng, hành vi pin qua nhiều tuần, và cách thức lắp đặt cùng vỏ hộp chịu đựng ngoài trời.
Tác giả cũng tiết lộ một ý tưởng mới: sau khi thấy UWB có thể làm được gì, anh đang cân nhắc gắn thẻ lên vòng cổ mèo và dùng bốn neo quanh nhà để theo dõi vị trí của chúng. Liệu có thể đạt được theo dõi mèo với độ chính xác xentimét? Chưa được kiểm chứng, nhưng rất đáng để thử.
Repository của dự án có firmware, file vỏ hộp, các kết quả đo lường và ví dụ Home Assistant cho ai muốn tìm hiểu.