Smoking No-Chemical Pumpkin
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.
Parts
Parts
- Pond Mist Maker - these are ultrasonic devices that make water into mist for ponds.
- A 5v PC fan. I used 50mm ones, 40mm ones and 30mm ones. The 30mm one was very easy to use.
- Arduino Uno - there are official ones, clones like this one, and even cheaper clones on AliExpress.
- LED bar - these are 8 WS2812 (WS2811 controller with a 5050 RGB LED, also WS2812b is a newer one) LEDs on a small board, and is easy to solder to and bright enough for a jack-o-lantern. Note: After a year, I found that the bars became corroded since they are unprotected in that mist. I used some spare silicone jacket material from a waterproof strip of LEDs like this, and that keeps them dry. Those LEDs would be a fine replacement for the bars.
- One 270 ohm resistor - I used a 1K ohm resistor on the 50mm fan, but for the smaller ones, the lower value works better.
- One small NPN transistor 2n2222, 2N3904
- servo wire - I like the flexibility of this wire, but really any wire is good. I like the Super-Duty Twisted (Hitec) wire at Servo City, or similar wire.
- Jumper wires like these, or you can use 22 gauge wire.
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!
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.
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.
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