Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

En este proyecto aprenderemos a hacer una máquina expendedora DIY basada en Arduino. Te muestro todo el proceso: corte y ensamblaje de tableros MDF, conexión de electrónica y programación Arduino.

Ver video o leer tutorial abajo.

Resumen

La máquina tiene 4 unidades dispensadoras con servos de rotación continua, sistema de transporte (carrier) con motores paso a paso, LCD, 4 botones para selección y detector de monedas.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

El transportador quizás no sea tan útil en una expendedora real, pero mi idea era hacer el proyecto más interesante/complejo para aprender más. Ideal para estudiantes de electrónica/mecatrónica como proyecto final o entusiastas Arduino.

Construcción de la Máquina Expendedora

Empecé cortando tablero MDF 8mm a medida.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Medidas de modelo 3D previo.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Modelo 3D descargable en Thangs. Corte con sierra circular (banco de trabajo casero con sierra circular, router y sierra caladora, de mi pareja Marija - canal Creativity Hero).

Tras cortar paneles, hice aberturas en algunos con sierra caladora invertida. También para piezas pequeñas con múltiples cortes. ¡Cuidado: máquinas peligrosas!

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Ensamblé paneles con cola madera y tornillos 3mm. Sargentos 90°, taladro para guías, avellanado. Algunos paneles con sargentos F.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Sistema de Raíles

Tubos aluminio cortados con sierra metal. Horizontal: 16mm diámetro, 2x 27cm. Vertical: 20mm, 3x 45cm. Ranuras en tablones 18mm con broca Forstner.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Deslizadores: tabla 21x21cm, agujeros 8mm, varillas roscadas 8mm, arandelas, tuercas, cojinetes 22mm. Deslizador horizontal: mismo método, cojinetes 16mm.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Al insertar deslizador vi holgura. Solución: reducir distancia entre raíles. Amplié ranuras, hice ranuras perpendiculares en tubos, varilla roscada para acercar raíles. Deslizadores firmes y funcionando.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Desmonté raíles para añadir elementos: tornillo 5mm lado izquierdo para polea correa horizontal + 2 cojinetes para raíl vertical izquierdo. Lado derecho: motor paso a paso horizontal. Motor en tabla MDF 8mm, pieza soporte, parte ranurada, todo pegado y atornillado a deslizador vertical.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa
Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Contenedor en deslizador horizontal: piezas madera pequeñas encoladas. Listo para ensamblar sistema raíles. Epoxi en ranuras, tabla lateral extra para rigidez.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Inserté conjunto entre raíles verticales y asegurés. Resultado: deslizadores y raíles funcionando excelentemente.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Correa dentada horizontal: medí, corté, brida al deslizador. Motor vertical arriba en MDF con tornillos. Polea abajo, correa similar.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Unidades Dispensadoras

Bobina helicoidal de alambre 3mm enrollado en lata spray 7cm diámetro.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Fijada a servo rotación continua con pistola silicona.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Panel Frontal

Puerta con bisagras, cierre magnético. Acrílico 5mm en abertura grande, chapa aluminio fina en abertura pequeña (derecha). 4 agujeros botones, aberturas monedas y LCD. Taladro y sierra arco. Electrónica en chapa, atornillada a puerta (tornillos 5mm).

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

2 micro interruptores para posición inicial del transportador. Guía para monedas (pegamento) que las lleva al fondo. Detector moneda: sensor proximidad IR (detecta moneda al pasar).

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Esquema Eléctrico

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Fuente 12V 2A+ (para 2 steppers + tira LED puerta). Buck converter LM2596 12V→5V para resto. 4 servos DS04-NFC rotación continua 5V PWM desde Arduino. 2 steppers con drivers A4988. 4 botones + 2 micro switches a GND y pines digitales Arduino (pull-up interno).

Componentes

  • Convertidor DC-DC LM2596 Buck
  • LCD 16×2
  • Servo 360° rotación continua DS04-NFC (x4)
  • Motor paso a paso NEMA 17 (x2)
  • Driver A4988 (x2)
  • Sensor proximidad IR
  • Botones (x4)
  • Micro final de carrera (x2)
  • Arduino (Uno/Mega)

Conexiones con jumpers (un lío pero funciona). Tiras LED en puerta para iluminar interior.

Construye una Máquina Expendedora Inteligente con Arduino: Guía Mecatrónica DIY Completa

Código Arduino

Código del proyecto con descripción abajo.

/* DIY Vending Machine - Arduino Mechatronics Project */
#include <LiquidCrystal.h> #include <Servo.h>
LiquidCrystal lcd(27, 26, 25, 24, 23, 22);
Servo servo1, servo2, servo3, servo4; // DS04-NFC

#define dirPinVertical 0 #define stepPinVertical 1
#define dirPinHorizontal 2 #define stepPinHorizontal 3
#define coinDetector 9
#define button1 13 #define button2 12 #define button3 11 #define button4 10
#define microSwitchV 15 #define microSwitchH 14
int buttonPressed;

void setup() {
  lcd.begin(16, 2);
  servo1.attach(4); servo2.attach(5); servo3.attach(6); servo4.attach(7);
  pinMode(dirPinVertical, OUTPUT); pinMode(stepPinVertical, OUTPUT);
  pinMode(dirPinHorizontal, OUTPUT); pinMode(stepPinHorizontal, OUTPUT);
  pinMode(coinDetector, INPUT);
  pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP); pinMode(button4, INPUT_PULLUP);
  pinMode(microSwitchV, INPUT_PULLUP); pinMode(microSwitchH, INPUT_PULLUP);
  
  // Posición inicial vertical
  digitalWrite(dirPinVertical, HIGH);
  while (true) {
    if (digitalRead(microSwitchV) == LOW) { moveUp(70); break; }
    digitalWrite(stepPinVertical, HIGH); delayMicroseconds(300);
    digitalWrite(stepPinVertical, LOW); delayMicroseconds(300);
  }
  // Posición inicial horizontal
  digitalWrite(dirPinHorizontal, LOW);
  while (true) {
    if (digitalRead(microSwitchH) == LOW) { moveLeft(350); break; }
    digitalWrite(stepPinHorizontal, HIGH); delayMicroseconds(300);
    digitalWrite(stepPinHorizontal, LOW); delayMicroseconds(300);
  }
}

void loop() {
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Insert a coin!");
  while (true) { if (digitalRead(coinDetector) == LOW) break; }
  delay(10);
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Select your item");
  lcd.setCursor(0,1); lcd.print(" 1, 2, 3 or 4?");
  
  while (true) {
    if (digitalRead(button1) == LOW) { buttonPressed = 1; break; }
    if (digitalRead(button2) == LOW) { buttonPressed = 2; break; }
    if (digitalRead(button3) == LOW) { buttonPressed = 3; break; }
    if (digitalRead(button4) == LOW) { buttonPressed = 4; break; }
  }
  
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Delivering...");
  
  switch (buttonPressed) {
    case 1: // Ubicación 1
      moveUp(4900); delay(200); moveLeft(1700); delay(300);
      servo1.writeMicroseconds(2000); delay(950); servo1.writeMicroseconds(1500); delay(500);
      moveRight(1700); delay(200); moveDown(4900); break;
    case 2: // Ubicación 2
      moveUp(4900); delay(200);
      servo2.writeMicroseconds(2000); delay(950); servo2.writeMicroseconds(1500); delay(500);
      moveDown(4900); break;
    case 3: // Ubicación 3
      moveUp(2200); delay(200); moveLeft(1700); delay(300);
      servo3.writeMicroseconds(2000); delay(950); servo3.writeMicroseconds(1500); delay(500);
      moveRight(1700); delay(200); moveDown(2200); break;
    case 4: // Ubicación 4
      moveUp(2200); delay(200);
      servo4.writeMicroseconds(2000); delay(950); servo4.writeMicroseconds(1500); delay(500);
      moveDown(2200); break;
  }
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Item delivered!"); delay(2000);
}

// Funciones movimiento
void moveUp(int steps) { /* ... */ }
void moveDown(int steps) { /* ... */ }
void moveLeft(int steps) { /* ... */ }
void moveRight(int steps) { /* ... */ }

Explicación del Código

Incluimos librerías Servo y LiquidCrystal, definimos pines LCD, 4 servos, pines steppers, detector moneda, 4 botones, 2 micro switches.

Setup: modos de pines. Botones y micro switches con pull-up interno (HIGH en reposo, LOW al pulsar). Antes del loop principal, posicionamos carrier en inicio definido por micro switches (bucles while hasta pulsar).

Loop principal: imprime "Insert a coin". Bucle while espera moneda (detector IR → LOW). Sale con break.

while (true) {
  if (digitalRead(coinDetector) == LOW) break;
}

Imprime "Select your item". Otro while espera botón.

while (true) {
  if (digitalRead(button1) == LOW) { buttonPressed=1; break; }
  // ... botones 2,3,4
}

Imprime "Delivering". Switch según botón: mueve carrier con funciones moveUp(), moveLeft(), etc., acciona servo correspondiente (2000μs = gira, 1500μs = para), vuelve a inicio.

Función moveUp() ejemplo:

void moveUp(int steps) {
  digitalWrite(dirPinVertical, LOW);
  for (int x=0; x

Driver A4988 en 1/4 paso (quarter step). 4900 steps = posición superior (ajustado por prueba). Similar para otros movimientos.

Servo rotación continua: writeMicroseconds(2000) gira, 1500 para. 950ms = vuelta completa helicoidal (puede variar por motor).

Funciones moveRight() y moveDown() devuelven carrier a inicio. Al final: "Item delivered".

¡Simple! Espero que lo disfrutaras y aprendieras. Preguntas en comentarios y revisa mi colección Proyectos Arduino.

Proceso de manufactura

  1. Máquinas expendedoras: Una industria de 36.600 millones de dólares en EE. UU.
  2. Construye tu propia máquina de escribir deberes casera (DIY Homework Writing Machine)
  3. Construye una consola de control DIY para Photoshop con Arduino Nano RP2040
  4. Crea un Impresionante Sistema Ambilight para Monitor con Arduino
  5. Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
  6. Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
  7. Construye un Sensor de Ritmo Cardíaco por Infrarrojos Fiable con Arduino: Guía Paso a Paso
  8. Tres en raya con Arduino, matriz LED MAX7219 y carcasa de cartón
  9. Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
  10. Construye un Reloj Digital en Arduino usando una Máquina de Estados Finitos
  11. Construye una Máquina CNC Totalmente Funcional con Arduino Nano R3