Final Countdown e un proiect individual care combină embedded cu o aplicație mobilă. E un joc bomb-defusal, inspirat de Keep Talking and Nobody Explodes, construit pe un ESP32-S3 și câteva module hardware montate într-o carcasă.
Dispozitivul pornește o rundă când scanezi un tag RFID, după care trebuie să rezolvi trei lucruri fizice: introduci un cod pe keypad, reglezi un potențiometru la o valoare cerută și ții dispozitivul stabil, altfel modulul de mișcare penalizează orice bruscare. Telefonul se conectează prin BLE la ESP32 și afișează starea jocului și hint-urile. În paralel, trebuie să ții un deget pe senzorul cardiac. Dacă pulsul este ridicat, primești timp suplimentar.
Am vrut un joc interactiv care să aibă atât parte fizică, cât și o interfață comod de utilizat pe telefon. Direcția asta mi s-a părut bună pentru că forțează proiectul să treacă prin mai multe zone: integrare hardware, firmware modular, comunicație BLE și o aplicație mobilă care chiar folosește datele de pe ESP32.
Elementul nou este integrarea reală între dispozitivul fizic și telefon, cu o logică de joc care știe să gestioneze defecțiuni hardware și să funcționeze chiar și cu module lipsă.
Proiectul are două părți: dispozitivul embedded și aplicația de pe telefon.
Partea embedded e construită pe un ESP32-S3 DevKitC-1 WROOM-1. Placa citește modulele, rulează logica jocului, controlează ieșirile locale și expune un serviciu BLE. Intrările vin de la RC522 RFID, keypad-ul 4×4 prin PCF8574, MPU6050 (mișcare) și un potențiometru (modul de reglaj). Feedback-ul local: un OLED, un buzzer, un LED RGB și trei LED-uri simple pentru strike-uri.
Aplicația de telefon e făcută în Expo / React Native. Caută dispozitivul prin BLE, se conectează la serviciul ESP32, citește starea jocului și o afișează mai lizibil decât pe ecranul local.
Cum interacționează modulele:
RFID — armează jocul și confirmă finalul rundeikeypad-ul — introducerea coduluipotențiometrul — modulul de tuningMPU6050 — detectează mișcările bruște și verifică stabilitateaOLED-ul — feedback local rapidbuzzer-ul — semnalează timpul rămas și stările importanteLED-ul RGB și cele trei LED-uri simple — indicații vizualetelefonul — afișează starea jocului și hint-urile prin BLE| Componentă | Rol |
|---|---|
ESP32-S3 DevKitC-1 | Microcontroler principal |
RC522 RFID | Armare și confirmare finală a rundei |
4×4 matrix keypad | Introducerea codului |
PCF8574 | Extindere I/O pentru keypad |
MPU6050 | Detectarea mișcării și a stabilității |
WH148 potentiometer | Modul de tuning |
OLED SSD1306 | Afișaj local |
Passive buzzer | Semnalizare sonoră |
RGB LED | Indicator de stare generală |
3 simple LEDs | Indicatori pentru strike-uri |
BLE smartphone | Aplicație mobilă companion |
Whiteboard, wires, connectors, USB power | Interconectare și alimentare |
Firmware-ul e scris în ESP-IDF. Aplicația mobilă companion comunică prin BLE cu dispozitivul și afișează starea jocului și hint-urile, ca utilizatorul să urmărească mai ușor runda.
În momentul ăsta proiectul are o bază funcțională: firmware modular pentru ESP32, aplicație mobilă cu BLE și documentație pentru wiring și API. Logica jocului e definită, structura sistemului e stabilă, se poate demonstra și extinde.
Mai am de făcut integrarea finală pe varianta fizică definitivă, testarea completă pe hardware și finisarea prezentării stărilor jocului.
Proiecul este pe Gitlab
Resurse folosite:
ESP-IDFESP32-S3RC522 / MFRC522MPU6050PCF8574SSD1306 / SSD1315Expo și React Native