En la era de la tecnología y la innovación, las máquinas expendedoras han evolucionado considerablemente. En este artículo, exploraremos un emocionante proyecto de mecatrónica basado en Arduino que te permitirá crear tu propia máquina expendedora de bricolaje. ¡Descubre cómo combinar tus habilidades de programación y electrónica para construir una pieza única de tecnología automatizada!
En este proyecto, aprenderemos cómo hacer una máquina expendedora basada en Arduino. Te mostraré todo el proceso de construcción, desde cortar y ensamblar los paneles de MDF hasta conectar todas las partes electrónicas y escribir el código Arduino.
Puede ver el vídeo a continuación o leer el tutorial escrito a continuación.
descripción general
La máquina expendedora tiene cuatro unidades dispensadoras controladas por cuatro servomotores que giran continuamente, un sistema portador controlado por motores paso a paso, una pantalla LCD, cuatro botones para seleccionar un artículo y un detector de monedas.
Quizás>
Construcción de la máquina expendedora.
Empecé cortando el tablero MDF de 8 mm de espesor.
Previamente>
Puedes encontrar y Descarga este modelo 3Dy también explóralo en tu navegador en Thangs.
Utilicé>Banco de trabajo casero con sierra circular, fresadora y sierra de calar.hecho por mi compañera Marija y hay un vídeo de bricolaje al respecto en su canal de YouTube Héroe de la creatividad.
Después de cortar todos los paneles con la sierra circular, procedí a perforar los agujeros en algunos de los paneles con la sierra de calar inversa.
De>
Después de tener todas las piezas de MDF listas, comencé a ensamblarlas con pegamento para madera y tornillos. Utilicé abrazaderas en ángulo de 90 grados para fijar los paneles. Con un taladro inalámbrico, primero taladré agujeros guía, luego hice avellanados y atornillé los tornillos de 3 mm. Utilicé el mismo método para montar todos los paneles y también utilicé algunas abrazaderas F para algunos de ellos.
Sistema ferroviario
En este punto del montaje pasaré a realizar el sistema de rieles. Para ello utilizo tubos de aluminio que corto a medida con una sierra de mano para metal. El diámetro del tubo del riel horizontal es de 16 mm, mientras que el diámetro del riel vertical es de 20 mm. En una tabla de madera maciza de 18 mm, hice ranuras para los tubos con una broca Forstner y luego les uní los tubos.
El>
Los siguientes son los controles deslizantes y así es como los creé. Utilicé una tabla de madera de 21 x 21 cm en la que taladré agujeros de 8 mm.
Luego>
Después de insertar el control deslizante entre los rieles de la tubería, noté que estaba un poco flojo. Para solucionar este problema tuve que reducir la distancia entre los dos rieles. Así que primero ensanché las ranuras de los tubos, luego hice ranuras verticales a través de los tubos y finalmente sujeté los dos rieles de los tubos con una varilla roscada. Después de eso, los controles deslizantes ya no estaban sueltos y funcionaron perfectamente.
Sin>
En>
Luego>
En>
Procedí>
Unidades de descarga
Luego pasé a la unidad de salida del artículo. Hice una espiral con alambre de metal de 3 mm de espesor envolviéndola alrededor de una lata de aerosol de 7 cm de diámetro.
Luego>
Panel frontal
El siguiente es el panel de la puerta delantera, que fijé a la máquina con bisagras simples y usé un pestillo magnético para cerrarlo. Luego cubrí la gran abertura frontal con una placa acrílica de 5 mm de espesor, mientras que para la abertura más pequeña de la derecha utilicé una placa de aluminio muy pequeña. Aquí hice 4 agujeros para los botones, así como aberturas para las monedas y la pantalla LCD. Usé un taladro y una sierra de calar para hacerlo. Después de fijar los componentes electrónicos a la placa de aluminio, los fijé al panel de la puerta delantera con tornillos de 5 mm.
Para>
El>
diagrama de circuito
Luego viene la parte divertida, conectar todos los componentes electrónicos a la placa Arduino. Aquí está el diagrama de cableado completo para este proyecto de máquina expendedora de bricolaje.
Entonces>
Puede obtener los componentes necesarios para este tutorial de Arduino en los siguientes enlaces:
- Convertidor reductor DC-DC LM2596………….. Amazon / Banggood / AliExpress
- LCD 16×2…………………………………………………….. Amazon / Banggood / AliExpress
- Servomotor continuo de 360 grados… Amazon / Banggood / AliExpress
- Motor paso a paso NEMA 17 ………………………. Amazon / Banggood / AliExpress
- Controlador de motor paso a paso A4988………………. Amazon / Banggood / AliExpress
- Sensor de proximidad por infrarrojos ……………………………….. Amazon / Banggood / AliExpress
- Llaves ……………………………………………………. Amazon / Banggood / AliExpress
- Microinterruptor de límite………………………………. Amazon / Banggood / AliExpress
- Placa Arduino………………………………………… Amazon / Banggood / AliExpress
Divulgación: estos son enlaces de afiliados. Como asociado de Amazon, gano con compras que califican.
Conecté los componentes electrónicos con algunos cables de puente. Con tantos cables se volvió un poco complicado, pero todo funcionó perfectamente. Finalmente, agregué dos tiras de luces LED al panel de la puerta para iluminar el interior de la máquina.
código arduino
Ahora sólo nos queda programar el Arduino. Aquí está el código que creé para este proyecto. A continuación se muestra una descripción del código.
/* DIY Vending Machine - Arduino based Mechatronics Project
by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <Servo.h>
LiquidCrystal lcd(27, 26, 25, 24, 23, 22); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)
Servo servo1, servo2, servo3, servo4; // DS04-NFC motors
// Stepper motors pins
#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); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
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);
// Activating the digital pins pull up resistors
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
pinMode(button4, INPUT_PULLUP);
pinMode(microSwitchV, INPUT_PULLUP);
pinMode(microSwitchH, INPUT_PULLUP);
// Vertical starting position
digitalWrite(dirPinVertical, HIGH); // Set the stepper to move in a particular direction
while (true) {
if (digitalRead(microSwitchV) == LOW) { // If the micro switch is pressed, move the platfor a little bit up and exit the while loop
moveUp(70);
break;
}
// Move the carrier up until the micro switch is pressed
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
// Horizontal starting position
digitalWrite(dirPinHorizontal, LOW);
while (true) {
if (digitalRead(microSwitchH) == LOW) {
moveLeft(350);
break;
}
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
}
void loop() {
// Print "Insert a coin!" on the LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Insert a coin!");
// Wait until a coin is detected
while (true) {
if (digitalRead(coinDetector) == LOW) { // If a coin is detected, exit the from the while loop
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?");
// Wait until a button is pressed
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;
}
}
// Print "Delivering..."
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Delivering...");
// Depending on the pressed button, move the carrier to that position and discharge the selected item
switch (buttonPressed) {
case 1:
// Move the container to location 1
moveUp(4900); // Move up 4900 steps (Note: the stepper motor is set in Quarter set resolution)
delay(200);
moveLeft(1700); // Move left 1700 steps
delay(300);
// Rotate the helical coil, discharge the selected item
servo1.writeMicroseconds(2000); // rotate
delay(950);
servo1.writeMicroseconds(1500); // stop
delay(500);
// Move the container back to starting position
moveRight(1700);
delay(200);
moveDown(4900);
break;
case 2:
// Move the container to location 2
moveUp(4900);
delay(200);
// Rotate the helix, push the selected item
servo2.writeMicroseconds(2000); // rotate
delay(950);
servo2.writeMicroseconds(1500); // stop
delay(500);
moveDown(4900);
break;
case 3:
// Move the container to location 3
moveUp(2200);
delay(200);
moveLeft(1700);
delay(300);
// Rotate the helix, push the selected item
servo3.writeMicroseconds(2000); // rotate
delay(950);
servo3.writeMicroseconds(1500); // stop
delay(500);
// Move the container back to starting position
moveRight(1700);
delay(200);
moveDown(2200);
break;
case 4:
// Move the container to location 4
moveUp(2200); // Move verticaly 4800 steps
delay(200);
// Rotate the helix, push the selected item
servo4.writeMicroseconds(2000); // rotate
delay(950);
servo4.writeMicroseconds(1500); // stop
delay(500);
moveDown(2200);
break;
}
lcd.clear(); // Clears the display
lcd.setCursor(0, 0);
lcd.print("Item delivered!"); // Prints on the LCD
delay(2000);
}
// == Custom functions ==
void moveUp (int steps) {
digitalWrite(dirPinVertical, LOW);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
}
void moveDown (int steps) {
digitalWrite(dirPinVertical, HIGH);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
}
void moveLeft (int steps) {
digitalWrite(dirPinHorizontal, HIGH);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
}
void moveRight (int steps) {
digitalWrite(dirPinHorizontal, LOW);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
}
Code language: Arduino (arduino)
Explicación del código fuente
Primero necesitamos incluir las bibliotecas Servo y LiquidCrystal, definir los pines del LCD, los cuatro servomotores, los pines del motor paso a paso, el detector de monedas, así como los cuatro botones y los dos microinterruptores.
En la sección de configuración, configuramos los modos de pin para cada uno de los pines anteriores. Podemos notar que hemos habilitado las resistencias pull-up internas para los botones y pines del microinterruptor. Esto significa que el nivel lógico en estos pines siempre es ALTO y tan pronto como los presionamos, el nivel lógico baja a BAJO.
Antes de entrar en el bucle principal, colocamos también el portador en su posición inicial, que viene definida por los dos microinterruptores. Entonces, con el bucle while movemos el transportador hasta su posición inicial y tan pronto como se presionan los dos microinterruptores, los motores se detienen y se mueven a la posición inicial deseada.
// Vertical starting position
digitalWrite(dirPinVertical, HIGH); // Set the stepper to move in a particular direction
while (true) {
if (digitalRead(microSwitchV) == LOW) { // If the micro switch is pressed, move the platfor a little bit up and exit the while loop
moveUp(70);
break;
}
// Move the carrier up until the micro switch is pressed
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
// Horizontal starting position
digitalWrite(dirPinHorizontal, LOW);
while (true) {
if (digitalRead(microSwitchH) == LOW) {
moveLeft(350);
break;
}
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
Code language: Arduino (arduino)
Inicie el programa principal imprimiendo el mensaje «Insertar moneda» en la pantalla LCD. Luego nos quedamos atrapados en el bucle while. Tan pronto como se inserta una moneda y pasa cerca del sensor de proximidad, el estado lógico en el pin del detector de monedas cae a BAJO y en este caso salimos del ciclo while usando la instrucción break.
// Wait until a coin is detected
while (true) {
if (digitalRead(coinDetector) == LOW) { // If a coin is detected, exit the from the while loop
break;
}
}
Code language: Arduino (arduino)
Luego damos el mensaje “Selecciona tu elemento” y nos quedamos atrapados en otro bucle while.
// Wait until a button is pressed
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;
}
}
Code language: Arduino (arduino)
Este bucle while espera a que presionemos uno de los cuatro botones. Tan pronto como hagamos eso, lo dejamos e imprimimos el mensaje “Entrega”.
Dependiendo de la tecla presionada, ahora ejecutamos uno de los casos en la declaración de cambio. Si presionamos el primer botón, el transportista comenzará a moverse hacia arriba usando la función personalizada “moveUp()”.
switch (buttonPressed) {
case 1:
// Move the container to location 1
moveUp(4900); // Move up 4900 steps (Note: the stepper motor is set in Quarter set resolution)
delay(200);
moveLeft(1700); // Move left 1700 steps
delay(300);
// Rotate the helical coil, discharge the selected item
servo1.writeMicroseconds(2000); // rotate
delay(950);
servo1.writeMicroseconds(1500); // stop
delay(500);
// Move the container back to starting position
moveRight(1700);
delay(200);
moveDown(4900);
break;
}
Code language: Arduino (arduino)
Si observamos esta función, podemos ver que simplemente configura el motor paso a paso para que se mueva en una dirección específica y toma el número de pasos que ingresamos como argumento.
void moveUp (int steps) {
digitalWrite(dirPinVertical, LOW);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
}
Code language: Arduino (arduino)
Podemos observar aquí que configuré el controlador paso a paso A4988 para que funcionara con una resolución de un cuarto de paso y, a partir de algunas pruebas, concluí que necesitaba 4900 pasos para llevar el transportador a la posición superior. Del mismo modo, movemos el rayo hacia la izquierda hasta llegar a la ubicación número 1.
Inmediatamente después, hacemos girar el motor en rotación continua durante 950 milisegundos para que la bobina en espiral complete un ciclo completo.
// Rotate the helical coil, discharge the selected item
servo1.writeMicroseconds(2000); // rotate
delay(950);
servo1.writeMicroseconds(1500); // stop
Code language: Arduino (arduino)
Tenga en cuenta que estos valores pueden variar en algunos casos y dependen del propio motor. Usando las funciones definidas por el usuario moveRight() y moveDown() devolvemos la viga a la posición inicial. De la misma forma podemos descargar los cuatro puntos.
Al final simplemente imprimimos el mensaje «Artículo entregado».
Es así de simple y espero que hayas disfrutado este video y hayas aprendido algo nuevo. No dudes en hacer tus preguntas en la sección de comentarios a continuación y consultar mi colección de proyectos Arduino.
Una máquina expendedora de bricolaje es un proyecto emocionante que puedes realizar utilizando Arduino. En este proyecto, aprenderás a construir una máquina expendedora casera basada en Arduino. Desde cortar y ensamblar las placas de MDF, hasta conectar todas las partes electrónicas juntas y escribir el código de Arduino.
Esta máquina expendedora cuenta con cuatro unidades de descarga controladas por cuatro servomotores de rotación continua, un sistema transportador controlado por motores paso a paso, una pantalla LCD, cuatro botones para seleccionar un artículo y un detector de monedas. Aunque el sistema transportador puede parecer innecesario, añade un nivel de complejidad que puede resultar interesante para estudiantes de electrónica o mecatrónica.
Para construir la máquina expendedora, comenzarás cortando tablas de MDF de 8 mm de grosor. Luego, ensamblarás las diferentes partes utilizando pegamento y tornillos. También crearás un sistema de rieles utilizando tubos de aluminio y rodamientos para permitir que el contenedor se desplace horizontal y verticalmente.
Además, instalarás unidades de descarga para cada artículo, que consisten en bobinas helicoidales conectadas a servomotores de rotación continua. También agregarás una puerta frontal con una pantalla LCD, botones de selección de artículo y un detector de monedas.
Una vez que todas las partes estén ensambladas, conectarás todos los componentes electrónicos al Arduino según el esquema del circuito proporcionado. Utilizarás jumpers para conectar los diferentes elementos y programarás el Arduino con el código necesario para el funcionamiento de la máquina.
El código del Arduino te permitirá controlar los motores paso a paso, los servomotores y los sensores de monedas y botones. Dependiendo del botón seleccionado, el Arduino moverá el contenedor a la posición correspondiente y activará el servomotor para dispensar el artículo seleccionado.
En resumen, construir una máquina expendedora de bricolaje basada en Arduino es un proyecto desafiante y educativo que puede ser ideal para estudiantes de electónica o mecatrónica. Si te interesa este tipo de proyectos, ¡anímate a intentarlo y aprender todo lo que necesitas saber para completarlo con éxito!
Recuerda que puedes encontrar los componentes necesarios para este proyecto en tiendas en línea como Amazon, Banggood o AliExpress. Además, si tienes alguna pregunta o comentario, ¡no dudes en dejarlo en la sección de comentarios a continuación!
Referencias:
– Video tutorial: [Enlace al video](insertar aquí)
– Esquema del circuito: [Enlace al esquema](insertar aquí)
– Código de Arduino: [Enlace al código](insertar aquí)
¡Qué genial! Me fascina la idea de combinar bricolaje con mecatrónica. Definitivamente una mezcla creativa y emocionante. ¡Gracias por inspirar!
Wow, qué proyecto tan interesante! Me encantaría intentarlo yo mismo. ¡Gracias por compartir!