Jimmy’s Final Project – Pomodoro Timer Vase

Link to Instructables

A desk object aesthetically pleasing, and also keeps you focused.

This project turns a classic Pomodoro timer into a sculptural 3D-printed vase. Instead of a plastic kitchen timer or another phone app, you get a quiet mechanical bloom that slowly rises as your focus session progresses. When time is up, the bloom reaches full height and plays a soft chime.

The vase is designed as a minimal, geometric object: a faceted base and three stacked modular rings. Textured with vertical ribs that hide 3D-printing layer lines. At the center is a straight inner core column that drives the moving bloomat the top.

Functionally, it works as a 45-minute Pomodoro timer (you can change the duration in the code). When you plug it in, you can choose between:

Timer Mode (Focus Mode) – the bloom rises slowly over time as you focus.

Display Mode – the bloom extends fully and stays there as a decorative object.

When the timer ends, the vase chimes and the bloom stays fully extended. If you pick up the vase and put it down again, the timer automatically resets and starts a new session. A small mode toggle switch on the bottom switches between Timer and Display modes with different sound cues.

Continue reading “Jimmy’s Final Project – Pomodoro Timer Vase”

Jimmy’s Final Project Draft

Google Doc Outline:

https://docs.google.com/document/d/1fxv2JV_zV7vKjO96By5DWbdDSNjx4SEfDw-MUxiPepE/edit?usp=sharing

Instructables Profile:

https://www.instructables.com/member/jimmy17pjm/?publicPreview=true

Project Video Storyboard

  1. Static shot of the Bloom Timer Vase sits off-center.
  2. Close-up of the vase. Seeing the 3D-printed texture clearly. The flower is currently fully retracted inside.
  3. User enters frame, sits at the desk, places a notebook and phone down. Their hand adjusts the vase slightly, bringing it into their “working zone.”
  4. Over-the-shoulder shot: the user simply places their phone down near the vase, then cut to the flower just beginning to rise a little.
  5. A sequence showing time passing while the flower grows.
  6. Hero close-up of the flower fully extended, petals open. The user’s hands pause on the keyboard and then relax.
  7. The user gently lifts the vase off the desk. As soon as it leaves the surface, the flower smoothly retracts back into the vase.
  8. The user sets the vase down again. The top is now flat with flower hidden. User smiles slightly or takes a breath, ready for the next block.
  9. (Display Mode Button)Close-up of a discreet button on the vase or nearby base. The user presses it. Cut to shot of flower rising smoothly to full height and staying there.
  10. Stylized “beauty shots” of the fully bloomed flower in Display Mode, in different contexts.
  11. Quick peek inside: a semi-transparent CGI overlay showing the servo and linkage moving as the flower rises.

Jimmy’s Final Halloween Costume

The Plague Doctor

My Halloween costume is composed of three main parts: a 3D-printed white PLA crow mask, a black cape with a hood, and a set of three mechanical finger claws. The mask takes most of the technical work. I first used the Polycam app to scan my head and modeled the crow form around it so it would fit perfectly.

Each eye has a 12-pixel NeoPixel ring, friction-fit into an indent with wiring channels and openings for two frosted acrylic donut-shaped plates that diffuse the light. A small side button placed near my temple switches between two light patterns—a loading animation and a red glowing one.

All electronics sit inside the mask, with the wiring taped neatly along the inner surface. Felt pads and EVA foam along the edges add comfort where it touches the face, and an elastic headband—stitched through pre-modeled holes—keeps it secure. The circuit board itself is sewn to the back of the band, making everything self-contained.

The cape is store-bought, simple, and helps emphasize the mysterious silhouette of the mask.
The finger claws are fully mechanical: each uses a parallelogram linkage system that extends or retracts the claw as I curl and straighten my fingers, creating a kind of living, mechanical gesture.

Wearing it feels quite straightforward. The claws are pretty identical, so I marked them inside to avoid confusion when putting them on. The mask, however, demands more patience. Since the wiring runs along the same path as the elastic band, the band stretches but the wires don’t, which sometimes causes them to curl up or catch slightly in my hair. The visibility is also limited—mainly because the eye holes are thickened to fit both the LED rings and the acrylic diffusers—so it feels like looking through a narrow tunnel of light.

Through this project, I get to integrate electronics with 3D-printed structures for the first time—how to design around wires, embed boards, and plan assembly digitally before making it physical. I also learned about comfort, weight, and cable management that only appear when you actually wear what you’ve built. If I were to do it again, I would refine the eye geometry to widen the field of view and create more space between the LED ring and the acrylic to enhance the diffusion effect. I would also add more internal padding, especially near the forehead, to keep the wires from pressing awkwardly against the skin.

Material List

  1. 3D pRinter (https://us.store.bambulab.com/products/a1?from=navigation)
  2. PLA filament (https://us.store.bambulab.com/products/pla-matte)
  3. Neo-Pixel Ring *2 (https://www.adafruit.com/product/1643)
  4. Electrical Tape (https://www.amazon.com/Avery-Dennison-Electrical-Commercial-Insulating/dp/B0DQKJV3J4/ref=sr_1_1_sspa?crid=2EQY92WV5OXXZ&dib=eyJ2IjoiMSJ9.lNltt7cumfXsZCkJlMxFYYmx3VDRxwNZBWDZ6mlwLvOONifJA0cbp78rUD3IUGnUBvTgeALCPv1XYlRk49YMiQcDfasuAocTQKEx0ukAZe4KMaFOgrWSC-I5Hq4JO5K8iaXtCNuLT73f79heuIttAIeKtHWw0fzF2GeUK58IKy_nhB-tkTxc7c1VouFUgAj6QsIeQWvo1lfSxh4sSySpATnl2hiqPk1k5m_RY5Fg91ojRj3V-GyE6N9Kb6xyM4gzwqog3yt4mFePmF_iSGklsKl0BiICiTtYsUYw01d_A30.XL2Oq-d_vKzHNwKh_-I81-xds2quiTYmpFHD4Gb_WYk&dib_tag=se&keywords=electrical%2Btape&qid=1762299049&s=industrial&sprefix=electrical%2Btap%2Cindustrial%2C263&sr=1-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&th=1)
  5. Wires (https://www.amazon.com/TUOFENG-Hookup-Wires-6-Different-Colored/dp/B07TX6BX47/ref=sr_1_1?crid=KVXX8XCZZ5NZ&dib=eyJ2IjoiMSJ9.7QKOdOh0TX6RJzvhBg5Wt1hMobRmxA8YSVMtDCQYCIWI36E-BTkWi1kmCKoq1bvwgGOWhBP7xjQOfb1znb9dQG8fNdqo_7EdUEhqQcJYXGXaPngwFeiIRaaDJqGL22EBsCL5HPtJkmogqW8nxikbR8RWb2fhLNQ1Ed6hr-aQEMO7HF27m281Ci0bJsmk2aptTEuFhorgAikTcjRD_azFEjU_Q0_Pj-SqXF8GHJeWxYEaMiZGTUnc1Fjd2JtemYwE-XwELjimlfLSCtwjFk5NE44CRLG4MdSieIm3UtuSO4I.TIY2x1I6rTAkLZ9KPQinD521UtCnT1EoPmRl5swzVQ8&dib_tag=se&keywords=wire&qid=1762299071&s=industrial&sprefix=wi%2Cindustrial%2C355&sr=1-1&th=1)
  6. EVA Foam 4mm (https://www.amazon.com/Premium-Cosplay-Density-Projects-MEARCOOH/dp/B0BC8RN251/ref=sr_1_1_sspa?crid=OG4F3FRY7IT6&dib=eyJ2IjoiMSJ9.oPwXWY4rs4WfXiN6Et0T3JOS4TOqEbsVcFm2sRnqlYmqM5P59vwxAtHcVN488Osa8uvGeV5EbCFbyara6aSjwubKr3pnUazGggwwY1xf2cLWo2Uymwpj7HV4lIfwh0fLrTBF0TNdTa32R0av8xp_AX2_dvvUmE3kZpkZ4RjcI7se38bam_a-scvIHRL4ZtJSUJ_mfe9-8mNvsRj-DG6mw5x4uMSJ2D2KbgSxcKpQL9Ujy29yiW7jzMqWmgRTnrMKVB8rruPGn5h-4F3N8cUmgWDRETmiJsUgBhw-BaWLw6w.Uqkh7_Iq5tuSXMyyYD7P3O6MwU1GlZdZ–vCyWuuAQ8&dib_tag=se&keywords=eva%2Bfoam&qid=1762298981&s=industrial&sprefix=eva%2Bfoam%2Cindustrial%2C204&sr=1-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&th=1)
  7. Frosted Acrylic (https://www.amazon.com/dp/B07R9YJ29T?ref=ppx_yo2ov_dt_b_fed_asin_title)
  8. Cape (https://www.amazon.com/dp/B0DSRPDYDZ?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1)
  9. GEMMA M0 (https://www.adafruit.com/product/3501)

Circuit Diagram

Arduino code

#include <Adafruit_NeoPixel.h>

// Pin definitions
#define BUTTON_PIN 0
#define RING1_PIN 1
#define RING2_PIN 2
#define NUM_LEDS 12

Adafruit_NeoPixel ring1 = Adafruit_NeoPixel(NUM_LEDS, RING1_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel ring2 = Adafruit_NeoPixel(NUM_LEDS, RING2_PIN, NEO_GRB + NEO_KHZ800);

int currentMode = 0;
int buttonState = 0;
int lastButtonState = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

int loadingPos = 0;
unsigned long lastLoadingUpdate = 0;
int loadingDelay = 100;

bool oddLedsOn = true;
unsigned long lastAlternateUpdate = 0;
int alternateDelay = 250;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  
  ring1.begin();
  ring2.begin();
  ring1.show();
  ring2.show();
  ring1.setBrightness(50);
  ring2.setBrightness(50);
}

void loop() {
  handleButton();
  
  if (currentMode == 0) {
    loadingPattern();
  } else {
    alternatingRedPattern();
  }
}

void handleButton() {
  int reading = digitalRead(BUTTON_PIN);
  
  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      
      if (buttonState == LOW) {
        currentMode = 1 - currentMode;
        
        clearRings();
      }
    }
  }
  
  lastButtonState = reading;
}

void loadingPattern() {
  if (millis() - lastLoadingUpdate > loadingDelay) {
    lastLoadingUpdate = millis();
    
    for (int i = 0; i < NUM_LEDS; i++) {
      if (i == loadingPos || i == (loadingPos + 1) % NUM_LEDS) {
        ring1.setPixelColor(i, ring1.Color(0, 0, 0));
      } else {
        ring1.setPixelColor(i, ring1.Color(255, 255, 255));
      }
    }
    
    for (int i = 0; i < NUM_LEDS; i++) {
      int mirrorPos = (NUM_LEDS - loadingPos) % NUM_LEDS;
      if (i == mirrorPos || i == (mirrorPos + 1) % NUM_LEDS) {
        ring2.setPixelColor(i, ring2.Color(0, 0, 0));
      } else {
        ring2.setPixelColor(i, ring2.Color(255, 255, 255)); 
      }
    }
    
    ring1.show();
    ring2.show();
    
    loadingPos = (loadingPos + 1) % NUM_LEDS;
  }
}

void alternatingRedPattern() {
  if (millis() - lastAlternateUpdate > alternateDelay) {
    lastAlternateUpdate = millis();
    
    oddLedsOn = !oddLedsOn;
    
    for (int i = 0; i < NUM_LEDS; i++) {
      if ((i % 2 == 0 && oddLedsOn) || (i % 2 == 1 && !oddLedsOn)) {
        ring1.setPixelColor(i, ring1.Color(255, 0, 0));
        ring2.setPixelColor(i, ring2.Color(255, 0, 0));
      } else {
        ring1.setPixelColor(i, ring1.Color(0, 0, 0));
        ring2.setPixelColor(i, ring2.Color(0, 0, 0));
      }
    }
    
    ring1.show();
    ring2.show();
  }
}

void clearRings() {
  for (int i = 0; i < NUM_LEDS; i++) {
    ring1.setPixelColor(i, ring1.Color(0, 0, 0));
    ring2.setPixelColor(i, ring2.Color(0, 0, 0));
  }
  ring1.show();
  ring2.show();
}

Jimmy NeoPixels and Halloween kickoff

Arduino circuit(s)

Halloween Costume Ideas


Illuminated Crow Mask

This project is a wearable mask inspired by the traditional plague doctor’s mask, reimagined with crow-like aesthetics. The mask features two hollow eye cutouts, each surrounded by a circular NeoPixel ring for illumination. It is worn with a large black cape and secured to the head using an elastic band. A rechargeable battery, not included in the shopping list, is attached at the back of the head to power the lighting elements.

  • Black or matte EVA foam sheets
  • PLA
  • 2 x Circular NeoPixel rings
  • Elastic headband
  • Hook-and-loop tape or plastic clips (optional for extra securing)
  • Wires
  • Heat shrink tubing
  • White spray paint or acrylic paint
  • Large black cape


Transformable Light Blade

This project is a hand-held, transformable weapon that begins as a compact circular form and expands into a linear blade shape. The structure consists of interlinked segments, each embedded with a segment of NeoPixel strip. Wires are routed through the connecting joints to a central handle, which houses the on/off control and connects to a rechargeable battery located within or near the grip.

  • EVA foam
  • PLA
  • Hinges
  • NeoPixel strip
  • Wires
  • Small button or switch
  • Heat shrink tubing
  • Super glue or epoxy for joints


Reactive Light Claw

This project is a wearable glove-based accessory that features five claw-like extensions, each equipped with NeoPixel lighting. The claws extend outward in response to finger bending, creating a dynamic mechanical and visual effect. Each claw changes color upon activation, powered by a concealed rechargeable battery not included in the shopping list.

  • PLA
  • Elastic fabric glove base
  • NeoPixel strips
  • Wire
  • Heat shrink tubing
  • Hot glue or epoxy

Jimmy’s Plush Night Light

GlowClam – Project Description

GlowClam is a plush night light designed to bring peace and comfort to users inspired by my own experience of falling asleep to the sound of ocean.
It features a semi-rigid shell with smooth fabric and a more plushy and soft interior with soft lighting compared to the peal that sits on top of it which is the main light source. The different tactile and the partially hidden pearl encourages user to play with it. And feel the change of luminance as the shell open and close.
GlowClam is designed for anyone who seeks a sense of peace and playfulness before bed. It encourages a bedtime ritual that feels safe and personal.

Continue reading “Jimmy’s Plush Night Light”

Jimmy’s Plush Night Light Proposal

Candle Light

I’ve always loved the warm, dynamic glow of candlelight—especially how it softens a space and creates a sense of calm that artificial lighting often can’t replicate. But placing a real candle beside the bed is obviously a fire hazard, and electric candles rarely capture that same cozy feeling. So I imagined a plush nightlight that mimics the softness and mood of a candle in a safer, more comforting form.

The design consists of a cylindrical white base made of fabric and polyfill, with a red-orange droplet sewn on top to represent the flame. Inside the droplet is a red LED light, creating a soft internal glow. This design is for people who crave a soothing bedtime atmosphere—whether kids needing gentle light to fall asleep or adults who want that candle-like coziness without the risk. It’s a plush that feels safe, warm, and slightly magical, just like a flame you can hold.

GlowClam

I’ve always found the sound and imagery of the ocean calming—something about the rhythm of waves and the hidden beauty beneath the surface helps me relax, especially before sleep. That led me to the idea of a glowing clam: a soft, plush object that opens to reveal a glowing, cloud-like center.

The outer shell is made of fabric wrapped around two 3D-printed forms, giving it a stable, structured feel, while the interior is filled with polyfill and soft blue lights to mimic a glowing sea pearl or bioluminescent sea life. The clam opens and closes, making the action of lighting it up feel a bit magical—like revealing a hidden treasure. I’m calling it the GlowClam for now, though I’m open to better names! This design is meant for anyone who finds peace in ocean themes or enjoys a bit of interactive play in their bedtime routine. It’s a light you gently “open” to find calm, inspired by the sea.

SipralLume

Falling asleep in the dark can feel unsettling, especially when there’s nothing to anchor your focus. I’ve always loved looking at the stars or imagining galaxies as a way to mentally drift into sleep—so I designed a plush nightlight inspired by a spiral galaxy. I’m calling it SpiraLume.

Its form spirals outward from a wide, bright center into a narrowing, dimmer outer edge. Scattered white LED lights are embedded throughout, with their brightness fading as they approach the ends of the spiral, just like distant stars fading into the night. I also wanted to explore more sculptural plush forms that play with asymmetry and motion—something visually intriguing even when it’s off. This piece is for users who need just a soft visual presence in the dark, or who enjoy imaginative shapes that invite storytelling or cosmic wonder as part of a bedtime ritual.

Prototypes

Plush Star

Green LED

Lightbulb Teardown

Parts Overview

  1. Outer Shade
    Material: Polycarbonate plastic
    Function: Acts as a diffuser for the LEDs (3.)
    Manufacturing Technique: Injection molding
  2. Central Housing
    Material: Polybutylene terephthalate
    Function: Holds all internal components (3., 5., 6., 7., 8., 9.) and provides insulation and structural support between the hot electronics and the metal base (4.)
    Manufacturing Technique: Injection molding
  3. Flat LED Panel
    Material:
    Substrate: Aluminum metal-core printed circuit board
    LEDs: Semiconductor chips (gallium nitride, GaN) mounted in epoxy or silicone encapsulants
    Function:
    Substrate: Spreads heat away from the LEDs to maintain efficiency and lifespan
    LEDs: Generate light
    Manufacturing Technique: Metal-core PCB fabrication, surface-mount technology (SMT), reflow soldering
  4. Metal Screw Base
    Material: Aluminum
    Function: The threaded part connects mechanically to the socket’s neutral line, and the bottom tip contact connects electrically to the live line.
    Manufacturing Technique: Cold heading, thread rolling, stamping, nickel plating
  5. Circuit Board (Labeled E64353)
    Material: FR-4 fiberglass PCB with copper traces
    Function: Holds all the electronic components (6., 7., 8.) in place and provides electrical pathways through the copper traces that connect components together
    Manufacturing Technique: Laminating, copper cladding, photolithography and etching, solder mask application, silkscreen printing
  6. Inductor
    Material: Copper wire, ferrite core, plastic insulation
    Function: Filters electrical noise, smooths current, and improves efficiency
    Manufacturing Technique: Wire drawing, encapsulation
  7. Bridge Rectifier
    Material: Silicon semiconductor encased in epoxy resin
    Function: Converts high-voltage AC (120/230 V) into low-voltage DC current suitable for the LEDs
    Manufacturing Technique: Die fabrication
  8. Electrolytic Capacitor
    Material: Aluminum can, electrolyte inside, plastic sleeve
    Function: Stores and releases energy, stabilizes DC voltage, and reduces flicker in the LED output
    Manufacturing Technique: Foil etching and forming, winding, can sealing
  9. Two Screws
    Material: Steel
    Function: Secure the LED board to the central housing
    Manufacturing Technique: Cold heading, thread rolling, electroplating

Dissassemble Process

  1. Shade Removal
    • The outer diffuser shade was detached from the housing by carefully bending and pulling it by hand.
    • Since the parts were friction-fit and bonded with a rubber-like adhesive, removal caused minor cracking and shattering of the plastic.
  1. Unscrewing the Fasteners
    • A screwdriver was used to remove the two screws securing the LED panel to the housing.
  1. LED Panel Removal
    • Pliers were inserted into the screw holes on the LED panel to grip, peel, and pull the panel away.
    • The panel was also partially glued to the housing, requiring additional force to separate it.
  1. Metal Base Removal
    • A utility knife was tapped along the edge of the steel screw base to gradually break the seal.
    • Once loosened, the steel shell was peeled back and separated from the plastic housing.
  1. Circuit Board Removal
    • Pliers were used to extract the driver PCB, which was loosely friction-fit inside the central housing.
  1. Electronic Component Removal
    • Pliers were also employed to detach the remaining electronic components from the PCB.

Interesting Takeaways

  1. Slotted Plastic Housing for Circuit Board Alignment
    The central plastic housing features tapered slots that transition from larger openings to narrower channels. This geometry guides the circuit board into position during assembly while ensuring that the board is securely held in place by friction fit. This approach reduces the need for additional fasteners, simplifying assembly and lowering manufacturing costs, also ensuring adequate retention during the lightbulb’s operational lifespan.
  1. Use of a Metal Screw Base with Crimped Attachment
    Another notable design choice is the crimped interface between the metal screw base and the plastic housing. Instead of adhesives or screws, the base is mechanically deformed around the housing to create a strong, permanent connection. This ensures mechanical durability and also streamlines high-volume manufacturing, minimizing part count and assembly time.

Class Introduction – Jimmy



Hi everyone! I’m Junming Pu — but feel free to call me Jimmy. I’m from China and recently graduated from Pratt Institute with a degree in Industrial Design. Before coming to PoD, I was working on projects that ranged from sustainable furniture to educational toys and interactive installations, often blending digital tools with physical making.

I love making things that are both thoughtful and playful — whether it’s transforming waste materials into objects, building speculative toys about climate change, or designing systems that guide user behavior in smarter ways. I enjoy prototyping with 3D printing, laser cutting, and cardboard (a lot of cardboard). Outside of design, you’ll find me sketching in museums, tweaking my photography setup, or trying strange ice cream flavors.

In this course, I’m most excited to explore physical computing as a way to create more responsive, interactive design experiences — especially learning how sensors and microcontrollers can help bring abstract ideas to life. I’m a bit nervous about the programming side, but I’m ready to tinker and learn.

If you’d like to connect, you can find me on Instagram @jimmy17pu or check out my work at junmingpu.com

Looking forward to building cool things with all of you!

— Jimmy