Home is Where the Heart Is

Made by meilinz, Ran Tao, smahawar and djayaswa

Found in Devices for Sharing - Connected Intimacy

The goal of this project was to develop a pair of devices that could allow parents who become soldiers and go overseas to communicate in a meaningful way with their children. Long distances are tough for any relationship, so we hope that with our device we can keep relationships strong by providing a way to communicate in a unique way with a loved one.

0

Overview

Parents who become soldiers have a difficult time saying goodbye to their children when they get deployed. This distance between a parent and child can cause emotional and developmental issues for the child. Our intimate device pair aims to relieve this pain and longing caused by the physical distance between a soldier and their child.

This device pair consists of two dog-tag necklaces, one for the parent and the child. If the child misses the parent, they can send a signal via light to the parent’s dog-tag. The parent receives this signal and can send their heartbeat and a heat sensation back to the child. The child will then feel the parent’s heartbeat through vibration, light, and heat. The same process works if the parent misses the child.

Design Process

In this project’s infancy, we initially thought to create a pair that involved motion. We explored having the parent and child both have a teddy bear that when picked up, the other teddy bear would receive that signal and move to “hug” the receiver. This became too complicated with a number of motors that would be required and also this iteration lost sight of the goal of our product - to reduce the amount of longing between the parent and child.

We then explored sending and receiving sounds instead of motions. We explored sending a pre-recorded lullaby every time one party missed the other. This we felt wasn’t an intimate enough gesture so we scrapped that idea.

Finally, we arrived at the conclusion to explore touch and vibration between the parent and child. This exploration allowed us to come up with the concept of sending a heartbeat and heat to the receiving party.

Bill of Materials

  • Breadboard
  • Particle Photon
  • Force sensing resistor
  • NeoPixel mini
  • Mini vibration motor
  • 10k Ohm resistor
  • 470 Ohm resistor
  • 1000 µF capacitor
  • Pushing button
  • Appropriate wiring
0

Storyboard

0

Prototype

The iterative prototyping process starts with using the force sensing resistor to control the motor so that it can simulate the Morse Code. Then, the pushing button and NeoPixel LED light were added. The NeoPixel LED light was set to be controlled by the pushing button. Next, two Particle Photon board was programmed to communicate with other by mutually controlling vibration motor and NeoPixel LED light on the other side. Finally, the pushing button, the NeoPixel LED light, the vibration motor, and the force sensing resistor were assembled on the dog tag.

0
//Code for Device 1
#include "Particle.h"
#include "neopixel.h"

void rainbow(uint8_t wait);
SYSTEM_MODE(AUTOMATIC);

#define touchsensor A0
#define motor A3
#define button D0

#define PIXEL_COUNT 1
#define PIXEL_PIN A1
#define PIXEL_TYPE WS2812B

Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

int force; // 0-4095
int startTime, stopTime;
int desiredTime;

void setup() {
  Particle.subscribe("pixel1", pixelcontrol1, "DEVICE_ID");
  Particle.subscribe("motor1", motorcontrol1, "DEVICE_ID");
  Particle.subscribe("motorshort1", motorvibrate1, "DEVICE_ID");
  strip.begin();
  strip.show();

  startTime=0;
  stopTime=0;
  desiredTime=40;

  pinMode(A0, INPUT);
  pinMode(A3, OUTPUT);
  pinMode(button, INPUT_PULLUP);
}

void loop() {
  int buttonState = digitalRead(button);
  if(buttonState == 0) { //pushed
    Particle.publish("pixel2");
    delay(1000);
    /*rainbow(20);*/
  }else{
    strip.setPixelColor(0,  strip.Color(0, 0, 0));
    strip.show();
  }

  force = analogRead(touchsensor);

  Serial.println(force);
  if(force>3000) {
    Particle.publish("motor2");
    delay(1000);
  }else if(force>80 && force<3000) {
    Particle.publish("motorshort2");
    delay(1000);
  }else{
    digitalWrite(motor, LOW);}
    delay(100);
}

void motorcontrol1(const char *event, const char *data){
  digitalWrite(motor, HIGH);
  delay(150);
}

void motorvibrate1(const char *event, const char *data){
  digitalWrite(motor, HIGH);
  delay(50);
}

void pixelcontrol1(const char *event, const char *data){
    rainbow(20);
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(20);
  }
}

uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}
Click to Expand
0
//Code for Device 2
#include "Particle.h"
#include "neopixel.h"

void rainbow(uint8_t wait);
SYSTEM_MODE(AUTOMATIC);

#define touchsensor A0
#define motor A3
#define button D0

#define PIXEL_COUNT 1
#define PIXEL_PIN A1
#define PIXEL_TYPE WS2812B

Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

int force; // 0-4095
int startTime, stopTime;
int desiredTime;

void setup() {
  Particle.subscribe("pixel2", pixelcontrol2, "DEVICE_ID");
  Particle.subscribe("motor2", motorcontrol2, "DEVICE_ID");
  Particle.subscribe("motorshort2", motorvibrate2, "DEVICE_ID");
  strip.begin();
  strip.show();

  startTime=0;
  stopTime=0;
  desiredTime=40;

  pinMode(A0, INPUT);
  pinMode(A3, OUTPUT);
  pinMode(button, INPUT_PULLUP);
}

void loop() {
  int buttonState = digitalRead(button);
  if(buttonState == 0) { //pushed
    Particle.publish("pixel1");
    delay(1000);
    /*rainbow(20);*/
  }else{
    strip.setPixelColor(0,  strip.Color(0, 0, 0));
    strip.show();
  }

  force = analogRead(touchsensor);

  Serial.println(force);
  if(force>3000) {
    Particle.publish("motor1");
    delay(1000);
  }else if(force>80 && force<3000) {
    Particle.publish("motorshort1");
    delay(1000);
  }else{
    digitalWrite(motor, LOW);}
    delay(100);
}

void motorcontrol2(const char *event, const char *data){
  digitalWrite(motor, HIGH);
  delay(150);
}

void motorvibrate2(const char *event, const char *data){
  digitalWrite(motor, HIGH);
  delay(50);
}

void pixelcontrol2(const char *event, const char *data){
    rainbow(20);
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(20);
  }
}

uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}
Click to Expand
0
Home Is Where The Heat Is
Meilin Zhang - https://youtu.be/Qf-Vb2LWxI4
x
Share this Project

Courses

49-713 Designing for the Internet of Things

· 26 members

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


Focused on
About

The goal of this project was to develop a pair of devices that could allow parents who become soldiers and go overseas to communicate in a meaningful way with their children. Long distances are tough for any relationship, so we hope that with our device we can keep relationships strong by providing a way to communicate in a unique way with a loved one.

Created

February 11th, 2017