49713 Designing for the Internet of Things
· 18 members
A hands-on introductory course exploring the Internet of Things and connected product experiences.
Found in Diot 2019: Social Objects - Part 3
Connect parents and children in different locations and enable them to share status.
The Hubs are a pair of interactive devices that connect students/young professionals who live in different geographic locations from their parents. Both parties can use the device to update their status (busy, sleeping, available for a chat, etc.) and communicate in a subtle way.
Picture this: as an international student at Carnegie Mellon University, you traveled all the way from your home country to the states and are living a fast-paced life now. Because of the time difference, you and your parents seemed to gradually build a communication gap. They wanted to know more about your life, but were afraid that you were too busy to respond; you wanted them to know more about your life, but sending "Hey mom I'm home" or "Hey dad I'm going to sleep" messages on smartphone feels like a robot reporting schedule.
The Hubs aim to build communication between young professionals and their families. Young professionals are usually busy with work and social life, but at the meantime it is important for them to keep connected with their family, especially in long distance. The friction in the communication between these two parties are that the parents want to know when their children are available for a call/video chat but do not want to disturb them with text messages, which are intimidating and disturbing.
With this device, each party keeps one at home and can control the other’s device. By default, both lights are off. When the kid is home and available for talk, he/she switches the toggle to the right side, which triggers the light on the other end, i.e. in his/her parents home, to white, indicating she/he is available for a chat. Same applies to their parents' device. Whenever they are unavailable, they can switch the toggle to the left and the other’s light will turn on.
Ideation
At first, we were focusing on couples in a long-distance relationship, and we went over several discussion on how the interaction would be for the device. Ideally, we wanted to create a subtle and smooth activation mechanism, like making the device in sphere shape and people can gently rub or pat the top to activate. However, this was not feasible due to technical limitation and timeframe, so we shifted our target group to a broader audience. Noticing that all three of our group members were international students, we had all been through the stage when we started living in another country by ourselves, wanted to talk with our parents but were lack of common interests, so we began to think: how might we design an internet-connected device that is easy to use and can close the gap between different generations?
Primary Research
We conducted several interviews of international students in the states to identify user needs and pain points. A common theme was that most participants video chat with their parents 1 time per week, and they rarely share their life status with their parents, unless critical moments like getting a job offer. People said that their parents had different schedules with them and sending trivia things just felt a bit awkward.
Problem Validation & Iteration
Based on our interviews, we noticed that people had an unfulfilled need: share daily activities with their parents in a non-intrusive way. On top of this, we added the feature of customization, letting users decide what each color represents.
// This #include statement was automatically added by the Particle IDE.
//Include required libraries
#include <neopixel.h>
#include <math.h>
int potPin = A4; //Initialize potentiometer and neopixel variables
int neoPin = D6;
#define PIXEL_PIN D6 //Declare neopixel variables
#define PIXEL_COUNT 12
#define PIXEL_TYPE WS2812B
// This value will store the last time we published an event
long lastPublishedAt = 0;// this is the time delay before we should publish a new event from this device
int publishAfter = 2000;// this is the time delay before we should publish a new event
int otherDevicePos = 0; // from this device
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
void setup()
{
pinMode (potPin, INPUT_PULLDOWN);
strip.begin();
Particle.subscribe("NicoleTroyGaurav", color); //Custom event name. Calls the color function
Particle.variable ("Position", otherDevicePos); //Publish potentiometer position to monitor
}
void loop()
{
int position = analogRead (potPin); //Read position of the poteiometer
String value = String (position); //Send the poisition as a string
if( lastPublishedAt + publishAfter < millis() ) // check that it's been 10 secondds since our last publish
{
String eventName = "NicoleTroyGaurav" + System.deviceID(); // then we share it out
Particle.publish(eventName, value);
lastPublishedAt = millis();
}
if (otherDevicePos >= 0 && otherDevicePos < 200)
{
turn_off_light();
}
else if (otherDevicePos >= 200 && otherDevicePos < 1000)
{
blue();
}
else if (otherDevicePos >= 1000 && otherDevicePos < 2000)
{
yellow();
}
else if (otherDevicePos >= 2000 && otherDevicePos < 3000)
{
green();
}
else if (otherDevicePos >= 3000 && otherDevicePos < 3900)
{
pink();
}
else if (otherDevicePos >= 3900)
{
int position_self = analogRead (potPin);
if (position_self < 3900)
{
white();
}
else if (position_self >= 3900) //Breathing white lights on both, when both are >3700
{
white_breathing();
}
}
delay( 50 );
}
void color (const char *event, const char *data)
{
String num = String (data);
String eventName = String(event);
String deviceID = System.deviceID();
if (eventName.indexOf(deviceID) != -1) //Check to make sure self particle is not activated
{
return;
}
otherDevicePos = num.toInt(); //Convert string position to int
}
void turn_off_light()
{
uint32_t c = strip.Color(0, 0, 0, 0);
for (int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, c);
}
strip.show();
}
void blue()
{
uint32_t c = strip.Color(0, 0, 200, 0);
for (int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, c);
}
strip.show();
}
void yellow()
{
uint32_t c = strip.Color(200, 200, 0, 0);
for (int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, c);
}
strip.show();
}
void green()
{
uint32_t c = strip.Color(0, 200, 0, 0);
for (int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, c);
}
strip.show();
}
void pink()
{
uint32_t c = strip.Color(244, 66, 220, 0);
for (int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, c);
}
strip.show();
}
void white()
{
uint32_t c = strip.Color(200, 200, 200, 0);
for (int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, c);
}
strip.show();
}
float white_breathing()
{
float val = (exp(sin(millis()/2000.0*M_PI)) - 0.36787944)*108.0;
Serial.println(val);
uint16_t i;
uint32_t c = strip.Color(val, val, val);
for(i=0; i< strip.numPixels(); i++)
{
strip.setPixelColor(i, c );
}
strip.show();
}
Click to Expand
A hands-on introductory course exploring the Internet of Things and connected product experiences.
Connect parents and children in different locations and enable them to share status.
February 18th, 2019