Passend zur Halloween-Zeit, möchte ich ein Projekt mit dem Arduino und einem gedruckten Halloween Kürbis präsentieren.
Den Kopf habe ich mit transparentem Filament gedruckt. Da ich ultra, helle LEDs verwenden möchte, schleife ich diesen etwas an, so dass es später etwas diffuser wirkt.
benötigte Bauteile
Für dieses Projekt werden einige Bauteile benötigt, welche ich nachfolgend auflisten möchte:
elektronische Bauteile
- 1x Arduino Nano V3.0,
- 1x Breadbord, 170 Pin,
- 1x Ultraschallsensor HC-SR04,
- 1x LED, 5 mm, ultra Hell,
- 1x ISD1820 Bausatz,
- 1x 220 Ohm Widerstand,
- 1x Schalter,
- 1x Batteriefach (zbsp. für 4x AAA Batterien),
- 1x 9g Servo,
- 14x Breadboardkabel, 20 cm, männlich – weiblich
Zusätzlich wird noch ein Gehäuse benötigt und natürlich der Kürbiskopf.
Ich habe diese Vorlage von Thingiverse.com heruntergeladen und gedruckt.
Werkzeuge
Um das Projekt aufzubauen, habe ich folgende Werkzeuge verwendet:
- Bohrmaschine (vorzugsweise Akkubohrer),
- diverse Holzbohrer
- 15 mm,
- 12 mm,
- 10 mm
- 5 mm
- Laubsäge
- Lötkolben
- hitzebeständige Unterlage
- Lötfett,
- Lötzinn
Aufbau & Schaltung
Der gesamte Aufbau soll später in ein kleines Gehäuse passen, daher sieht es etwas nach Spagetti aus, wenn man den Deckel öffnet 🙂
Schaltung
Programmierung
#include <Servo.h> int servomotor = 5; int sound = 4; int led = 2; int trigger = 7; int echo = 6; Servo servo; int position = 0; const int waitTime = 15; const int PAUSE = 5000; long lastActionTime = -1; void setup() { Serial.begin(9600); pinMode(servomotor, OUTPUT); pinMode(sound, OUTPUT); pinMode(led, OUTPUT); pinMode(trigger, OUTPUT); pinMode(echo, INPUT); servo.attach(servomotor); } void loop() { int lengthEcho = readEcho(); long currentMillis = millis(); if (lastActionTime < (currentMillis - PAUSE)) { lastActionTime = currentMillis; Serial.println(lengthEcho); if (lengthEcho < 60) { Serial.println("loop"); digitalWrite(sound, HIGH); delay(500); digitalWrite(sound, LOW); movePumpkin(); } } } int readEcho(){ digitalWrite(trigger, LOW); delayMicroseconds(2); digitalWrite(trigger, HIGH); delayMicroseconds(10); digitalWrite(trigger, LOW); int cm = pulseIn(echo, HIGH) / 58.0; return (int(cm * 100.0)) / 100.0; } void movePumpkin() { boolean ledActive = false; Serial.println("moveP"); for (position = 0; position < 90; position++) { servo.write(position); ledActive = !ledActive; digitalWrite(led, ledActive?HIGH:LOW); delay(waitTime); } for (position = 90; position >= 1; position--) { servo.write(position); ledActive = !ledActive; digitalWrite(led, ledActive?HIGH:LOW); delay(waitTime); } lastActionTime = millis(); }