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 | |
![]() |
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 | |
![]() |
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 | |
![]() |
Soldador (genérico) |
![]() |
Pistola de pegamento caliente (genérica) No olvides las barras de pegamento |
Aplicaciones y servicios en línea
![]() |
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!

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)
- 2 paneles laterales: 18"F x 23 3/4"H
- 2 paneles sup/inf: 21"W x 18"F
- 2 paneles front/tras: 21"W x 24 1/4"H
- Pared divisoria: 18"F x 23 3/4"H
- Estante interno: 13"W x 12"F (x2, superior e inferior)
- Estantes separados 8", 13" ancho, 12" fondo
- Cada bloque azul en diagrama = punto de montaje 3/4"W x 3/4"H x profundidad panel


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.

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. ****

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.

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.

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

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.


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:

********* 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:

- 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:

- 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
- 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:

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.

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:

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




