Intelligenten Arduino-Getränkeautomaten bauen: Kompletter DIY-Mechatronik-Leitfaden
In diesem Projekt bauen wir einen Arduino-basierten DIY-Getränkeautomaten. Ich zeige den gesamten Prozess: MDF-Zuschnitt & Montage, Elektronik-Anschluss, Arduino-Code. Video oder schriftliche Anleitung unten. Der Automat hat 4 Ausgabestationen mit 360°-Drehservos (Continuous Rotation), ein Träger-System mit Schrittmotoren (X/Y), LCD-Display, 4 Auswahlknöpfe und einen Münzdetektor. Das Trägersystem ist für einen reinen Automaten vielleicht überdimensioniert, aber es macht das Projekt komplexer und lehrreicher – ideal für Mechatronik-Studenten als Abschlussarbeit oder Arduino-Enthusiasten. MDF-Platten (8 mm) per Kreissäge zugeschnitten. Maße aus 3D-Modell (Thangs – Download & Browser-Ansicht). Öffnungen mit Stichsäge (auch für kleinere Teile). Vorsicht: Gefährliche Maschinen! Montage: Holzleim & Schrauben, 90°-Winkelzwingen, Vorbohren, Senken, 3-mm-Schrauben. Auch F-Zwingen genutzt. Aluminiumrohre (Horizontal: 16 mm Ø, 2×27 cm; Vertikal: 20 mm Ø, 3×45 cm) per Metallsäge. In 18-mm-Holzplatten Nuten mit Forstnerbohrer, Rohre befestigen. Schlitten: 21×21-cm-Holzplatten, 8-mm-Gewindestangen, 22-mm-Lager (horizontal: 16-mm-Lager). Schlitten zwischen Rohre – erst zu locker. Lösung: Rohrnuten erweitern, Querbohrungen, Gewindestange zieht Rohre näher zusammen → spielfrei. Schienen wieder zerlegen für weitere Elemente: Links 5-mm-Bolt für Umlenkrolle (horizontaler Zahnriemen) + 2 Lager für vertikale Schiene. Rechts: Horizontaler Schrittmotor auf MDF-Bretter montiert, auf vertikalen Schlitten kleben/schrauben. Behälter auf horizontalem Schlitten (Holzleim). Schienen mit Epoxid in Nuten, zusätzliches Holzbrett für Steifigkeit. In vertikale Schienen einsetzen, fixieren. Schlitten & Schienen laufen hervorragend. Horizontaler Zahnriemen: Länge messen, zuschneiden, mit Kabelbinder am Schlitten. Vertikaler Schrittmotor oben am Automaten (MDF & Schrauben), unten Umlenkrolle, Zahnriemen analog. Helix-Spirale aus 3-mm-Draht (um 7-cm-Sprühdose gewickelt). Mit Heißkleber an 360°-Servo (DS04-NFC) kleben. Tür mit Scharnieren, Magnetfang. 5-mm-Acryl für großes Fenster, dünnes Alublech für rechte Öffnung (4 Knöpfe, Münzeinwurf, LCD). Bohrer & Metallsäge für Ausschnitte. Elektronik auf Alublech, dann an Tür (5-mm-Schrauben). Zwei Mikroschalter für Startposition des Trägers. Münzführung (geklebt) leitet Münze nach unten. Münzdetektor = IR-Näherungssensor (positives Signal bei Münzdurchlauf). 12 V Netzteil (≥2 A) für Schrittmotoren & LED-Streifen. Buck-Converter (LM2596) auf 5 V für Servos, LCD, Sensoren, Buttons. Servos per PWM, Schrittmotoren per A4988-Treiber. Buttons & Mikroschalter an GND & Digitalpins (interne Pull-Ups). Komponenten-Links: Verkabelung mit Jumper-Wires (etwas unordentlich, aber funktionsfähig). Zum Schluss LED-Streifen an Tür für Innenbeleuchtung. Code für dieses Projekt (Beschreibung folgt). Bibliotheken: LiquidCrystal, Servo. LCD-Pins, 4 Servos, Schrittmotor-Pins, Münzdetektor, 4 Buttons, 2 Mikroschalter. Setup: Pin-Modes, Pull-Ups für Buttons/Schalter (HIGH = offen, LOW = gedrückt). Träger in Startposition fahren (Mikroschalter). Hauptloop: „Münze einwerfen“ anzeigen, warten bis IR-Sensor LOW (Münze erkannt). Dann „Artikel wählen“, auf Tastendruck warten. „Ausgabe läuft...“, dann Switch-Case für gewählten Artikel. Träger per Custom-Funktionen (moveUp, moveLeft, etc.) zur Position fahren, entsprechendes Servo 950 ms drehen (Helix einmal drehen), Träger zurück zur Startposition. Schrittmotortreiber auf Viertel-Schritt (Quarter Step) → 4900 Steps für oberste Position (empirisch ermittelt). Helix-Drehung: 2000 µs = drehen, 1500 µs = Stop (Continuous Servo). Werte können je Motor variieren. Am Ende „Artikel ausgegeben!“ anzeigen. Einfach, oder? Viel Spaß beim Nachbauen! Fragen in den Kommentaren, Arduino-Projektsammlung ansehen.Überblick

Automat bauen




Schienensystem








Ausgabeeinheiten


Frontplatte


Schaltplan


Arduino-Code
/* DIY Vending Machine - Arduino Mechatronics Project
by Dejan Nedelkovski, www.HowToMechatronics.com */
#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(27, 26, 25, 24, 23, 22);
Servo servo1, servo2, servo3, servo4; // DS04-NFC Motoren
// Schrittmotor-Pins
#define dirPinVertical 0
#define stepPinVertical 1
#define dirPinHorizontal 2
#define stepPinHorizontal 3
#define coinDetector 9
#define button1 13
#define button2 12
#define button3 11
#define button4 10
#define microSwitchV 15
#define microSwitchH 14
int buttonPressed;
void setup() {
lcd.begin(16, 2);
servo1.attach(4); servo2.attach(5); servo3.attach(6); servo4.attach(7);
pinMode(dirPinVertical, OUTPUT); pinMode(stepPinVertical, OUTPUT);
pinMode(dirPinHorizontal, OUTPUT); pinMode(stepPinHorizontal, OUTPUT);
pinMode(coinDetector, INPUT);
// Pull-Ups für Buttons & Mikroschalter
pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP); pinMode(button4, INPUT_PULLUP);
pinMode(microSwitchV, INPUT_PULLUP); pinMode(microSwitchH, INPUT_PULLUP);
// Vertikale Startposition (oben)
digitalWrite(dirPinVertical, HIGH);
while (true) {
if (digitalRead(microSwitchV) == LOW) { moveUp(70); break; }
digitalWrite(stepPinVertical, HIGH); delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW); delayMicroseconds(300);
}
// Horizontale Startposition (links)
digitalWrite(dirPinHorizontal, LOW);
while (true) {
if (digitalRead(microSwitchH) == LOW) { moveLeft(350); break; }
digitalWrite(stepPinHorizontal, HIGH); delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW); delayMicroseconds(300);
}
}
void loop() {
lcd.clear(); lcd.setCursor(0,0); lcd.print("Insert a coin!");
while (true) { if (digitalRead(coinDetector) == LOW) break; }
delay(10);
lcd.clear(); lcd.setCursor(0,0); lcd.print("Select your item");
lcd.setCursor(0,1); lcd.print(" 1, 2, 3 or 4?");
while (true) {
if (digitalRead(button1) == LOW) { buttonPressed = 1; break; }
if (digitalRead(button2) == LOW) { buttonPressed = 2; break; }
if (digitalRead(button3) == LOW) { buttonPressed = 3; break; }
if (digitalRead(button4) == LOW) { buttonPressed = 4; break; }
}
lcd.clear(); lcd.setCursor(0,0); lcd.print("Delivering...");
switch (buttonPressed) {
case 1: // Position 1 (oben links)
moveUp(4900); delay(200); moveLeft(1700); delay(300);
servo1.writeMicroseconds(2000); delay(950); servo1.writeMicroseconds(1500); delay(500);
moveRight(1700); delay(200); moveDown(4900); break;
case 2: // Position 2 (oben rechts)
moveUp(4900); delay(200);
servo2.writeMicroseconds(2000); delay(950); servo2.writeMicroseconds(1500); delay(500);
moveDown(4900); break;
case 3: // Position 3 (unten links)
moveUp(2200); delay(200); moveLeft(1700); delay(300);
servo3.writeMicroseconds(2000); delay(950); servo3.writeMicroseconds(1500); delay(500);
moveRight(1700); delay(200); moveDown(2200); break;
case 4: // Position 4 (unten rechts)
moveUp(2200); delay(200);
servo4.writeMicroseconds(2000); delay(950); servo4.writeMicroseconds(1500); delay(500);
moveDown(2200); break;
}
lcd.clear(); lcd.setCursor(0,0); lcd.print("Item delivered!"); delay(2000);
}
// Benutzerdefinierte Funktionen für Schrittmotor-Bewegungen
void moveUp(int steps) {
digitalWrite(dirPinVertical, LOW);
for (int x=0; xCode-Erklärung
// Vertikale Startposition
digitalWrite(dirPinVertical, HIGH);
while (true) {
if (digitalRead(microSwitchV) == LOW) { moveUp(70); break; }
digitalWrite(stepPinVertical, HIGH); delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW); delayMicroseconds(300);
}
// Horizontale Startposition
digitalWrite(dirPinHorizontal, LOW);
while (true) {
if (digitalRead(microSwitchH) == LOW) { moveLeft(350); break; }
digitalWrite(stepPinHorizontal, HIGH); delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW); delayMicroseconds(300);
}while (true) {
if (digitalRead(coinDetector) == LOW) break;
}while (true) {
if (digitalRead(button1) == LOW) { buttonPressed=1; break; }
// ... button2,3,4 ...
}// Beispiel Case 1
moveUp(4900); delay(200); moveLeft(1700); delay(300);
servo1.writeMicroseconds(2000); delay(950); servo1.writeMicroseconds(1500); delay(500);
moveRight(1700); delay(200); moveDown(4900);
Herstellungsprozess
- Automaten: Eine 36,6-Milliarden-Dollar-Industrie in den USA
- DIY Hausaufgaben-Schreibmaschine zu Hause bauen
- DIY Photoshop-Steuerkonsole mit Arduino Nano RP2040 bauen
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Ultraschall-Schwebegerät mit Arduino bauen – Akustische Levitation Schritt für Schritt
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- DIY Infrarot-Herzschlag-Sensor mit Arduino: Schritt-für-Schritt-Anleitung
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- DIY-Voltmeter mit Arduino und Nokia 5110 Display – Schritt-für-Schritt-Anleitung
- Digitale Uhr mit Arduino & Endlicher Automat (State Machine)