Halloween Dropping Spider




Introduction: Halloween Dropping Spider

My Halloween project consisted of a dropping spider triggered by a PIR motion sensor mounted on a Jackolantern and controlled by an arduino MCU. The motion sensor triggered a dropping spider, lights, sounds, low laying fog and finally a tweet with a picture attached (http://twitter.com/ioalerts).

Step 1: Parts List

These are the parts that I used for this project:

Step 2: Setup

It's all pretty basic. The arduino controlled the PIR motion sensor, the servos for dropping spider reel, Jackolantern LED lights, toy with scary sound, and the X10 CM17A (you can control as many x10 devices as you want). Then the arduino sent a serial message to the ioBridge serial API telling to GET the URL of my site. Then on my site I had a bash script with a while loop looking for request coming from the ioBridge server, then the script played a sound, grab the picture from a wireless webcam and post it to twitter via twitpic's API using cURL.

Step 3: Arduino Sketch

I used the X10Firecracker and the Servo libraries as well as the PIR sensor example from the arduino playground.

I used the 1K resistors on the led1Pin and led2Pin.
I used the 10K resistor on speakerPin going to 2N2222 transistor base, ground to the emitter. Then the emiter went to one side of the toy switch and the collector went to the other. This worked the 2N2222 transistor as a switch.

Look at the comments for the arduino pin wiring.

#include <X10Firecracker.h>
#include <Servo.h>

Servo myservo;             // New instance of Servo.h
int rtsPin = 2;            // RTS line for C17A - DB9 pin 7
int dtrPin = 3;            // DTR line for C17A - DB9 pin 4
// Connect DB9 pin 5 to ground.
int servoPin = 5;          // Servo used to lift the reel
int pirPin = 8;
int led1Pin = 10;          // Left led
int led2Pin = 11;          // Right led
int speakerPin = 12;       // Piezo buzzer speaker
int bitDelay = 1;          // mS delay between bits (1 mS OK)              
int ledStatus = 0;
int calibrationTime = 30;       
long unsigned int lowIn;      
long unsigned int pause = 5000;   
boolean lockLow = true;
boolean takeLowTime;   
int booCounter = 1;

void setup(){
  Serial.begin(9600);        // Start serial communication at 9600 baud rate
  pinMode(led1Pin, OUTPUT);  // Set led1Pin digital pin to output
  pinMode(led2Pin, OUTPUT);  // Set led1Pin digital pin to output
  pinMode(speakerPin, OUTPUT);// Set speakerPin digital pin to output
  pinMode(servoPin, OUTPUT);  // Set led1Pin digital pin to output
  myservo.attach(7);          // Atach servo on pin 7 for continous rotation servo
  X10.init(rtsPin, dtrPin, bitDelay);  // Initialize X10 C17A
  pinMode(pirPin, INPUT);
  digitalWrite(pirPin, LOW);
  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
  for(int i = 0; i < calibrationTime; i++){
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
void loop(){
  if(digitalRead(pirPin) == HIGH){
    Serial.print("[[[get|http://www.mysite.com/iobridge.html]]]"); // send serial message to iobridge.
    digitalWrite(led1Pin, HIGH);   //the led visualizes the sensors output pin state
    digitalWrite(led2Pin, HIGH);   //the led visualizes the sensors output pin state
      // makes sure we wait for a transition to LOW before any further output is made:
      lockLow = false; 
      // Release the reel by lifting servo.
      // Turn on toy with sound
      digitalWrite(speakerPin, HIGH);
      digitalWrite(speakerPin, LOW);
      // send x10 commands to trun off/on lights
      X10.sendCmd( hcC, 1, cmdOn );
      X10.sendCmd( hcC, 3, cmdOn );
      X10.sendCmd( hcC, 2, cmdOff );         
      int var = 0;
      // Activate the continous rotation servo.
      while(var < 800){
        delayMicroseconds(1200); // 1.5ms
        delay(20); // 20ms
    takeLowTime = true;

  if(digitalRead(pirPin) == LOW){ 
    if (ledStatus == 0){
      digitalWrite(led1Pin, HIGH);
      digitalWrite(led2Pin, LOW);
      ledStatus = 1;
      digitalWrite(led1Pin, LOW);
      digitalWrite(led2Pin, HIGH);
      ledStatus = 0;
      lowIn = millis();          //save the time of the transition from high to LOW
      takeLowTime = false;       //make sure this is only done at the start of a LOW phase
    //if the sensor is low for more than the given pause,
    //we assume that no more motion is going to happen
    if(!lockLow && millis() - lowIn > pause){ 
      //makes sure this block of code is only executed again after
      //a new motion sequence has been detected
      lockLow = true;                       
      // Send x10 commands
      X10.sendCmd( hcC, 1, cmdOff );
      X10.sendCmd( hcC, 3, cmdOff );
      X10.sendCmd( hcC, 2, cmdOn );

Step 4: Spider Reel

I end up using an VHS tape as a reel. I had to modify one servo to have continuous rotation. I used this guide to do so. The second servo just did the lift part.

Step 5: IoBridge Monitor

To establish the arduino-ioBridge serial communication I was planning to use an RF solution, but due to time constraints I had to use a long speaker cable to connect the arduino TX to ioBridge's Serial Board RX with one wire and the second for GND.

This is the bash script I used to trigger a sound as well as send a twitpic.

I used my mac os x Apache 2 server. I had to give write permissions to the access_log so I could append a bogus line as a "break".

while true;do
status=`tail -n 1 /private/var/log/apache2/access_log | cut -f 1 -d "-"`
if [ "$status" = " " ]
echo "Boo" >> /private/var/log/apache2/access_log
afplay /full/path/Halloween/werewolf.mp3
msg="Boo, victim $booCounter just got really scared"
sleep 5
curl -O http://www.mywebcam.com/IMAGE.JPG
curl -F media=@/full/path/Halloween/IMAGE.JPG -F "username=username" -F "password=password" -F "message=$msg" http://twitpic.com/api/uploadAndPost
let booCounter=booCounter+1

Step 6: Fog Machine X10 Control

I got this fog machine that comes with manual fog release switch.
 I just soldered the 125VAC/10A DPDT Plug-In Relay to the switch and connected to an X10 appliance module.

Step 7: Fog Chiller

I made this low laying fog cooler following this instructable.

Step 8: Raw Video

This video just shows the basic stuff without the sounds, fog and lights.

Halloween Contest

Third Prize in the
Halloween Contest

Arduino Contest

Participated in the
Arduino Contest

Be the First to Share


    • Recycled Speed Challenge

      Recycled Speed Challenge
    • Make it Move Contest 2020

      Make it Move Contest 2020
    • Build a Tool Contest

      Build a Tool Contest

    7 Discussions


    9 years ago on Introduction

    you need a warning sign that says warning spiders dropping(like a ped xing sign)


    10 years ago on Step 4

    could we have a little more information on how the servo turns the video tape? Is there a magnet glued inside the tape? or is it by pure friction?


    Reply 9 years ago on Introduction

    Is pure friction. I added a metal square bracket that fits right in the VHS tape.


    10 years ago on Introduction

    Step 7's link to the 'Fog Chiller' instructable is dead. Nice project though. Im thinking im going to do the dropping spider this year.


    Reply 9 years ago on Introduction

    I guess that Instructable no longer exist :( here a link to a similar one:


    10 years ago on Step 3

    As of Nov 6, there's a bug in displaying certain kinds of content, including code and some kinds of ASCII art.  We're working on fixing this.  You don't need to do anything; the text hasn't been deleted, it's just not displaying properly.

    Sorry about that and we'll have it back as soon as we can!


    10 years ago on Introduction

     I feel pretty sure I have trick or treated at your house once before. How very odd