Arduino: Halloweenkürbis Projekt

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

Halloween Kürbiskopf
Halloween Kürbiskopf

Den Kopf habe ich mit transparentem Filament gedruckt. Da ich ultra, helle LEDs verwenden möchte, schleife ich diesen etwas an so das 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 Ultraschall Sensor HC-SR04,
  • 1x LED, 5mm, ultra Hell,
  • 1x ISD1820 Bausatz,
  • 1x 220 Ohm Widerstand,
  • 1x Schalter,
  • 1x Batteriefach (zbsp. für 4x AAA Batterien),
  • 1x 9g Servo,
  • 14x Breadboardkabel, 20cm, 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
    • 15mm,
    • 12mm,
    • 10mm
    • 5mm
  • 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 Spagettis aus wenn man den Deckel öffnet 🙂

Schaltung

Schaltung - Halloween Kürbiskopf
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

 

Schreibe einen Kommentar

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