Investigation I Documentation: Phantom Bell
Made by David Oladosu
Made by David Oladosu
Phantom Bell is a doorbell that only works when nobody is in front of it. I took a great deal if inspiration from James Pierce’s Obscura 1C for this project. The idea of putting a great deal of thought and intention into something that functions in an unconventional and counterproductive way was a contrast that I wanted to explore more deeply. In this project, I explore the narrative of over-designing a practical product to intentionally set limitations on how it can be used.
Created: February 17th, 2023
The product that I constructed is a doorbell that only functions when it can’t see you. Normally when you use a doorbell, you simply walk up to it and press on it; with my product however, it only generates noise when its button is pressed and its sensor does not detect anything within its line of site.
I took a lot of inspiration from James Pierce’s Obscura 1C for this project. The idea of putting a great deal of thought and intention into something that functions in an unconventional and counterproductive way was a contrast that I wanted to explore. We live in an age where people are always craving something that’s newer, faster, and more efficient; we as a society just always want more. But what would happen if we set intentional limitations on not only ourselves, but on our technologies as well?
In this project, I explore the narrative of over-designing a practical product to intentionally set limitations on how it can be used. The goal of my piece is to raise questions about the direction that technological advancements are headed. How much can we advance technology before it no longer benefits society, but detracts from it? Should we not diverge from the conventional methodology of designing for “more” and for “better”? Or could designing technologies with intentional limitations somehow benefit society in an unforeseen way? These are questions I hope to explore with my piece.
As mentioned before, one of the leading inspirations for my piece was James Pierce’s Obscura 1C. This piece is sort of a crude yet elegant looking camera that functions just like an ordinary one except that it requires you breaking it to see the photos you took. It’s evident from the look of the camera that it required a good bit of care and intention to design and manufacture, yet it doesn’t function nearly as well as ordinary cameras. I found the sort of paradoxical nature of placing a lot of care and intent into something that is crude and unproductive to be a very interesting contrast that had a big influence on my work.
I also took inspiration from the ideas my classmates shared during the What If exercise in class. Most especially, Sarah Kwok’s pose of “What if technology had agency and that it could choose whether or not to perform its intended function, depending on its mood or feelings?” I found this to be a super interesting narrative that I wanted to work with during this investigation.
Another source I took inspiration from is James Pierce’s and Eric Paulos’s paper titled: “Counterfunctional Things: Exploring Possibilities in Designing Digital Limitations.” It presented to me the idea of a “counterfunctional” thing, or, “a thing that figuratively counters some of its own functionality.” (Pierce et al par. 1).
Describe your experience/working prototype: What did you create, how, etc.? What tools and technologies were involved? Include appropriate content and illustration (e.g. a concept video, a video of the device in operation, diagrams, code, etc.) How does it relate or build on existing work (provide acknowledgements or cite this work). You should report this in sufficient detail that anyone knowledgable with electronics etc would be able to reconstruct your implementation. Be sure to include a system diagram, annotated images, code, and a bill of materials.
I started this investigation by thinking about how I could integrate the servo motor with proximity and the doorbell while tying in themes I saw in James Pierce’s work. After a bit of research on pieces similar to Pierce’s, I landed on my idea for a doorbell that responds to stimuli in the environment.
Once I had an idea of what I wanted to build, I created a 3D model in Fusion 360. Before I started fabricating however, I wanted to get familiar with each of the electronic parts I would be using. I started by learning how to wire a button to blink an LED. This surprisingly taught me a lot of neat tricks like using millis() as a timer and using delay to create input lag. After that, I moved on to adding a servo motor, LED strips, and finally, the speaker. Each time I had to learn how to wire a new device, it took several hours for me to get it to work how I wanted it to. I kept running into little mistakes that set me back for hours like wiring the power, ground and digital I/O wires to the wrong side of the LED strip or using components that couldn’t be powered with my Arduino. It worked out for the better though because integrating all of the parts at the end became a lot easier. After I had all of my electronics in order, I laser cut acrylic parts for the case and stuffed my electronics inside.
As stated earlier, the goal of my investigation is to explore topics
surrounding the idea of counterfunctionalism. Why do we as a society have such
a tendency toward designing things that serve us in a specific manner? What
happens to our designs when we approach them in a way the counters the
conventional mode of design? What new perspectives can it bring when we
approach design from the perspective of counterfunctionalism, that is,
designing in a way that counters functionality? Moving forward, I would like to
push the counterfunctionist notion forward by designing artifacts that vehemtly
oppose their intended function. Maybe it’s possible to somehow design something
that serves a new purpose in that way. Maybe it’s possible to push the
imagination of society further past its bounds as we delve deeper into what we
think are limits, and what we make to be limiting.
I am very happy with what I was able to achieve with this project. It functioned how I wanted it to for the most part, and it raised questions about over-design and setting limitations on technology.
One piece of advice that I would really like to incorporate more in the future was making my piece more responsive to people. The way it is now, it randomly pans around the room and reacts based off what happens to be in its line of sight. However, it would be much more dynamic and bizarre if it could sense people in its surrounding and turn toward them!
I would also like to work on the structure of my part more. Currently, its wiring spills out all over the place which isn’t necessarily a bad look, but it is not the look I’m going for considering the effect I’d like my piece to have on people.
Overall, I am excited
to have developed my skills enough to create this piece and I look forward to
the future pieces I plan to work on with my new skillset.
//_______________________________________________________________________________________
//Libraries & Definitions----------------------------------------------------------------
#include <Adafruit_NeoPixel.h>
#include <Servo.h>
#define PIXEL_TYPE NEO_GRB + NEO_KHZ800
//_______________________________________________________________________________________
//Variables------------------------------------------------------------------------------
//Pin allocation
int ledPin1 = 2;
int ledPin2 = 3;
int speaker = 8;
int servoPin = 11;
int button = 12;
int distanceSensorPin = A0;
//Other
int pixelCount = 12;
unsigned long prev_time = millis();
int distanceThreshold = 350;
Adafruit_NeoPixel led1 = Adafruit_NeoPixel(pixelCount, ledPin1, PIXEL_TYPE);
Adafruit_NeoPixel led2 = Adafruit_NeoPixel(pixelCount, ledPin2, PIXEL_TYPE);
Servo servo;
bool servoIncreasing = true; //Keeps track of which way servo should be turning
int servoAngle = 0;
unsigned long motorTimer = millis(); //Keeps track of last time the motor changed its angle
int motorTimerThreshold = 1500; //Sets amount of time that needs to pass before motor turns
int motorAngleChange = 20; //Changes how much the motor changes its angle each turn
//_______________________________________________________________________________________
//Helper Functions-----------------------------------------------------------------------
int getAngle(Servo motor, int motorAngle, bool motorIncreasing) {
if (motorIncreasing == true) {
return motorAngle + motorAngleChange;
}
else {
return motorAngle - motorAngleChange;
}
}
//_______________________________________________________________________________________
//Initialization-------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
pinMode(button, INPUT);
led1.begin();
led1.show();
led2.begin();
led2.show();
servo.attach(servoPin);
servo.write(0);
}
//________________________________________________________________________________________
//Execution-------------------------------------------------------------------------------
void loop() {
int buttonState = digitalRead(button); //Records whether or not button is being pressed
int distance = analogRead(distanceSensorPin); //Records distance detected by sensor
//If nothing is nearby, make LEDs blue and allow doorbell to be rung
if (distance <= distanceThreshold) {
delay(50); //to ensure there's really nobody around
if (distance <= distanceThreshold) {
//Make LEDs Blue
uint32_t c = led1.Color(0, 0, 255);
led1.fill(c, 0);
led2.fill(c, 0);
//Ring doorbell
if (buttonState == HIGH) {
delay(50); //to ensure button is actually being pressed
if (buttonState == HIGH) {
tone(speaker, 53);
}
else noTone(speaker);
}
else (noTone(speaker));
}
else (noTone(speaker));
}
else {
//Make LEDs red
uint32_t c = led1.Color(255, 0, 0);
led1.fill(c, 0);
led2.fill(c, 0);
noTone(speaker);
}
led1.show();
led2.show();
//Make servo motor gradually pan from left to right
if (millis() - motorTimer >= motorTimerThreshold) {
if (servoAngle > 170) {
servoIncreasing = false;
}
if (servoAngle < 10) {
servoIncreasing = true;
}
servoAngle = getAngle(servo, servoAngle, servoIncreasing);
servo.write(servoAngle);
motorTimer = millis();
}
//Serial Monitor
unsigned long curr_time = millis();
if( (curr_time - prev_time) > 50) {
Serial.println(distance);
prev_time = curr_time;
}
}
Click to Expand
Phantom Bell is a doorbell that only works when nobody is in front of it. I took a great deal if inspiration from James Pierce’s Obscura 1C for this project. The idea of putting a great deal of thought and intention into something that functions in an unconventional and counterproductive way was a contrast that I wanted to explore more deeply. In this project, I explore the narrative of over-designing a practical product to intentionally set limitations on how it can be used.