What did you create and why? Provide a brief statement of the final bespoke device

Our user, during the interview, indicated that he was struggling with keeping up with the mails in the mailbox. He didn't want to check it every day since it was unnecessary, but he also wanted to be notified when a mail eventually arrived. 

We conceptualized a smart mailbox that would detect if there is mail in the mailbox and also indicate the number of mails in the mailbox. These indications were represented in an everyday object in the house - in this project, our user frequented the coat hanger - which would light and change color to show how long mail has been unread and also change color saturation to indicate the number of mails in the mailbox. 

LED color status - 

- Breathing Blue: mail has been received

- Breathing Pink: >10 and <=20 seconds since mail has been collected (only to demonstrate for a prototype. in reality, this can be configured based on users' preference)

- Breathing Yellow: >20 seconds since mail has been collected. It stays in this final state till the time the mail has been collected.


Inspiration and Context

What are the precedent projects? Describe what informed your ideas and your outcome? How does your outcome relate to other work in the field? 

UPS and FedEx send users a notification email confirming the status of the package. It also scans the mail and sends the image to the user as confirmation on the day of delivery. 

Mr. Postman is an IoT application that uses solar power, an automatic locking system, a WiFi-equipped Rasberry Pi brain, and an accompanying app to let you know when a mail has arrived,  when a mail has been collected and allows security features to safely unlock the mailbox. It is still enabled by email and in-app notifications.

It was critical to our solution that we create an experience that would nudge the user rather than be obtrusive with notifications on the phone. We created and delivered this experience using an object in the house that the user frequents - and integrated that with computing. Our hypothesis was that the user doesn't need to check mail as soon as it arrived, but be in a position to be reminded that there was mail to be collected. 

This experience through an ambient object is the difference between earlier projects and our solution.    



Who is your stakeholder? What did you learn when you interviewed them? How did the co-design process help you uncover an interesting avenue for your bespoke device? 

Our user is a Masters' student at Carnegie Mellon University who is really busy with graduate school. During our interview with the user, he mentioned that he recently checked his mailbox after 2 months and collected close to 20 mails. Most of them were bills and some of them were promotional material. During the co-design, we came up with the idea that there could be a notification on the phone every time a mail arrived. We also discussed having a notification come up whenever the user was within 100 meters of the mailbox to allow him to collect the mail on his way to the apartment. 

While both these solutions were practical, we wanted to move away from the 'black-glass' that is the mobile phone and rather create an 'experience' that would achieve our objective. 



Write about the big ideas behind your project? What are the goals? Why did you make it? What are your motivations?

The big idea behind project "Got Mail?" was that we wanted to create an experience for the user that would help him manage his mail better. 

2 direct goals were - 

1. Detect when a mail was received and how long had it been since the user read it

2. Detect how many mails were in the mailbox

An experiential goal was to move away from email/message notifications and create an ambient object that would help achieve our 2 direct goals.

(Concept diagrams:)


Prototyping Process

How did you design and implement your initial prototype? What were the design choices? What challenges were encountered and how did you resolve them?Illustrate you initial prototype.

Implementation choice

The focus of the initial prototype was to get the functionality in place. Our team initially planned to use an FSR sensor to detect when a mail arrived, an IR sensor to detect whenever a subsequent new mail was put in the mailbox, and a neopixel to indicate the status of mail. To simulate the weight of the mail, used a pair of magnets and a spring to calibrate the FSR.

In addition to this, our team debated integrating notifications to the user when the user was in close proximity to the mailbox, but we decided against it since we wanted to move away from any type of notification on the phone. 

Design choice

In terms of the form, we created a 3D render of a wooden bowl that would act as the 'enchanted' object in the house. The idea was that we wanted to use an object that the user would see every day and the bowl was a candidate, since most users put their keys and cards in a bowl at the entrance, and the object is always in focus. 


Iteration and Refinement

We received some really good feedback on the implementation as well as the form. 

Feedback on implementation

Our user suggested that we use milder colors rather than RGB to indicate the status of the mail. Also, the FSR that was to be used for detecting mail, was difficult to calibrate without sufficient weight put on it. This prompted us to use a relay switch first, and only when the switch was on (indicating that a mail had been received) would the FSR be used to show the color on the neopixel. This increased the efficiency of our solution and worked significantly better than our prototype. 

Feedback on design

While testing our prototype with the user, we noticed that he was not used to keeping items in a bowl. Based on further discussions we uncovered that one of the objects the user frequents every day was the coat hanger. The coat hanger was used not just for hanging coats, but also keys and caps. This observation inspired us to use the coat hanger as an object that we can augment with functionality.


Final Prototype

  • Completed code (please find below)
  • A circuit diagram (please find below)
  • A list of parts (please find below)
  • A video of the completed project (please find below)
// This #include statement was automatically added by the Particle IDE.
#include <neopixel.h>

#define PIXEL_PIN D0
#define PIXEL_COUNT 16
#define PIXEL_TYPE WS2812 // or WS281B or WS2813

Adafruit_NeoPixel strip = Adafruit_NeoPixel( PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE );

// Pixel number
uint16_t i;

int colorValue_R = 0; 
int colorValue_G = 0;
int colorValue_B = 0;

// Color off
uint32_t color_Off = strip.Color( 0, 0, 0 ); // unsigned integer of 32 bits
// Color show
uint32_t color_Show = strip.Color( 0, 0, 0 ); // unsigned integer of 32 bits

// Define a pin that we'll place the FSR on
// Remember to add a 10K Ohm pull-down resistor too.
int sensorPin = A5;
int relayPin = D5;

// Create a variable to hold the FSR reading
int sensorReading = 0;
//variable to hold relay status
int relayStatus = LOW;

int letter_weight = 0;

unsigned long timeStartedAt = 0;
unsigned long timeElapsed = 0;

void setup()
    Particle.variable( "sensor_reading", &sensorReading, INT );
    Particle.variable( "letter_weight", letter_weight );
    Particle.variable( "time_elapsed", timeElapsed );
    Particle.variable( "relaystatus", relayStatus );
    Particle.function( "led_Breathe", led_Breathe );
    pinMode(relayPin, INPUT_PULLUP);
    strip.show(); // Initialize all pixels to 'off'; clear the memory; important, don't remove

void loop(){
    // Use analogRead to read the photo cell reading
    // This gives us a value from 0 to 4095
    sensorReading = analogRead( sensorPin );
    letter_weight = constrain( map( sensorReading, 0, 100, 0, 100 ), 0, 100 );
    relayStatus = digitalRead( relayPin );
    if( relayStatus == HIGH){
        timeElapsed = millis() - timeStartedAt;
        if( timeStartedAt == 0 ){
            timeStartedAt = millis();
            timeElapsed = millis() - timeStartedAt;
            colorValue_R = 0;
            colorValue_G = 0;
            colorValue_B = 255;
        else if( timeElapsed <= 10*1000 ){
            colorValue_R = 0;
            colorValue_G = 0;
            colorValue_B = 255;
        else if( 10*1000 < timeElapsed && timeElapsed <= 20*1000 ){
            // Pink
            colorValue_R = 255;
            colorValue_G = 20;
            colorValue_B = 147;
        else if( timeElapsed > 20*1000 ){
            // Yellow
            colorValue_R = 255;
            colorValue_G = 255;
            colorValue_B = 0;

        timeStartedAt = 0;
        timeElapsed = 0;
    // wait 1/20th of a second and then loop

int led_Breathe(String arg){
    // make LEDs breathe
    for( int b = 0; b < 255; b++ ){
        for( int i = 0; i < strip.numPixels(); i++ ){
            int colorValue_R_new = colorValue_R * b/255 * letter_weight/100.0;
            int colorValue_G_new = colorValue_G * b/255 * letter_weight/100.0;
            int colorValue_B_new = colorValue_B * b/255 * letter_weight/100.0;

            color_Show = strip.Color( colorValue_R_new, colorValue_G_new, colorValue_B_new );
            strip.setPixelColor( i, color_Show );
    for( int b = 255; b >= 0; b-- ){
        for( int i = 0; i < strip.numPixels(); i++ ){
            int colorValue_R_new = colorValue_R * b/255 * letter_weight/100.0;
            int colorValue_G_new = colorValue_G * b/255 * letter_weight/100.0;
            int colorValue_B_new = colorValue_B * b/255 * letter_weight/100.0;
            color_Show = strip.Color( colorValue_R_new, colorValue_G_new, colorValue_B_new );
            strip.setPixelColor( i, color_Show );
Click to Expand

List of Components

  • A Breadboard
  • An Argon Microcontroller
  • A NeoPixel led set
  • A FSR sensor
  • A 10kΩ Resistor
  • A 1kΩ Resistor
  • A Pushbutton
  • Jumper Wires

Next Steps

What would you do if you took this project forward and why? What would you do differently? What would you need to consider if you took this idea forward and why? 

The next logical step on this project is to experiment with connectivity between the mailbox and the augmented object. We have a couple of options - either use WiFi that encompasses both the house and the mailbox or use LTE in the mailbox to publish a signal to the cloud that would get subscribed by the argon in the augmented object. 

The other aspect that we would like to work on is to reward the user for their actions. Every time a user accomplishes a task by collecting mail, there could be a mechanism to reward the user for their efforts. This creates a better interaction between the user and the augmented object.

We would also like to finalize the form of the object in terms of the material, shape, and weight, to test the product in the field. 


We would like to think about the interaction between the user and the augmented object a little more. We realized through feedback that the interaction at the moment is either while the user is going out or is coming in. In both these cases, there is always something else that is prioritized for the user other than collecting mail. So even if we are able to notify and 'nudge' the user to check the mail, we cannot expect the user to immediately perform the task. This may induce a feeling of guilt in the user which may be counteractive to the objective we want to achieve.

Another aspect brought to light by our professor during the critique session was that the mailboxes are actually Federal property, so it may not be possible to integrate commercial solutions within it. This may require completely rethinking the approach to the problem.


Team reflection

The 2 sets of feedback we received, one from the user and the other during our design critique, helped us shape the project better. It convinced our team that we were moving in the right direction and that we were solving a 'real' problem.

One of the interesting comments made during the critique was that we could use the object and think of other implementations to include reminders when you forget your phone, wallet, keys, and ID before leaving the house. This is definitely worth exploring and it makes for a compelling case to extend this concept. 

Lastly, while learning how concepts about neopixels and FSR sensors, the focus is always on the ability to control these elements. After we created 'Got Mail?' we realized that we had used the same elements, but just given it context, and put it into a form, to solve a real problem. It just goes to show that solutions don't have to be complex, involving multiple elements - all that matters is how you decide to use the elements.

Share this Project


49713 Designing for the Internet of Things

· 16 members

A hands-on introductory course exploring the Internet of Things and connected product experiences.




November 26th, 2019