Construa Sua Própria Máquina de Venda Pessoal Operada por Moedas: Guia de Peças e Montagem
Componentes e Materiais
| Quant. | Item | Observações |
|---|---|---|
| 4 | Compensado 1/4" (FriendlyARM) | Cortar nas dimensões indicadas no diagrama |
| 1 | Tacos de compensado 3/4" | Cortar tiras de 3/4" de largura no comprimento da peça a conectar (ver diagrama) |
| 1 | Kit 5 Motores de Passo 28BYJ-48 + Driver ULN2003 5V (LAFVIN) | Capazes de empurrar qualquer guloseima colocada na máquina |
| 1 | Cabo Flat Rainbow IDC 1.27mm 50P 10ft (Pc Accessories) | Para fiação limpa e profissional |
| 1 | Kit Conectores Dupont 635 pcs Macho/Fêmea 40 pinos (Glarks) | Para fiação limpa e profissional |
| 1 | Microchave Iluminada (Gamelec) | Botões de seleção |
| 1 | Protoboard (genérica) | Placas de solda também funcionam |
| 1 | Kit 30 Placas PCB Dupla Face | Apenas 1 ou 2 necessárias; tamanho ideal para projetos futuros |
| 1 | Arduino Mega 2560 | Controlador principal |
| 1 | Módulo Relé 5V para Arduino/ARM (Tolako) | Protege os motores contra superaquecimento |
| 1 | Módulo LCD Serial 1602 (HiLetgo) – 2 unidades | Exibe qual botão foi pressionado |
| 2 | Fitas de LED | Opcional |
| 1 | Fio de Cobre Nu 8 AWG 50 ft | Usado para fabricar as bobinas (espirais) dos dispensadores |
| 1 | Divisor de Prateleira Metálico Plano | Para separar os compartimentos nas prateleiras |
Ferramentas Necessárias
- Serra de mesa ou circular (a menos que a madeira já venha cortada)
- Ferro de solda
- Pistola de cola quente (e bastões de cola)
Aplicativos e Serviços Online
- Arduino IDE – para programação do controlador
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
- Externas: 53,3 cm L x 45,7 cm P x 61,6 cm A
- Painéis laterais: 45,7 cm P x 60,3 cm A (2 unid.)
- Tampo e base: 53,3 cm L x 45,7 cm P (2 unid.)
- Frente e verso: 53,3 cm L x 61,6 cm A (2 unid.)
- Parede divisória interna: 45,7 cm P x 60,3 cm A
- Prateleiras internas: 33 cm L x 30,5 cm P (2 unid., superior e inferior)
- Espaçamento entre prateleiras: 20,3 cm
- Cada bloco azul no diagrama representa um ponto de fixação de 1,9 cm x 1,9 cm, com a profundidade do painel
Montagem da Estrutura
- 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.
- 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.
- Importante: Instale primeiro a prateleira inferior; caso contrário, fixar nos tacos será muito difícil.
- 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.
- 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):
- Pino 1 → Pino 10 do Arduino (conforme diagrama)
- Pino 2 → Pino 9 do Arduino
- Pino 3 → Lado positivo do relé (pino esquerdo, com 3 pinos voltados para você)
- Pino 4 → Terra 12V na protoboard
- Pino 5 → Não utilizado
- Pino 6 → Terra do relé (pino direito)
- Pino 7 → Pino 8 do Arduino
- Pino 8 → +12V na protoboard
- Pino central do relé → +12V na protoboard
- Pino traseiro direito do relé → Positivo que vai aos drivers dos motores
Instalação do Display e Botões
- Display: No lado direito da máquina (vista frontal), recorte o furo para a área visível do LCD (6,45 cm x 1,45 cm).
- Botões: No mesmo lado, faça 4 furos de 2,8 cm (para os botões da lista). Use broca menor e lixe até o diâmetro exato.
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:
- Motor 1 (Azul): Pinos 22, 24, 26, 28
- Motor 2 (Amarelo): Pinos 23, 25, 27, 29
- Motor 3 (Verde): Pinos 30, 32, 34, 36
- Motor 4 (Vermelho): Pinos 31, 33, 35, 37
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:
- Botão 1 → A0
- Botão 2 → A1
- Botão 3 → A2
- Botão 4 → A3
LCD 1602 (I2C/Serial)
- Alimentação: 5V e terra da protoboard
- Pino 1 (VSS) → Terra
- Pino 2 (VDD) → 5V
- Pino 3 (VO) → Potenciômetro de contraste (ponta esquerda no terra, direita no 5V, central no pino 3 do LCD)
- Pino 4 (RS) → Pino 2 do Arduino
- Pino 5 (RW) → Terra
- Pino 6 (EN) → Pino 3 do Arduino
- Pinos 7-10 → Não usados
- Pino 11 (D4) → Pino 4 do Arduino
- Pino 12 (D5) → Pino 5 do Arduino
- Pino 13 (D6) → Pino 6 do Arduino
- Pino 14 (D7) → Pino 7 do Arduino
- Pino 15 (A/LED+) → 5V
- Pino 16 (K/LED-) → Terra
Fonte ATX
Corte e descasque apenas os fios necessários; os demais permanecem no conector original para reutilização.
- Terra (preto) pino 3 + Sinal (verde) pino 16 → Chave liga/desliga da máquina
- Terra (preto) pino 7 + 12V (amarelo) pino 10 → Lado 12V da protoboard (conexões amarela e preta)
- Terra (preto) pino 24 + 12V (amarelo) pino 11 → Conector compatível para alimentar o Arduino
- Terra (preto) pino 19 + 5V (vermelho) pino 21 → Lado 5V da protoboard
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)
- Use um tubo de 3,8 cm de diâmetro (cano, tubo de silicone, lata de tinta).
- Envolva um elástico no sentido do comprimento e trace linhas paralelas em ambos os lados.
- 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.
- 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:
- Máquina de Venda – SEM LEDs endereçáveis
- Máquina de Venda – COM LEDs endereçáveis
- Aceitador de Moedas – Código completo
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.

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