missÜ
Made by Lulin Shan, Rahul Jha and Yuchuaun Shan
Made by Lulin Shan, Rahul Jha and Yuchuaun Shan
Connected device that helps people living across time zones stay connected
Created: December 12th, 2021
A statement on the design of the product, intentions and decisions you’ve made. Clearly explain and provide a succinct overview of the exploration space and how the proposed prototype develops a solution, and/or a critical examination of it.
Feeling the sense of love and belonging from family is a fundamental human need that is crucial for the growth and development of each person throughout the life course. However, fulfilling this need can be especially challenging for transnational families as both long physical distances and large time zone differences provide barriers to the sense of social presence among family members. To help members of transnational families better connect with each other, we propose an ambient IoT device that uses LED light and the movement of a physical object to signal availability for synchronous check-ins such as via phone call or video chat.
In addition, to enhance the sense of different time
zones, the device will also indicate the time at the other family member’s
place through the brightness of the light. We anticipate that this device will
not only make it easier for members of transnational families to find a time to
call each other, but by making remote communication embodied and tangible
through the ambient device, it will also foster a better sense of family
presence and connection.
A description of the approach you’ve taken (e.g. a slow device or a ambient device) and a rationale for this approach.
We decided our product to be an ambient IoT device. This device will not constantly nudge the users, it will silently indicate the availability of one user to other based on the cool lights. The lights need not to be bright and fluctuating. They will have slow fading effect for the day/night indication.
Initially we planned to use two switches for separate options and three light indications for different indications – feedback, day/light and availability. However, based on the class theory/lecture about designing of ambient devices we learned that the ambient product must have simplicity and glanceability. So, we later changed the design to use only one switch and two light indications.
Situate the design proposal based on at least three references to past works. References to concepts, theory, and methods introduced in class should also be made. These should be well-cited and illustrated.
We are all international students with our immediate family members living in a different country. We looked into precedents around devices that facilitate remote communications across time zones and awareness devices that help to share each party’s locations.
FamilyStories is an asynchronous audio storytelling system. The system is comprised of three different devices with different contextual features. We found TimeKnot most interesting because it intentionally delays the delivery of messages so that the message arrives at a suitable time for the receiver. With that, large time zone differences could be ‘synchronized’. This project expanded our thinking about ways to enliven asynchronous communication, which is always considered might not be as rich as synchronous communications.
The other two precedents apply a similar design principle in different forms. Whereabouts Clock is an awareness device that displays family members’ current locations in four categories, which are home, work, school, elsewhere. People’s locations are tracked through cell phones and they can choose which category a place belongs to, therefore controlling what shows on the display. This project expanded our thinking that communicating locations among family members is less about knowing the geographical location of each other, but more about building emotional connections with one another.
Weasley Whereabouts Clock is another example of exploring location awareness in families. Rather than having two hands that give the time of day, this clock has a hand for each member that points to wherever that person is among 13 categories. From this precedent, we learned that the timing of the communication is more important than the speed of delivery.
Additionally, the theory and lab lessons from the class turned out to be of great help in the design and implementation of the product. Lessons like advanced output - neopixel and motors, networking of two devices using echo were specifically very helpful and important factors.
Provide a high level design overview that considers and describes: what context it operates in ; what it does and how it behaves; how someone would or could interact with it; and how these interactions unfold to lead to the desired outcome? Detail your design proposal with a series of illustrations.
Our concept is a connected device used between family members living across time zones. We propose an ambient IoT device to signal availability for synchronous check-ins via phone call or video chat. Each device is in a small house-shaped form. The color of the roof light represents the daylight at the other family member’s place. The interior light and the movement of the house figurine signal the availability of the other party.
When user A is ready for a talk, they can use a switch to turn on their availability mode, which will light up the other party’s device (interior light is on) and trigger the movement of the house figurine. The roof light on user A’s device will blink several times, indicating that the availability mode turns on. Once user B sees that user A is available, they can decide if they want to initiate a synchronous check-in with user A.
The availability mode will automatically turn off after a specific period, such as 30mins or one hour etc. When time runs out, the interior light in user B’s device will gradually fade to dark while the house character slowly moves down until it disappears in the window. User A can use the switch to turn off availability mode as well.
There are four states regarding the interactions between two devices:
V0. Initial concept of a communication tool for transnational families
The inspiration for our project stemmed from the home visit activity in week 4. Because we are all international students, we resonate with the problem of finding a time to speak with our families who live overseas. Therefore, we wanted to design a tool that signals the availability of our families. We explored a few possibilities and settled down on the house form as it's a common metaphor for home.
V1. Indicating availability and daylight
In the first round of designing the interaction, we focused on sending availability information and decided to use the servo and a neopixel ring as the signal. In addition, we decided to add a led strip under the roof to indicate time on the other end.
V2. Providing feedback to the sender
One feedback we received in class was that it would be helpful to let the sender know when the message is delivered to the other device. We first considered adding a chimney with LED and having the chimney light up as the feedback for the sender. However, it occurred to us that having three different light as output might cause confusion. Therefore, we decided to incorporate the message into the roof light using a blinking pattern that is activated after the switch is turned on.
V3. Adding a base to house the hardware
While assembling the hardware and the house model together, we ran into an issue that the wires and other mechanical parts were visible through the window. Therefore, we decided to add a base to the house to put the parts. It worked very well as it not only allowed us to hide the messy wires, but also made the house look more grounded.
V4. Slowing down the servo
In our final presentation, we received the feedback that the figure in the house moved up too quickly and it gave out a feeling of surprise. Therefore in our final prototype, we updated the code to change the servo position step by step and with delays to create a smoother movement as shown in the video.
Deliver a functional mock-up of the device(s) prototyped using Particle. Document the outcome itself (code, circuit diagrams, photos, design files, 3d models, video demonstrations, etc. as required) and provide a short narrative. A bill of materials (sensors, input devices, actuators, and other components) should be provided. This documentation should be sufficiently rich to allow anyone to repeat/recreate it.
// This #include statement was automatically added by the Particle IDE.
#include <neopixel.h>
// set up neopixel: library, pixel COUNT, PIN and TYPE
#include "neopixel.h"
#define PIXEL_PIN A2
#define PIXEL_PIN2 A5
#define PIXEL_COUNT 16
#define PIXEL_TYPE WS2812
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN2, PIXEL_TYPE);
long lastPublishedAt = 0;
// time delay before we should publish a new event
int publishAfter = 5000;
// add switch
int switchPin = D3;
int buttonState = -1;
int blinked = 0;
// add servo
Servo myServo;
int servoPin = A3;
int servoPos = 0;
// variable to store availability
String availability = "unavailable";
void setup()
{
pinMode(switchPin , INPUT_PULLUP);
myServo.attach(A3);
//******UPDATE EVENTNAME*******//
Particle.subscribe( "missU" , handleSharedEvent );
strip2.begin();
strip2.show();
}
void loop(){
publishMyEvent();
// turn on roof light
for(int i=0; i < strip2.numPixels(); i++){
strip2.setPixelColor(i, 255, 153, 51);
strip2.setBrightness(40);
strip2.show();
}
delay(100);
// delay for a bit
delay(100);
int buttonReading = digitalRead(switchPin);
if(buttonReading == HIGH){
if(blinked == 0){
delay(500);
for(int i2=0; i2 < strip2.numPixels(); i2++){
strip2.setPixelColor(i2, 255, 153, 51);
strip2.setBrightness(10);
strip2.show();
}
delay(400);
for(int i2=0; i2 < strip2.numPixels(); i2++){
strip2.setPixelColor(i2, 255, 153, 51);
strip2.setBrightness(40);
strip2.show();
}
delay(400);
for(int i2=0; i2 < strip2.numPixels(); i2++){
strip2.setPixelColor(i2, 255, 153, 51);
strip2.setBrightness(10);
strip2.show();
}
delay(400);
for(int i2=0; i2 < strip2.numPixels(); i2++){
strip2.setPixelColor(i2, 255, 153, 51);
strip2.setBrightness(40);
strip2.show();
}
delay(400);
for(int i2=0; i2 < strip2.numPixels(); i2++){
strip2.setPixelColor(i2, 255, 153, 51);
strip2.setBrightness(10);
strip2.show();
}
delay(400);
for(int i2=0; i2 < strip2.numPixels(); i2++){
strip2.setPixelColor(i2, 255, 153, 51);
strip2.setBrightness(40);
strip2.show();
}
delay(400);
}
blinked = 1;
}
}
void publishMyEvent(){
// check switch status
int buttonReading = digitalRead(switchPin);
// check that it's been 10 secondds since our last publish
if( buttonReading != buttonState ){
//******UPDATE EVENTNAME*******//
String eventName = "missU" + String(System.deviceID());
// then we share it out
// if switch is on, publish an event
if(buttonState == LOW){
availability = "available";
blinked = 0;
Particle.publish(eventName, "available");
}else{
availability = "unavailable";
Particle.publish(eventName, "unavailable");
}
}
buttonState = buttonReading;
//if(lastPublishedAt + publishAfter < millis()){
// we just pubished so capture this.
// lastPublishedAt = millis();
//}
}
// Our event handdle requires two bits of information
// A character array that consists of the event name
// A character array that contains the data published in the event we're responding to.
void handleSharedEvent(const char *event, const char *data){
String eventName = String(event);
availability = data;
String deviceID = System.deviceID();
// device id = e00fce688578dddab57c1e9d
// event = "missUe00fce688578dddab57c1e9d"
// eventV2 = "missUe00fce68d1958060a1d74bac"
if( eventName.indexOf( deviceID ) != -1 ){
return;
}
turnOnAvailabilityLight(availability);
servoControl(availability);
}
// function to turn on the window light based on availability(event data)
int turnOnAvailabilityLight(String command){
if(command == "available"){
for(int i=0; i< strip.numPixels(); i++){
strip.setPixelColor(i, 255, 153, 51);
strip.setBrightness(10);
strip.show();
delay(100);
}
return 1;
}else{
for(int i=0; i< strip.numPixels(); i++){
strip.setPixelColor(i, 0, 0, 0);
strip.show();
delay(100);
}
return -1;
}
}
// function to turn on servo based on availability(event data)
int servoControl(String command){
if(command == "available"){
for(int i=0; i<70; i+=2){
myServo.write(i);
delay(30);
}
return 1;
}else{
myServo.write(0);
return -1;
}
}
Click to Expand
Discuss what you achieved with the project, what did and didn’t work, what you learned, and what you would do if you took this project forward.
Achieved:
Not Achieved:
Moving Forward:
We received the below feedback from the judges which sounds useful. We would like to implement them into our prototype.
Provide credits to any sources of code, images, etc. that you have used directly within this project.
Our code is built on the code template for paired devices that's provided on the class website: https://diotlabs.daraghbyrne.me/docs/working-with-data/communicating-events/paired-devices
Provide a list of academic papers, articles, videos, etc that you make reference to in your documentation.
1. FamilyStories- Asynchronous audio storytelling for family members across time zones.
2. Whereabouts Clock - Awareness device displaying family members’ current locations in four categories – home, work, school, elsewhere
3. Weasley Whereabouts Clock - An IoT Family Location Tracker