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 |
|
1 |
Prototyping Shield, alternativ Mini Breadboard |
2 |
|
1 |
|
1 |
Taster (hier Arcade-Button mit LED) |
opt. |
|
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:
2 Kommentare
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
Sehr schönes und einfaches Projekt. Danke fürs teilen und die tolle Anleitung.