HoverBall
HC-SR04 đo khoảng cách, giữ bóng trong vùng xanh trên Safari/iPad qua Wi‑Fi.
HoverBall là một game ESP32 không cần chạm màn hình: chỉ đưa bàn tay lên xuống trước cảm biến siêu âm để giữ quả bóng trong vùng xanh. ESP đo khoảng cách rồi gửi dữ liệu sang Safari trên iPad qua Wi‑Fi.
Bàn tay HC-SR04 Level shifter ESP32-S3 iPad (Safari)
(10–60 cm) ┌──────────┐ ┌───────────┐ ┌───────────┐ ┌──────────────┐
~~~~~~ ──►│ TRIG/ECHO│──►│ 5V → 3.3V │──►│ đo→lọc→map│──►│ quả bóng │
└──────────┘ │ B1 → A1 │ │ web+Wi-Fi │ │ vùng xanh │
Echo 5V └───────────┘ GPIO4/GPIO5 │ hoverball.local│
└──────────────┘
tay gần = bóng xuống · tay xa = bóng lên[Ảnh cần bổ sung] Toàn bộ setup gồm ESP32-S3, HC-SR04, level shifter và iPad đang mở game.
Phần cứng
Board dùng ở đây là Freenove Media Kit for ESP32-S3 (N16R8) — mua kit. Game chỉ cần thêm HC-SR04 và level shifter (Echo 5V → 3.3V).
Điều khiển bằng khoảng cách
HC-SR04 phát một xung siêu âm rồi đo thời gian echo quay về. Khoảng cách bàn tay trong vùng khoảng 10–60 cm được map thành vị trí dọc của quả bóng: đưa tay gần thì bóng đi xuống, đưa tay xa thì bóng đi lên.
Game chạy trong browser, còn ESP đảm nhiệm việc đọc sensor và phục vụ web UI. Ở chế độ STA, ESP và iPad cùng vào Wi‑Fi nhà rồi Safari mở http://hoverball.local/. Nếu mDNS không tìm thấy thiết bị thì có thể dùng địa chỉ IP in trong serial log.
[Video demo cần bổ sung] Một lượt chơi hoàn chỉnh, trong khung hình thấy cả tay trước HC-SR04 và quả bóng di chuyển trên iPad.
Nối mạch
| HC-SR04 | ESP32-S3 |
|---|---|
| VCC | 5V |
| GND | GND |
| TRIG | GPIO4 |
| ECHO | GPIO5 qua level shifter |
Chân Echo của HC-SR04 là tín hiệu 5V nên không được nối thẳng vào GPIO5. Level shifter cần cấp VCCB = 5V, VCCA = 3.3V; Echo đi vào B1 và A1 nối sang GPIO5.
[Ảnh cần bổ sung] Cận cảnh dây nối HC-SR04 → level shifter → GPIO4/5, có chú thích các chân.
Build và chơi
cd ~/projects/esp/games/hoverball
idf.py set-target esp32s3
idf.py menuconfig # HoverBall → WiFi SSID/pass
idf.py build
../copybins.sh hoverball
Sau khi flash:
- Cho ESP và iPad vào cùng Wi‑Fi.
- Mở
http://hoverball.local/bằng Safari. - Chạm màn hình một lần để browser cho phép phát âm thanh.
- Đưa tay gần/xa cảm biến để giữ bóng trong vùng xanh.
Nếu không có Wi‑Fi nhà, firmware cũng có chế độ SoftAP: iPad nối mạng HoverBall, sau đó mở http://192.168.4.1/.
Code
Firmware đọc HC-SR04 trên ESP32-S3, lọc khoảng cách rồi gửi giá trị sang browser. Phần game là HTML/JavaScript được nhúng vào firmware nên chỉ cần một board và một trình duyệt, không cần backend riêng.
[Ảnh hoặc GIF cần bổ sung] Cận cảnh giao diện game, gồm quả bóng, vùng xanh và trạng thái khoảng cách.
Project nhỏ này vui ở chỗ biến một sensor rất cơ bản thành controller không chạm. Độ trễ qua Wi‑Fi vẫn đủ thấp để chơi, nhưng nhiễu echo và cách map khoảng cách ảnh hưởng cảm giác điều khiển rõ hơn mình nghĩ.