Limelight: DIY Lime-Shaped Presentation Timer With LED Segments

By Mallika Rao & Josh Kotel

For our final design, we were between several ideas. Our pomodoro timer was the frontrunner but we became apprehensive about the lack of time and level of design we wanted to achieve.

We also strongly felt we wanted to design devices that worked as a set–either for communication or otherwise–but offered a shared experience.

Continue reading “Limelight: DIY Lime-Shaped Presentation Timer With LED Segments”

Manya’s Final Project: Sensory Bookmark

This bookmark is designed to make reading an immersive, multisensory experience. Upon opening your book, this bookmark turns into a reading light, automatically illuminating to light up your page. A customizable scent profile enhances the moment. Close the book, and the light turns off while the system enters low-power sleep mode to save battery.

If you’d like to take on an additional challenge, this bookmark has the potential to take on IoT features. Built on the Arduino Nano ESP32 with WiFi capabilities, you can program it to automatically start your favorite reading playlist on Spotify when you open your book, and even enable Do Not Disturb mode on your phone. It allows you to create a distraction-free reading environment and truly get lost in your latest literary escape.

Instructables Link

Continue reading “Manya’s Final Project: Sensory Bookmark”

Rhea’s Final Inner Thoughts Mirror

I wanted my inner thoughts mirror to really go against what we see nowadays. We are being pushed happiness and optimism so much. In the spirit of being a realist, I wanted to create something that reflected one’s actual inner thoughts back to them. In a way, I sometimes think taking optimism too far can skew one’s vision. I wanted to create something real – that perhaps adds a bit of a shock factor. When our thoughts are actually materialized and put in front of us, will we start being more aware and perhaps start reframing?

Tools

  1. Soldering iron
  2. Solder wire
  3. Wire cutters / strippers
  4. Hot glue gun
  5. Scissors
  6. Black tape(will become your best friend! I used an electrical one)

MATERIALS / COMPONENTS

  1. Arduino Nano ESP32
  2. 2.4″ OLED screen(I used an affordable one from Amazon, I would suggest looking one up on Adafruit for better quality and reliability)
  3. Wires
  4. Solderable breadboard
  5. USB-C cable (to program the ESP32)
  6. 6×6 inch two – way see through mirror
  7. 6 x 6 inch Shadow box frame
  8. Cardboard/ Old box
Continue reading “Rhea’s Final Inner Thoughts Mirror”

Sige’s There’s Always Sunshine Light

“There’s Always Sunshine” is a LED light made with a UV Light Sensor. It’s for people who’s experiencing seasonal depression to remind themselves that there can always be sunshine and stay positive. The light will work as when the sun goes down / when it’s cloudy or rainy, it lights up. You can toggle a button for the light to fade, otherwise the light stays on.

Instructables

https://www.instructables.com/Theres-Always-Sunshine-Light/

Video – It Works!

Process Photos

Tinkercad

https://www.tinkercad.com/things/0QbKHpFH4T0-copy-of-sige-dec-7/editel?returnTo=%2Fdashboard%2Fdesigns%2Fcircuits&sharecode=3N66N1BoYZz9DblljA5nXa3k6t6JgzLsXnkD5EWszY4

Code

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define BUTTON_PIN   2
#define WHITELIGHT_PIN   5
#define PIXEL_PIN    6
#define UV_PIN    A5
#define PIXEL_COUNT 7
Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

int buttonState = 0;
int lastButtonState = 0;
int buttonPushCounter = 0;
int sensorValue = 0;
//int brightnessWL = 0;
int fadeamount = 5;
bool isFading;

//SETUP
void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  //pinMode(UV_PIN, INPUT);
  pinMode(WHITELIGHT_PIN, OUTPUT);
  //pinMode(PIXEL_PIN,OUTPUT);
  strip.begin();
  strip.show();
  Serial.begin(9600);
}



void loop() {
  //check sensor value
  sensorValue = analogRead(UV_PIN);
  Serial.print("sensorValue= ");
  Serial.print(sensorValue);
 
  buttonState = digitalRead(BUTTON_PIN);
  Serial.print("\t buttonState= ");
  Serial.println(buttonState); 


    if (buttonState == LOW) {
         isFading = true;
        Serial.println("isFading is true");
    }else {
      isFading = false;
      Serial.println("isFading is false");
    }
    

  if (sensorValue <= 2) {
    Serial.println("sensor smaller than or equal to 2, lights on");
    
    colorWipe(strip.Color(255, 70, 10), 5);
    
    if(isFading == true){
      // fade in from min to max in increments of 5 points:
       for (int brightnessWL = 255; brightnessWL >= 50; brightnessWL -= 5) {
        Serial.print("brightness= ");
        Serial.println(brightnessWL);
        analogWrite(WHITELIGHT_PIN, brightnessWL);
        // wait for 30 milliseconds to see the dimming effect
        delay(50);
      }
      
      for (int brightnessWL = 50; brightnessWL <= 255; brightnessWL += 5) {
        Serial.print("brightness= ");
        Serial.println(brightnessWL);
    	  analogWrite(WHITELIGHT_PIN, brightnessWL);
  		  delay(50);
      }
      // fade out from max to min in increments of 5 points:
      
    } else {
      digitalWrite(WHITELIGHT_PIN, 255);
    }


    }
  else if (sensorValue > 2) {
    Serial.println("sensor greater than 2, lights out");
    digitalWrite(WHITELIGHT_PIN, LOW);
    colorWipe(strip.Color(0, 0, 0), 5);
    }
	  // save the current state as the last state, for
  // the next time through the loop
  lastButtonState = buttonState;
}

//SET PIXEL FUCTION
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
  }
}

Rida’s Final Project Caeruleo

Bring the serenity of nature into your home with Caeruleo. Designed as both a calming decor piece and an interactive art installation, this project features a single light source that glides gracefully along the inner perimeter, creating mesmerizing glimmers and dynamic patterns. Its sound-responsive LEDs adjust to their surroundings—brightening and accelerating in noisy environments, and dimming and slowing down in quiet spaces—bringing a sense of harmony to your living area.

Meaning of name: (made) for Azure

Link to Instructable: https://www.instructables.com/Nature-inspired-Sound-Sensor-LED-Wall-Light/

Link to Video: https://youtu.be/RoVGKDPhzqM

Link to Tinkercad: https://www.tinkercad.com/things/4aAViGX2SXa-copy-of-sound-responsive-led-circuit?sharecode=_vmrKaLEndobK0IHVTipv6XW1PmaxttfKLk8f5jpOXs

Process Photos

Code

Final Result

What I learned

  • Building the code and circuit for our project from scratch was definitely a steep learning curve, but it was rewarding to see the project come to life
  • Process management is key for a project with so many steps: always planning ahead to avoid material delay/ burnouts, and keep things moving
  • Iterative thinking: prepare to tackle unexpected changes (eg: the frame) 

What to Improve

  • I’d like to refine the frame’s finish with a mixed medium of air-dry clay and sand to experiment material mixes and achieve a more texturized, organic look
  • With fewer commitments from other classes, I’d love to create a more polished video to show the product in use + reaccentuate the design concept

Ana’s Long Distance Hug Plush

Everyone has someone they miss. Maybe it’s distance, maybe it’s conflicting schedules, but seeing loved ones in adulthood is hard. If you miss someone and want to get love and spread some love, here’s how! Instructables Link

SHOPPING LIST

To make this project, you will need 2x of each:

Electronics:

  1. Adafruit MPRLS Ported Pressure Sensor Breakout – 0 to 25 PSI
  2. Adafruit ESP32-S3 Reverse TFT Feather – 4MB Flash, 2MB PSRAM, STEMMA QT
  3. Lithium Ion Polymer Battery – 3.7v 2500mAh
  4. Silicone Tubing for Peristaltic Liquid Pump – 1 Meter

Fabric:

  1. Line Texture Fabric
  2. FUZZY Fluffy sweater

Plus these tools:

  • Soldering tools and supplies
  • Silicone adhesive
  • Hot glue gun with glue sticks

Circuit Diagram

The Adafruit MPRLS Ported Pressure Sensor Breakout and Li-ion battery are attached to the Adafruit ESP32-S3 Reverse TFT Feather.

Attach Tubing to Sensor

Make sure to use a silicone adhesive when attaching the tube to your sensor, because the only thing that makes silicone stick is silicone. 

I personally had a lot of trouble with this one. The first one attached like bread to butter, perfection! The second tube on the other hand….. Messy.

Connect to Arduino IoT Cloud

In order to connect my board, I created a boolean variable for my Thing through the Arduino IoT Cloud. By inputting my network and device information within the code, I was able to connect.

Patterns & Sewing

For the patterns, I was originally going to make a stingray and an octopus, but due to time constraints, I am going with my mom’s favorite shape, a triangle!

Genuinely making the pattern to sew for this was pretty intuitive. I just cut out two large triangle pieces then cut out the strips that go in between the two triangles to create volume.

Hug Code

// Long Distance Hug by Ana Jay, code from Parihug IoT Hug project by Xyla Foxlin, adapted 2023 & 2024 by Becky Stern

// Watch the video: https://youtu.be/u6gj8VzrHBo

// Tutorial: https://beckystern.com/2023/11/27/hug-sensing-iot-parihug-toy-w-xyla-foxlin/

// This code is in the Public Domain

#define SECRET_SSID "Internet of Things Class"

#define SECRET_OPTIONAL_PASS "iheartarduino"

#define SECRET_DEVICE_KEY "gg0N8MV!wlYjIqlA8m#Db@yW@"

#include <ArduinoIoTCloud.h>

#include <Arduino_ConnectionHandler.h>

#include <Adafruit_GFX.h>    // Core graphics library

#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789

#include <SPI.h>

// Use dedicated hardware SPI pins

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

const char DEVICE_LOGIN_NAME[]  = "15f3eccb-0c6f-46a8-8ef1-183a610a3a3c";

const char SSID[]               = SECRET_SSID;    // Network SSID (name)

const char PASS[]               = SECRET_OPTIONAL_PASS;    // Network password (use for WPA, or use as key for WEP)

const char DEVICE_KEY[]  = SECRET_DEVICE_KEY;    // Secret device password

void onHugChange();

bool hug;

void initProperties(){

 ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME);

 ArduinoCloud.setSecretDeviceKey(DEVICE_KEY);

 ArduinoCloud.addProperty(hug, READWRITE, ON_CHANGE, onHugChange);

}

WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);

#include <Wire.h>

#include "Adafruit_MPRLS.h"

// You dont *need* a reset and EOC pin for most uses, so we set to -1 and don't connect

#define RESET_PIN  -1  // set to any GPIO pin # to hard-reset on begin()

#define EOC_PIN    -1  // set to any GPIO pin to read end-of-conversion by pin

Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);

void setup() {

 // Initialize serial and wait for port to open:

 Serial.begin(9600);

 //pinMode(12, OUTPUT);

 // This delay gives the chance to wait for a Serial Monitor without blocking if none is found

 delay(1500);

 // Defined in thingProperties.h

 initProperties();

 // Connect to Arduino IoT Cloud

 ArduinoCloud.begin(ArduinoIoTPreferredConnection);

 /*

    The following function allows you to obtain more information

    related to the state of network and IoT Cloud connection and errors

    the higher number the more granular information you’ll get.

    The default is 0 (only errors).

    Maximum is 4

 */

 setDebugMessageLevel(2);

 ArduinoCloud.printDebugInfo();

  Serial.println("Testing MPRLS sensor...");

 if (! mpr.begin()) {

   Serial.println("Failed to communicate with MPRLS sensor, check wiring?");

   while (1) {

     delay(10);

   }

 }

 Serial.println("Found MPRLS sensor");

 // turn on backlite

 pinMode(TFT_BACKLITE, OUTPUT);

 digitalWrite(TFT_BACKLITE, HIGH);

 // turn on the TFT / I2C power supply

 pinMode(TFT_I2C_POWER, OUTPUT);

 digitalWrite(TFT_I2C_POWER, HIGH);

 delay(10);

 // initialize TFT

 tft.init(135, 240); // Init ST7789 240x135

 tft.setRotation(3);

 tft.fillScreen(ST77XX_BLACK);

// large block of text

 tft.fillScreen(ST77XX_BLACK);

 testdrawtext(

     "Booting hugs... ",

     ST77XX_WHITE);

 delay(1000);

tft.fillScreen(ST77XX_BLACK);

 Serial.println(F("Initialized"));

}

void loop() {

 ArduinoCloud.update();

  float pressure_hPa = mpr.readPressure();

 Serial.print("Pressure (hPa): "); Serial.println(pressure_hPa);

 Serial.print("Pressure (PSI): "); Serial.println(pressure_hPa / 68.947572932);

   if (pressure_hPa > 1100){

   hug=true;

   Serial.println("Hug = true");

 //    Serial.println("buzz buzz loop");

 //  digitalWrite(12, HIGH);

 //  delay(1000);

 //  digitalWrite(12, LOW);

 // large block of text

 tft.fillScreen(ST77XX_BLACK);

 testdrawtext(

     "Hugs! I love you. ",

     ST77XX_WHITE);

 delay(5000);

 tft.fillScreen(ST77XX_BLACK);

 }else{

   hug=false;

   Serial.println("Hug = false");

 }

 delay(1000);

}

/*

 Since Hug is READ_WRITE variable, onHugChange() is

 executed every time a new value is received from IoT Cloud.

*/

void onHugChange()  {

 if(hug==true){

  Serial.println("onHugChange has been called");

 //  digitalWrite(12, HIGH);

 //  delay(1000);

 //  digitalWrite(12, LOW);

   tft.fillScreen(ST77XX_BLACK);

 testdrawtext(

     "Hugs! I love you. ",

     ST77XX_WHITE);

 delay(5000);

 tft.fillScreen(ST77XX_BLACK);

 }

 }

void testdrawtext(char *text, uint16_t color) {

 tft.setCursor(0, 0);

 tft.setTextColor(color);

 tft.setTextWrap(true);

 tft.print(text);

}

FINAL VIDEO

Sofia’s Final Synth

Ready to build your very own synth but don’t know where to start? No worries – you’re in the right place!

 Welcome to the Fish Synth Docs, your step-by-step guide to creating the Fish Synth! This unique synth comes with a convenient strap, making it easy to take your sound on the go for all your events. 

It features 3 adjustable dials, sound-controlling buttons, and a headphone jack for personal listening. Plus, it has a pedal plug for connecting other effects and creating a daisy-chain setup. Let’s dive in and get started!

WHAT YOU’LL NEED

HOW TO BUILD

Step 1: Order the DaisySeed and Wait for Delivery
The first step in building your Fish Synth is to order the DaisySeed online. This component, which acts as the “brain” of your synth, is where all the code will be loaded. Be patient as it will take some time to arrive from California.

Step 2: Choose Your Effects
While waiting for the DaisySeed to arrive, start planning what effects you want your synth to have. Explore the DaisySeed coding library to find the effects that suit your needs. Once you’ve selected the desired effects, you’ll need to wire them to the appropriate switches.

Dial 1 – Switch Sound Effect

Dial 2 – Volume

Dial 3 – Miscellaneous / Tone

Button 1 – On/Off

Button 2 – Chord C major 7

Button 3 – Chord G major 7

Button 4 – E major 7

Step 2.5: Set Up Daisy Seed and Code

When using Arduino for coding, it is essential to follow the DaisyDuino Set-Up Guide. A variety of video tutorials are available on the ElectroSmith YouTube channel, as well as a comprehensive Start-Up guide on GitHub.

Start-Up Tips:

  1. Ensure the “Extra Step” STM32 package is downloaded, as it is crucial for the setup. If unable to obtain it, request it from another source.
  2. In Arduino, select “DFU” as the upload method.
  3. It may be necessary to press and hold the Boot button while pressing the Reset button a few times to allow Arduino to properly recognize the board.

To code the effects, start by reviewing the multiple Daisy Seed examples available in the Arduino environment. 

 The goal is to combine the relevant portions of each example into a single, cohesive file.


By doing this, you’ll be able to tailor the code to your specific needs and create the desired effects. The example code is available through the link provided below, offering a starting point to help guide the process.

Step 3: Solder Buttons, Dials, and Plugs
Begin by soldering the various buttons, dials, and plugs onto the board. Ensure you connect the correct wires to the outside dials so they correspond to the effects you wish to control. Take your time to ensure each connection is accurate.

Step 4: Create the Case
You have two options for the case:

  • 3D Print the Case: Use the provided file to 3D print your case. If you don’t have access to a 3D printer, check with your local public library to see if they offer printing services. This file was made with TinkerCAD.
  • Cardboard Case: Alternatively, you can fold a custom cardboard case. If you choose this route, follow the instructions for cardboard assembly provided below. Note that, regardless of the case type, only the placement of knobs and buttons matters.

Step 5: Wire the External Components
Solder the switches, dials, and other external components using wires. Ensure that all switches and dials are connected properly to the board and that they align with the designated holes in the case.

Step 6: Assemble the Synth Case
Once everything is wired correctly, screw the components into the case. Double-check that all connections are secure before moving on.

Step 7: Test the Synth
Before sealing the case by drilling or gluing it shut, test the synth to ensure everything is working properly. This is your last chance to make adjustments if needed.

Step 8: Add a Strap
For convenience, sew a bag strap using any fabric you have available. A jewelry chain was used in this example!

Step 9: Final Steps
Congratulations! The Fish Synth is now complete. You should have a better understanding of musical synthesizers and can start creating music! Enjoy the process and the sounds you create!

Retrospective:

Do not do audio. Do not do audio. DO not do audio. DO not do audio. Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.Do not do audio. Do not do audio. DO not do audio. DO not do audio.

  1. Find way to attach buttons to case
  2. Cut breadboard to fit in case
  3. Adjust code to actually sound good

Company Pitch:

The Fish Synth is a DIY, portable synthesizer designed for on-the-go music creation and exploration. This compact, user-friendly device allows enthusiasts to build their own unique synth by assembling the components, offering a hands-on experience for both beginners and experienced creators. With its battery-powered design, the Fish Synth is perfect for spontaneous jam sessions, street performances, or personal audio experimentation, providing a versatile range of sounds and effects. Its easy-to-customize features and portable nature make it an ideal tool for music lovers who want to enjoy creative synthesis anytime and anywhere.

https://www.instructables.com/Build-Your-Own-Synth

🎶✨ Introducing the Fish Synth! 🎹 A DIY, portable synthesizer that lets you build your own unique sound and take it on the go. Perfect for spontaneous jams, street performances, or just vibing wherever you are! 🚀🔊

Easy to assemble, fun to customize, and ready for any adventure. Get yours and start creating music on the move! 🎧💡

#FishSynth #DIYMusic #PortableSynth #MusicOnTheGo #CreateEverywhere

Tong’s Final Project

When you want to build a habit or achieve a goal, you can use this box I designed to help! Our box has 7 switches, and each day you complete a task, you can flip one switch. After successfully completing tasks for 7 consecutive days, the box will release colorful confetti to celebrate! It encourages you to cultivate your habits in 7-day cycles.

Video

Mode

Here’s how the circuit works:

7 Switches: Each switch corresponds to an LED. When a switch is toggled, it lights up the respective LED, indicating that the task for the day is completed.

UNO Board: All switches and LEDs are connected to an Arduino UNO board, which monitors the status of the switches. The Arduino ensures the logic for tracking task completion across the 7-day cycle.

Electromagnet: The electromagnet is also connected to the Arduino. When all 7 switches are toggled (indicating the completion of the 7-day cycle), the UNO board cuts power to the electromagnet, causing it to lose its magnetic hold and release the iron piece attached to a balloon. This action releases colorful confetti to celebrate the achievement.

Here is my code:

int celebrationState = false;
int previousCelebrationState = false;

void setup()
{
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);

pinMode(4, OUTPUT); // 控制EG的引脚

digitalWrite(4, HIGH); // 默认保持EG通电

Serial.begin(9600);
}

void loop()
{
bool sunday = digitalRead(12);
bool monday = digitalRead(11);
bool tuesday = digitalRead(10);
bool wednesday = digitalRead(8);
bool thursday = digitalRead(7);
bool friday = digitalRead(6);
bool saturday = digitalRead(5);

// 检查所有灯是否亮了(所有输入为LOW)
if (sunday == LOW && monday == LOW && tuesday == LOW && wednesday == LOW && thursday == LOW && friday == LOW && saturday == LOW) {
celebrationState = true;

if (celebrationState == true && previousCelebrationState == false) {

  // 切断EG电源
  digitalWrite(4, LOW);
}

} else {
celebrationState = false;

digitalWrite(4, HIGH);

}

previousCelebrationState = celebrationState;
}

Instructables Link

https://www.instructables.com/HabitSpark-7

Haosen’s Final Project

My final project is inspired by one of my favorite movies, Ponyo on the Cliff by the Sea. The brave Ponyo from the film left a deep impression on me. My product is called the “Ponyo Night Light.” It can automatically adjust its brightness based on the surrounding light levels, saving users the hassle of manual adjustments. It also solves issues such as the night light being too dim or forgetting to turn it off after sunrise.

Instructables Link

https://www.instructables.com/PonYo-Night-Light

Let the video Talk

Arduino Function:

My code:

Reflection:

During the soldering process, I failed countless times, which taught me the importance of patience. If I were to further improve my project, I would first add more seaweed to the base. Additionally, I would include an alarm clock feature to remind people to wake up when the light is turned off. Thank you, everyone!