Project Overview
The machine uses an ESP32-WROOM-32 as the main controller, driving a custom PCB we laid out in KiCad. It connects to a cloud backend via MQTT over WiFi, handles payments through UPI and NFC, and personalizes recommendations based on user profiles. We shipped three units to the client for beta testing.
Features
- User recognition via NFC wristband or QR code – Members tap their gym ID band or scan a QR on their phone. No app install required.
- Personalized snack recommendations – Based on purchase history, workout type logged in gym’s system, and time of day. Morning crowd gets oats bars; evening lifters get protein shakes.
- Real-time inventory tracking – Each of the 24 slots has a load cell. When a product drops below threshold, the system flags it automatically.
- Dynamic pricing – Slow-moving items get discounted after 6 PM. Fast-movers stay at full price. All managed from a web dashboard.
- Remote lock/unlock – If a slot jams, we can disable it remotely. No field visit needed.
- Temperature control – Two zones: ambient for bars, refrigerated (4°C) for shakes and yogurts. Controlled via DS18B20 sensors and a Peltier module.
- OTA firmware updates – ESP32 pulls new firmware from an S3 bucket. We’ve pushed 7 updates since deployment without touching a single machine.
- Usage analytics dashboard – Graphs showing hourly sales, popular slots, revenue per machine, and member preferences. Built with Grafana.
Advantages
- No cash handling – UPI and NFC only. Reduces theft risk and maintenance.
- Zero inventory waste – Dynamic pricing clears slow stock. Client reported 94% sell-through rate in first month vs industry average of 72%.
- Member retention tool – Gym saw 18% increase in member check-ins after installing machines. People came for the snack recommendations.
- Remote management – One technician can oversee 50 machines from a laptop. No on-site visits unless hardware fails.
- Low power consumption – ESP32 in deep sleep draws 5 µA. Whole machine runs on 12V DC, pulling 45W peak (mostly from Peltier cooler).
- Customizable slot layout – We used 3D-printed dividers (PLA, 0.4mm nozzle) so slots can be resized for different product dimensions.
- Data-driven restocking – Backend predicts when each slot will run out within ±2 hours accuracy. Client sends one restock run per day instead of two.
- Open-source friendly – All firmware is on GitHub (MIT license). Client can fork and modify.
Himanshu Dada