Bouw je eigen muntengestuurde persoonlijke automaat: onderdelen & montagehandleiding
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| 1/4" multiplex (vriendelijk ARM) | 4 | Zagen op afmetingen volgens tekening |
| 3/4" multiplex blokken | 1 set | Strippen 3/4" breed, lengte volgens tekening |
| 28BYJ-48 5V stappenmotor + ULN2003 driverbord (5 sets) | 1 | Krachtig genoeg voor snoep/snacks |
| IDC 1.27mm platbandkabel (50-polig, 10ft) | 1 | Voor nette bedrading |
| Dupont connector set (635 stuks, male/female) | 1 | Voor nette bedrading |
| Geïllumineerde microswitches (knoppen) | 4 | |
| Breadboard | 1 | Of soldeerprint |
| Dubbelzijdige PCB prototype printen (30 stuks) | 1 | 1-2 nodig, rest voor toekomstige projecten |
| Arduino Mega 2560 | 1 | Hoofdcontroller |
| 5V Relay module voor Arduino | 1 | Beschermt motoren tegen oververhitting |
| 1602 Serieel LCD-display (I2C) | 1 | Toont geselecteerd item |
| LED-stripverlichting | 2 | Optioneel |
| 8-gauge koperen draad (50 ft) | 1 | Voor spulen van motorassen |
| Platte metalen plankscheider | 1 | Als scheiding tussen producten |
Benodigde tools en machines
- Tafelzaag of cirkelzaag (tenzij hout al op maat geleverd wordt)
- Solderbout
- Lijmgun (met lijmpatronen)
Apps en online diensten
- Arduino IDE
Over dit project
De persoonlijke automaat
Deze handleiding beschrijft stap voor stap de bouw van een persoonlijke automaat. Vul hem met je favoriete snacks of plaats hem op kantoor voor collega's. Volg de tekeningen voor afmetingen en montage.
Afmetingen
- Buitenmaat: 21" B x 18" D x 24 1/4" H
- Zijpaneelen: 2x 18" D x 23 3/4" H
- Boven/onder: 2x 21" B x 18" D
- Voor/achter: 2x 21" B x 24 1/4" H
- Scheidingswand: 18" D x 23 3/4" H
- Interne planken: 2x 13" B x 12" D (boven & onder)
- Plankenafstand: 8" hoogte, 13" breed, 12" diep
- Montageblokken: 3/4" x 3/4" op elk hoekpunt, diepgelijk aan paneel
Montage van de kast
- Monteer de kast met de 3/4" blokken op alle hoekpunten. Zijwanden liggen op de bodemplaat en onder de bovenplaat. Omtrek: 21" B x 24 1/4" H.
- Scheidingswand: meet 16 1/4" vanaf boven voor onderste plank, 8 1/4" vanaf boven voor bovenste plank. Bevestig blokken aan linkerwand (vooruit kijkend) voor planken.
- Belangrijk: Installeer eerst de onderste plank, anders is bevestigen moeilijk.
- Plaats de planken (13" x 12") op de blokken. Dit positioneert de scheidingswand automatisch. Bevestig vervolgens blokken boven en rechts aan de scheidingswand en schroef vast aan boven-/onderplaat.
- Monteer de achterwand en bereid motorinstallatie voor.
Motorinstallatie
- Print de spoelwielen (3D) en meet de hoogte. Boorgaten in de planken: middelpunt op 6 1/2" van linkermuur, en 3 1/4" van scheidingswand per vak. Hoogte = wielhoogte + 1/4" ruimte.
- Boor gat voor asdoorvoering. Monteer motoren en bevestig wielen.
Relais-aansluiting (motorvoeding)
Gebruik L293D-chip (kerf links) om relais aan te sturen. Aansluitingen (links naar rechts):
- Pin 1 → Arduino pin 10
- Pin 2 → Arduino pin 9
- Pin 3 → Relais + (linker pin, 3 pennen naar je toe)
- Pin 4 → 12V GND op breadboard
- Pin 5 → niet gebruikt
- Pin 6 → Relais GND (rechter pin)
- Pin 7 → Arduino pin 8
- Pin 8 → +12V op breadboard
- Relais middenpin → +12V breadboard
- Relais achter-rechts pin → + naar motor drivers
Scherm & knoppen installeren
- LCD: Gat zagen 2,54" x 0,57" in rechterzijwand.
- Knoppen: 4 gaten van 1,10" diameter (voor geselecteerde knoppen). Gebruik kleinere boor en schuur af.
Motor-aansluiting aan drivers & controller
Voeding op 12V-zijde breadboard (vanaf ATX-voeding). Elke motor-driver heeft 4 "in"-pennen naar Arduino:
- Motor 1 (Blauw): Pinnen 22, 24, 26, 28
- Motor 2 (Geel): Pinnen 23, 25, 27, 29
- Motor 3 (Groen): Pinnen 30, 32, 34, 36
- Motor 4 (Rood): Pinnen 31, 33, 35, 37
LET OP: De eerste 2 pennen van dit blok zijn 5V – NIET GEBRUIKEN.
Knop-aansluitingen
- Knop 1: één kant 5V, andere kant → 220Ω naar GND + Analog Pin A0
- Knop 2: één kant 5V, andere kant → 220Ω naar GND + Analog Pin A1
- Knop 3: één kant 5V, andere kant → 220Ω naar GND + Analog Pin A2
- Knop 4: één kant 5V, andere kant → 220Ω naar GND + Analog Pin A3
LCD-scherm (I2C 1602)
- Voeding: 5V & GND van breadboard
- Pin 1: GND
- Pin 2: 5V
- Pin 3: Contrast (potmeter: linkerpoot GND, rechterpoot 5V, middenpoot → Pin 3)
- Pin 4: Arduino pin 2 (RS)
- Pin 5: GND
- Pin 6: Arduino pin 3 (E)
- Pin 7-10: niet gebruikt
- Pin 11: Arduino pin 4 (D4)
- Pin 12: Arduino pin 5 (D5)
- Pin 13: Arduino pin 6 (D6)
- Pin 14: Arduino pin 7 (D7)
- Pin 15: 5V (backlight +)
- Pin 16: GND (backlight -)
ATX-voeding aanpassen
Knip alleen de benodigde draden. De rest veilig in de connector laten voor hergebruik.
- Zwart (GND) pin 3 + Groen (signaal) pin 16 → schakelaar (machine aan/uit)
- Zwart pin 7 + Geel (+12V) pin 10 → 12V-zijde breadboard (geel/zwart)
- Zwart pin 24 + Geel pin 11 → connector voor Arduino voeding
- Zwart pin 19 + Rood (+5V) pin 21 → 5V-zijde breadboard
Plankscheiders & spulen
- Scheiders: Op 6,5" van linkermuur/Scheidingswand middenpunt markeren. Metalen scheider buigen in ^-vorm, centreren, vastlijmen met lijmgun. Optioneel: schuiven aan zijkanten.
- Spulen: Gebruik 1,5" buis (spuitbus, verfbus). Rubberband omheen, lijnen trekken. Één kant: 1" eerste markeer, daarna 2" intervallen. Andere kant: alleen 2" intervallen. Draad spannen langs markeringen → 2" tussenwindingen. Voor snoepjes: 1" intervallen (formule halveren).
- Spul bevestigen: Op 1" kant spul inklappen tot cirkel, diameter iets kleiner dan wiel. Om wiel heen schuiven, vastlijmen met beetje lijm.
LED-stripverlichting (optioneel)
- Positief → +12V pin op 12V-zijde breadboard
- Negatief → GND pin op 12V-zijde breadboard
Stel al je vragen! Ik help graag om dit project zo toegankelijk mogelijk te maken.
Code
Automaat – ZONDER kleurveranderende LED's
// 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
int i;
int stepsPerRevolution = 2048;
// Motor pinnen
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;
// Knoppen
const int button1Pin = A0, button2Pin = A1, button3Pin = A2, button4Pin = A3;
// Steppers
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("Select your item");
lcd.setCursor(0, 1); lcd.print(" #1 #2 #3 #4");
}
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(DIRA,HIGH); digitalWrite(DIRB,LOW);
lcd.clear(); lcd.setCursor(2,0); lcd.print("Dispensing");
lcd.setCursor(3,1); lcd.print("Your Item");
myStepper0.step(stepsPerRevolution);
lcd.clear(); lcd.setCursor(2,0); lcd.print("Please take");
lcd.setCursor(3,1); lcd.print("Your Item");
delay(2500);
lcd.setCursor(0,0); lcd.print("Button State 1");
lcd.setCursor(2,1); lcd.print("1 2 3 or 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("Dispensing");
lcd.setCursor(3,1); lcd.print("Your Item");
myStepper1.step(stepsPerRevolution);
lcd.clear(); lcd.setCursor(2,0); lcd.print("Please take");
lcd.setCursor(3,1); lcd.print("Your Item");
delay(2500);
lcd.setCursor(0,0); lcd.print("Button State 2");
lcd.setCursor(2,1); lcd.print("1 2 3 or 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("Dispensing");
lcd.setCursor(3,1); lcd.print("Your Item");
myStepper2.step(stepsPerRevolution);
lcd.clear(); lcd.setCursor(2,0); lcd.print("Please take");
lcd.setCursor(3,1); lcd.print("Your Item");
delay(2500);
lcd.setCursor(0,0); lcd.print("Button State 3");
lcd.setCursor(2,1); lcd.print("1 2 3 or 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("Dispensing");
lcd.setCursor(3,1); lcd.print("Your Item");
myStepper3.step(-stepsPerRevolution);
lcd.clear(); lcd.setCursor(2,0); lcd.print("Please take");
lcd.setCursor(3,1); lcd.print("Your Item");
delay(2500);
lcd.setCursor(0,0); lcd.print("Button State 4");
lcd.setCursor(2,1); lcd.print("1 2 3 or 4");
digitalWrite(DIRA,LOW); digitalWrite(DIRB,LOW);
}
}
Automaat – MET kleurveranderende LED's
// 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;
int stepsPerRevolution = 2048;
// Motor pinnen (zoals boven)
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("Select your 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("Dispensing");
lcd.setCursor(3,1); lcd.print("Your Item");
myStepper0.step(stepsPerRevolution);
lcd.clear(); lcd.setCursor(2,0); lcd.print("Please take");
lcd.setCursor(3,1); lcd.print("Your Item");
delay(2500);
lcd.setCursor(0,0); lcd.print("Button State 1");
lcd.setCursor(2,1); lcd.print("1 2 3 or 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);
}
// ... (analoge logica voor knop 2, 3, 4 met kleureffecten)
}
Muntacceptor & complete code
#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;
// Motor & knop definities (zoals boven)
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("Select your 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("Coin Count");
lcd.setCursor(0, 1); lcd.print(credits); lcd.setCursor(3, 1); lcd.print("credit earned");
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("Dispensing");
lcd.setCursor(3,1); lcd.print("Your Item");
myStepper0.step(stepsPerRevolution);
lcd.clear(); lcd.setCursor(2,0); lcd.print("Please take");
lcd.setCursor(3,1); lcd.print("Your 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;
}
// ... (analoge logica voor knop 2, 3, 4)
}
}
void coinInterrupt() {
cents += 5;
digitalWrite(ledpin, HIGH);
}
Schema

Productieproces
- EEG-Apparaten: Ontwerp, Productie en Opkomende Toepassingen
- Automaatjes: Een Amerikaanse Industriemacht van $36,6 Mrd
- De Evolutie en Productie van Naaimachines: Van 19e-Eeuwse Innovatie tot Moderne Automatisering
- Hoe frietautomaten werken: Een blik achter de schermen
- Verse melkautomaten ontdekken: Gemakkelijk, betaalbaar en ecologisch
- Hoe Chips Automaat Vers, Warme Frietjes op Verzoek Levert
- Ontdek Noedelautomaten: Hoe Ze Werken & Wat Je Kunt Krijgen
- Innovatieve Thee, Koffie & Soep Automaat: Complete Gids
- Geniet Vers, Gezond Voedsel Altijd met Onze Meal Prep Automaat
- Alles wat je moet weten over frisdrankautomaten
- Winst Ontgrendelen: Het Zakelijke Potentieel van IJsjes Automatjes