Introduction: Smoking No-Chemical Pumpkin

About: A Maker since childhood with all the classic symptoms, a robot builder, and an Internet software CTO/Tech Product Manager.

There are so many great Arduino controlled pumpkins / jack-o-lanterns! This is another one, with a digital LED flickering candle light and water vapor as "smoke" so no chemicals! Only water!

The "smoke" comes from a pond mist maker, which is an ultrasonic disc. This makes great mist, but it tends to lay low and sit there. For a jack-o-lantern, you want the mist to come out the front. So, adding a small PC fan helps blow it out. An 80cm fan on full, though, blows too fast. So, Arduino to the rescue! Using a transistor and the PWM output, you can slow the fan down to the right speed for the mist maker and pumpkin.

This Instructable also uses some digital LEDs to make a flickering candle light effect. See the other Instructable for details on that. Any other colors could be easily programmed! For this project, the fan is running continuously, but you could turn it on and off very easily, perhaps on cue from a motion sensor.

I have also tried some 30mm and 40mm fans, and those seem to work without the transistor and motor control - just hook them right up to the 5v output on the Arduino. You may want to try that first for the smaller fans since it also depends a bit on the pumpkin.

This project will work on plastic or real pumpkins - you just need some room at the bottom of the pumpkin for the water.

Step 1: Parts

Parts

For Plastic Pumpkins

  • Plastic treat holder pumpkin like this, but I found them for less at a local store.
  • Foam core board
  • Orange spray paint like this - less expensive at the local home store.

Or, you can use a hollow foam pumpkin without the foam core. Or, real pumpkins!

Step 2: Wiring

The fan and LEDs do not draw much power (less than 1/2 amp each), so the project can be powered from the Arduino 5v regulator.

A small transistor is used to drive the larger 50mm fans motor since the current draw would be too high for an Ardunio output pin. For the smaller fans on continuously, you may be able to hook them up to the 5v output on the Arduino directly. If they are too fast (blowing the mist out too fast), or if you want to turn them on and off, then use a transistor with these too.

The Adafruit Learning System has a great article on driving small motors (our fan) from an Arduino. The circuit and concept are there.

The LEDs+ and Fan+ are connected to the 5v pin on the Arduino board. The transistor emitter and LEDs Ground are connected to the Ground pin on the Arduino. The base of the transistor is connected to the Arduino Digital 3 pin with a 270 ohm resistor to reduce the current draw (the pictures show a 1K ohm, but 270 is better for the smaller fans). The LED digital in pin is connected to digital pin 6 on the Arduino. The collector of the transistor is connected to the fan- wire.

Note: After a year, I found that the moisture corroded the unprotected LEDs. So, I had some silicone jacket and sealed them in that with some silicone RTV caulk. The last two pictures show this.

Step 3: Pumpkin Setup

For testing, I used plastic pumpkins from the local store. One was a trick-or-treating candy holding pumpkin, and I just cut out the eyes, nose, and mouth. Another was a large foam one. This will also work on real jack-o-lanterns.

The pumpkin needs to have water in the bottom, and needs to cover the pond mister. The wire for that can run out the back. The LEDs should be in the pumpkin somewhere - I faced them toward the back to get reflected light. The fan goes somewhere on the top or back of the pumpkin.

For the plastic treat pumpkins, I removed that handle, and cut a 5" & 5.25" foam core circle. The smaller one fits inside the top, and the bigger one keeps it from falling in. I cut a circle for the fan in the smaller (lower) one, and a square for the fan housing on the larger (upper one). I used hot melt glue to glue them together, lining up the holes. For the 50mm fan, I made two top pieces since the fan was thicker.

I spray-painted these tops orange, and glued a wine cork painted green on the top to make a stem. I tried painting the 50mm fan too - seems to work, and the cork stem was glued right to the fan spindle.

For a real pumpkin, you could cut a hole in the back for the fan and wires.

Step 4: Arduino Code

The previous Instructable covered the LED coding. For the 30mm and 40mm fans, I had them on continuously, and did not use the Arduino to drive them. For the 50mm fan, I used the PWM output feature of the Arduino digital pins (AnalogWrite) to slow it down enough to make the mist flow look good. If it's too slow, the fan will not spin, so a little trial and error was required to get the output value right.

/*****************************************************************************
 *
 *  flame animation and smoke control for 
 *    - neopioxels (WS2812b) connected to pin 6
 *    - transistior connectedto digitla pin 3
 *  for pumpkin / jack-o-lanterns with ultrasonic smoke from a pond mister
 *  
 *  10/28/2015 Carl F. Sutter
 *  
  *******************************************************************************/

#include <Adafruit_NeoPixel.h>

#define LED_PIN 6
#define NUMPIXELS 8
#define MOTOR_PIN 3

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);


void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  randomSeed(analogRead(0));
  pinMode(MOTOR_PIN, OUTPUT);
} // setup


void loop() {
  byte brightness = random(100,255);
  uint32_t color = strip.Color(255, random(50,80), 0);
  uint16_t i;

  analogWrite(MOTOR_PIN, 128);  // speed is 0-255, and set by trial and error

  for(i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, color);
  }
  strip.setBrightness(brightness);
  strip.show();
  delay(random(20,300));
} // loop

Make It Glow! Contest

Participated in the
Make It Glow! Contest

Pumpkin Challenge

Participated in the
Pumpkin Challenge

Halloween Decor Contest 2015

Participated in the
Halloween Decor Contest 2015