Like it?
Star it!

Vending Machine Robot

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

Engineering

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

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

Electrical

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

Website

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

Setbacks

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

Final

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

Conclusion

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");