An intelligent automated bartender robot capable of mixing drinks, dispensing ice, and providing an interactive user experience.
BARBOTOS is a sophisticated drink-mixing robot built around Arduino that can prepare four different beverages (Milkshake, Coca-Cola, Fanta, Sprite) with customizable toppings, ice, and cream. The system features intelligent glass detection, temperature monitoring, and a comprehensive statistics tracking system.
- Arduino Uno (Primary) β main system controller
- Arduino Uno (Secondary) β LED effects controller
- 16x2 LCD Display β user interface and status display
- Analog Button Panel β 8-button interface for drink selection and navigation
- 8x Peristaltic Pumps β precise liquid dispensing
- Pin 0: Milkshake base
- Pin 1: Cream
- Pin 2: Chocolate topping
- Pin 3: Fruit syrup
- Pin 4: Caramel topping
- Pin 5: Coca-Cola
- Pin 6: Fanta
- Pin 7: Sprite
- 74HC595 Shift Register (2x) β pump control expansion
- Servo Motor β automated ice cube dispensing
- Force Sensor (A0) β glass detection and weight measurement
- Temperature Sensor (A4) β ambient temperature monitoring
- Analog Multiplexer (A5) β button input processing
- 16-LED NeoPixel Ring β status indication and animations
- Custom LCD Characters β enhanced display symbols
- LCD Management: Custom character creation, cursor control
- User Input: Multi-format question handling (numbers, yes/no, multiple choice)
- Sensor Integration: Temperature reading, glass detection
- Menu Systems: Settings, statistics, calibration interfaces
- Template-based Design: Supports multiple shift register configurations
- Precise Control: Individual pin state management
- Bulk Operations: Set/clear all pins simultaneously
- Error Handling: Pin range validation
- Recipe Management: Ingredient-specific pouring logic
- Timing Control: Volume-based dispensing calculations
- Ice System: Automated cube breaking and dispensing
- Safety Features: Immediate stop functionality
- 4 Base Drinks: Milkshake, Coca-Cola, Fanta, Sprite
- Smart Mixing: Proportional ingredient calculation
- Customizable Toppings: Chocolate, caramel, fruit syrups
- Ice/Cream Options: Automated dispensing with volume compensation
- Glass Size Support: Small (150ml), Medium (330ml), Large (500ml)
- Consumption Tracking: Individual drink counters
- Volume Monitoring: Total liquid dispensed
- Ice Usage Statistics: Cubes dispensed tracking
- Temperature Logging: 16-point rolling average
- Session Persistence: Statistics maintained during operation
- Weight Calibration: Automatic glass detection setup
- Volume Configuration: Customizable glass sizes
- Animation Selection: 4 LED ring effects ("Rainbow", "Snake", "Ukraine", "Fire")
- Topping Preferences: 6 fruit syrup options
- Ice Inventory: Manual count management
- Intuitive Navigation: Context-aware button functions
- Progress Indication: Real-time filling animation
- Error Handling: Glass detection, volume validation
Pin 3: Servo Motor (Ice Dispenser)
Pin 4: LCD D4
Pin 5: LCD D5
Pin 6: LCD D6
Pin 7: LCD D7
Pin 12: LCD Enable
Pin 13: LCD RS
A0: Force Sensor (Glass Detection)
A1: Shift Register Latch Pin
A2: Shift Register Data Pin
A3: Shift Register Clock Pin
A4: Temperature Sensor (TMP36)
A5: Button Input Multiplexer
- Glass Detection: System waits for glass placement
- Drink Selection: User chooses from 4 options via dedicated buttons
- Size Selection: Small/Medium/Large glass configuration
- Customization: Ice, cream, toppings based on drink type
- Preparation: Automated dispensing with progress display
- Completion: Ready notification with removal detection
- Ice Management: Count adjustment and calibration
- System Calibration: Weight sensor baseline setting
- Volume Configuration: Custom glass size definition
- Visual Effects: LED animation selection
- Topping Selection: Default fruit syrup choice
- Information Display: Statistics and system info
- Pump Rate: 28ml/second base flow rate
- Ice Capacity: 50 cube maximum storage
- Temperature Range: -40Β°C to +125Β°C monitoring
- Weight Detection: 0-1000g range with glass detection
- Response Time: <25ms button debouncing
- Efficient Storage: Template-based shift register control
- Minimal Footprint: Custom implementations over libraries
- Statistics Buffer: 16-point temperature history
- String Optimization: PROGMEM usage for static data
- Power Distribution: Ensure adequate 5V/12V supply separation
- Shift Register Chain: Connect 74HC595 modules in series
- Sensor Calibration: Position force sensor under glass platform
- Pump Placement: Mount pumps with proper liquid line routing
- Display Mount: Secure LCD for optimal viewing angle
- Library Dependencies: LiquidCrystal, Servo (Arduino IDE built-in)
- Pin Verification: Confirm all connections match pin definitions
- Calibration: Run weight sensor calibration before first use
- Testing: Use
testPouringSystem()for pump verification
This project represents several technical milestones:
- ποΈ Complex System Integration: Successfully coordinated 8 pumps, sensors, display, and servo
- π Custom Library Development: Built specialized 74HC595 control from scratch
- β‘ Efficient Resource Usage: Template-based design for minimal memory footprint
- π¨ User Experience Focus: Comprehensive menu system with intuitive navigation
- π Data Management: Advanced statistics with persistent tracking
- π§ Real-world Problem Solving: Addressed hardware limitations through software solutions
- Simulation Environment: Tinkercad physics limitations affect liquid behavior representation
- Calibration Dependency: Requires manual adjustment for real-world pump variations
- Single-threaded Operation: Sequential operation limits parallel processing
- Physical Implementation: Migration to real hardware with 3D-printed chassis
- Parallel Processing: ATtiny85 integration for background LED effects
- I2C LCD Upgrade: More stable display communication
- Recipe Expansion: User-programmable drink combinations
- Network Connectivity: Remote monitoring and control capabilities
- Voice Interface: Audio feedback and command recognition
// System automatically handles:
// 1. Glass detection via checkGlass()
// 2. User input via askDrink()
// 3. Customization via askToppings()
// 4. Preparation via cookDrink()CocktailMaker cm;
cm.begin(A1, A2, A3);
cm.startPouring("Coca-Cola", 250); // Pour 250ml
cm.breakIce(); // Dispense ice cube
cm.stopPouring(); // Emergency stopThis project is available under the MIT License. Feel free to use, modify, and build your own BARBOTOS β cheers! π»
Created by a 15-year-old maker | BARBOTOS v1.0.6 | 2024
Cheers! π€πΈ