49713 Designing for the Internet of Things
· 25 members
A hands-on introductory course exploring the Internet of Things and connected product experiences.
Found in DIoT 2018 2: Ambient Affect
Help people to monitor and determine most and least optimal days in the female menstruation cycle to conceive a child.
11% of reproductive-age couples in the United States have trouble conceiving or sustaining a pregnancy (1). The goal of this ambient project is to provide a subtle notification that helps couples understand when is the best time to conceive. Our motivation for making this ambient project is to support our friends that we know are at this stage.
Our ambient object is intended to be placed in the bedroom of couples, by a stand, and can be checked whenever they are in the room. As the ovulation period of women increases and reaches the ovulation day, the indicator in our tower moves towards the top of our spectrum signaling to the couple that their chances of conceiving are high. On the other hand, if the indicator is at the bottom of our tower, this signals to the couple that their chances of conceiving are low. Our object is connected with a period app that sends notifications to our object on a daily basis. Couples can glance at our object to understand the likelihood of conceiving on that given day.
Provide a high level design overview that considers and describes: what context it operates in (is it a personal device, site specific, etc.); 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.
Once our team aligned on the problem that we wanted to talked, we developed a list of to-dos (e.g., API source, creation of code, development of physical prototype). We then brainstormed different ways to display the information of the ovulation and period cycle.The pictures below highlight the different options that we considered for our design. For the ambient output, we considered multiple forms and ways of conveying the information from lights that display where women are in the cycle to a servo that rotates to a particular place to show similar information.
Challenges:
Lesson Learned:
// Define a pin we'll place an LED on
int led = D3;
int brightness = 0;
int fadeAmount = 5;
Servo Preggo;
int PreggoSig = D0;
int day = 0;
float period_schedule[] = {0,.2,.4,.6,.8,1.1,1.4,1.7,2.0,2.4,2.6,2.8,3.0,2.6,2.2,2.0,1.8,1.8,1.6,1.6,1.4,1.4,1.2,1.2,1.0,1.0,0.8};
float period_status = period_schedule[0];
float period_status_new =0;
float x = 0;
int y = 0;
int test = 0;
void setup() {
Preggo.attach(PreggoSig);
Particle.subscribe("day_change", myHandler);
Serial.begin(9600);
// Particle.function("servo", servoControl);
// Set up the LED for output
pinMode(led, OUTPUT);
}
void loop() {
if(day > 27){
day = 0;
}
period_status_new = period_schedule[day];
x = period_status_new - period_status;
// x = map(x, -1.5, 1.5, 10, 170);
x = x*50.0+90.0;
Serial.println(period_status);
y = (int) x;
if (period_status_new <= 2.9) {
test = 0;
}
if (x!=0) {
Preggo.write(y);
delay(500);
if (period_status_new >= 2.9) {
if (test == 0){
Preggo.write(90);
delay(200);
Preggo.write(88);
delay(200);
Preggo.write(86);
delay(200);
Preggo.write(84);
delay(200);
Preggo.write(82);
delay(200);
test =1;
}
}
}
period_status = period_status_new;
if (period_status >= 2.9) {
//et the brightness of pin 9:
analogWrite(led, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
// wait for 30 milliseconds to see the dimming effect
// delay(30);
}
else{
brightness = 0;
analogWrite(led,brightness);
}
}
void myHandler(const char *event, const char *data){
day = day +1;
}
// Servo Preggo;
// int PreggoSig = D0;
// int day = 0;
// float period_schedule[] = {0,.2,.4,.6,.8,1.1,1.4,1.7,2.0,2.4,2.6,2.8,3.0,2.6,2.2,2.0,1.9,1.8,1.7,1.6,1.5,1.4,1.3,1.2,1.1,1.0,0.9};
// int period_status = period_schedule[0];
// int period_status_new =0;
// int x = 0;
// // int position = 0;
//
//
// void setup() {
// Preggo.attach(PreggoSig);
// Particle.subscribe("day_change", myHandler);
// Serial.begin(9600);
// // Particle.function("servo", servoControl);
// }
//
// void loop() {
// // if(day > 10){
// // day = 0;
// // }
// // period_status_new = period_schedule[day];
// // x = period_status_new - period_status;
// // x = map(x, -2, 2, 50, 130);
// // Preggo.write(x);
// // delay(1000);
// // period_status = period_status_new;
// Serial.println(period_schedule[3]);
//
// }
//
// void myHandler(const char *event, const char *data){
// // We'll turn the LED on
// // day = day +1;
// // Preggo.write(100);
// // delay(3000);
// // Preggo.write(90);
// // delay(1000);
// }
// // int servoControl(String command)
// // {
// // int newPos = command.toInt();
// // position = constrain(newPos, 0, 180);
// // Preggo.write(position);
// //
// // return 1;
// // }
Click to Expand
(1). Reviewed by the BabyCenter Medical Advisory BoardLast updated: April 2017. “Common causes of fertility problems in women.” BabyCenter, 25 Aug. 2015, www.babycenter.com/0_common-causes-of-fertility-problems-in-women_1228906.bc.
(2). Breathing LED tutorial: https://www.arduino.cc/en/Tutorial/Fade
A hands-on introductory course exploring the Internet of Things and connected product experiences.
Help people to monitor and determine most and least optimal days in the female menstruation cycle to conceive a child.
February 4th, 2018