Born out of the simple idea of regulating and tracking beverage consumption during parties and social gatherings. Our fridge nicknamed "The Caribou" is a smart fridge that dispenses cans and allows you to keep track of how many cans somebody has taken. The fridge is equipped with an on board computer (a Rapsberry Pi Model B) that keeps track of how many drinks are vended and who has taken a drink. On the side of the fridge is a magnetic card reader and this allows people to swipe there cards to activate the vending mechanism in the fridge. The Caribou is connected to the internet and automatically sends out invoices to your friends allowing for a fully automated payment process.
Manual tabulation of drinks at a party of friends and acquaintances is awkward, time consuming, and almost invariably ends with the host getting screwed over by “forgetful patrons.” The Caribou Vending machine solves this problem by creating a standalone fridge that handles tabulation and electronic payment seamlessly. The premise is that a user swipes an ID card on the magnetic card reader on the fridge, a beverage is dispensed, and they are charged electronically for their total the next day. Users are identified by any magnetic card of their choosing, such as a school ID, library card, credit card, etc. The actual values are irrelevant and can be encrypted for privacy, they simply serve the purpose of being a unique identifier that nearly everyone has on them at all times. When a user swipes for the first time, admin authorization is required. When someone with the necessary privileges swipes their card for them, it then prompts them for a name, which is entered. Any time the user swipes after initiation, the system records this action and ejects a beverage from the fridge, incrementing their beverage count in the database. The next morning another script tallies the amount each user owes to the system, generates a Venmo API link, and emails them that link, thereby charging them with the amount that they owe. (For those who don’t know, venmo.com is a free service that enables electronic payment via debit or credit cards). The system from start to finish was built in about 5 days for $250. With a couple hundred uses, so far we’ve had a 100% success rate on beverage ejection with no jams.
We first gutted an old fridge (read: know your way around a Dremel, or just find someone who’s trigger happy with anything involving destruction. Thankfully, Alex has both qualities). Three Dremel bits later, we were able to make space to construct a plywood frame that had four ramps leading to the bottom of the unit (total capacity: 24 cans). Bolted to the bottom ramp are two servos. Each servo has a sheet metal tab that prevents the cans from rolling down any further past their respective checkpoints. These servos are controlled by an Arduino and are actuated in tandem to dispense a single beverage and then stage another one after. A small doorway was cut to allow the can to slide out the fridge and a sheet metal tray was constructed to gently cradle your previous beverage. See video.
Not much to it. In a celebrity marriage destined for the ages, we united the two heavyweights of electronic prototyping: The Arduino and Raspberry Pi. The Arduino communicates to the Pi which is running the recommended Debian flavor “wheezy.” The Pi is conveniently online via Ethernet, allowing me to Telnet in from my laptop and edit code on the fly. Right now the electronics are in a jankety case on top, but if and when another version rolls around, we’ll do it right with a waterproof case mounted inside the fridge.
Rasberry Pi Model B with Arduino
Everything on the Pi was done in Python. A sub-70-lines-of-code little ditty is all it takes to DO IT LIVE. The script waits for a swipe by the user, attempts a match to the database, and, if it registers, it simply increments the log and communicates via USB to the Arduino to eject the can. If it determines that the swipe is identified as a rookie user, it waits for an administrator to authorize the transaction by swiping an “admin card” and then enter the name of the user. Once this has been done, the user can swipe freely. The magnetic card reader uses keyboard emulation, so simply by using the Python getpass module, you can hide and record the swipe value. Sqlite3 is the preferred database for this system. Light and simple, a few lines of code is all you need to get this baby live. I highly recommend getting a graphical database viewer for any database work like this. It makes modifying entries infinitely easier.
Now with code. Python file running on the pi here. Raspberry Pi Code
Arduino code here. arduinoCode
Web interface: I’m actually already running an Apache server on the Pi, but have yet to get around writing a quick number in PHP to display a leaderboard graph.
Customization: Plenty of room here for snarky comments spat out by the system for specific users. Can be supplemented by the Pi’s 3mm jack for sound.
Cap on beverages: Cut off a particular user who’s getting too…caffeinated.
Mechanical: If we could do it again with more money, we would’ve CADed the ramps and made them out of aluminum sheet metal. Stronger servos and a fridge not from the 70’s would’ve been nice too.
Thanks for swinging by our humble internet haven. We're a couple of sophomore engineering students in college so all questions, comments, and suggestions are welcome. We may also consider whipping a few of these together if anyone’s interested in having a version 2.0. Email Mike and Alex at