IamSorry
Made by Jonathan Dyer, James Katungyi and Roisin Pearson
Made by Jonathan Dyer, James Katungyi and Roisin Pearson
Strengthening relationships by making it easy to say sorry
Created: March 3rd, 2017
Intention
Relationships are strengthened or weakened by small things like saying or not saying 'sorry' whenever one offends the other, which happens frequently. IamSorry is a device that is meant to strengthen relationships. It makes it easy to say 'sorry' without qualifications and without words. And it allows the offended party time to work out their hurt and to then forgive, without qualifications and without words. This is an example of how technology can mediate intimacy - by unobtrusively facilitating the small things that manifest intimacy.
Context
Our task was to make a device that makes the beloved present to their lover when the two are apart. Knowing that intimacy thrives on presence, how could we strengthen intimacy in absence? At the same time, the tools at hand - technology - are a poor substitute for the absent beloved; so substitution was a 'no-go'. Instead of substitution, we looked at manifestation - how is intimacy manifested? Tender words, looks and gestures ... beyond these to the foundations of intimacy - saying 'sorry, thank you and please' - forgiveness, friendship, respect...
Other work in the field?
Process
Our original idea was a rose in a vase that when pulled down, caused a twin rose to droop - requesting forgiveness. We planned to use a motor to rotate the rose and a proximity sensor on the vase rim to detect the droop. In hindsight, this idea lacked elegance - we could not make up our minds what shape the 'rose' would take. We then briefly considered breaking and restoring a vase - a complex idea that we soon discarded. We even thought of a picture frame that changed color - except that picture frames have already been explored several times in IoT; we need something new! Jesse's proposal of a detachable cylinder trumped all previous ideas because of elegance and simplicity of operation.
The challenges were two-fold: 1) hardware and 2) software.
On the hardware front, we resolved to use motors to restore the detached cylinder top to its original position and door switches to signal detachment or restoration of the top from/to the bottom half. The dimensions of the cylinder had to accommodate the operating mechanisms while hiding them from view. The motor speed was to be slow enough for gradual noiseless restoration - servo motors squeak loudly when they turn fast. The housing was 3d-printed.
The software used the door magnets as triggers to operate the motors. Conditionals were integrated into the motor operation. To communicate, we used particle's publishing/subscribing functions - one device publishes a trigger, which the other device receives through subscription.
Even with the fundamental operations in place, the systems still required fine-tuning to smooth the movement. It required an immense amount of planning to work out how the 3D printed parts would work together with the motors and what all the measurements would be.
Product
IamSorry is a set of two short cylinders. Each cylinder is made of two detachable parts - the top half and the bottom. The dividing line slices the cylinder at an angle to the horizontal plane such that the top part can slide off the bottom and come to rest on the same base while covering the bottom half partially.
Let's suppose that the husband forgets to take the trash out in the morning as he rushes to work. When he realizes his mistake while at work and knowing that his wife will be upset yet again, he says sorry by partially moving the top half off the bottom. Thus deforming his device - signifying a 'break in intimacy'. While he 'breaks' his device, it triggers the twin device at his wife's workplace, to 'break' in the same way - asking the wife to heal the 'break'. Then he waits for forgiveness. When she gets over her distress, she heals the break by restoring the device - by placing the top back in place. This in turn triggers the twin device to roll back up into place, symbolizing that all is forgiven and that intimacy is whole again.
Reflection
The project was enjoyable - we did not hesitate to apply our concept (saying sorry) while we worked - that was fun. But the project was also intense; the project time frame was cut short because we discarded a previous idea that had eaten half of our time.
We learnt about publishing and subscription as a method of connecting the two devices even though we initially thought of using IFTTT. We gained more expertise in wiring the photon and the logic of the software that operates it. One of our group was more knowledgeable in this field and that helped tremendously. Even then, we spent hours agonizing over the logic - and if we had another week, we would have agonized some more to perfect the operation. 3-d printing was another lesson.
//DEVICE TWO
//magnet monitor
int magPin = D1;
int magState1 = 0;
int magState2 = 0;
String sorryState = "0";
int response = 0;
//Servo Control
int servoPin = D0;
Servo Servo2;
int servoPos = 0;
void setup() {
//magnet monitor
pinMode(magPin, INPUT_PULLUP);
//Servo Control
Servo2.attach(servoPin);
Servo2.write(0);
Particle.subscribe("DIotSorryControl1", servo2Control);
Serial.begin(9600);
}
void servo2Control(const char *event,const char *data)
{
Serial.println(data);
sorryState = "1";
//when device receives
if(strcmp(data,"1on") == 0) {
Servo2.write(180);
Serial.println("1 is sorry");
delay(5000);
response = digitalRead(magPin);
while (strcmp(sorryState,"2") == 0){
if (response == 1){
Particle.publish("DIotSorryControl2","itsOk");
Serial.println("2apologized");
sorryState = "0";
Serial.print(" sorryState " + sorryState);
}
else
{response = digitalRead(magPin);
Serial.print(" sorryState " + sorryState);}
}
Serial.print(" sorryState " + sorryState);
}
if (strcmp(data,"itsOk") == 0)
Servo2.write(0);
sorryState = "0";
Serial.print(" sorryState:" + sorryState);
}
void loop() {
//magnet monitor
magState1 = digitalRead(magPin);
Serial.print(" m1: ");
Serial.print(magState1);
delay(1000);
magState2 = digitalRead(magPin);
Serial.print(" m2: ");
Serial.println(magState2);
if(magState2 == 1){
if (magState1 == 0){
if (sorryState == "0"){
Particle.publish("DIotSorryControl2","2on");
Serial.println("2isSorry");
sorryState == "2";
Serial.print(" sorryState:" + sorryState);
}
}
}
}
Click to Expand
Strengthening relationships by making it easy to say sorry