49713 Designing for the Internet of Things
· 16 members
A hands-on introductory course exploring the Internet of Things and connected product experiences.
A light that enhances the quality of your life.
During people's everyday living, light sources are one of the most important ambient attributes to a quality life. The brightness and color temperature of light sources can affect people's productivity, mood, and health. The Smart Light aims to help to provide an adequate light color temperature for users base on their context of usage. By detecting the user's digital device usage, The Smart Light could adjust the color temperature and brightness of the light source to provide the best energy for the user.
Our inspiration came from how color temperatures of lighting influences people's energy and emotion status.
Measuring in Kelvin, color temperature could enormously affect people's physical and mental well-being.
Higher color temperature (4600K or more) appears to be blue-white, called cool or daylight colors, and can improve alertness and productivity while lower melatonin to reduce fatigue.
Mid-range color temperature (3100K - 4600K) appears cool white and is more welcoming than the high color temperature but still cool enough to promote a certain level of alertness.
Lower color temperature (up to 3000K) appears ranging from red to yellowish-white in tone, known as warm colors, and creates a sense of comfort and relaxation without affecting the melatonin level that is associated with the sleeping quality of people.
Reaching out to someone who is not satisfied with his/her current lightings at home, we interviewed our proprietor for this project, an MBA student from Tepper Business School. He is busy during the daytime and usually gets home between evening and night. Usually, after getting home, he works on his laptop to finish his assignments, reports, and other tasks. Afterward, he enjoys his night relaxing by reading leisure books on Kindle after taking a refreshing hot shower. However, since he is currently living in a rental apartment, he is not satisfied with the current brightness of his apartment, especially the one in his bedroom, where he mostly stays for no matter doing work or relaxing. With only one light source on the ceiling, his room is quite dim at night.
In view of the brightness issue that bothers our proprietor, we would like to make his room, his favorite place of the apartment, a better and cozier place for him to stay in by tackling the lighting issue.
Brightness and color temperature are two measurements of a light source. Going one step further on this issue, we not only solve the insufficiency of brightness but also manage to provide the most appropriate color temperature base on our proprietors' context of usage.
The following are the things our proprietor interacts with while he is in his bedroom and the suggested lighting color temperature for each usage context:
Since we also noticed that our proprietor usually charges all his digital devices in his room as well, we created a wireless charger for his devices as our IoT sensor to detect the usage status of his devices. By connecting the sensors (input) and light (output) to the Internet, the light can automatically adjust its brightness and color temperature base on the context of the proprietor.
Our first prototype focused on the realization of adjusting the color temperature of lighting. We made a mini model of the proprietor's bedroom and made several attempts to the adjustment of the lighting format and color temperature. We did rapid prototyping to switch between the three states with a rheostat.
Feedbacks and Suggestions from the First Prototype
Refinement
Instead of using rheostat as the switch, we want to use information in a smarter way. We have thought using IFTTT to collect electrical devices on/off state but IFTTT didn't have the feature. Alternatively, we decided to use FSR sensors to extract information in the room. We wired three sensors to the nightstand and placed three electric devices on them correspondingly. Whenever one device is removed, its signal LED will light up and Neopixel shows the encoded color. This process is much more natural and intuitive than the first prototype.
Feedbacks and Suggestions from the Second Prototype
From the Proprietor
The lighting color temperature is a bit too prominent.
From our classmates
It would be great if the light would automatically turn off when no device is in use so that people don't have to get off the bed to turn off the light.
Refinement (in code)
1. Adjust the lighting color temperature to meet the expectation of our proprietor.
2. Adding another mode of brightness to our project: when all devices are placed on the wireless charger (the sensor), the light would gradually dim off.
Our final prototype consists of two parts: the demo mini model of our proprietor's bedroom and the wireless charging purpose sensor, assumedly placed on the bedside table in actual use. We made the lighting adjustments based on the usage context of our proprietor (as shown on the previous table). When the user takes up the laptop from the wireless charger, the room light will adjust to the higher color temperature (blue-white and cool); when the user takes up the mobile phone from the wireless charger, the room light will adjust to the mid color temperature; when the user takes up the kindle from the wireless charger, the room light will adjust to the lower color temperature (warm); when the user places all device on the wireless charger and is about to sleep and rest, the light will gradually dim off.
// This #include statement was automatically added by the Particle IDE.
#include <neopixel.h>
// This #include statement was automatically added by the Particle IDE.
#include <neopixel.h>
#include <math.h>
#include "Particle.h"
#include "neopixel.h"
SYSTEM_MODE(AUTOMATIC);
// IMPORTANT: Set pixel COUNT, PIN and TYPE WS2812B E357163
#define PIXEL_PIN D2
#define PIXEL_COUNT 7
#define PIXEL_TYPE WS2812B
Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
int conditionPin = A1;
int conditionVal = 0;
// Prototypes for local build, ok to leave in for Build IDE
void rainbow(uint8_t wait);
uint32_t Wheel(byte WheelPos);
int pixel_position = 0;
int startTime = -1;
int checkTime1 = 10 * 1000; // go sleeping count down time
unsigned long currentTime = -1;
bool isCounting = false;
// input
int forceYellowPin = A1;
int forceYellowVal = 0;
int forceWhitePin = A3;
int forceWhiteVal = 0;
int forceBluePin = A5;
int forceBlueVal = 0;
// output
int ledYellowPin = D1;
int ledWhitePin = D3;
int ledBluePin = D5;
bool isYellow = false;
bool isWhite = false;
bool isBlue = false;
void setup()
{
Serial.begin(9600);
Particle.variable( "condition", conditionVal );
Particle.variable( "forceYellow", &forceYellowVal, INT);
Particle.variable( "forceWhite", &forceWhiteVal, INT);
Particle.variable( "forceBlue", &forceBlueVal, INT);
pinMode(ledYellowPin, OUTPUT);
pinMode(ledWhitePin, OUTPUT);
pinMode(ledBluePin, OUTPUT);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
delay(1000);
startTime = startTime + millis();
}
void loop()
{
int x;
uint32_t c = strip.Color(255-x, 255-x, x); // light color
// read fsr value from three devices
forceYellowVal = analogRead(forceYellowPin);
Serial.println(forceYellowVal);
isYellow = forceYellowVal < 700;
forceWhiteVal = analogRead(forceWhitePin);
Serial.println(forceWhiteVal);
isWhite = forceWhiteVal < 700;
forceBlueVal = analogRead(forceBluePin);
Serial.println(forceBlueVal);
isBlue = forceBlueVal < 700;
// light up the corresponding LED light
if (isYellow) {
digitalWrite(ledYellowPin, HIGH);
} else {
digitalWrite(ledYellowPin, LOW);
}
if (isBlue) {
digitalWrite(ledBluePin, HIGH);
} else {
digitalWrite(ledBluePin, LOW);
}
if (isWhite) {
digitalWrite(ledWhitePin, HIGH);
} else {
digitalWrite(ledWhitePin, LOW);
}
if (isWhite) {
c = strip.Color(255, 255, 255); // white light
isCounting = false;
} else if (isYellow) {
c = strip.Color(255, 255, 100); // yellow light
isCounting = false;
} else if (isBlue) {
c = strip.Color(120, 120, 255); // blue light
isCounting = false;
} else {
// set the counting state
if (!isCounting) {
startTime = millis();
isCounting = true;
}
// light fading out
currentTime = millis() - startTime;
x = map(currentTime, 0, checkTime1, 255, 0);
x = x < 0 ? 0 : x;
c = strip.Color(x, x, x); // fading light
}
// light up jewel
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
}
strip.show();
delay(100);
}
1. Input adjustment: Our current input of the project is to detect whether the digital device is placed on the wireless charger. To more precisely detect the usage status of users, the further improvement of this project should detect the activation of devices by connecting all the digital devices to the Internet.
2. Context input precision: The current system adjusts the lighting based on the usage of different devices, an indicator that can represent the context of users to a certain level. However, for further enhancements, we can take into consideration the context happening in users' digital devices (e.g. to detect the activation of applications on the mobile phone, software used on the laptop, and book genre read on kindle) so that the system can provide adequate ambient adjustments based on the precise context of users.
3. Scale of the Smart Light: Our current design is for the lighting system in the proprietor's bedroom, according to his most impending demands. For future steps, since our input sources are all portable devices, we can expand the system to the whole apartment so that the enhanced ambient experience will not be limited to the bedroom.
A hands-on introductory course exploring the Internet of Things and connected product experiences.
A light that enhances the quality of your life.
November 25th, 2019