Tabla de contenido:

Máquina expendedora basada en Arduino de $ 1: 8 pasos
Máquina expendedora basada en Arduino de $ 1: 8 pasos

Video: Máquina expendedora basada en Arduino de $ 1: 8 pasos

Video: Máquina expendedora basada en Arduino de $ 1: 8 pasos
Video: MAQUINA EXPENDEDORA❌👾ARDUINO 2024, Noviembre
Anonim
Image
Image
Caja
Caja

Obtuvimos nuestra idea de nuestro profesor de ingeniería; todos pensamos que sería una buena idea tener una máquina expendedora para nuestra clase y dijo: "genial, haz una". Resultó que una máquina expendedora sería un gran proyecto para personas mayores y, cuando se completara, funcionaría como un recaudador de fondos para nuestro programa de ingeniería.

Se llama máquina expendedora de $ 1 no porque cueste $ 1, sino simplemente porque el aceptador de billetes es un modelo más antiguo que solo acepta billetes de $ 1:)

Paso 1: Criterios

Queríamos una máquina expendedora que quepa sobre un escritorio y no sea demasiado alta. Tomamos las dimensiones del ancho de la mesa para asegurarnos de que no teníamos la máquina expendedora colgando de la mesa.

Paso 2: Carcasa

Caja
Caja
Caja
Caja
Caja
Caja

Hicimos nuestra caja de 19 pulgadas de ancho por 17 pulgadas de largo por 25 pulgadas de alto. Usamos una máquina CNC para cortar nuestra madera. Usamos solidworks para diseñar las caras y luego las convertimos a tipos de archivos de dibujo para nuestro software CNC. Lijamos los bordes y luego los atornillamos con 1 ¼”. Fijamos el panel frontal con una bisagra y usamos tornillos de ¼”, para que los tornillos no pasen al otro lado. También usamos vidrio acrílico que cortamos para los estantes y el panel frontal.

Paso 3: Electrónica

Electrónica
Electrónica
Electrónica
Electrónica
Electrónica
Electrónica
Electrónica
Electrónica

Arduino

Usamos una placa Arduino Mega 2560. También usamos placas de motor Adafruit para que puedan hacer funcionar los motores paso a paso. Agregamos pines a los adafruit para que se conectaran entre sí. Fueron insertados uno encima del otro. Cada uno puede hacer funcionar 2 motores. Además, tenga en cuenta que el puente debe estar conectado.

Fuente de alimentación de escritorio

Fuente de alimentación Bestek ATX mediante un adaptador para mantener la fuente de alimentación encendida. El adaptador es de sparkfun.com y proporciona varios voltajes.

Bobinas en motores

Hicimos modelos de SolidWorks para sostener el motor, agarrar la bobina y guiar la bobina a lo largo del estante. Conseguimos nuestras bobinas de eBay y las cortamos a medida. También tuvimos que doblar 3 de ellos ya que no obtuvimos 6 con los extremos rectos para conectarlos al soporte de la bobina. Luego los imprimimos en 3D y los unimos a la bobina y al motor. Los motores paso a paso que teníamos los montamos. Sostendría el motor y guiaría la bobina a lo largo de un camino recto.

LCD y teclado

Usamos un teclado Arduino y una pantalla LCD conectados a un cable de 5 V en el adaptador de fuente de alimentación para la alimentación y luego a la misma placa Arduino

Alambrado

Recomendamos el uso de cables de calibre 18. En nuestro caso, tuvimos que comprometernos usando varios calibres porque nos quedamos sin 18 calibres

Tira llevada

Usamos una tira de LED para iluminar la máquina. Lo conectamos a un cable de 12V en el adaptador de fuente de alimentación. La tira de LED que usamos afortunadamente tenía un + y - en ella, lo que facilitó el proceso de conexión.

Paso 4: Aceptador de billetes

Aceptador de billetes
Aceptador de billetes
Aceptador de billetes
Aceptador de billetes
Aceptador de billetes
Aceptador de billetes
Aceptador de billetes
Aceptador de billetes

Usamos un Coinco BA30B como nuestro aceptador de billetes. Tenía que estar conectado directamente a la pared como fuente de alimentación. Lo combinamos con un adaptador de 24 pines de una fuente de alimentación atx para enchufar y permitir un cableado más fácil. Los pines que seguimos se encuentran en el siguiente enlace:

techvalleyprojects.blogspot.com/2011/07/ard…

En nuestro caso, tuvimos que crear una montura para subir el aceptador de billetes porque de lo contrario sería demasiado bajo para nuestra carcasa.

Paso 5: prueba

Pruebe primero la electrónica fuera de la carcasa para asegurarse de que los componentes funcionen. Cualquier problema que surja debe solucionarse antes de colocarlo dentro de la carcasa.

Paso 6: de la electrónica a la carcasa

Una vez que haya probado los componentes electrónicos y esté satisfecho con sus resultados, comience a colocarlos en su carcasa. Ajuste la longitud de los cables para que quepan cómodamente en el interior.

Paso 7: Prueba final

Una vez colocado en la carcasa, vuelva a probar todo. Si todo funciona como esperabas, ¡enhorabuena! Hiciste una máquina expendedora.

Paso 8: Código Arduino + Enlaces

Descargas:

Código Arduino

drive.google.com/drive/folders/1oC4MhOcMFy…

Carpeta de SolidWorks con archivos de pieza y ensamblaje

drive.google.com/drive/folders/1amZoypiWcZ…

En caso de que algo le haya sucedido al enlace, aquí se muestra el código arduino por completo. Código Arduino <<

#include #include #include "Arduino.h" #include #include #include "utility / Adafruit_MS_PWMServoDriver.h" #include

const int stepsPerRevolution = 200; const byte FILAS = 4; // cuatro filas const byte COLS = 3; // claves de caracteres de tres columnas [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins [FILAS] = {5, 6, 7, 8}; // conectarse a los pines de fila del byte del teclado colPins [COLS] = {2, 3, 4}; // conectarse a los pines de columna del teclado Keypad keypad = Keypad (makeKeymap (keys), rowPins, colPins, ROWS, COLS); Adafruit_MotorShield AFMS1 = Adafruit_MotorShield (); Adafruit_StepperMotor * myMotor1 = AFMS1.getStepper (-200, 1); Adafruit_StepperMotor * myMotor2 = AFMS1.getStepper (-200, 2); Adafruit_MotorShield AFMS2 = Adafruit_MotorShield (0x61); Adafruit_StepperMotor * myMotor3 = AFMS2.getStepper (-200, 1); Adafruit_StepperMotor * myMotor4 = AFMS2.getStepper (-200, 2); Adafruit_MotorShield AFMS3 = Adafruit_MotorShield (0x62); Adafruit_StepperMotor * myMotor5 = AFMS3.getStepper (-200, 1); Adafruit_StepperMotor * myMotor6 = AFMS3.getStepper (-200, 2); Adafruit_MotorShield AFMS4 = Adafruit_MotorShield (0x63); Adafruit_StepperMotor * myMotor7 = AFMS4.getStepper (-200, 1); Adafruit_StepperMotor * myMotor8 = AFMS4.getStepper (-200, 2); LiquidCrystal lcd (1, 11, 9, 10, 12, 13); // Pines digitales a los que está conectado el lcd // Constantes // // pin para la línea de crédito (-) del validador de billetes const int billValidator = 22;

// Variables /

/ registrar la duración del pulso (milisegundos) de larga duración sin firmar;

// manteniendo el total de dólares registrado int dollarCounter = 0; configuración vacía () {lcd.begin (16, 1); // establece las coordenadas del texto de la pantalla lcd lcd.print ("Insertar solo $ 1"); // Establecer texto Serial.begin (9600); // Inicialice los puertos seriales para la comunicación. Serial.println ("¡Prueba paso a paso!"); // Escriba Prueba paso a paso en el monitor en serie para que sepamos qué motor paso a paso está presionado. AFMS1.begin (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); myMotor1-> setSpeed (100); // Establecer la velocidad del motor a la que funcionarán myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Configuraciones de pines para validador de billetes y botón pinMode (billValidator, INPUT); // Establece el billaccepter

// Inicialice los puertos seriales para la comunicación. Serial.begin (9600); Serial.println ("Esperando dólar …"); } bucle vacío () {{duración = pulseIn (billValidator, HIGH); // Empieza a buscar la longitud de pulso recibida del aceptador de billetes if (duración> 12000) // Valor que debe superar para validar como dólar procesado y auténtico {// Cuenta dólar dollarCounter ++; // Comprobando la comprensión de Serial.print ("Dólar detectado. / N Total:"); // Muestra el nuevo recuento de dólares Serial.println (dollarCounter); // bucle para esperar hasta que se presione un botón while (duración> 12000) {char key = keypad.getKey (); // conecta el keyoad y comienza a ver cuál está presionado if (key! = NO_KEY) {// buscará la tecla presionada Serial.println (key); // nos permite saber cuál fue presionada en el monitor serial} {if (key == '1') {// Si se presiona la tecla 1, hace lo siguiente: int keyPressed = key - '1'; myMotor8-> paso (580, ADELANTE, DOBLE); // Arranca el motor y gira 350 grados en la dirección de avance. myMotor8-> release (); // Libera el motor del estado de mantenimiento en su lugar. regreso; // Vuelve al principio del código de bucle}

if (key == '2') {// Si se presiona la tecla 2, hace lo siguiente: int keyPressed = key - '2'; myMotor7-> paso (400, ADELANTE, DOBLE); // Arranca el motor y gira 350 grados en la dirección de avance. myMotor7-> release (); // Libera el motor del estado de mantenimiento. regreso; // Vuelve al principio del código de ciclo} if (key == '3') {// Si se presiona la tecla 3, hace lo siguiente: int keyPressed = key - '3'; myMotor6-> paso (400, ADELANTE, DOBLE); // Arranca el motor y gira 350 grados en la dirección de avance. myMotor6-> release (); // Libera el motor del estado de mantenimiento. regreso; // Vuelve al principio del código de ciclo} if (key == '4') {// Si se presiona la tecla 4, hace lo siguiente: int keyPressed = key - '4'; myMotor5-> paso (180, ADELANTE, DOBLE); // Arranca el motor y gira 350 grados en la dirección de avance. myMotor5-> release (); // Libera el motor del estado de mantenimiento en su lugar. regreso; // Vuelve al principio del código de ciclo} if (key == '5') {// Si se presiona la tecla 5, hace lo siguiente: int keyPressed = key - '5'; myMotor4-> paso (6900, ADELANTE, DOBLE); // Arranca el motor y gira 350 grados en la dirección de avance. myMotor4-> release (); // Libera el motor del estado de mantenimiento en su lugar. regreso; // Vuelve al principio del código de ciclo} if (key == '6') {// Si se presiona la tecla 6, hace lo siguiente: int keyPressed = key - '6'; myMotor3-> paso (400, ADELANTE, DOBLE); // Arranca el motor y gira 350 grados en la dirección de avance. myMotor3-> release (); // Libera el motor del estado de mantenimiento. regreso; // Vuelve al principio del código de ciclo} if (key == '7') {// Si se presiona la tecla 7, hace lo siguiente: int keyPressed = key - '7'; myMotor7-> paso (400, ADELANTE, DOBLE); // Arranca el motor y gira 350 grados en la dirección de avance. myMotor7-> release (); // Libera el motor del estado de mantenimiento en su lugar. regreso; // Vuelve al principio del código de ciclo} if (key == '8') {// Si se presiona la tecla 8, hace lo siguiente: int keyPressed = key - '8'; myMotor8-> paso (400, ADELANTE, DOBLE); // Arranca el motor y gira 350 grados en la dirección de avance. myMotor8-> release (); // Libera el motor del estado de mantenimiento. regreso; // Vuelve al principio del código de bucle}}}}}} >>

Recomendado: