Dispensador de Dulces DIY con Arduino: Construye una Máquina de Snacks Inteligente
Componentes y materiales
- Arduino UNO ×1
- Servo 180° ×1
- Pantalla LCD 16×2 I2C (blanco sobre azul, Adafruit) ×1
- Pulsador 12 mm (SparkFun) ×1
- Shield PHPoC para Arduino ×1
- Sensor de distancia IR ×1
- Interruptor de encendido ×1
- Protoboard ×1
Herramientas necesarias
- Soldador
Aplicaciones y servicios online
- Arduino IDE
Sobre el proyecto
El proyecto
Un dispensador de dulces sencillo que usa un sensor IR, un servo y un pulsador. Pasos principales:
- Montaje del Arduino UNO R3
- Programación y configuración
- Construcción de la carcasa y partes mecánicas
- Instalación de la electrónica
- Pruebas y uso
Versión simplificada inspirada en este proyecto con Google Assistant.
Construcción de la caja y partes mecánicas
Paso 1: Distribución de componentes
Coloca todos los componentes sobre cartón para probar conexiones y organizar el cableado (usa colores distintos para identificar cada línea).
Paso 2: Diseño de la caja
Dibuja planos técnicos. Materiales: cartón (laterales, frente, base) y acrílico (trasera). Medidas:
- Frente y trasera: 20 cm × 16 cm
- Laterales: 12 cm × 16 cm
- Tapa y base: 20 cm × 12 cm
Paso 3: Ensamblaje y recortes
Une las piezas con cinta de enmascarar. Recorta huecos para:
- LCD: 7,2 cm × 2,5 cm
- Botones: 1,2 cm × 1,2 cm
- Vaso recolector: 9 cm × 12 cm (base 9 cm × 9 cm)
- Sensores IR
Diseña el conducto de dulces en escalones para que no caigan de golpe.
Paso 4: Montaje de electrónica
Protoboard y Arduino uno detrás de otro, fijados con acrílico para ahorrar espacio.
Paso 5: Instalación de componentes
Coloca LCD, botones, servo y cableado. Añade el interruptor de encendido en la parte trasera.
Paso 6: Acabado final
Cierra la caja y verifica el funcionamiento.
Código
Candy Dispenser.ino
//------LIBRERÍAS------
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
//------CONFIGURACIÓN------
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C 0x27, 16 cols, 2 filas
Servo myservo;
int pos = 90; // Posición inicial del servo
int buttonCLK = 7; // Botón "poco dulce"
int buttonAntiCLK = 6; // Botón "mucho dulce"
int avoidPin = 5; // Sensor IR (obstáculo)
int set = 0; // Estado de selección
void setup() {
lcd.begin();
lcd.clear();
myservo.attach(9);
pinMode(buttonCLK, INPUT);
pinMode(buttonAntiCLK, INPUT);
pinMode(avoidPin, INPUT);
Serial.begin(9600);
lcd.backlight();
lcd.setCursor(3,0); lcd.print("Bienvenido a");
lcd.setCursor(3,1); lcd.print("Dulce Landia");
delay(2000);
lcd.clear();
lcd.setCursor(0,0); lcd.print("Cuanto dulce?");
lcd.setCursor(0,1); lcd.print("Poco Mucho");
delay(5000);
}
void loop() {
// Botón "poco"
if (digitalRead(buttonCLK) == HIGH) {
lcd.clear(); lcd.print("Coloque vaso"); delay(2000); lcd.clear();
set = 1;
}
// Botón "mucho"
if (digitalRead(buttonAntiCLK) == HIGH) {
lcd.clear(); lcd.print("Coloque vaso"); delay(2000); lcd.clear();
set = 2;
}
// Ejecutar según selección
if (set == 1) IRCLK();
if (set == 2) IRAntiCLK();
}
void TurnClockwise() {
Serial.println("Dulce tipo 1 dispensado");
CandyText1();
for (pos = 90; pos < 180; pos += 1) { myservo.write(pos); delay(15); }
if (pos == 180) { delay(2000); ThankYouText(); }
}
void TurnAntiClockwise() {
Serial.println("Dulce tipo 2 dispensado");
CandyText2();
for (pos = 90; pos < 180; pos += 1) { myservo.write(pos); delay(20); }
if (pos == 180) { delay(3000); ThankYouText(); }
}
void IRCLK() {
delay(1000);
boolean avoidVal = digitalRead(avoidPin);
lcd.setCursor(0,0); lcd.print("Detectando vaso");
lcd.setCursor(0,14); lcd.print("...");
if (avoidVal == LOW) { lcd.clear(); lcd.print("Vaso detectado"); delay(2000); TurnClockwise(); }
}
void IRAntiCLK() {
delay(1000);
boolean avoidVal = digitalRead(avoidPin);
lcd.setCursor(0,0); lcd.print("Detectando vaso");
lcd.setCursor(0,14); lcd.print("...");
if (avoidVal == LOW) { lcd.clear(); lcd.print("Vaso detectado"); delay(2000); TurnAntiClockwise(); }
}
void CandyText1() { lcd.clear(); lcd.setCursor(4,0); lcd.print("Sirviendo"); lcd.setCursor(1,1); lcd.print("Poco Dulce"); }
void CandyText2() { lcd.clear(); lcd.setCursor(4,0); lcd.print("Sirviendo"); lcd.setCursor(3,1); lcd.print("Mucho Dulce"); }
void ThankYouText() {
lcd.clear(); lcd.setCursor(5,0); lcd.print("Gracias");
lcd.setCursor(6,1); lcd.print("Por venir");
delay(15);
software_Reset();
}
void software_Reset() { asm volatile ("jmp 0"); } // Reinicio software
Esquemas
Sigue el cableado según el código de colores en la imagen del esquema.
Proceso de manufactura
- Bastones de caramelo: historia, producción y la dulce ciencia detrás del clásico navideño
- El candy corn: de la tradición a la producción moderna
- Rompecabezas (Jawbreaker): Historia, Ingredientes y Elaboración de un Caramelo Duro Clásico
- Algodón de Azúcar: Del Clásico Dulce a la Tecnología de Producción Moderna
- La Dulce Ciencia de las Gominolas: De la Historia a la Producción Moderna
- Caramelos M&M®: De la Invención a la Producción Moderna
- Panel de interruptores y LEDs para Microsoft Flight Simulator 2020 con Arduino
- Construye un Spybot controlado por Bluetooth con Arduino
- FlickMote: Mando IR por gestos para Smart Home
- TV‑B‑Gone DIY con Arduino: Mando universal para apagar cualquier TV
- Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros