Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

Quizás>

Construcción de la máquina expendedora.

Empecé cortando el tablero MDF de 8 mm de espesor.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

Previamente>

Puedes encontrar y Descarga este modelo 3Dy también explóralo en tu navegador en Thangs.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

Sin>

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

En>

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

Luego>

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

En>

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

Procedí>

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

Luego>

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

Para>

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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.

Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino

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);  // stopCode 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.

Categorías Proyectos
Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

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í)

2 comentarios en «Máquina expendedora de bricolaje: proyecto de mecatrónica basado en Arduino»

Deja un comentario