I’m super excited to share my latest project: a smart lamp that reacts to sound! It’s not just any lamp though; it’s a lamp that lights up when it detects noise. So why did I decide to build this? Well, I’m someone who tends to talk or make noise in quiet places like libraries. I often wish there was a way for someone to subtly remind me that it’s not the best time to chat. That’s where the idea for this lamp came from. I thought, what if I could create a lamp that reacts to sound and gives me a little “warning” when I’m being too loud? This idea turned into a fun and challenging project that I’m so proud of!
The Process
I started by modeling the lamp in three parts: the lamp shade, the stand, and the connector. Once that was done, I began setting up the circuit. I initially used an Arduino Nano, but ran into issues, so I switched to an Arduino Uno. After that, I connected the sound sensor, but it wasn’t working right at first. After a bit of trial and error, I replaced the sensor, and everything clicked! The circuit finally worked, and I was so relieved!
Assembly was tricky too. The soldering was delicate, and I spent quite a bit of time ensuring everything was securely connected. With help from friends, I managed to get everything put together, and the lamp was ready to go!
Here is my code
#define SOUND_SENSOR_PIN 2 // Sound sensor connected to digital pin 2
#define LED_STRIP_PIN 9 // LED strip connected to digital pin 9
void setup() {
Serial.begin(9600); // Start serial communication
pinMode(SOUND_SENSOR_PIN, INPUT); // Sound sensor as input
pinMode(LED_STRIP_PIN, OUTPUT); // LED control pin as output
digitalWrite(LED_STRIP_PIN, HIGH); // Ensure LED is off by default
}
void loop() {
int soundDetected = digitalRead(SOUND_SENSOR_PIN); // Check sound sensor
if (soundDetected == HIGH) { // If sound is detected
Serial.println("Sound detected! Blinking the LED strip...");
for (int i = 0; i < 10; i++) { // Blink the LED 10 times
digitalWrite(LED_STRIP_PIN, LOW); // Turn LED on
delay(100); // Wait 100ms
digitalWrite(LED_STRIP_PIN, HIGH); // Turn LED off
delay(100); // Wait 100ms
}
} else {
digitalWrite(LED_STRIP_PIN, HIGH); // Keep LED on if no sound
}
delay(100); // Delay to avoid fast detection
}
This project aims to create a sound-activated desk lamp that is installed on each study desk in a library. The lamp will automatically turn off when the noise level exceeds a certain threshold, signaling that the environment is no longer conducive to studying.
How It Works:
The desk lamp is equipped with a sound sensor that continuously monitors the noise level in its surroundings.
When the ambient noise reaches a preset threshold (e.g., 60 dB), indicating that the noise level is too high for a quiet study environment, the lamp will automatically turn off.
If the noise level falls below the threshold, the lamp remains on, encouraging quiet study behavior.
Target Audience: This lamp is designed for library environments, helping maintain a quiet atmosphere for students and readers. It will act as both a practical lighting solution and a subtle reminder for people to keep noise levels low.
Design an interactive desk lamp for use in library environments designed to reduce noise and encourage learning. The lamp has a built-in sound sensor that detects sound decibels in the surrounding environment. When the sound exceeds a set threshold (e.g., loud conversations or noisy environments), the lamp will automatically turn off, prompting the user to lower the volume to create a quieter study environment. This design not only improves the library experience, but also saves energy and is environmentally friendly.
Couple sharing mood night light
The Couple Shared Mood Night Light is an interactive night light designed for couples in long distance relationships. The night light consists of two parts, which can be shaped like a patchwork heart, circle, or other designs that symbolize love. Each part of the lamp can be held by one of the couple and interconnected via the internet. When one partner clicks on the night light, the color changes with the mood and is synchronized to display on the other partner’s night light, making it a heartwarming way to convey the mood.
Wake-Up Light Alarm Clock
Wake-Up Light Alarm Clock can help people wake up more easily in the morning by simulating the sunrise effect and gradually waking up the user from deep sleep with the sound reminder of the alarm clock. This design is especially suitable for those who are sensitive to the sound of ordinary alarm clocks, easily woken up or have difficulty in waking up.
Functions and Features Gradual brightness to simulate sunrise: The light will start to gradually brighten 30 or 15 minutes before the set alarm time, from a soft warm yellow color to a bright white light, simulating the sunrise effect.
This Halloween, I designed a unique “cloud umbrella” that lights up like a storm! 🌧️✨ The canopy is covered with fluffy cotton clouds, and raindrop-like details that dangle around the edges. Inside the umbrella, an Arduino setup creates a dramatic lightning effect, with light strips flashing in different intensities to mimic the rumbling storm. ⚡️💡
In past Halloweens, I always went with smaller accessories, like masks or hats. But this year, with a bit more time and the chance to get creative, I wanted to make something bigger – and that’s how the Storm Cloud Umbrella was born! I have to admit, I’m really happy with how it looks. However, it turned out way heavier than I expected. (I used the cheapest umbrella I could find, and the frame couldn’t handle the weight of the chains, so I had to reinforce it with wire, which made it even heavier.) Carrying it around is definitely a workout!
My materials are: clear umbrella, cotton, wire, decorations that look like raindrops, glue gun, strong glue, insulating tape, and my circuit board.
This is what it looks like without the cotton, a bald head~🧑🦲
Circuit Diagram:
Here’s the final look. ⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️
This is what it looks like after it’s been through the crowds. 😱
My Code:
// Simple demonstration on using an input device to trigger changes on your
// NeoPixels. Wire a momentary push button to connect from ground to a
// digital IO pin. When the button is pressed it will change to a new pixel
// animation. Initial state has all pixels off -- press the button once to
// start the first animation. As written, the button does not interrupt an
// animation in-progress, it works only when idle.
// Here is where you can put in your favorite colors that will appear!
// just add new {nnn, nnn, nnn}, lines. They will be picked out randomly
// R G B
uint8_t myFavoriteColors[][3] = {{200, 200, 200}, // white
{200, 200, 0}, // yellow
{200, 200, 200}, // white
};
// don't edit the line below
#define FAVCOLORS sizeof(myFavoriteColors) / 3
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
// Digital IO pin connected to the button. This will be driven with a
// pull-up resistor so the switch pulls the pin to ground momentarily.
// On a high -> low transition the button press logic will execute.
#define BUTTON_PIN 2
#define PIXEL_PIN 1 // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT 28 // Number of NeoPixels
// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 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)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
boolean oldState = HIGH;
int mode = 0; // Currently-active animation mode, 0-9
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin(); // Initialize NeoPixel strip object (REQUIRED)
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
// Get current button state.
boolean newState = digitalRead(BUTTON_PIN);
// Check if state changed from high to low (button press).
if((newState == LOW) && (oldState == HIGH)) {
// Short delay to debounce button.
delay(20);
// Check if button is still low after debounce.
newState = digitalRead(BUTTON_PIN);
if(newState == LOW) { // Yes, still low
if(++mode > 2) mode = 0; // Advance to next mode, wrap around after #8
switch(mode) { // Start the new animation...
case 0:
//colorWipe(strip.Color( 0, 0, 0), 50); // Black/off
flashRandom(5, 20);
flashRandom(5, 20);
flashRandom(5, 20);
flashRandom(5, 20);
break;
case 1:
flashRandom(5, 20);
flashRandom(5, 12);
flashRandom(5, 15);
flashRandom(5, 10);
flashRandom(5, 2);
flashRandom(5, 2);
flashRandom(5, 2);
flashRandom(5, 2);
break;
}
}
}
// Set the last-read button state to the old state.
oldState = newState;
}
// Fill strip pixels one after another with a color. Strip is NOT cleared
// first; anything there will be covered pixel by pixel. Pass in color
// (as a single 'packed' 32-bit value, which you can get by calling
// strip.Color(red, green, blue) as shown in the loop() function above),
// and a delay time (in milliseconds) between pixels.
void colorWipe(uint32_t color, int wait) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
strip.setPixelColor(i, color); // Set pixel's color (in RAM)
strip.show(); // Update strip to match
delay(wait); // Pause for a moment
}
}
// Theater-marquee-style chasing lights. Pass in a color (32-bit value,
// a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
// between frames.
void theaterChase(uint32_t color, int wait) {
for(int a=0; a<10; a++) { // Repeat 10 times...
for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
strip.clear(); // Set all pixels in RAM to 0 (off)
// 'c' counts up from 'b' to end of strip in steps of 3...
for(int c=b; c<strip.numPixels(); c += 3) {
strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
}
}
}
// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
void rainbow(int wait) {
// Hue of first pixel runs 3 complete loops through the color wheel.
// Color wheel has a range of 65536 but it's OK if we roll over, so
// just count from 0 to 3*65536. Adding 256 to firstPixelHue each time
// means we'll make 3*65536/256 = 768 passes through this outer loop:
for(long firstPixelHue = 0; firstPixelHue < 3*65536; firstPixelHue += 256) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
// Offset pixel hue by an amount to make one full revolution of the
// color wheel (range of 65536) along the length of the strip
// (strip.numPixels() steps):
int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
// strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
// optionally add saturation and value (brightness) (each 0 to 255).
// Here we're using just the single-argument hue variant. The result
// is passed through strip.gamma32() to provide 'truer' colors
// before assigning to each pixel:
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
}
}
// Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
void theaterChaseRainbow(int wait) {
int firstPixelHue = 0; // First pixel starts at red (hue 0)
for(int a=0; a<30; a++) { // Repeat 30 times...
for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
strip.clear(); // Set all pixels in RAM to 0 (off)
// 'c' counts up from 'b' to end of strip in increments of 3...
for(int c=b; c<strip.numPixels(); c += 3) {
// hue of pixel 'c' is offset by an amount to make one full
// revolution of the color wheel (range 65536) along the length
// of the strip (strip.numPixels() steps):
int hue = firstPixelHue + c * 65536L / strip.numPixels();
uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
}
}
}
void flashRandom(int wait, uint8_t howmany) {
for(uint16_t i=0; i<howmany; i++) {
// pick a random favorite color!
int c = random(FAVCOLORS);
int red = myFavoriteColors[c][0];
int green = myFavoriteColors[c][1];
int blue = myFavoriteColors[c][2];
// get a random pixel from the list
int j = random(strip.numPixels());
//Serial.print("Lighting up "); Serial.println(j);
// now we will 'fade' it in 5 steps
for (int x=0; x < 5; x++) {
int r = red * (x+1); r /= 5;
int g = green * (x+1); g /= 5;
int b = blue * (x+1); b /= 5;
strip.setPixelColor(j, strip.Color(r, g, b));
strip.show();
delay(wait);
}
// & fade out in 5 steps
for (int x=5; x >= 0; x--) {
int r = red * x; r /= 5;
int g = green * x; g /= 5;
int b = blue * x; b /= 5;
strip.setPixelColor(j, strip.Color(r, g, b));
strip.show();
delay(wait);
}
}
// LEDs will be off when done (they are faded to 0)
}
And, I like all of us in our costumes! This Halloween was awesome!
This Halloween, I designed a “Lightning Cloud Umbrella”. It’s an umbrella decorated with clouds, and the inside of the umbrella simulates lightning with a simple LED flashing effect. The outside of the umbrella is made of cotton to create the cloud effect, and it is decorated with transparent raindrops attached to a silver chain to create a rainy day feeling. When the umbrella is opened, the LEDs inside flash randomly to simulate lightning and enhance the festive atmosphere.
Arduino technology used To achieve the lightning effect inside the umbrella, I used an Arduino Uno to control the flashing LEDs.
Materials needed Arduino Uno: 1 for controlling the flashing effect of the LED lights. White LEDs: several, used to simulate the light effect of lightning. Cotton: appropriate amount, used to make cloud decoration. Silver Chain: several, used to connect the raindrop decoration. Transparent raindrop decorations: several, used to simulate rain drops. 9V battery: 1pc, to power the Arduino and LED lights. Wires: several, used to connect the parts of the circuit. Resistors: according to the specifications of the LED lights, choose the appropriate resistance value.(⬇️which I already have)
Production steps Prepare the umbrella stand: choose a transparent umbrella so that the light from the LED light can pass through.
Install the LED light:
Inside the umbrella, install the white LED light according to the designed position. Connect the LED light to the Arduino Uno
Write the Arduino code:
Write code to make the LEDs blink at random intervals to simulate a lightning effect. Use the Arduino’s random() function to generate random blinking times and control the LED lights on/off via digitalWrite().
Make cloud decorations:
Use cotton to create cloud shapes on the outside of the umbrella and fix them on the umbrella surface. Add raindrop decorations:
Attach transparent raindrop decorations with silver chains and hang them around the umbrella to create the effect of rain. Circuit connection:
Connect all the LEDs to the Arduino to make sure the circuit is correct. Use a 9V battery to power the whole system.
My idea is to create an accessory themed around a thunderstorm, either an umbrella or a hat (I prefer the umbrella) that can be worn on the head or held above, giving a witch-like appearance. I want the lights to create a lightning effect, with yellow and white lights intertwined within the cotton.
The materials I need to use are: cotton, transparent umbrellas, yellow and white light strips, silver chains, blue acrylic sheets, glue guns(which I already have two of them)
Recently, I’ve gotten hooked on playing Mario Odyssey, which is really so much fun! I’ve run into a little problem though – I’m using a projector to play it, and I have to turn off the lights in the room to see the screen clearly. But after playing for a long time, the room was dark and I couldn’t see anything, which still felt a little inconvenient. I needed a little light source, but didn’t want to ruin the gaming experience.
So I had a thought: why not make a nightlight that provides a soft light, but also fits the theme of the game? Thus, Switchie was born! It’s not only meant to solve my nagging problem, but it also hopes to help other gaming enthusiasts, like me, have a cool and functional nightlight.
Making Switchie wasn’t too hard, but it was definitely a bit complicated and time-consuming. I often worked on it while chatting with my friends over the phone, and I got so carried away that I forgot to take many process pictures!
One of the challenges I faced during the process was working with felt—it’s a rather coarse and thick material, making it difficult to sew and tie knots. At one point, I even broke a needle! (Luckily, no one got hurt) Despite the challenges, this turned out to be a really great learning experience. It was my first time doing any sewing, and I found the whole process surprisingly enjoyable.
The materials I used include: various colors of felt, fiber cloth, black yarn, thread and needle, transparent plastic sheets, a dual LED circuit, and some stuffing.
All in all, I’m very happy with how Switchie turned out. Not only does it solve my lighting problem while gaming, but it also adds a unique touch to my room decor. I’m quite satisfied with this project.
I’m working on creating a small nightlight shaped like a game controller. I personally love playing games, but when I play at home, I usually use a projector, so I need to turn off all the lights. That’s why I want to make a small nightlight that gives off a soft glow. Just imagine, while holding a game controller, there’s a glowing game controller toy next to me. That would make my day.
I removed the four screws on the back panel and lifted off the casing to expose the internal components.
The disc tray was stuck inside, which I suspect was one of the reasons for the device’s failure. I forcibly removed the tray from the housing.
Next, I unscrewed the board connected to the charging port and separated it from the main logic board of the DVD Writer.
I then removed the circuit board near the charging port, which seems to be responsible for charging functions. I detached the FFC/FPC cable (Flexible Flat Cable/Flexible Printed Circuit) connecting this board to the main DVD circuit board. The cable was plastic-like and difficult to remove, so I cut it in two.
I took out the metal plate attached to the main structure of the DVD writer. This plate was used to secure the internal components and prevent them from moving. Some screws were difficult to remove, so I forcibly took them out.
I removed the spring mechanism responsible for ejecting the DVD tray. It was jammed inside, but only required unscrewing one easily accessible screw.
I removed a FFC/FPC cable, a long metallic strip used to connect circuit boards. Additionally, I removed some nearby PCB mounts or clips used to secure the circuit board.
I detached the upper part of the spindle motor assembly, which is responsible for rotating the disc. I also removed the associated control PCB.
Lastly, I removed the spindle motor and its mechanical components, which drive the disc’s rotation within the DVD Writer.(As shown in the figure below)
Part
Material
Manufacturing Process
Back panel casing
Plastic PC
Injection molding (plastic), stamping or casting (metal).
I find the internal structure of this device particularly intriguing because of its compact and portable size, which leads to a very tight arrangement of components. To maximize space efficiency, the spring mechanism is cleverly shaped to conform to the central structure.