Companion Minion
Bringing parents and children together
Made by Pedro Mendes, skokate, Alex Surasky-Ysasi and kaylageer
Made by Pedro Mendes, skokate, Alex Surasky-Ysasi and kaylageer
Designed for parents who often travel for work and their children, the plush Minion and Minion key-chain enable the sharing of photos from the parent's travels (or the child's day) to one another via the cloud.
Created: February 3rd, 2015
Modern life for families require a lot of sacrifices. To be competitive in the workplace nowadays means, besides knowledge and hard work, mobility and accessibility. Laptops, smartphones and tablets all increase productivity dramatically, but also bring the office into the home, anytime and anywhere. Nevertheless, a lot of work still require the physical presence of people, and most people might be called upon a business trip on short notice, creating havoc in the family life and plans.
However, we believe that the same technology that sometimes separate has the power to bring people together. By harnessing the power of the Internet of Things, the cloud, any smartphone and an emotionally significant physical object (a Minion!), we look to retain and fortify the bonds between parents and children, even when far away.
A pair of toys that, when a paw is squeezed in one, it will take a picture, store it in the cloud, and cause the other to pulse a LED light to indicate that a new image is waiting. The image can be seen through any connected device, like a phone or tablet with access to the cloud. The toys are proposed in the format of Minions, since they elicit a very emotional response in children, and have two sizes: a large one for children a small one, key-chain sized, for parents to travel easily with it.
Parent & Child (5+ because of use of tablet/phone to see image)
Background: Parent often travels for work, so they purchase the connected stuffed Minion and keychain counterpart to share photos with their child.
The first step of the process was to brainstorm ideas. After letting go of ideas related to couples, the team decided that families experience challenges in terms of maintaining a meaningful balance between work requirements and physical presence. We considered that the interaction between parents and children is the one most impacted by absence, as it can cause fear and even lead to separation anxiety disorder.
The team also decided that the format of the product should resonate with children, eliciting a calming and emotional response. Therefore a Minion was chosen, as they are funny, enjoyable and silly “creatures” that make people smile. Even adults =)
Bill of Materials: Circuit Layout.fzz
C:/Users/Alex/Documents/CMU/IoT/Creative2 Doc/Circuit Layout.fzz
Tuesday, February 3 2015, 15:19:19
Assembly List
Label Part Type Properties
LED1 Red (633nm) LED leg yes; color Red (633nm); package 5 mm [THT]
Part1 Spark Core (v1.0) name Spark Core; revision v1.0; manufacturer Spark Devices; variant variant 1
R1 220Ω Resistor tolerance ±5%; package THT; pin spacing 400 mil; resistance 220Ω; bands 4
S1 Pushbutton package [THT]
S2 Pushbutton package [THT]
Shopping List
Amount Part Type Properties
1 Red (633nm) LED leg yes; color Red (633nm); package 5 mm [THT]
1 Spark Core (v1.0) name Spark Core; revision v1.0; manufacturer Spark Devices; variant variant 1
1 220Ω Resistor tolerance ±5%; package THT; pin spacing 400 mil; resistance 220Ω; bands 4
2 Pushbutton package [THT]
//This code is designed for the Minion connection tool
//This code is for the parent side of the device
//When the hand of a minion is pressed a picture is taken
//by the activation of a servo motor that presses the capacitive touch
//button on an iPhone camera that is already in camera mode
//Once this picture is taken, it sends it to the cloud using
//IFTTT protocol which syncs it dropbox, when this happens
//a signal is sent to the other matching Minion, so it's light turns on
//when the child acknowledges
//push buttons
int takephotobutton = D0;
int photoseenbutton = D1;
//LED
int ledPin = D2;
//counter that keeps track of photos parent has taken since child last checked
int photocounterP=0;
void setup() {
Spark.variable("photocount", &photocounterP, INT);
// sets pin as input
pinMode(takephotobutton, INPUT_PULLUP);
// sets pin as input
pinMode(photoseenbutton, INPUT_PULLUP);
// sets pin as output
pinMode(ledPin, OUTPUT );
//Subscribe to child core's photo activation feed
Spark.subscribe("AASY/Child", handlePhotos);
//Subscribe to child's feed for having viewed parent's photos
//Spark.subscribe("AASY/ChildView", countReset);
}
void loop() {
//check to see if takephotobutton is pressed
//takephotobutton is wired so that it will output LOW when pressed down
int takephoto = digitalRead(takephotobutton);
//update photo count
if(takephoto == LOW){
photocounterP = photocounterP + 1;
}
//if photocount is greater than one send to the cloud that photos available
if(photocounterP >0){
Spark.publish("AASY/Parent", "PHOTO", 60, PUBLIC);
}
//check to see if photoseenbutton is pressed
//photoseenbutton is wired so that it will output LOW when pressed down
int photoseen = digitalRead(photoseenbutton);
//if photo has been seen then let child core know
if(photoseen == LOW) {
Spark.publish("AASY/Parent", "VIEW", 60, PUBLIC);
digitalWrite(ledPin, LOW);
}else{
//Spark.publish("AASY/ParentView", "NO", 60, PUBLIC);
}
delay(10000);
}
void handlePhotos( const char *event, const char *data) {
if(strcmp(data, "PHOTO")==0) {
digitalWrite(ledPin, HIGH);
}
if(strcmp(data, "VIEW")==0) {
photocounterP = 0;
}
}
/*
//handler function that turns other device's LED on when this device takes
//a photo
void ledToggle(const char *event, const char *photowaiting) {
if(strcmp(photowaiting, "YES")==0) {
digitalWrite(ledPin, HIGH);
}
}
//handler function to reset photo counter on paired device when photoseen
//button has been pressed
void countReset(const char *event2, const char *photoseen){
if(strcmp(photoseen, "YES")==0){
photocounterP = 0;
}else{
//tester code to see if the this countReset is running at all
//photocounterP= photocounterP + 1;
}
}
*/
Click to Expand
//This code is designed for the Minion connection tool
//This code is for the child side of the device
//When the hand of a minion is pressed a picture is taken
//by the activation of a servo motor that presses the capacitive touch
//button on an iPhone camera that is already in camera mode
//Once this picture is taken, it sends it to the cloud using
//IFTTT protocol which syncs it dropbox, when this happens
//a signal is sent to the other matching Minion, so it's light turns on
//when the child acknowledges
//push buttons
int takephotobutton = D0;
int photoseenbutton = D1;
//LED
int ledPin = D2;
//counter that keeps track of photos parent has taken since child last checked
int photocounterC=0;
void setup() {
Spark.variable("photocount", &photocounterC, INT);
// sets pin as input
pinMode(takephotobutton, INPUT_PULLUP);
// sets pin as input
pinMode(photoseenbutton, INPUT_PULLUP);
// sets pin as output
pinMode(ledPin, OUTPUT );
//Subscribe to child core's photo activation feed
Spark.subscribe("AASY/Parent", handlePhotos);
//Subscribe to child's feed for having viewed parent's photos
//Spark.subscribe("AASY/ParentView", countReset);
}
void loop() {
//check to see if takephotobutton is pressed
//takephotobutton is wired so that it will output LOW when pressed down
int takephoto = digitalRead(takephotobutton);
//update photo count
if(takephoto == LOW){
photocounterC = photocounterC + 1;
}
//if photocount is greater than one send to the cloud that photos available
if(photocounterC >0){
Spark.publish("AASY/Child", "PHOTO", 60, PUBLIC);
}
//check to see if photoseenbutton is pressed
//photoseenbutton is wired so that it will output LOW when pressed down
int photoseen = digitalRead(photoseenbutton);
//if photo has been seen then let child core know
if(photoseen == LOW) {
Spark.publish("AASY/Child", "VIEW", 60, PUBLIC);
digitalWrite(ledPin, LOW);
}else{
//Spark.publish("AASY/ParentView", "NO", 60, PUBLIC);
}
delay(10000);
}
void handlePhotos( const char *event, const char *data) {
if(strcmp(data, "PHOTO")==0) {
digitalWrite(ledPin, HIGH);
}
if(strcmp(data, "VIEW")==0) {
photocounterC = 0;
}
}
/*
//handler function that turns other device's LED on when this device takes
//a photo
void ledToggle(const char *event, const char *photowaiting) {
if(strcmp(photowaiting, "YES")==0) {
digitalWrite(ledPin, HIGH);
}
}
//handler function to reset photo counter on paired device when photoseen
//button has been pressed
void countReset(const char *event2, const char *photoseen){
if(strcmp(photoseen, "YES")==0){
photocounterC = 0;
}else{
//tester code to see if the this countReset is running at all
//photocounterC= photocounterC + 1;
}
}
*/
Click to Expand
Designed for parents who often travel for work and their children, the plush Minion and Minion key-chain enable the sharing of photos from the parent's travels (or the child's day) to one another via the cloud.