Front view of the unit, set to the "available" status, displayed as me holding my smartphone. I completely enclosed the electronic and mechanical components to make the process feel more magical than understandable.
Brief Explanation
Next year I'm living in a house with four other people. As such, I want to be able to display if I'm busy, sleeping, out of the house, or free -- without texting everyone every single time. This display gives me a whimsical and analog way to communicate my status by selecting a laser-cut card and pushing it up, showing what I'm doing through four easy-to-understand icons.
This is the device set to "available," represented by a phone. A piece in the bottom pushes the card up and stays there.
The side panel is held in place with 4 screws. They are easily removable for ease of access.
(The above caption is pretty good. Image note: this photo is taken from the same place as the one above it, but it's got the focal plane on the chips behind rather than the wires in front. It also has useful alt text.)
A look at the open box. Notice how the
Inside the box, where the servo slides the wooden carriage.
In this video, I show the way I control the activity status using my computer as input. Pressing 1,2, and 3 makes the status go from asleep to DND to available, respectively.
In this video, I show the way the cards cycle on a timer for debug purposes. Each card is pushed up for one second and timed so that there's enough time for each to fall before sliding to the next one.
Initial sketches of the ideas. I initially wanted layers of etched acrylic to catch the light, but I transitioned from LED display to physical pieces, as I felt they would show better at a distance.
Some sketches of how the mechanism would work. I decided between a cam & follower and slider crank mechanism, and settled on the slider crank to save space. The main difficulty lies in making all the offsets work together so that the three moving parts don't fall into each other's guides while keeping movements precise and controlled.
The solidworks assembly. I started by building the carriage that held the cards, then built the housing around it. I imported 3d models of the servos for positioning.
I drew each card out on photoshop, then vectorized them and outlined in illustrator. To make sure everything was the correct size, I drew them on top of the character sprite as separate layers before moving them off.
Lay the mating edges right next to each other to apply a single bead of glue along the line—this saves lots of time.
Assembling the 3D printed pieces together. Turns out my tolerance was basically perfect. I used a hinging lid for easy access of the removable pieces. It turns out this was crucial later on, as if the lid was fixed in place any jams would break either the arm or the housing.
The walls between each card only go down halfway to increase the amount of tolerance for the bottom piece to come up without accidentally hitting another card.
I had a lot of trouble trying to get the screw into the bottom slider. The solution was to drill a hole through the top, where the head of the screw is, to create a snap-fit.
Comparing the initial prototype to the presented version. I compacted the design a decent bit vertically between the two.
Manufcaturing this device required me to limit play as much as possible while also pushing just how much tolerance I can have. To accomplish this, I gave myself at most 1mm between each piece and kept every moving part completely separate, relying on mechanical limits and paths not intersecting at all instead of relying on the software side. One example is how I offset the bottom pushing mechanism so that the laser-cut carriage and cards could glide along the bottom without getting caught on any edge. I also made the housing just wide enough to stop the carriage at both ends so that I only needed to hard code two stops instead of four.
One thing that stuck with me from the crit was "I’m wondering if there are other ways to make use of the space of the housing. Since the mechanism is tall, could you shorten it? I also think it would be more visually interesting if you could see the mechanism through the housing (like by using clear acrylic panels)." Although I can't really shorten the box by too much since I need to fit at least four inches underneath the carriage, the idea of doing something else with the space got me thinking. There is a lot of empty space, and I don't need to be conformed to the box shape. Perhaps i can do a little inset and decorate, like making the structure seem more like a house or adding labels. Another piece of feedback that I really agree with is that "The physicality really lends something to the display of the information." I pivoted near the start of the project to a purely physical display because I wanted to stay away from the ease and convenience that an LED color change or press of a screen brought. Rather, I wanted to push the idea that since we all physically share the space in the house, the project should add to that space physically as well.
Regardless of completion, I am very happy with the results. I spent a good four hours brainstorming and figuring out how the mechanism would work, and I was very pleasantly surprised to find out almost everything worked first try. With so many moving parts, I thought that something would go wrong, but everything was very easily adjustable. However, I wish I had more time to work on the final result, as well as make a wireless way to communicate between a physical button and the device instead of using serial. I found that I enjoyed using laser cutting more than I imagined. My classes end at 5, so I ended up not having time to 3D print a lot of my parts and had to laser cut instead. I found that using the laser cutter gave me a level of speed and precision that 3D printing could not offer, so I ended up changing a lot of my more experimental or underdeveloped designs to laser cut for iterative purposes. The cut wood also looked prettier, in my opinion. Due to lack of time, I also ended up removing LEDs completely and changing edge-lit acrylic to cut-out wood panels, which made everything a lot more consistent. This was probably the better option out of the two. However, I did spend too much time messing around with hot glue and superglue, and I should've built an easier way to snap components together. Overall, I should've given myself two days to print and moved everything up. Given more time, I'd like to house everything in wood and make it more decorative, and maybe make cards for everyone.
/*
Real-Life Location Monitor
Takes a Serial input and maps it to a servo, which moves to a set location.
A second servo then pushes the card out.
pin mapping:
Arduino pin | role | description
___________________________________________________________________
5 output attached to pushing mechanism
3 output drives the carriage mechanism
Code released to the public domain by the author, 4/4/26
Timothy Yang, tyang3@andrew.cmu.edu
*/
#include <Servo.h>
Servo slideMotor;
Servo pushMotor;
const int SLIDEMOTORPIN = 3;
const int PUSHMOTORPIN = 5;
int keystroke;
void setup() {
// put your setup code here, to run once:
slideMotor.attach(SLIDEMOTORPIN);
pushMotor.attach(PUSHMOTORPIN);
Serial.begin(9600);
pushMotor.write(20);
}
void loop() {
if (Serial.available()>0){
keystroke = Serial.read();
switch (keystroke) {
case '1':
// Action A
stayUp(1);
break;
case '2':
// Action B
stayUp(2);
break;
case '3':
// Action C
stayUp(3);
break;
default:
break;
}
}
}
void position(int pos) {
int value;
if (pos == 1) value = 43; //furthest
if (pos == 2) value = 80;
if (pos == 3) value = 120;
if (pos == 4) value = 180; // closest
slideMotor.write(value);
delay(1000);
}
void stayUp(int pos) {
pushMotor.write(20);
delay(300);
position(pos);
pushMotor.write(160);
delay(300);
}
void pop(int time) {
pushMotor.write(160); //up
delay(3*time);
pushMotor.write(20); //down
delay(time);
}