Índice:

Máquina de venda automática baseada em Arduino por $ 1: 8 etapas
Máquina de venda automática baseada em Arduino por $ 1: 8 etapas

Vídeo: Máquina de venda automática baseada em Arduino por $ 1: 8 etapas

Vídeo: Máquina de venda automática baseada em Arduino por $ 1: 8 etapas
Vídeo: Vending machine, máquina de vendas com RFID e Arduino. 2024, Novembro
Anonim
Image
Image
Invólucro
Invólucro

Pegamos nossa ideia com nosso professor de engenharia - todos nós pensamos que seria uma boa ideia ter uma máquina de venda automática para nossa classe e ele disse - "legal, faça uma". Descobriu-se que uma máquina de venda automática seria um ótimo projeto sênior e, quando concluída, funcionaria como uma arrecadação de fundos para nosso programa de engenharia.

É chamada de máquina de venda automática de $ 1, não porque custa $ 1 para fazer, mas simplesmente porque o aceitador de notas é um modelo mais antigo que só aceita notas de $ 1:)

Etapa 1: Critérios

Queríamos uma máquina de venda automática que cabesse em cima de uma mesa e não fosse muito alta. Pegamos as dimensões da largura da mesa para ter certeza de que não tínhamos a máquina de venda automática pendurada para fora da mesa.

Etapa 2: Revestimento

Invólucro
Invólucro
Invólucro
Invólucro
Invólucro
Invólucro

Fizemos nossa caixa de 19 polegadas de largura por 17 polegadas de comprimento por 25 polegadas de altura. Usamos uma máquina CNC para cortar nossa madeira. Usamos o SolidWorks para projetar as faces e depois os convertemos em tipos de arquivo de desenho para nosso software CNC. Lixamos as bordas e depois aparafusamos com 1 ¼”. Fixamos o painel frontal com uma dobradiça e usamos parafusos de ¼”, para que os parafusos não passassem para o outro lado. Também usamos vidro acrílico que cortamos para as prateleiras e painel frontal.

Etapa 3: Eletrônica

Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos

Arduino

Usamos uma placa Arduino Mega 2560. Também usamos placas de motor Adafruit para que eles possam operar os motores de passo. Nós adicionamos pinos aos adafrutas para que eles se conectem uns aos outros. Eles foram inseridos um em cima do outro. Cada um pode operar 2 motores. Além disso, observe que o jumper precisa ser conectado.

Fonte de alimentação para desktop

Fonte de alimentação Bestek ATX usando um adaptador para manter a fonte de alimentação ligada. O adaptador é da sparkfun.com e fornece várias voltagens.

Bobinas em motores

Fizemos modelos de solidworks para segurar o motor, agarrar a bobina e guiar a bobina ao longo da prateleira. Nós alcançamos nossas bobinas do ebay e as cortamos para dimensionar. Também tivemos que dobrar 3 deles, pois não conseguimos 6 com as extremidades retas para conectar à montagem da bobina. Em seguida, os imprimimos em 3D e os anexamos à bobina e ao motor. Os motores de passo que tínhamos, montamos. Ele seguraria o motor e guiaria a bobina ao longo de um caminho reto.

LCD e teclado

Usamos um teclado Arduino e uma tela LCD conectados a um cabo de 5 V no adaptador da fonte de alimentação para alimentação e, em seguida, na mesma placa Arduino

Fiação

Recomendamos o uso de fios de bitola 18. Em nosso caso, tivemos que nos comprometer usando vários medidores porque ficamos sem 18 medidores

Tira LED

Usamos uma faixa de LED para iluminar a máquina. Nós o conectamos a um cabo de 12 V no adaptador de alimentação. A faixa de LED que usamos felizmente tinha um + e -, o que tornou o processo de conexão mais fácil.

Etapa 4: Aceitador de notas

Aceitador de notas
Aceitador de notas
Aceitador de notas
Aceitador de notas
Aceitador de notas
Aceitador de notas
Aceitador de notas
Aceitador de notas

Usamos um Coinco BA30B como nosso aceitador de notas. Ele precisava ser conectado diretamente à parede como fonte de alimentação. Nós o combinamos com um adaptador de 24 pinos de uma fonte de alimentação atx para conectar e permitir uma fiação mais fácil. As pinagens que seguimos são encontradas no seguinte link:

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

Em nosso caso, tivemos que criar uma montagem para aumentar o aceitador de notas porque, do contrário, seria muito baixo para o nosso revestimento.

Etapa 5: Teste

Teste os componentes eletrônicos fora da caixa primeiro para garantir que os componentes funcionem. Quaisquer problemas que surjam devem ser corrigidos antes de colocá-los dentro da caixa.

Etapa 6: Eletrônica para o revestimento

Depois de testar os componentes eletrônicos e ficar satisfeito com os resultados, comece a colocá-los em seu invólucro. Ajuste os comprimentos dos fios para que eles se encaixem confortavelmente dentro.

Etapa 7: Teste Final

Depois de colocado na caixa, teste tudo novamente. Se tudo funcionar conforme o esperado, parabéns! Você fez uma máquina de venda automática.

Etapa 8: Código + links do Arduino

Transferências:

Código Arduino

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

Pasta SolidWorks com arquivos de peça e montagem

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

Caso algo tenha acontecido com o link, aqui está o código do Arduino totalmente exibido. Código Arduino <<

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

const int stepsPerRevolution = 200; const byte ROWS = 4; // quatro linhas const byte COLS = 3; // três colunas char keys [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins [ROWS] = {5, 6, 7, 8}; // conectar à pinagem de linha do byte do teclado colPins [COLS] = {2, 3, 4}; // conectar à pinagem da coluna do teclado Teclado teclado teclado = Teclado (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); // Pinos digitais aos quais o lcd está conectado // Constantes // // pino para a linha de crédito (-) do validador de notas const int billValidator = 22;

// Variables /

/ registrando a duração do pulso (milissegundos) de longa duração sem sinal;

// mantendo o total de dólares registrados int dollarCounter = 0; configuração vazia () {lcd.begin (16, 1); // define as coordenadas do texto lcd lcd.print ("Insert $ 1 Only"); // Definir texto Serial.begin (9600); // Inicializa as portas seriais para comunicação. Serial.println ("Teste escalonado!"); // Digite Out Stepper Test no monitor serial para que saibamos qual motor de passo está pressionado. AFMS1.begin (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); meuMotor1-> definirSpeed (100); // Define a velocidade do motor na qual eles irão rodar myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Configurações de pinos para validador de notas e botão pinMode (billValidator, INPUT); // Define o billaccepter

// Inicializa as portas seriais para comunicação. Serial.begin (9600); Serial.println ("Aguardando dólar…"); } void loop () {{duração = pulseIn (billValidator, HIGH); // Começa a procurar o comprimento do pulso recebido do aceitador de notas if (duration> 12000) // Valor que deve ser ultrapassado para ser validado como um dólar processado e autêntico {// Count dollar dollarCounter ++; // Verificando a compreensão de Serial.print ("Dólar detectado. / N Total:"); // Exibe a nova contagem de dólares Serial.println (dollarCounter); // faz um loop para esperar até que um botão seja pressionado while (duration> 12000) {char key = keypad.getKey (); // conecta o keyoad e começa a ver qual está pressionado if (key! = NO_KEY) {// estará procurando a tecla pressionada Serial.println (key); // permite-nos saber qual foi pressionado no monitor serial} {if (key == '1') {// Se a tecla 1 for pressionada, faça o seguinte: int keyPressed = key - '1'; myMotor8-> etapa (580, FORWARD, DOUBLE); // Inicia o motor e gira 350 graus na direção para frente. myMotor8-> release (); // Libera o motor do estado de se manter no lugar. Retorna; // Volta para o início do código de loop}

if (key == '2') {// Se a tecla 2 for pressionada, faça o seguinte: int keyPressed = key - '2'; myMotor7-> step (400, FORWARD, DOUBLE); // Inicia o motor e gira 350 graus na direção para frente. myMotor7-> release (); // Libera o motor do estado de se manter no lugar. Retorna; // Volta ao início do código de loop} if (key == '3') {// Se a tecla 3 for pressionada, faça o seguinte: int keyPressed = key - '3'; myMotor6-> step (400, FORWARD, DOUBLE); // Inicia o motor e gira 350 graus na direção para frente. myMotor6-> release (); // Libera o motor do estado de se manter no lugar. Retorna; // Volta ao início do código de loop} if (key == '4') {// Se a tecla 4 for pressionada, faça o seguinte: int keyPressed = key - '4'; myMotor5-> step (180, FORWARD, DOUBLE); // Inicia o motor e gira 350 graus na direção para frente. myMotor5-> release (); // Libera o motor do estado de se manter no lugar. Retorna; // Volta ao início do código de loop} if (key == '5') {// Se a tecla 5 for pressionada, faça o seguinte: int keyPressed = key - '5'; myMotor4-> step (6900, FORWARD, DOUBLE); // Inicia o motor e gira 350 graus na direção para frente. myMotor4-> release (); // Libera o motor do estado de se manter no lugar. Retorna; // Volta ao início do código de loop} if (key == '6') {// Se a tecla 6 for pressionada, faça o seguinte: int keyPressed = key - '6'; myMotor3-> step (400, FORWARD, DOUBLE); // Inicia o motor e gira 350 graus na direção para frente. myMotor3-> release (); // Libera o motor do estado de se manter no lugar. Retorna; // Volta ao início do código de loop} if (key == '7') {// Se a tecla 7 for pressionada, faça o seguinte: int keyPressed = key - '7'; myMotor7-> step (400, FORWARD, DOUBLE); // Inicia o motor e gira 350 graus na direção para frente. myMotor7-> release (); // Libera o motor do estado de se manter no lugar. Retorna; // Volta ao início do código de loop} if (key == '8') {// Se a tecla 8 for pressionada, faça o seguinte: int keyPressed = key - '8'; myMotor8-> etapa (400, FORWARD, DOUBLE); // Inicia o motor e gira 350 graus na direção para frente. myMotor8-> release (); // Libera o motor do estado de se manter no lugar. Retorna; // Volta para o início do código de loop}}}}}} >>

Recomendado: