Like it?
Star it!
The Vending Machine Robot is a mobile snack-dispensing robot paired with a digital storefront, built from January to April 2026 by a multi-disciplinary team spanning mechanical engineering, electrical design, robotics software, and full-stack web development
Customers browse snacks online, pay through Stripe, receive a one-time code, and redeem it on the robot, which finds them with edge AI, opens its lid, and dispenses their purchase
Hardware: Raspberry Pi 4B, Intel NCS2, PiCamera Module 3, GPS, Pololu Maestro, dual H-bridge motor drivers, mecanum wheels with TPU rollers, and a welded 24-gauge steel chassis with 3D-printed PLA components
Software: Python, Flask, HTML, JavaScript, SQLite, Stripe, OpenVINO, and OpenCV
Libraries: threading, queue, socket, numpy, opencv-python, openvino, pygame, RPi.GPIO, pigpio, pyserial, bcrypt, requests, and python-dotenv
The engineering team spent roughly 138 man-hours each over three months designing and assembling the robot in SolidWorks and Fusion
Ryler Collins served as chief design authority and primary assembler, Anthony Nguyen designed wheel and electronic mounts, Victoria Adams designed the wheels and lid-lifting assembly, and I cut and welded the chassis while overseeing the 3D printer
24-gauge mild steel was chosen for the chassis for its strength under flexural load and speed of fabrication, while PLA was used for low-cost printed parts (using M3 and M8 bolts to supplement the strength of PLA with metal) and TPU for mecanum wheel rollers thanks to its elastic damping properties
The engineering team spent roughly 138 man-hours each over three months designing and assembling the robot in SolidWorks and Fusion
Ryler Collins served as chief design authority and primary assembler, Anthony Nguyen designed wheel and electronic mounts, Victoria Adams designed the wheels and lid-lifting assembly, and I cut and welded the chassis while overseeing the 3D printer
24-gauge mild steel was chosen for the chassis for its strength under flexural load and speed of fabrication, while PLA was used for low-cost printed parts (using M3 and M8 bolts to supplement the strength of PLA with metal) and TPU for mecanum wheel rollers thanks to its elastic damping properties
Mecanum wheels were selected so the robot could strafe and rotate in place, making it far easier to navigate crowded spaces and approach customers from any angle
Each wheel assembly combined 3D-printed PLA hubs and mounts with TPU rollers, bolted together and driven by dual H-bridge motor controllers on the Raspberry Pi
While PLA's relatively low strength meant some components experienced shearing under load, we addressed this with higher infill percentages, rounded geometries, and fillets to reduce stress concentrations in high-load areas
Fabrication began with cutting 24-gauge mild steel sheet into the chassis panels that would form the structural backbone of the robot
Thin-gauge steel was chosen deliberately as it offered enough rigidity for the load while keeping weight down and allowing rapid iteration on the frame geometry
Fabrication began with cutting 24-gauge mild steel sheet into the chassis panels that would form the structural backbone of the robot
Thin-gauge steel was chosen deliberately as it offered enough rigidity for the load while keeping weight down and allowing rapid iteration on the frame geometry
Welding thin-gauge steel with MIG meant every joint had to be executed with precise voltage, feed rate, and weld times as any discrepancy risked catastrophic burn-through
Each seam was planned carefully before striking an arc, and several practice runs on scrap were needed before the team was confident enough to weld the actual chassis panels
The finished welded chassis provided a rigid platform for mounting the mecanum wheel assemblies, electronics enclosures, and the snack-dispensing lid mechanism
With the metal frame complete, the team moved on to integrating 3D-printed components and beginning the electrical fit-out that would bring the robot to life
The finished welded chassis provided a rigid platform for mounting the mecanum wheel assemblies, electronics enclosures, and the snack-dispensing lid mechanism
With the metal frame complete, the team moved on to integrating 3D-printed components and beginning the electrical fit-out that would bring the robot to life
I designed the electrical system to accommodate devices requiring different voltages, manage heating concerns, and remain evolvable as parts arrived on staggered shipment schedules
The diagram mapped power distribution from the battery through buck converters to the Raspberry Pi, Pololu Maestro, motor drivers, NCS2, camera, and GPS, ensuring the AI team could begin software work even before every final component was installed
Victoria Adams helped me solder and assemble the physical wiring harness, connecting each subsystem according to the diagram while I taught the team basic electrical safety, wire routing, and soldering technique
Signal interference and inconsistent motor performance were recurring issues during early bring-up, requiring careful separation of power and data lines and several rounds of troubleshooting
Victoria Adams helped me solder and assemble the physical wiring harness, connecting each subsystem according to the diagram while I taught the team basic electrical safety, wire routing, and soldering technique
Signal interference and inconsistent motor performance were recurring issues during early bring-up, requiring careful separation of power and data lines and several rounds of troubleshooting
Mk-1 was the first physical layout of the electrical system as a proof-of-concept wiring pass that validated power routing and confirmed every device could be powered simultaneously without browning out
Lessons from this iteration informed cable management, connector placement, and which components needed dedicated regulators versus shared rails
Mk-2 tightened the layout significantly, relocating the Maestro and motor drivers for shorter wire runs and adding strain relief on every connector that would see vibration during driving
This revision was the first to run the full software stack - GPS, camera, NCS2 inference, and mecanum wheel control - all powered from the same harness
Mk-2 tightened the layout significantly, relocating the Maestro and motor drivers for shorter wire runs and adding strain relief on every connector that would see vibration during driving
This revision was the first to run the full software stack - GPS, camera, NCS2 inference, and mecanum wheel control - all powered from the same harness
Mk-3 is the production layout with every subsystem mounted, labeled, and routed for both reliability and serviceability inside the finished chassis
Battery limitations and heating from the NCS2 under sustained inference were addressed with dedicated cooling and a power budget that kept the Pi and AI chip stable through full purchase sequences
The frontend presents a playful pastel storefront where customers browse available snacks and complete purchases without confusion, every element designed for accessibility and simplicity
Built with HTML, JavaScript, Vite, and Tailwind CSS on AWS EC2 behind NGINX, the site was architected by Samantha Machado with contributions from Prince Patel, Adeyemi Akanbi, and myself as an architecture consultant
The frontend presents a playful pastel storefront where customers browse available snacks and complete purchases without confusion, every element designed for accessibility and simplicity
Built with HTML, JavaScript, Vite, and Tailwind CSS on AWS EC2 behind NGINX, the site was architected by Samantha Machado with contributions from Prince Patel, Adeyemi Akanbi, and myself as an architecture consultant
Behind a dedicated admin login, authorized users manage the robot's inventory, updating stock levels and pricing so the digital storefront always reflects what is physically available inside the machine
Every inventory change is logged to the backend actions table and forwarded to a Discord webhook for real-time audit visibility
Once Stripe confirms payment, the backend generates a unique four-digit one-time code tied to the transaction - the bridge between the digital purchase and physical fulfillment
The code is sent to the robot via a persistent TCP socket bridge while the customer enters the same code on the robot's screen, ensuring each redemption is valid for a single use
Once Stripe confirms payment, the backend generates a unique four-digit one-time code tied to the transaction - the bridge between the digital purchase and physical fulfillment
The code is sent to the robot via a persistent TCP socket bridge while the customer enters the same code on the robot's screen, ensuring each redemption is valid for a single use
The admin dashboard gives operators a single view of recent activity, heartbeat status, and action history, all clearly separated from the customer-facing experience
Admin authentication uses bcrypt for password verification, and Syan Shirazi performed penetration testing on both frontend and backend to ensure users cannot access critical information from the client side
The Flask backend in backend.py serves REST endpoints under /api/* for checkout, product listing, admin operations, and post-payment code retrieval, backed by a SQLite database defined in data/schema.sql
Stripe Checkout sessions embed cart metadata for downstream fulfillment, signed webhooks confirm payment, and fulfill_checkout_session atomically decrements inventory and generates the vending code
I created the TCP socket bridge that relays commands from the frontend to the robot, and Prince Patel integrated the Stripe payment system, us together forming the pipeline from click to dispense
The Flask backend in backend.py serves REST endpoints under /api/* for checkout, product listing, admin operations, and post-payment code retrieval, backed by a SQLite database defined in data/schema.sql
Stripe Checkout sessions embed cart metadata for downstream fulfillment, signed webhooks confirm payment, and fulfill_checkout_session atomically decrements inventory and generates the vending code
I created the TCP socket bridge that relays commands from the frontend to the robot, and Prince Patel integrated the Stripe payment system, us together forming the pipeline from click to dispense
To get a working system to the AI team with as much development time as possible, we built a cardboard robot that was structurally very similar to the desired end product
This stand-in let Samuel Saylor, Tri Nguyen, and Cayden Hutcheson begin tuning lid logic, screen integration, and customer-finding AI while the engineering team finished the real chassis
The cardboard prototype preserved the same dimensions and mounting points as the final design, so software written against it transferred directly to the welded steel and PLA robot with minimal rework
The cardboard prototype preserved the same dimensions and mounting points as the final design, so software written against it transferred directly to the welded steel and PLA robot with minimal rework
Over the course of printing, the 3D printer broke twice as the extruder badly jammed and the plate fell out of calibration, both requiring late-night disassembly to keep the project on schedule
Beyond hardware failures, classical printing problems piled up: adjusting infill percentages, print speeds, extruder and plate temperatures, brims, rafts, and orientations, and the time required to produce parts slowed iteration cycles enough that careful prioritization became essential
The finished robot navigates its environment with mecanum strafing and in-place rotation, using OpenVINO-powered customer detection and following logic running on the NCS2
Tri Nguyen wrote the AI customer-finding and following logic, I developed the mecanum wheel kinematics and return-to-home algorithm, and Cayden Hutcheson calibrated the lid servos for the purchase sequence
The finished robot navigates its environment with mecanum strafing and in-place rotation, using OpenVINO-powered customer detection and following logic running on the NCS2
Tri Nguyen wrote the AI customer-finding and following logic, I developed the mecanum wheel kinematics and return-to-home algorithm, and Cayden Hutcheson calibrated the lid servos for the purchase sequence
The full purchase sequence ties everything together: a customer completes payment on the website, receives a one-time code, enters it on the robot, and watches the lid open to dispense their snack
Low latency across the TCP bridge was critical; any delay between payment confirmation and robot response would break the seamless handoff from digital storefront to physical fulfillment
This was the highlight of college for me
Forget the long nights out at football games, forget Differential Equations, forget getting the occasional nervousness asking someone out, and forget those addictive, cream-stuffed cookies the campus restaurants sold to up-charge students
When I think about college, I will think about the pure, unadultered joy I felt working with the people I was so privileged to meet during my time at Rowdy Creators and specifically this project
Like all projects, there were bumps in the road, but for the rest of my life, I will be drawn to working with people simply because this (for the most part) went so well
printf("-Matthew Thomas Beck");