DIY-Süßigkeiten-Spender mit Arduino: Intelligenter Snack-Automat bauen
Komponenten und Zubehör
| Arduino UNO | 1 |
| Servo (180° Drehwinkel) | 1 |
| LCD 16×2 mit I2C-Backpack (weiß auf blau) | 1 |
| Taster 12 mm (zwei Stück: „Wenig“ / „Viel“) | 2 |
| PHPoC Shield für Arduino (Netzwerk/Erweiterung) | 1 |
| IR-Hindernissensor (z. B. KY-032) | 1 |
| Netzschalter (Power Button) | 1 |
| Steckplatine | 1 |
Benötigte Werkzeuge
- Lötkolben
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt
Das Projekt
Ein einfacher Süßigkeiten-Spender, der per Tastendruck („Wenig“ oder „Viel“) eine Portion ausgibt. Ein IR-Sensor prüft, ob ein Becher unter dem Auswurf steht. Der Aufbau gliedert sich in fünf Schritte:
- Arduino Uno R3 vorbereiten
- Code schreiben und hochladen
- Gehäuse und Mechanik bauen
- Elektronik einbauen
- Testen und nutzen
Die Programmierung war der zeitaufwendigste Teil – als Einsteiger halfen Google und Freunde bei der Fehlersuche. Das Projekt ist eine vereinfachte Version von gatoninja236's Candy Dispenser mit Google Assistant.
Gehäuse und Mechanik bauen
Der Bau dauerte ca. einen Tag (inkl. Fehlversuchen). Material: Pappe und Acrylglas.
Schritt 1: Komponenten layouten
Alle Bauteile auf Pappe anordnen, farbige Kabel nutzen für Übersicht. Jedes Teil einzeln testen.
Schritt 2: Box zeichnen und zuschneiden
- Vorder- & Rückseite: 20 × 16 cm (Rückseite Acryl)
- Seiten: 12 × 16 cm
- Deckel & Boden: 20 × 12 cm
Schritt 3: Zusammenbau & Ausschnitte
Erst mit Klebeband fixieren, dann Ausschnitte sägen:
- LCD: 7,2 × 2,5 cm
- Taster: 1,2 × 1,2 cm
- Becher-Aufnahme: 9 × 12 cm (L×H), Tiefe 9 cm
- IR-Sensor-Öffnung nicht vergessen
Der Auswurf ist gestuft, damit Süßigkeiten nicht unkontrolliert herausfallen.
Schritt 4: Elektronik platzsparend verbauen
Steckplatine und Arduino hintereinander auf Acryl montieren.
Schritt 5: Komponenten einbauen
LCD und Taster zuerst verkabeln und in die Frontplatte einsetzen. Servo an der Auswurfklappe befestigen. Rückseitig Netzschalter für Batteriebetrieb anbringen.
Schritt 6: Fertiges Gerät
Alle Kabel ordnen, Gehäuse schließen – fertig!
Arduino-Code (Candy Dispenser.ino)
//------ BIBLIOTHEKEN -----
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
//------ KONFIGURATION -----
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C-Adresse 0x27
Servo myservo;
int pos = 90; // Servo-Startposition (Mitte)
const int buttonCLK = 7; // Taster „Wenig“ (im Uhrzeigersinn)
const int buttonAntiCLK = 6;// Taster „Viel“ (gegen Uhrzeigersinn)
const int avoidPin = 5; // IR-Sensor (LOW = Becher erkannt)
int set = 0; // 1 = wenig, 2 = viel
void setup() {
lcd.begin();
lcd.clear();
myservo.attach(9); // Servo an Pin 9
pinMode(buttonCLK, INPUT);
pinMode(buttonAntiCLK, INPUT);
pinMode(avoidPin, INPUT);
Serial.begin(9600);
lcd.backlight();
// Begrüßung
lcd.setCursor(3,0); lcd.print("Welcome to");
lcd.setCursor(3,1); lcd.print("Candy Land");
delay(2000);
lcd.clear();
lcd.setCursor(0,0); lcd.print("How much candy?");
lcd.setCursor(0,1); lcd.print("A Little A Lot");
delay(5000);
}
void loop() {
// Taster „Wenig“
if (digitalRead(buttonCLK) == HIGH) {
lcd.clear(); lcd.print("Please Place Cup");
delay(2000); lcd.clear();
set = 1;
}
// Taster „Viel“
if (digitalRead(buttonAntiCLK) == HIGH) {
lcd.clear(); lcd.print("Please Place Cup");
delay(2000); lcd.clear();
set = 2;
}
// Ausführung nach Bechererkennung
if (set == 1) IRCLK();
if (set == 2) IRAntiCLK();
}
// --- Servo-Funktionen ---
void TurnClockwise() {
Serial.println("Candy 1 Being Dispensed");
CandyText1();
for (pos = 90; pos < 180; pos += 1) {
myservo.write(pos);
delay(15);
}
if (pos == 180) {
delay(2000);
ThankYouText();
}
}
void TurnAntiClockwise() {
Serial.println("Candy 2 Being Dispensed");
CandyText2();
for (pos = 90; pos < 180; pos += 1) {
myservo.write(pos);
delay(20);
}
if (pos == 180) {
delay(3000);
ThankYouText();
}
}
// --- IR-Sensor Prüfung ---
void IRCLK() {
delay(1000);
bool avoidVal = digitalRead(avoidPin);
lcd.setCursor(0,0); lcd.print("Detecting Cup");
lcd.setCursor(0,14); lcd.print("...");
if (avoidVal == LOW) {
lcd.clear(); lcd.print("Cup Placed");
delay(2000);
TurnClockwise();
}
}
void IRAntiCLK() {
delay(1000);
bool avoidVal = digitalRead(avoidPin);
lcd.setCursor(0,0); lcd.print("Detecting Cup");
lcd.setCursor(0,14); lcd.print("...");
if (avoidVal == LOW) {
lcd.clear(); lcd.print("Cup Placed");
delay(2000);
TurnAntiClockwise();
}
}
// --- LCD-Texte ---
void CandyText1() {
lcd.clear();
lcd.setCursor(4,0); lcd.print("Pouring");
lcd.setCursor(1,1); lcd.print("Little Candy");
}
void CandyText2() {
lcd.clear();
lcd.setCursor(4,0); lcd.print("Pouring");
lcd.setCursor(3,1); lcd.print("Lot Candy");
}
void ThankYouText() {
lcd.clear();
lcd.setCursor(5,0); lcd.print("Thank");
lcd.setCursor(6,1); lcd.print("You");
delay(15);
software_Reset();
}
// Software-Reset (Neustart ohne Hardware-Reset)
void software_Reset() {
asm volatile ("jmp 0");
}
Schaltplan
Der Verdrahtungsplan zeigt die farblich codierten Verbindungen. Folgen Sie den Kabeln von Ende zu Ende.
Herstellungsprozess
- Zuckerstangen: Geschichte, Herstellung und die süße Wissenschaft hinter dem klassischen Weihnachtsgebäck
- Candy Corn: Von der Tradition zur modernen Produktion
- Jawbreaker: Geschichte, Zutaten und Handwerk eines klassischen Hartbonbons
- Zuckerwatte: Vom Klassiker zur modernen Produktionstechnologie
- Die süße Wissenschaft von Gummibonbons: Von der Geschichte zur modernen Produktion
- M&M's®: Von der Erfindung zur modernen Produktion
- Arduino-basiertes Schalter- & LED-Panel für Microsoft Flight Simulator 2020
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung