Halloween 2024 - Teil 1 - Der Süßigkeitenspender - AZ-Delivery

An Halloween nicht zuhause? Das kann böse enden. Es sei denn, man hat einen Bonbon- bzw. Süßigkeitenspender. Einen möglichen Wächter in der Box hatten wir in diesem Projekt vorgestellt.

Alles, was man benötigt, sind ein Mikrocontroller, LEDs und Taster sowie ein starker Servomotor, dazu etwas Bastelkram und Kreativität.

Hardware

1

Mikrocontroller Uno

1

Prototyping Shield, alternativ Mini Breadboard

2

RGB-LEDs

1

Servo mit Metallgetriebe MG90S,  MG995,  MG996R

1

Taster (hier Arcade-Button mit LED)

opt.

aktiver Summer (Buzzer)

Jumper-Kabel und Spannungsversorgung 4xAA-Batterie

ca. 1m

Kabelkanal 60x40mm aus dem Baumarkt, Klebeband


Hier zunächst das wichtigste Bauteil, der

Bonbonspender

Bonbon-Spender, Kabelkanal 60x40 mm, Servo-Arm verlängert mit Schrumpfschlauch

Im Internet hatte ich einen Bonbonspender mit Linearmotor und Teilen aus dem 3D-Drucker gesehen. Bei Linearmotor fiel mir meine Schrottsammlung mit alten CD/DVD-Laufwerken ein. Sowohl die Schublade, als auch der Lesekopf werden so bewegt. Also ein altes Laufwerk sezieren, war spannend, aber am Ende nicht für meinen Aufbau geeignet. Alternative ist ein Servomotor.

Leider nicht im Sortiment von AZ-Delivery ist der beleuchtete Taster, wie er in Arcade-Konsolen verwendet wird. Sie können natürlich auch andere Taster verwenden.

Meine Idee: Die Kinder drücken auf die rote Nase meines leicht gruseligen Clowngesichts, die roten Augen werden grün, nach 2,5 Sekunden blinken die Augen zweimal und der Servomotor rotiert um 90°, um eine kleine Bonbonpackung herauszuschieben. Das Bild können Sie malen, ausdrucken, oder wie ich als Patchwork zusammenkleben.



Der ganze Aufbau ist ja nicht für die Ewigkeit gedacht, deshalb befinden sich Elektronik und Batterien in einer Pappschachtel. 

Ich verwende RGB-LEDs mit gemeinsamer Kathode. Diese hat das längste Beinchen der RGB-LED, das einzelne Beinchen an einer Seite ist für den Rotanteil, die beiden Beinchen an der anderen Seite sind für grün und blau. Ich verwende die Pins des Mikrocontrollers Nr. 3 für rot, 4 für GND, 5 für grün und 6 für blau, um erstens optional die LEDs auch dimmen zu können (3, 5 und 6 haben PWM) und zweitens mit dem kurzzeitigen Setzen des Pins 4 auf HIGH sowohl das Augenzwinkern, als auch den optionalen Buzzer zu aktivieren. Die beiden „Augen“ (RGB-LEDs) habe ich parallel geschaltet. Man kann diese optional auch individuell ansteuern.

Uno mit Prototyping Shield. 2 RGB-LEDs, beleuchteter Taster (wie Spielekonsole)

Schaltplan

Sketch

(Download):

/* Halloween 2023
Clown face with RGBLEDs as eyes, big button with LED as nose
normal ops: red eyes and button with red LED,
when button is pressed, eyes turn green and LED in button off for 6 sec,
after 2.5 s, green eyes twinkle and buzzer sounds shortly two times
Servo will be activated to push out sweeties
by Bernd Albrecht 
for AZ-Delivery  */

#include <Servo.h>
Servo myservo;                // create servo object to control a servo
int pos = 0;                  // variable to store the servo position

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 8;      // the number of the pushbutton pin
const int redledPin =  3;     // the number of the red LED pin
const int gndledPin =  4;     // the number of the common ground LED pin
const int greenledPin =  5;   // the number of the green LED pin
const int blueledPin =  6;    // the number of the blue LED pin
const int ledPin =  9;        // the number of the LED pin in button

// variables will change:
int buttonState = 0;          // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(redledPin, OUTPUT);
  pinMode(gndledPin, OUTPUT);
  digitalWrite(gndledPin, LOW);    
  pinMode(greenledPin, OUTPUT);
  pinMode(blueledPin, OUTPUT);
  pinMode(ledPin, OUTPUT);  
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT_PULLUP);
  myservo.attach(10); // attaches the servo on Pin 10 to the servo object 
  myservo.write(130);
  delay(500);  
}  // end setup

void servoturn()   {    // adjust angles acc. to your setup
    for (pos = 130; pos >= 20; pos -= 1) {
    // goes from 120 degrees to 20 degrees
    // in steps of 1 degree
    Serial.println(pos);
    myservo.write(pos);
    delay(10);
    }
  for (pos = 20; pos <= 130; pos += 1) {
    // goes from 20 degrees to 120 degrees
    Serial.println(pos);  
    myservo.write(pos);
    delay(10);
    }
}  // end servoturn

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // check if the pushbutton is pressed. If it is, the buttonState is LOW:
  if (buttonState == LOW) {
    // turn green LED on, red LED off:
    digitalWrite(redledPin, LOW);
    digitalWrite(ledPin, LOW);    
    digitalWrite(greenledPin, HIGH);
    delay(2500);
    digitalWrite(gndledPin, HIGH);     
    delay(250); 
    digitalWrite(gndledPin, LOW); 
    delay(250);
    digitalWrite(gndledPin, HIGH);     
    delay(250);
    digitalWrite(gndledPin, LOW);
    servoturn();      
    delay(2500);        
  } else {
    // turn green LED off red LED on:
    digitalWrite(greenledPin, LOW);
    digitalWrite(ledPin, HIGH);      
    digitalWrite(redledPin, HIGH);    
  }
}  // end loop

Viel Spaß beim Bauen und Programmieren Ihrer Halloween-Überraschung, hier noch einmal die Links zu den Beiträgen der vergangenen Jahre:

Für arduinoSpecials

2 commenti

Michael Zint

Michael Zint

Hallo,
gute Idee, kommt genau richtig.
Ich hatte nur einige Probleme.
Der Sketch aus dem Downloadlink hat nicht funktioniert, ich habe mir dann den Sketch direkt von der Seite kopiert, das hat dann funktioniert aber erst als ich den Piezo aus dem Projekt rausgenommen habe warum auch immer.

Philipp

Philipp

Sehr schönes und einfaches Projekt. Danke fürs teilen und die tolle Anleitung.

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione