Arduino: Halloween Kürbis Projekt

Passend zur Halloween-Zeit, möchte ich ein Projekt mit dem Arduino und einem gedruckten Halloween Kürbis präsentieren.

Arduino: Halloween Kürbis Projekt
Arduino: Halloween Kürbis Projekt

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

Schaltung – Halloween Kürbiskopf

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();
}

Video

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert