Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Construa Sua Própria Máquina de Venda Pessoal Operada por Moedas: Guia de Peças e Montagem

Componentes e Materiais

Quant.ItemObservações
4Compensado 1/4" (FriendlyARM)Cortar nas dimensões indicadas no diagrama
1Tacos de compensado 3/4"Cortar tiras de 3/4" de largura no comprimento da peça a conectar (ver diagrama)
1Kit 5 Motores de Passo 28BYJ-48 + Driver ULN2003 5V (LAFVIN)Capazes de empurrar qualquer guloseima colocada na máquina
1Cabo Flat Rainbow IDC 1.27mm 50P 10ft (Pc Accessories)Para fiação limpa e profissional
1Kit Conectores Dupont 635 pcs Macho/Fêmea 40 pinos (Glarks)Para fiação limpa e profissional
1Microchave Iluminada (Gamelec)Botões de seleção
1Protoboard (genérica)Placas de solda também funcionam
1Kit 30 Placas PCB Dupla FaceApenas 1 ou 2 necessárias; tamanho ideal para projetos futuros
1Arduino Mega 2560Controlador principal
1Módulo Relé 5V para Arduino/ARM (Tolako)Protege os motores contra superaquecimento
1Módulo LCD Serial 1602 (HiLetgo) – 2 unidadesExibe qual botão foi pressionado
2Fitas de LEDOpcional
1Fio de Cobre Nu 8 AWG 50 ftUsado para fabricar as bobinas (espirais) dos dispensadores
1Divisor de Prateleira Metálico PlanoPara separar os compartimentos nas prateleiras

Ferramentas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

A Máquina de Venda Pessoal

Este projeto detalha a construção passo a passo de uma máquina de venda pessoal. Pode ser abastecida com seus lanches favoritos ou levada ao escritório para compartilhar guloseimas com a equipe.

Dimensões da Caixa

Montagem da Estrutura

  1. Monte a caixa conforme o diagrama, usando os tacos de 3/4" em todos os pontos de junção. As paredes laterais ficam sobre a base e sob o tampo. O perímetro deve medir 53,3 cm L x 61,6 cm A.
  2. Parede divisória: Meça 41,3 cm a partir do topo e fixe o taco para a prateleira inferior. Meça 21 cm a partir do topo e fixe o taco para a prateleira superior. Repita na parede lateral esquerda (vista frontal) para os tacos das prateleiras.
  3. Importante: Instale primeiro a prateleira inferior; caso contrário, fixar nos tacos será muito difícil.
  4. Com os tacos no lugar, posicione os painéis de 33 cm x 30,5 cm sobre cada conjunto de tacos. Isso alinhará automaticamente a parede divisória. Fixe então os tacos no topo e base do lado direito da divisória e prenda ao tampo e à base. A estrutura ficará totalmente rígida.
  5. Instale o painel traseiro e prepare a montagem dos motores. Tenha as rodas das bobinas impressas em 3D para medir e definir os furos de perfuração. Meça a roda e adicione 0,6 cm à altura para folga de giro. No centro da prateleira (16,5 cm da parede lateral), marque os pontos de furação usando a altura medida. Fure para permitir a conexão da roda ao motor sem atrito. Fixe os motores e aperte os parafusos.

Configuração do Relé dos Motores

Utilize o CI L293D (entalhe à esquerda) para acionar o relé e alimentar os motores. Conexões (da esquerda para a direita no CI):

Instalação do Display e Botões

Ligações Elétricas

Mantenha todas as conexões exatamente como no diagrama. Os LEDs no esquema representam os LEDs embutidos nos botões; estão separados apenas para clareza.

Motores

Alimente os drivers com 12V (lado 12V da protoboard, proveniente da fonte ATX). Conecte os 4 pinos "in" de cada driver ao Arduino:

ATENÇÃO: Não conecte aos 2 primeiros pinos do bloco (são 5V – não usados neste projeto).

Botões

Cada botão: um lado no 5V, outro lado em resistor 220Ω ao terra + pino analógico correspondente:

LCD 1602 (I2C/Serial)

Fonte ATX

Corte e descasque apenas os fios necessários; os demais permanecem no conector original para reutilização.

Divisores de Prateleira e Bobinas

Divisores

No ponto central (16,5 cm da parede lateral ou divisória), dobre a chapa metálica em forma de "∧" (triângulo invertido). Centralize sobre a marca e fixe com cola quente. Repita na segunda prateleira. Guias laterais são opcionais.

Bobinas (Espirais)

  1. Use um tubo de 3,8 cm de diâmetro (cano, tubo de silicone, lata de tinta).
  2. Envolva um elástico no sentido do comprimento e trace linhas paralelas em ambos os lados.
  3. De um lado, marque a 2,5 cm da ponta e depois a cada 5 cm. Do outro lado, marque apenas a cada 5 cm.
  4. Inicie a espiral no lado da marca de 2,5 cm, fazendo-a tocar cada marca nos dois lados. Isso cria vãos de 5 cm entre as voltas (adequado para a maioria dos itens). Para barras de chocolate, reduza para 2,5 cm (divida as medidas pela metade).

Fixação da Bobina na Roda Impressa

No lado da marca de 2,5 cm, comprima a bobina formando um círculo e reduza o diâmetro para ligeiramente menor que a roda. Encaixe na borda da roda; a tensão a mantém no lugar. Coloque uma gota de cola quente na extremidade da bobina sobre a roda para travar.

Fitas de LED (Opcional)

Positivo → pino +12V do lado 12V da protoboard. Negativo → pino terra do lado 12V da protoboard (não mostrado no diagrama).

Código

Três versões disponíveis:

Versão Sem LEDs Endereçáveis

// 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 pins
int i;
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(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("Selecione item");
  lcd.setCursor(0, 1);
  lcd.print(" #1 #2 #3 #4");
}

void loop() {
  int b1 = digitalRead(button1Pin);
  int b2 = digitalRead(button2Pin);
  int b3 = digitalRead(button3Pin);
  int b4 = digitalRead(button4Pin);
  digitalWrite(ENABLE, HIGH);
  for (i=0; i<5; i++);

  if (b1 == LOW && b2 != LOW) {
    digitalWrite(DIRA, HIGH); digitalWrite(DIRB, LOW);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Entregando");
    lcd.setCursor(3,1); lcd.print("Seu Item");
    myStepper0.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Retire seu");
    lcd.setCursor(3,1); lcd.print("Item");
    delay(2500);
    lcd.setCursor(0,0); lcd.print("Botao 1");
    lcd.setCursor(2,1); lcd.print("1 2 3 ou 4");
    digitalWrite(DIRA, LOW); digitalWrite(DIRB, LOW);
  }
  if (b2 == LOW && b1 != LOW) {
    digitalWrite(DIRA, HIGH); digitalWrite(DIRB, LOW);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Entregando");
    lcd.setCursor(3,1); lcd.print("Seu Item");
    myStepper1.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Retire seu");
    lcd.setCursor(3,1); lcd.print("Item");
    delay(2500);
    lcd.setCursor(0,0); lcd.print("Botao 2");
    lcd.setCursor(2,1); lcd.print("1 2 3 ou 4");
    digitalWrite(DIRA, LOW); digitalWrite(DIRB, LOW);
  }
  if (b3 == LOW && b4 != LOW) {
    digitalWrite(DIRA, HIGH); digitalWrite(DIRB, LOW);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Entregando");
    lcd.setCursor(3,1); lcd.print("Seu Item");
    myStepper2.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Retire seu");
    lcd.setCursor(3,1); lcd.print("Item");
    delay(2500);
    lcd.setCursor(0,0); lcd.print("Botao 3");
    lcd.setCursor(2,1); lcd.print("1 2 3 ou 4");
    digitalWrite(DIRA, LOW); digitalWrite(DIRB, LOW);
  }
  if (b4 == LOW && b3 != LOW) {
    digitalWrite(DIRA, HIGH); digitalWrite(DIRB, LOW);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Entregando");
    lcd.setCursor(3,1); lcd.print("Seu Item");
    myStepper3.step(-stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Retire seu");
    lcd.setCursor(3,1); lcd.print("Item");
    delay(2500);
    lcd.setCursor(0,0); lcd.print("Botao 4");
    lcd.setCursor(2,1); lcd.print("1 2 3 ou 4");
    digitalWrite(DIRA, LOW); digitalWrite(DIRB, LOW);
  }
}

Versão Com LEDs Endereçáveis (RGB)

// 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, r, g, b;
// ... (definições de pinos dos steppers iguais à versão anterior)
int stepsPerRevolution = 2048;
const int button1Pin = A0, button2Pin = A1, button3Pin = A2, 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("Selecione item");
  lcd.setCursor(0,1); lcd.print(" #1 #2 #3 #4");
  analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256); analogWrite(BLUEPIN, 256);
}

void loop() {
  int b1 = digitalRead(button1Pin), b2 = digitalRead(button2Pin);
  int b3 = digitalRead(button3Pin), b4 = digitalRead(button4Pin);
  digitalWrite(ENABLE, HIGH);
  for (i=0; i<5; i++);

  if (b1 == LOW && b2 != 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("Entregando");
    lcd.setCursor(3,1); lcd.print("Seu Item");
    myStepper0.step(stepsPerRevolution);
    lcd.clear(); lcd.setCursor(2,0); lcd.print("Retire seu");
    lcd.setCursor(3,1); lcd.print("Item");
    delay(2500);
    lcd.setCursor(0,0); lcd.print("Botao 1");
    lcd.setCursor(2,1); lcd.print("1 2 3 ou 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);
  }
  // ... (demais botões seguem lógica similar com efeitos de cor diferentes)
}

Versão Com Aceitador de Moedas (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, ledpin = 13, targetcents = 100;
volatile int cents = 0;
int credits = 0;
// ... (definições de pinos dos steppers iguais às anteriores)
int stepsPerRevolution = 2048;
const int button1Pin = A0, button2Pin = A1, button3Pin = A2, 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("Selecione 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("Centavos");
  lcd.setCursor(0,1); lcd.print(credits); lcd.setCursor(3,1); lcd.print("Creditos");
  delay(1000);

  if (credits > 0) {
    int b1 = digitalRead(button1Pin), b2 = digitalRead(button2Pin);
    int b3 = digitalRead(button3Pin), b4 = digitalRead(button4Pin);
    if (b1 == LOW && b2 != 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("Entregando");
      lcd.setCursor(3,1); lcd.print("Seu Item");
      myStepper0.step(stepsPerRevolution);
      lcd.clear(); lcd.setCursor(2,0); lcd.print("Retire seu");
      lcd.setCursor(3,1); lcd.print("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;
    }
    // ... (demais botões com lógica similar, decrementando créditos)
  }
}

void coinInterrupt() {
  cents += 5;
  digitalWrite(ledpin, HIGH);
}

Esquemáticos

Diagrama completo do sistema: fonte ATX, motores, LCD, LEDs, iluminação e controlador.

Construa Sua Própria Máquina de Venda Pessoal Operada por Moedas: Guia de Peças e Montagem

Processo de manufatura

  1. Aparelhos de EEG: Design, Fabricação e Aplicações Emergentes
  2. A Evolução e Fabricação de Máquinas de Costura: Da Inovação do Século XIX à Automação Moderna
  3. Como Funcionam as Máquinas de Venda Automática de Batatas Fritas: Uma Visão dos Bastidores
  4. Descubra Máquinas de Venda de Leite Fresco: Convenientes, Acessíveis e Ecológicas
  5. Como Máquinas de Venda de Batatas Fritas Entregam Batatas Quentes e Frescas sob Demanda
  6. Descubra Máquinas de Venda de Macarrão: Como Funcionam e o que Você Pode Obter
  7. Explore a Inovadora Máquina de Venda de Chá, Café e Sopa
  8. Desfrute Refeições Frescas e Saudáveis a Qualquer Hora com Nossa Máquina de Venda de Refeições Preparadas
  9. Tudo o Que Você Precisa Saber Sobre Máquinas de Venda Automática de Refrigerantes
  10. Lucro com Máquinas de Venda de Picolés: Potencial de Negócio