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 tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Componentes y suministros

Madera contrachapada 1/4" (FriendlyARM) Cortar a las dimensiones del diagrama × 4
Bloques de madera contrachapada 3/4" Cortar tiras 3/4" ancho y largo según pieza a conectar, ver diagrama × 1
LAFVIN 5 Sets Motor paso a paso 28BYJ-48 5V + Driver ULN2003 para Arduino Estos motores podrán empujar cualquier golosina × 1
Cable plano rainbow IDC 1.27mm para conectores 2.54mm (50P-10FT) Para montaje limpio y profesional × 1
Glarks 635 pcs Conectores Dupont Macho/Hembra 40 pines Para montaje limpio y profesional × 1
Micropulsadores iluminados Gamelec (reemplazo) Botones necesarios × 1
Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje Protoboard (genérica) También funcionan placas de soldar × 1
Kit 30 pcs PCB doble cara para prototipos Solo se necesitan 1-2, pero buen tamaño para futuros proyectos × 1
Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje Arduino Mega 2560 Controlador usado × 1
Módulo relé 5V Tolako para Arduino ARM Evita sobrecalentamiento de motores × 1
HiLetgo 2pcs Módulo LCD Serie 1602 Sin esto no sabrás qué botón se pulsó × 1
Tiras LED Opcional × 2
Cable de cobre desnudo 8 AWG 50 ft (puesta a tierra) Para hacer las bobinas × 1
Divisor de estante metálico plano × 1

Herramientas y máquinas necesarias

Mesa o sierra de banco Salvo que tengas donde cortar la madera
Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje Soldador (genérico)
Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje Pistola de pegamento caliente (genérica) No olvides las barras de pegamento

Aplicaciones y servicios en línea

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje Arduino IDE

Sobre este proyecto

LA MÁQUINA EXPENDEDORA PERSONAL

Este proyecto es una construcción paso a paso de una máquina expendedora personal. Puede llenarse con tus snacks favoritos o llevarse a la oficina para compartir dulces con el equipo. ¡Echa un vistazo y dime tu opinión!

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Construcción de la máquina

Me referiré a los diagramas a lo largo del texto; consúltalos para clarificación.

Dimensiones: 21" Ancho x 18" Fondo x 24 1/4" Alto (Caja)

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje
Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Ensambla la caja como en el diagrama usando bloques de 3/4" en cada unión. Los laterales van sobre la base y bajo la tapa. El perímetro debe medir 21"W x 24 1/4"H.

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

La pared divisoria necesita preparación antes de instalar. Mide 16 1/4" desde arriba y coloca bloqueo para estante inferior. Mide 8 1/4" desde arriba para estante superior. Repite en pared izquierda (vista frontal) para bloqueos de estantes.

**** Nota: Instala primero el estante inferior, si no fijar a los bloqueos será muy difícil. ****

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Una vez instalados los bloqueos para estantes, coloca paneles 13"x12" en cada juego de bloqueos. Esto posiciona automáticamente la pared divisoria. Luego asegura bloqueos en parte sup/inf del lado derecho de la divisoria y fíjala a paneles sup/inf. Esto rigidiza la estructura.

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Instala panel trasero y prepárate para motores. Ten las ruedas de bobina impresas en 3D para medir y taladrar. Mide ruedas y suma 1/4" a la altura para dejar espacio al giro de la bobina. Ajusta según material. Mide 6 1/2" en el estante para su centro. Mide 3 1/4" para centro de cada sección. Usa la altura medida para puntos de taladro. Taladra para conectar rueda a motor sin roce. Termina montando motores y tornillos.

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Configuración del relé de motores

Conecta pines usando chip L293D (muesca a la izquierda) para controlar el relé y alimentar motores.

(De izquierda a derecha)

  • Pin 1 → Pin socket 10 en controlador
  • Pin 2 → Pin socket 9 en controlador
  • Pin 3 → Lado positivo del relé (3 pines frente a ti, pin izq.)
  • Pin 4 → Tierra 12V en protoboard
  • Pin 5 → No usado
  • Pin 6 → Tierra lado relé (3 pines frente a ti, pin der.)
  • Pin 7 → Pin socket 8 en controlador
  • Pin 8 → +12V en protoboard
  • Pin central relé → +12V en protoboard
  • Pin trasero derecho relé (3 pines frente a ti, pin trasero der.) → Positivo a drivers de motor
Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Instalación pantalla y botones

Pantalla: Elige zona lado derecho (vista frontal) y marca hueco para display (2.53937" x 0.5708661").

Botones: Elige zona lado derecho y marca 4 agujeros de 1.10236" (si usas botones de la lista). Usa broca menor y lija para ajustar.

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje
Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Verifica que todas las conexiones coincidan exactamente con el diagrama. Los LEDs en el diagrama son los integrados en los pulsadores; se muestran separados solo para claridad.

Conecta cada motor a su driver incluido. Luego conecta cada driver al controlador:

Configuración Motores:

Alimentación al lado 12V de protoboard (desde fuente ATX preparada al final). Conecta 4 pines "in" del driver al controlador:

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

********* NO CONECTES A LOS PRIMEROS 2 PINES DE ESTE BLOQUE: SON 5V - NO SE USAN EN ESTE PROYECTO *********

  • Motor 1: Pines Azules 22, 24, 26, 28
  • Motor 2: Pines Amarillos 23, 25, 27, 29
  • Motor 3: Pines Verdes 30, 32, 34, 36
  • Motor 4: Pines Rojos 31, 33, 35, 37

Conexiones Botones:

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje
  • Botón 1: Un lado a 5V, otro a resistencia 220Ω a tierra + Pin Analógico A0
  • Botón 2: Un lado a 5V, otro a resistencia 220Ω a tierra + Pin Analógico A1
  • Botón 3: Un lado a 5V, otro a resistencia 220Ω a tierra + Pin Analógico A2
  • Botón 4: Un lado a 5V, otro a resistencia 220Ω a tierra + Pin Analógico A3

PANTALLA LCD 1602 SERIE:

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje
  • Alimentación y tierra al lado 5V de protoboard
  • Pin 1: Tierra
  • Pin 2: 5V
  • Pin 3: Potenciómetro ajustable (izq. tierra, der. 5V, centro pin 3 LCD) - ajuste de contraste
  • Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje
  • Pin 4: Señal 1 → Pin socket 2 controlador
  • Pin 5: Tierra
  • Pin 6: Señal 2 → Pin socket 3 controlador
  • Pin 7-10: NO USADOS
  • Pin 11: Señal 3 → Pin socket 4 controlador
  • Pin 12: Señal 4 → Pin socket 5 controlador
  • Pin 13: Señal 5 → Pin socket 6 controlador
  • Pin 14: Señal 6 → Pin socket 7 controlador
  • Pin 15: 5V
  • Pin 16: Tierra

FUENTE ATX:

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Solo corta cables necesarios. Los demás más seguros en conector original para otros proyectos.

Pines ATX:

  • Cortar y pelar: (Tierra) Negro pin 3 y (Señal) Verde pin 16 → Interruptor para encender/apagar máquina.
  • Cortar y pelar: (Tierra) Negro pin 7 y (+12V) Amarillo pin 10 → Lado 12V de protoboard (conexiones amarillas/negras).
  • Cortar y pelar: (Tierra) Negro pin 24 y (+12V) Amarillo pin 11 → Conector compatible para alimentar Arduino.
  • Cortar y pelar: (Tierra) Negro pin 19 y (+5V) Rojo pin 21 → Lado 5V de protoboard.
Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Divisores de estante y bobinas

Estantes: En punto medio 6 1/2" desde pared lateral/divisoria (marca de pasos previos). Usa metal plano y dóblalo en forma de triángulo "^". Centra sobre marca media. Repite en segundo estante. Fija con pegamento caliente. Guías laterales opcionales.

Bobinas: Busca tubo 1 1/2" (tubería, tubo silicona, lata spray). Truco: envuelve goma elástica de arriba a abajo. Traza línea recta a ambos lados. En un lado marca a 1" y luego cada 2". En otro lado solo cada 2" desde inicio. Enrolla bobina desde lado 1" tocando cada marca en ambos lados → hueco 2" entre vueltas (ideal para la mayoría items). Para caramelos reduce a 1" (mitad de fórmula).

Conectar bobinas a ruedas 3D: Hay ruedas fabricadas que funcionan (busca en Amazon). En lado 1" colapsa bobina en círculo, reduce diámetro ligeramente menor que rueda. Ajusta alrededor del borde de la rueda → se comprime y no resbala. Pon gota pegamento caliente en rueda al final de bobina para fijar.

Tiras LED:

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Positivo → Pin +12V lado 12V protoboard. Negativo → Pin tierra lado 12V protoboard (no en diagrama).

¡HAGAN TODAS LAS PREGUNTAS PARA QUE PUEDA ACTUALIZAR Y HACER ESTE EL PROYECTO MÁS FÁCIL!

Código

Máquina Expendedora - SIN luces LED cambiantes

// Display
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

// Stepper Library
#include <Stepper.h>

// Relay Setup
#define ENABLE 10
#define DIRA 8
#define DIRB 9

// Define "i"
int i;

// Definición pines
// Stepper Connect 1
int stepIN1Pin = 22; int stepIN2Pin = 24; int stepIN3Pin = 26; int stepIN4Pin = 28;
// Stepper Connect 2
int stepIN1Pin1 = 23; int stepIN2Pin1 = 25; int stepIN3Pin1 = 27; int stepIN4Pin1 = 29;
// Stepper Connect 3
int stepIN1Pin2 = 30; int stepIN2Pin2 = 32; int stepIN3Pin2 = 34; int stepIN4Pin2 = 36;
// Stepper Connect 4
int stepIN1Pin3 = 31; int stepIN2Pin3 = 33; int stepIN3Pin3 = 35; int stepIN4Pin3 = 37;

// Pasos por revolución
int stepsPerRevolution = 2048;

// Pines botones
const int button1Pin = A0;
const int button2Pin = A1;
const int button3Pin = A2;
const int button4Pin = A3;

// Definir cada stepper
Stepper myStepper0(stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin);
Stepper myStepper1(stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pin1, stepIN4Pin1);
Stepper myStepper2(stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2);
Stepper myStepper3(stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3);

void setup() {
  pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT); pinMode(button4Pin, INPUT);
  pinMode(ENABLE, OUTPUT); pinMode(DIRA, OUTPUT); pinMode(DIRB, OUTPUT);
  myStepper0.setSpeed(15); myStepper1.setSpeed(15);
  myStepper2.setSpeed(15); myStepper3.setSpeed(15);
  lcd.begin(16, 2); lcd.clear();
  lcd.setCursor(0, 0); lcd.print("Select your item");
  lcd.setCursor(0, 1); lcd.print(" #1 #2 #3 #4");
}

void loop() {
  int button1State = digitalRead(button1Pin);
  int button2State = digitalRead(button2Pin);
  int button3State = digitalRead(button3Pin);
  int button4State = digitalRead(button4Pin);
  digitalWrite(ENABLE, HIGH);
  
  // Botón 1
  if ((button1State == LOW) && !(button2State == LOW)) {
    digitalWrite(DIRA, HIGH); digitalWrite(DIRB, LOW);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    myStepper0.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0); lcd.print("Button State 1");
    lcd.setCursor(2, 1); lcd.print("1 2 3 or 4");
    digitalWrite(DIRA, LOW); digitalWrite(DIRB, LOW);
  }
  
  // Botón 2
  if ((button2State == LOW) && !(button1State == LOW)) {
    digitalWrite(DIRA, HIGH); digitalWrite(DIRB, LOW);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    myStepper1.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0); lcd.print("Button State 2");
    lcd.setCursor(2, 1); lcd.print("1 2 3 or 4");
    digitalWrite(DIRA, LOW); digitalWrite(DIRB, LOW);
  }
  
  // Botón 3
  if ((button3State == LOW) && !(button4State == LOW)) {
    digitalWrite(DIRA, HIGH); digitalWrite(DIRB, LOW);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    myStepper2.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0); lcd.print("Button State 3");
    lcd.setCursor(2, 1); lcd.print("1 2 3 or 4");
    digitalWrite(DIRA, LOW); digitalWrite(DIRB, LOW);
  }
  
  // Botón 4
  if ((button4State == LOW) && !(button3State == LOW)) {
    digitalWrite(DIRA, HIGH); digitalWrite(DIRB, LOW);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    myStepper3.step(-stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0); lcd.print("Button State 4");
    lcd.setCursor(2, 1); lcd.print("1 2 3 or 4");
    digitalWrite(DIRA, LOW); digitalWrite(DIRB, LOW);
  }
}

Máquina Expendedora - CON luces LED cambiantes

// Display
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#include <Stepper.h>

#define ENABLE 10
#define PinA 8
#define PinB 9
#define REDPIN 38
#define GREENPIN 39
#define BLUEPIN 40

int i; int r, g, b;

// Pines steppers (igual que versión anterior)
int stepIN1Pin = 22, stepIN2Pin = 24, stepIN3Pin = 26, stepIN4Pin = 28;
int stepIN1Pin1 = 23, stepIN2Pin1 = 25, stepIN3Pin1 = 27, stepIN4Pin1 = 29;
int stepIN1Pin2 = 30, stepIN2Pin2 = 32, stepIN3Pin2 = 34, stepIN4Pin2 = 36;
int stepIN1Pin3 = 31, stepIN2Pin3 = 33, stepIN3Pin3 = 35, stepIN4Pin3 = 37;
int stepsPerRevolution = 2048;

const int button1Pin = A0; const int button2Pin = A1;
const int button3Pin = A2; const int button4Pin = A3;

Stepper myStepper0(stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin);
Stepper myStepper1(stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pin1, stepIN4Pin1);
Stepper myStepper2(stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2);
Stepper myStepper3(stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3);

void setup() {
  pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT); pinMode(button4Pin, INPUT);
  pinMode(ENABLE, OUTPUT); pinMode(PinA, OUTPUT); pinMode(PinB, OUTPUT);
  pinMode(REDPIN, OUTPUT); pinMode(GREENPIN, OUTPUT); pinMode(BLUEPIN, OUTPUT);
  myStepper0.setSpeed(15); myStepper1.setSpeed(15);
  myStepper2.setSpeed(15); myStepper3.setSpeed(15);
  lcd.begin(16, 2); lcd.clear();
  lcd.setCursor(0, 0); lcd.print("Select your item");
  lcd.setCursor(0, 1); lcd.print(" #1 #2 #3 #4");
  analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256); analogWrite(BLUEPIN, 256);
}

void loop() {
  int button1State = digitalRead(button1Pin);
  int button2State = digitalRead(button2Pin);
  int button3State = digitalRead(button3Pin);
  int button4State = digitalRead(button4Pin);
  digitalWrite(ENABLE, HIGH);
  
  // Botón 1 - Efecto rojo/azul/verde
  if ((button1State == LOW) && !(button2State == LOW)) {
    digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW);
    analogWrite(REDPIN, 256);
    for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
    for (g = 256; g > 0; g--); analogWrite(GREENPIN, g);
    for (g = 256; g > 0; g--);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    myStepper0.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0); lcd.print("Button State 1");
    lcd.setCursor(2, 1); lcd.print("1 2 3 or 4");
    for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
    for (g = 0; g < 256; g++); analogWrite(GREENPIN, g);
    digitalWrite(PinA, LOW); digitalWrite(PinB, LOW);
  }
  
  // Botón 2 - Efecto verde/azul/rojo
  if ((button2State == LOW) && !(button1State == LOW)) {
    digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW);
    analogWrite(GREENPIN, 256);
    for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
    for (r = 256; r > 0; r--); analogWrite(REDPIN, r);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    myStepper1.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0); lcd.print("Button State 2");
    lcd.setCursor(2, 1); lcd.print("1 2 3 or 4");
    digitalWrite(PinA, LOW); digitalWrite(PinB, LOW);
    for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
    for (r = 0; r < 256; r++); analogWrite(REDPIN, r);
  }
  
  // Botón 3 - Efecto azul/rojo/verde
  if ((button3State == LOW) && !(button4State == LOW)) {
    digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW);
    analogWrite(BLUEPIN, 256);
    for (r = 256; r > 0; r--); analogWrite(REDPIN, r);
    for (g = 256; g > 0; g--); analogWrite(GREENPIN, g);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    myStepper2.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0); lcd.print("Button State 3");
    lcd.setCursor(2, 1); lcd.print("1 2 3 or 4");
    digitalWrite(PinA, LOW); digitalWrite(PinB, LOW);
    for (g = 0; g < 256; g++); analogWrite(GREENPIN, g);
    for (r = 0; r < 256; r++); analogWrite(REDPIN, r);
  }
  
  // Botón 4 - Efecto amarillo/azul
  if ((button4State == LOW) && !(button3State == LOW)) {
    digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW);
    analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256);
    for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    myStepper3.step(-stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
    lcd.setCursor(3, 1); lcd.print("Your Item");
    delay(2500);
    lcd.setCursor(0, 0); lcd.print("Button State 4");
    lcd.setCursor(2, 1); lcd.print("1 2 3 or 4");
    digitalWrite(PinA, LOW); digitalWrite(PinB, LOW);
    for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
  }
}

Aceptador de monedas y código completo

// Display
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#include <Stepper.h>

#define ENABLE 10
#define REDPIN 38
#define GREENPIN 39
#define BLUEPIN 40

int r, g, b;
const int coinpin = 21;
const int ledpin = 13;
const int targetcents = 100;
volatile int cents = 0;
int credits = 0;

// Pines steppers (igual)
int stepIN1Pin = 22, stepIN2Pin = 24, stepIN3Pin = 26, stepIN4Pin = 28;
int stepIN1Pin1 = 23, stepIN2Pin1 = 25, stepIN3Pin1 = 27, stepIN4Pin1 = 29;
int stepIN1Pin2 = 30, stepIN2Pin2 = 32, stepIN3Pin2 = 34, stepIN4Pin2 = 36;
int stepIN1Pin3 = 31, stepIN2Pin3 = 33, stepIN3Pin3 = 35, stepIN4Pin3 = 37;
int stepsPerRevolution = 2048;

const int button1Pin = A0; const int button2Pin = A1;
const int button3Pin = A2; const int button4Pin = A3;

Stepper myStepper0(stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin);
Stepper myStepper1(stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pin1, stepIN4Pin1);
Stepper myStepper2(stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2);
Stepper myStepper3(stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3);

void setup() {
  attachInterrupt(digitalPinToInterrupt(coinpin), coinInterrupt, RISING);
  pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT); pinMode(button4Pin, INPUT);
  pinMode(ENABLE, OUTPUT);
  pinMode(REDPIN, OUTPUT); pinMode(GREENPIN, OUTPUT); pinMode(BLUEPIN, OUTPUT);
  myStepper0.setSpeed(15); myStepper1.setSpeed(15);
  myStepper2.setSpeed(15); myStepper3.setSpeed(15);
  lcd.begin(16, 2); lcd.clear();
  lcd.setCursor(0, 0); lcd.print("Select your item");
  lcd.setCursor(0, 1); lcd.print(" #1 #2 #3 #4");
  analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256); analogWrite(BLUEPIN, 256);
}

void loop() {
  if (cents >= targetcents) {
    credits++; cents -= targetcents;
  }
  
  lcd.begin(16, 2); lcd.clear();
  lcd.setCursor(0, 0); lcd.print(cents); lcd.setCursor(3, 0); lcd.print("Coin Count");
  lcd.setCursor(0, 1); lcd.print(credits); lcd.setCursor(3, 1); lcd.print("credit earned");
  delay(1000);
  
  if (credits > 0) {
    int button1State = digitalRead(button1Pin);
    int button2State = digitalRead(button2Pin);
    int button3State = digitalRead(button3Pin);
    int button4State = digitalRead(button4Pin);
    
    // Botón 1
    if ((button1State == LOW) && !(button2State == LOW)) {
      digitalWrite(ENABLE, HIGH);
      analogWrite(REDPIN, 256);
      for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
      for (g = 256; g > 0; g--); analogWrite(GREENPIN, g);
      for (g = 256; g > 0; g--);
      lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
      lcd.setCursor(3, 1); lcd.print("Your Item");
      myStepper0.step(stepsPerRevolution);
      lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
      lcd.setCursor(3, 1); lcd.print("Your Item");
      delay(2500);
      for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
      for (g = 0; g < 256; g++); analogWrite(GREENPIN, g);
      digitalWrite(ENABLE, LOW);
      credits--; cents = 0;
    }
    
    // Botón 2
    if ((button2State == LOW) && !(button1State == LOW)) {
      digitalWrite(ENABLE, HIGH);
      analogWrite(GREENPIN, 256);
      for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
      for (r = 256; r > 0; r--); analogWrite(REDPIN, r);
      lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
      lcd.setCursor(3, 1); lcd.print("Your Item");
      myStepper1.step(stepsPerRevolution);
      lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
      lcd.setCursor(3, 1); lcd.print("Your Item");
      delay(2500);
      digitalWrite(ENABLE, LOW);
      for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
      for (r = 0; r < 256; r++); analogWrite(REDPIN, r);
      credits--; cents = 0;
    }
    
    // Botón 3
    if ((button3State == LOW) && !(button4State == LOW)) {
      digitalWrite(ENABLE, HIGH);
      analogWrite(BLUEPIN, 256);
      for (r = 256; r > 0; r--); analogWrite(REDPIN, r);
      for (g = 256; g > 0; g--); analogWrite(GREENPIN, g);
      lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
      lcd.setCursor(3, 1); lcd.print("Your Item");
      myStepper2.step(stepsPerRevolution);
      lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
      lcd.setCursor(3, 1); lcd.print("Your Item");
      delay(2500);
      digitalWrite(ENABLE, LOW);
      for (g = 0; g < 256; g++); analogWrite(GREENPIN, g);
      for (r = 0; r < 256; r++); analogWrite(REDPIN, r);
      credits--; cents = 0;
    }
    
    // Botón 4
    if ((button4State == LOW) && !(button3State == LOW)) {
      digitalWrite(ENABLE, HIGH);
      analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256);
      for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
      lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing");
      lcd.setCursor(3, 1); lcd.print("Your Item");
      myStepper3.step(-stepsPerRevolution);
      lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take");
      lcd.setCursor(3, 1); lcd.print("Your Item");
      delay(2500);
      digitalWrite(ENABLE, LOW);
      for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
      credits--; cents = 0;
    }
  }
}

void coinInterrupt() {
  cents += 5;
  digitalWrite(ledpin, HIGH);
}

Esquemáticos

Diagrama completo del sistema: fuente ATX, motores, LCD, LEDs, luces y controlador

Construye tu propia máquina expendedora personal operada con monedas: Guía de partes y montaje

Proceso de manufactura

  1. Equipos de EEG: Diseño, fabricación y aplicaciones emergentes
  2. Máquinas expendedoras: Una industria de 36.600 millones de dólares en EE. UU.
  3. La evolución y fabricación de máquinas de coser: de la innovación del siglo XIX a la automatización moderna
  4. Máquinas expendedoras de patatas fritas: Funcionamiento y ventajas
  5. Máquinas expendedoras de leche fresca: Cómodas, asequibles y ecológicas
  6. Cómo las Máquinas Expendedoras de Patatas Fritas Entregan Patatas Calientes y Frescas a Demanda
  7. Descubre las Máquinas Expendedoras de Fideos: Funcionamiento y Qué Puedes Obtener
  8. Explora la Innovadora Máquina Expendedora de Té, Café y Sopa
  9. Máquinas Expendedoras de Comidas Preparadas: Comida Fresca y Saludable al Instante
  10. Todo lo que necesitas saber sobre las máquinas expendedoras de refrescos
  11. Desbloqueando Beneficios: El Potencial de Negocio de las Máquinas Expendedoras de Helados