Forget me not
Made by Nicole Xiang
Made by Nicole Xiang
There are many things we take for granted and sometimes we forget about them, like doorbells. Unlike a traditional doorbell, this one visualizes the weather with the color of a lamp. But this is a two-way relationship! And you never know what it’ll do when you take them for granted.
Created: February 17th, 2023
Doorbells are something that is slowly fading out of our lives. Millennials and Gen Z rather send a text “here” instead of ringing the doorbell. This leaves doorbells for just delivery purposes and visiting strangers. So when I thought about my project, my first instinct was how can we bring doorbells back to life. What if they also feel lonely when no one is giving them attention yet they still need to work so that they don’t get thrown out? For this project, I wanted to add a sense of emotion to doorbells. Since my input is temperature and my output is an LED strip, I created a doorbell that communicates with a lamp with an LED strip to reflect the weather. However, if you don’t give it its desired amount of attention, it will give inaccurate temperature readings (stop working properly). Thus, the other goal of the project is to remind us to pause and appreciate the things we take for granted.
I’ve seen a lot of acrylic lamps before this project and they looked very modern and aesthetic so I wanted to see how I could incorporate that into the project. Luckily, I got LED strip as the output so I was able to an acrylic LED light. When I was researching the role of doorbells, I also found that it causes anxiety in many people because of their alarming sound and that people don’t use it that much. So for this project, I wanted to take a different perspective on doorbells and explore what other ways we could use them, perhaps incorporating them into our lives (hence the idea of the lamp)
My initial prototype consists of the Arduino and an LED strip that changes color based on the temperature throughout the day. To add some spookiness, I wanted to give the doorbell this idea of seeking attention. As I started testing with the LED strip, I realized what if I turned this into a lamp which led me to make an acrylic lamp.
The final product has 2 parts. The first part if the doorbell which is connected to the Arduino in order to know whether it was pressed or not. The second part is the LED strip and the lamp. I created an LED strip tube using wood so I can place it at the end of the lamp (a bent acrylic sheet) so that the light can travel through the acrylic. The sensor on the Arduino will sense the temperature which then will change the lamp color. When it gets warmer, the light will turn more red, and when it’s colder, it’ll turn more blue/white indicating snow. If you do not interact with it within the time it wants you to (the attention-seeking part), it will start changing the light animation to let you know that it wants your attention.
Parts used in this project:
1x Arduino Nano 33 BLE Sense
1x 8-pixel LED strip
1x acrylic sheet (10cm x 40cm)
7x jumper wires
If I had more time or if I were to continue working on this project, I would play around with the LED light animation more. I got some feedback on making the light also seem alive by creating a breathing animation. There were also some thought-provoking questions like “how do you make sure users think something that happened was not an error but an actual feature?”. Since this project is about counter-functional products, I thought this question was pretty hard to answer because the whole idea was going the opposite way of common sense. Nevertheless, from a user experience perspective, I think all products should offer enough affordances and help users understand as they interact with them. This is something that I need to think about for my future projects as well.
Overall, I had a very fun time exploring what the things an Arduino could do and its limitations. To make the final product look more like a real product, there needs to be a lot of work to cover the Arduino and all the wiring. I think I’m still pretty far from getting to that real-looking product but it was still exciting to build one from scratch and package it. For future projects, I want to start ideating earlier so that I have more time to actually test out all the parts and iterate on features. For this project, because of the time limit, I didn’t put enough support for the doorbell part so it broke when people pressed it very hard. Overall, I think I achieved what I imagined, other than the breaking part on Demo day. I’m looking forward to applying the lessons I learned to future projects.
LED animation: https://www.tweaking4all.com/hardware/arduino/arduino-all-ledstrip-effects-in-one/
Temperature sensor: https://awesome-market-60f.notion.site/Getting-Temperature-and-Pressure-from-the-BLE-Sense-Rev1-86b4c62771d34eb6b2f788c263d29fd9
Working with LED Strips:
#include <Adafruit_NeoPixel.h>
#include <Arduino_LPS22HB.h>
#define PIXEL_PIN D11
#define PIXEL_COUNT 8
#define PIXEL_TYPE NEO_GRB + NEO_KHZ800
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
const int atnOptions[3] = {10,30,50}; //attention period options
int atnPeriod = atnOptions[random(0, 2)]; //randomly select atnPeriod
int duration = 0;
int r;
int g;
int b;
int color;
void setup() {
Serial.begin(9600);
if (!BARO.begin()) {
Serial.println("Failed to initialize pressure sensor!");
while (1);
}
strip.begin();
strip.show(); // Initialize all pixels to 'off'
pinMode(D2, INPUT_PULLDOWN);
}
void loop() {
// read the sensor value
float pressure = BARO.readPressure();
// print the sensor value
Serial.print("Pressure = ");
Serial.print(pressure);
Serial.println(" kPa");
float temperature = BARO.readTemperature();
Serial.print("temperature");
Serial.print(temperature);
Serial.println();
color = setTempColor(temperature);
r = floor(color/1000000);
g = floor(color/1000%1000);
b = floor(color%1000);
Serial.print("rgb: ");
Serial.print(r);
Serial.print(g);
Serial.print(b);
Serial.println();
boolean val = digitalRead(D2);
if (val == 1){ // pressed doorbell
duration = 0;
Serial.print("true");
Serial.print(atnPeriod);
Serial.println();
//set to correct temp
}
else{ // did not press
duration += 1;
if (duration <= int(0.5*atnPeriod)){ // if less than half of attention period
uint32_t neutral = strip.Color(r, g, b) ;
for( int i = 0; i < strip.numPixels(); i++ ){
strip.setPixelColor(i, neutral); // set a color
}
strip.show();
delay(100);
Serial.println(atnPeriod);
Serial.print("less than half; duration: ");
Serial.print(duration);
Serial.println();
}
else if (duration <= atnPeriod){ // more than half
// make light fade
Serial.print("within atn");
Serial.println();
FadeInOut(r, g, b); // blue
}
else { //late
//make light strobe
strip.clear();
Serial.print("late atn");
Serial.println();
Strobe(r, g, b, 10, 50, 1000);
}
}
delay(1000);
}
void FadeInOut(byte red, byte green, byte blue){
float r, g, b;
for(int k = 0; k < 256; k=k+1) {
r = (k/256.0)*red;
g = (k/256.0)*green;
b = (k/256.0)*blue;
setAll(r,g,b);
strip.show();
}
for(int k = 255; k >= 0; k=k-2) {
r = (k/256.0)*red;
g = (k/256.0)*green;
b = (k/256.0)*blue;
setAll(r,g,b);
strip.show();
}
}
void setAll(byte red, byte green, byte blue) {
for(int i = 0; i < PIXEL_COUNT; i++ ) {
setPixel(i, red, green, blue);
}
strip.show();
}
void setPixel(int Pixel, byte red, byte green, byte blue) {
strip.setPixelColor(Pixel, strip.Color(red, green, blue));
}
void Strobe(byte red, byte green, byte blue, int StrobeCount, int FlashDelay, int EndPause){
for(int j = 0; j < StrobeCount; j++) {
setAll(red,green,blue);
strip.show();
delay(FlashDelay);
setAll(0,0,0);
strip.show();
delay(FlashDelay);
}
delay(EndPause);
}
int setTempColor(int temp){
Serial.print("setting color");
if (temp <= 0){
return 0;
}
else if (temp > 0 && temp <=10 ){
return 158255246;
}
else if (temp > 10 && temp <=24 ){
return 249217091;
}
else if (temp > 24 && temp <=25 ){
return 246012238;
}
else {
return 255000000;
}
}
Click to Expand
There are many things we take for granted and sometimes we forget about them, like doorbells. Unlike a traditional doorbell, this one visualizes the weather with the color of a lamp. But this is a two-way relationship! And you never know what it’ll do when you take them for granted.