Eigener Münzautomat: Persönlicher Snack-Automat bauen – Teile & Montageanleitung
Komponenten und Zubehör
| FriendlyARM 1/4 Sperrholz (auf im Plan angegebene Maße zuschneiden) | × | 4 |
| 3/4″ Sperrholz-Leisten (3/4″ breit, Länge passend zum verbindenden Stück, siehe Plan) | × | 1 |
| LAFVIN 5er-Set 28BYJ-48 ULN2003 5V Schrittmotor + ULN2003 Treiberplatine für Arduino | × | 1 |
| PC-Zubehör – IDC 1,27 mm Flachbandkabel (50-polig, 10 ft) für saubere Verkabelung | × | 1 |
| Glarks 635-teiliges Dupont-Stecker-Set (Male/Female, 40-polig) für professionelle Verbindungen | × | 1 |
| Gamelec beleuchteter Mikroschalter (Ersatz) – Tasten | × | 1 |
| Steckbrett (Breadboard) (Lochrasterplatine funktioniert auch) | × | 1 |
| 30 Stück doppelseitige PCB-Prototyp-Platinen (1–2 Stück benötigt, gute Größe für zukünftige Projekte) | × | 1 |
| Arduino Mega 2560 (verwendeter Controller) | × | 1 |
| Tolako 5V Relais-Modul für Arduino ARM (verhindert Überhitzung der Motoren) | × | 1 |
| HiLetgo 2er-Pack 1602 Serial LCD Modul Display (zeigt gewählten Artikel an) | × | 1 |
| LED-Lichtleisten (optional) | × | 2 |
| 50 ft. 8-AWG Massivdraht Kupfer-Erdungsdraht (für Spulenwicklung) | × | 1 |
| Flacher Metall-Regalteiler | × | 1 |
Benötigte Werkzeuge und Maschinen
- Tisch- oder Handsäge (außer Holz wird vorkonfiguriert geliefert)
- Lötkolben (generisch)
- Heißklebepistole (generisch) – Klebesticks nicht vergessen
Apps und Onlinedienste
- Arduino IDE
Über dieses Projekt
Der persönliche Snack-Automat
Dieses Projekt ist ein schrittweiser Bau eines persönlichen Snack-Automaten. Er kann mit Ihren Lieblingssnacks befüllt werden oder ins Büro gestellt werden, um Leckereien mit dem Team zu teilen. Schauen Sie rein und hinterlassen Sie Ihre Gedanken.

Gehäuse bauen
Ich beziehe mich auf die Skizzen im Text – bitte dort für Details nachsehen.
Abmessungen: 21″ (53,3 cm) Breite × 18″ (45,7 cm) Tiefe × 24 1/4″ (61,6 cm) Höhe (Außenmaße)
- 2 Seitenwände: 18″ T × 23 3/4″ H
- 2 Deckel/Boden: 21″ B × 18″ T
- 2 Front/Rückwand: 21″ B × 24 1/4″ H
- Trennwand: 18″ T × 23 3/4″ H
- Innenböden: je 13″ B × 12″ T (oben & unten)
- Bodenabstand: 8″ (20,3 cm), Böden 13″ breit, 12″ tief
- Jeder blaue Block in der Skizze = 3/4″ × 3/4″ Befestigungspunkt, Tiefe = Plattenstärke


Kasten wie im Plan gezeigt mit den 3/4″ Leisten an jedem Verbindungspunkt zusammenbauen. Seitenwände stehen auf dem Boden und unter dem Deckel. Außenmaße der Umfassungswände: 21″ B × 24 1/4″ H.

Trennwand vor Einbau vorbereiten: Vom oberen Rand 16 1/4″ nach unten messen und Leiste für unteren Boden anbringen. Weitere 8 1/4″ nach unten (also 24 1/2″ von oben) Leiste für oberen Boden anbringen. Dies auf der linken Wand (von vorne gesehen) wiederholen, damit die Böden befestigt werden können.
Wichtig: Unteren Boden zuerst einbauen, sonst ist das Befestigen an den Leisten sehr schwierig.

Nach Anbringen der Leisten für die Böden die 13″ × 12″ Platten auf jeder Leistenpaar montieren. Das positioniert die Trennwand automatisch. Danach Leisten oben und unten an der rechten Seite der Trennwand anbringen und an Deckel/Boden befestigen – die Struktur ist nun stabil.

Rückwand montieren und Motoren vorbereiten. 3D-gedruckte Spulenräder bereithalten, um Bohrlöcher zu planen. Räder messen und 1/4″ Höhe addieren (Platz für Spulendrehung). Je nach Material anpassen. Auf dem Boden 6 1/2″ von linker Wand messen (Mitte). 3 1/4″ von linker Seite für Mitte jedes Fachs. Höhenmaß für Bohrpunkte verwenden. Loch so bohren, dass Rad ohne Reibung am Brett auf Motorwelle passt. Motoren festschrauben.

Motor-Relais einrichten
Anschlüsse gemäß Schaltplan mit L293D (Kerbe links) herstellen, um Relais zu steuern und Motoren mit Strom zu versorgen.
(Von links nach rechts)
- Pin 1 → Controller Pin 10
- Pin 2 → Controller Pin 9
- Pin 3 → Relais Pluspol (3 Pins zu Ihnen gerichtet, linker Pin)
- Pin 4 → 12V Masse auf Breadboard
- Pin 5 → nicht verwendet
- Pin 6 → Relais Masse (rechter Pin)
- Pin 7 → Controller Pin 8
- Pin 8 → +12V auf Breadboard
- Relais Mittelpin → +12V Breadboard
- Relais hinterer rechter Pin → Plusleitung zu Motortreibern

Display & Tasten einbauen
Display: Rechtsseitig (von vorne) Platz wählen, Ausschnitt für Anzeigeteil markieren (2,53937″ × 0,5708661″).
Tasten: Rechtsseitig 4 Löcher für Taster bohren (1,10236″ Durchmesser bei Originaltastern). Lieber kleiner bohren und mit Schleifpapier nacharbeiten.


Achten Sie auf exakte Anschlusspositionen gemäß Schaltplan. Die im Plan gezeigten LEDs sind die in den Tastern verbauten LEDs – im Plan separat dargestellt für bessere Lesbarkeit.
Jeden Motor an seinen mitgelieferten Treiber anschließen. Dann jeden Treiber wie folgt an den Controller anschließen:
Motor-Verkabelung:
Stromversorgung an 12V-Seite des Breadboards (vom ATX-Netzteil, siehe unten). Die 4 „IN“-Pins am Treiber an den Controller:

********* NICHT DIE ERSTEN 2 PINS IN DIESEM BLOCK VERWENDEN – SIND 5V PINS, NICHT IN DIESEM PROJEKT GENUTZT *********
- Motor 1 (Blau): Pins 22, 24, 26, 28
- Motor 2 (Gelb): Pins 23, 25, 27, 29
- Motor 3 (Grün): Pins 30, 32, 34, 36
- Motor 4 (Rot): Pins 31, 33, 35, 37
Tasten-Anschlüsse:

- Taster 1: eine Seite an 5V, andere an 220 Ω gegen Masse + Analog Pin A0
- Taster 2: eine Seite an 5V, andere an 220 Ω gegen Masse + Analog Pin A1
- Taster 3: eine Seite an 5V, andere an 220 Ω gegen Masse + Analog Pin A2
- Taster 4: eine Seite an 5V, andere an 220 Ω gegen Masse + Analog Pin A3
LCD-Display (1602 Serial):

- Stromversorgung an 5V-Seite des Breadboards (Plus & Masse)
- Pin 1 → Masse
- Pin 2 → 5V
- Pin 3 → einstellbares Potentiometer (unterer linker Pin → Masse, unterer rechter → 5V, oberer Pin → LCD Pin 3) – Kontrasteinstellung
- Pin 4 → Controller Pin 2
- Pin 5 → Masse
- Pin 6 → Controller Pin 3
- Pin 7–10 → NICHT VERWENDET
- Pin 11 → Controller Pin 4
- Pin 12 → Controller Pin 5
- Pin 13 → Controller Pin 6
- Pin 14 → Controller Pin 7
- Pin 15 → 5V
- Pin 16 → Masse

ATX-Netzteil vorbereiten:

Nur benötigte Kabel abschneiden. Restliche Kabel im Stecker belassen – sicherer und für andere Projekte nutzbar.
ATX-Pinbelegung:
- Schwarz (Masse) Pin 3 & Grün (Signal) Pin 16 abschneiden, abisolieren → an Schalter anschließen (Ein/Aus)
- Schwarz Pin 7 & Gelb (+12V) Pin 10 → an 12V-Seite des Breadboards (gelb/schwarz)
- Schwarz Pin 24 & Gelb Pin 11 → an passenden Stecker für Arduino-Stromversorgung
- Schwarz Pin 19 & Rot (+5V) Pin 21 → an 5V-Seite des Breadboards

Boden-Teiler & Spulen
Boden-Teiler: In der Mitte (6 1/2″ von linker Wand/Trennwand) Markierung von oben übernehmen. Flaches Metall zu einem Dreieck (^) biegen. Als Mittelteiler über der Markierung zentrieren. Für zweiten Boden wiederholen. Mit Heißkleber fixieren. Seitliche Führungen optional.
Spulen wickeln: 1 1/2″ Rohr (Rohr, Silikonkartusche, Sprühdose) als Wickelform. Gummiband von oben nach unten spannen, parallel Linien auf beiden Seiten zeichnen. Auf einer Seite 1″ vom Rand markieren, dann alle 2″ weitere Markierungen. Auf der anderen Seite nur 2″-Abstände. Spule auf der 1″-Seite beginnen und jede Markierung auf beiden Seiten treffen → 2″ Abstand zwischen Windungen. Für Schokoriegel 1″ Abstand (Formel halbieren).
Spule an 3D-gedrucktes Rad befestigen: Auf 1″-Seite Spule zum Kreis schließen, Durchmesser etwas kleiner als Rad wählen. Um Radkante legen – Spule spannt sich selbst. Mit wenig Heißkleber am Radende fixieren.
LED-Streifen

Plus an +12V Pin der 12V-Breadboard-Seite, Masse an Masse-Pin der 12V-Seite (nicht im Plan eingezeichnet).
STELLEN SIE ALLE FRAGEN, DAMIT ICH DAS PROJEKT NOCH EINFACHER MACHEN KANN.
Code
Snack-Automat – OHNE Farbwechsel der LEDs
// 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 "i"
int i;
// Defining pins section
// Stepper Connect 1
int stepIN1Pin = 22;
int stepIN2Pin = 24;
int stepIN3Pin = 26;
int stepIN4Pin = 28;
// Stepper Connect 2
int stepIN1Pin1 = 23;
int stepIN2Pin1 = 25;
int stepIN3Pin1 = 27;
int stepIN4Pin1 = 29;
// Stepper Connect 3
int stepIN1Pin2 = 30;
int stepIN2Pin2 = 32;
int stepIN3Pin2 = 34;
int stepIN4Pin2 = 36;
// Stepper Connect 4
int stepIN1Pin3 = 31;
int stepIN2Pin3 = 33;
int stepIN3Pin3 = 35;
int stepIN4Pin3 = 37;
// Define steps
int stepsPerRevolution = 2048;
// Define buttons pin ports
const int button1Pin = A0;
const int button2Pin = A1;
const int button3Pin = A2;
const int button4Pin = A3;
// Define each stepper
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 button1State, button2State, button3State, button4State;
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
button3State = digitalRead(button3Pin);
button4State = digitalRead(button4Pin);
digitalWrite(ENABLE, HIGH);
for (i=0;i<5;i++);
// Button 1
if (((button1State == LOW) && !(button2State == 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);
}
// Button 2
if (((button2State == LOW) && !(button1State == 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);
}
// Button 3
if (((button3State == LOW) && !(button4State == 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);
}
// Button 4
if (((button4State == LOW) && !(button3State == 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);
}
}
Snack-Automat – MIT Farbwechsel der LEDs
// 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;
int r, g, b;
// Stepper pins (same as above)
int stepIN1Pin = 22; int stepIN2Pin = 24; int stepIN3Pin = 26; int stepIN4Pin = 28;
int stepIN1Pin1 = 23; int stepIN2Pin1 = 25; int stepIN3Pin1 = 27; int stepIN4Pin1 = 29;
int stepIN1Pin2 = 30; int stepIN2Pin2 = 32; int stepIN3Pin2 = 34; int stepIN4Pin2 = 36;
int stepIN1Pin3 = 31; int stepIN2Pin3 = 33; int stepIN3Pin3 = 35; int 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(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 button1State, button2State, button3State, button4State;
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
button3State = digitalRead(button3Pin);
button4State = digitalRead(button4Pin);
digitalWrite(ENABLE, HIGH);
for (i = 0; i < 5; i++);
// Button 1
if (((button1State == LOW) && !(button2State == 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);
}
// Button 2
if (((button2State == LOW) && !(button1State == LOW))) {
digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW);
analogWrite(GREENPIN, 256);
for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
for (r = 256; r > 0; r--); analogWrite(REDPIN, r);
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(PinA, LOW); digitalWrite(PinB, LOW);
for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
for (r = 0; r < 256; r++); analogWrite(REDPIN, r);
}
// Button 3
if (((button3State == LOW) && !(button4State == LOW))) {
digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW);
analogWrite(BLUEPIN, 256);
for (r = 256; r > 0; r--); analogWrite(REDPIN, r);
for (g = 256; g > 0; g--); analogWrite(GREENPIN, g);
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(PinA, LOW); digitalWrite(PinB, LOW);
for (g = 0; g < 256; g++); analogWrite(GREENPIN, g);
for (r = 0; r < 256; r++); analogWrite(REDPIN, r);
}
// Button 4
if (((button4State == LOW) && !(button3State == LOW))) {
digitalWrite(PinA, HIGH); digitalWrite(PinB, LOW);
analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256);
for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
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(PinA, LOW); digitalWrite(PinB, LOW);
for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
}
}
Münzprüfer & vollständiger Code
// 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;
int r, g, b;
const int coinpin = 21;
const int ledpin = 13;
const int targetcents = 100;
volatile int cents = 0;
int credits = 0;
// Stepper pins (same as above)
int stepIN1Pin = 22; int stepIN2Pin = 24; int stepIN3Pin = 26; int stepIN4Pin = 28;
int stepIN1Pin1 = 23; int stepIN2Pin1 = 25; int stepIN3Pin1 = 27; int stepIN4Pin1 = 29;
int stepIN1Pin2 = 30; int stepIN2Pin2 = 32; int stepIN3Pin2 = 34; int stepIN4Pin2 = 36;
int stepIN1Pin3 = 31; int stepIN2Pin3 = 33; int stepIN3Pin3 = 35; int 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() {
attachInterrupt(digitalPinToInterrupt(coinpin), coinInterrupt, RISING);
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() {
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 button1State = digitalRead(button1Pin);
int button2State = digitalRead(button2Pin);
int button3State = digitalRead(button3Pin);
int button4State = digitalRead(button4Pin);
// Button 1
if (((button1State == LOW) && !(button2State == 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;
}
// Button 2
if (((button2State == LOW) && !(button1State == LOW))) {
digitalWrite(ENABLE, HIGH);
analogWrite(GREENPIN, 256);
for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
for (r = 256; r > 0; r--); analogWrite(REDPIN, r);
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);
digitalWrite(ENABLE, LOW);
for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
for (r = 0; r < 256; r++); analogWrite(REDPIN, r);
credits--; cents = 0;
}
// Button 3
if (((button3State == LOW) && !(button4State == LOW))) {
digitalWrite(ENABLE, HIGH);
analogWrite(BLUEPIN, 256);
for (r = 256; r > 0; r--); analogWrite(REDPIN, r);
for (g = 256; g > 0; g--); analogWrite(GREENPIN, g);
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);
digitalWrite(ENABLE, LOW);
for (g = 0; g < 256; g++); analogWrite(GREENPIN, g);
for (r = 0; r < 256; r++); analogWrite(REDPIN, r);
credits--; cents = 0;
}
// Button 4
if (((button4State == LOW) && !(button3State == LOW))) {
digitalWrite(ENABLE, HIGH);
analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256);
for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b);
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);
digitalWrite(ENABLE, LOW);
for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b);
credits--; cents = 0;
}
}
}
void coinInterrupt() {
cents += 5;
digitalWrite(ledpin, HIGH);
}
Schaltplan
Komplettes Systemdiagramm: ATX-Netzteil, Motoren, LCD, LEDs, Beleuchtung, Controller

Herstellungsprozess
- EEG-Geräte: Design, Fertigung und neue Anwendungen
- Die Entwicklung und Fertigung von Nähmaschinen: Von der Innovation des 19. Jahrhunderts zur modernen Automatisierung
- Pommes-Frites-Automaten: Funktionsweise & Hintergründe
- Frischmilch-Automaten (Milch-Tankstellen): Komfortabel, Günstig, Ökologisch
- Wie Chip-Automaten heiße, frische Pommes frites auf Knopfdruck liefern
- Nudel-Automaten entdecken: Funktionsweise und Angebot
- Heißgetränke-Automaten (Tee, Kaffee, Suppe): Technik, Hygiene & Wirtschaftlichkeit
- Frische, gesunde Mahlzeiten jederzeit: Unser Meal-Prep-Automat
- Alles, was Sie über Getränkeautomaten wissen müssen
- Gewinnpotenzial von Eis-am-Stiel-Automaten: Geschäftschancen erschließen