49713 Designing for the Internet of Things
· 16 members
A hands-on introductory course exploring the Internet of Things and connected product experiences.
Found in DioT 2019: Internet of Plants · UNLISTED (SHOWN IN POOLS)
Do you have experience left your plant somewhere and forget it forever? Never again with this device!
People tend to take their plants to the yard for more sunlight in the daytime, but sometimes forget to take them back to the warm place at night, or people just put their plants in the garden in summer and left them there until winter. I have seen a lot of people who are passionate about having a plant at the beginning and seldom care about it after that.
My design is to show the “life bar” of the plants to their owners. If they left the plants in the crucial environment (with improper temperature & humidity), the value of their life bar starts to blinking down. If the environment starts to get worse, the plants would send an email for help. With the life bar and help letter, the owner will no longer forget their plants and put them in danger. The design will remind them to always create a comfortable environment for your plants instead of forgetting them.
Process of design:
In the design-wise, I thought about what people what to know about a growing plant at their home. I came up with a lot of parameters that the user could measure with sensors but end up questioning whether a person would like to put too much effort into monitoring a plant at home with a fancy device. So I finally decide to make it simple as only showing whether the environment is good or not for the plant by capturing the two key factors: temperature and humidity.
I also made it a little bit more interesting by presenting the growth condition in the form of a life bar, which is an intuitive way people use to show the life status in the video games. In this case, people could learn the status by a glance and search for deeper information on the devices if they want. However, it could be a little bit intrusive when the environment is getting worse for the plant, in case people left them somewhere in the house and forget them forever.
Process of Coding:
It is the first try to generate the logic myself, so I experience a hard time to structure how the system works. I tried to not put myself in trouble with the code that is too complicated.
I tried to grade the growth condition in different methods or make the structure more adjustable for different types of plants, then finally come up with the most practical for me. The draft of code as below:
For the final device, I assumed that for a specific plant, the optimum growth temperature for the plants is between 20-30 degrees centigrade and the proper growth humidity is from 30% to 60%. Then I defined 5 different status of growth conditions depending on the temperature and humidity - The further away the real condition is from the defined environment, the more likely the plant would be in trouble.
Based on this, there are three main interactions between the plant and the owner:
1 See the "life bar" & learn more on your phone
The “life bar” made up of 5 LEDs shows whether your plant is struggling in a certain environment. The worse the condition is, the fewer LEDs will remain, the quicker the LEDs will blink to draw your attention. You could see how the plant reacts toward the environment and replace your plant depends on the parameter you see on your phone.
(For it is not easy to show the temperature or humidity change naturally in a short period of time, I use a heater to accelerate the temperature increase for demonstration. In real situation temperature lower or higher than the standard temperature and humidity that are lower or higher than the standard one could all trigger the same function.)
Components included as below:
LED1 | Red (633nm) LED |
LED2 | Red (633nm) LED |
LED3 | Red (633nm) LED |
LED4 | Red (633nm) LED |
LED5 | Red (633nm) LED |
R1 | 1kΩ Resistor |
R2 | 1kΩ Resistor |
R3 | 1kΩ Resistor |
R4 | 1kΩ Resistor |
R5 | 1kΩ Resistor |
RHT1 | Humidity and Temperature Sensor RHT03 |
S1 | Toggle Switch |
The functions work based on the code and circuit below:
// This #include statement was automatically added by the Particle IDE.
#include <Adafruit_DHT.h>
// This #include statement was automatically added by the Particle IDE.
#include <Adafruit_DHT.h>
#define DHTPIN D7 // what pin we are connected to
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
double temperature = 0;
double humidity = 0;
int led_pin[] = {D2,D3,D4,D5,D6};
int T_set[] = {13, 15, 18, 20, 30, 35, 40, 45};
int H_set[] = {10, 20, 25, 30, 60, 70, 80, 90};
int switchPin = D8;
int status = -1;
void setup() {
// Set up the LED for output
for(int i = 0; i < 5; i++)
pinMode(led_pin[i], OUTPUT);
dht.begin();
Particle.variable("temperature", &temperature, DOUBLE); // api variables
Particle.variable("humidity", &humidity, DOUBLE);
Particle.variable("status", status);
pinMode( switchPin , INPUT_PULLUP); // sets pin as input
}
void loop() {
int buttonState = digitalRead( switchPin );
if( buttonState == LOW ){
// Reading temperature or humidlity takes about 250 millisecond
// Sensor variable also may be 2 second old
humidity = dht.getHumidity();
temperature = dht.getTempCelcius();
if(humidity < H_set[0] || temperature < T_set[0] || humidity > H_set[7] || temperature > T_set[7]) {
digitalWrite(led_pin[0], LOW);
digitalWrite(led_pin[1], LOW);
digitalWrite(led_pin[2], LOW);
digitalWrite(led_pin[3], LOW);
digitalWrite(led_pin[4], LOW);
status = 1;
for(int i = 0; i < 15; i++) {
digitalWrite(led_pin[0], HIGH);
delay(100);
digitalWrite(led_pin[0], LOW);
delay(100);
}
}else if(humidity < H_set[1] || temperature < T_set[1] || humidity > H_set[6] || temperature > T_set[6]) {
digitalWrite(led_pin[0], LOW);
digitalWrite(led_pin[1], LOW);
digitalWrite(led_pin[2], LOW);
digitalWrite(led_pin[3], LOW);
digitalWrite(led_pin[4], LOW);
status = 2;
for(int i = 0; i < 15; i++) {
digitalWrite(led_pin[0], HIGH);
digitalWrite(led_pin[1], HIGH);
delay(300);
digitalWrite(led_pin[0], LOW);
digitalWrite(led_pin[1], LOW);
delay(300);
}
}else if(humidity < H_set[2] || temperature < T_set[2] || humidity > H_set[5] || temperature > T_set[5]) {
digitalWrite(led_pin[0], LOW);
digitalWrite(led_pin[1], LOW);
digitalWrite(led_pin[2], LOW);
digitalWrite(led_pin[3], LOW);
digitalWrite(led_pin[4], LOW);
status = 3;
for(int i = 0; i < 15; i++) {
digitalWrite(led_pin[0], HIGH);
digitalWrite(led_pin[1], HIGH);
digitalWrite(led_pin[2], HIGH);
delay(500);
digitalWrite(led_pin[0], LOW);
digitalWrite(led_pin[1], LOW);
digitalWrite(led_pin[2], LOW);
delay(500);
}
}else if(humidity < H_set[3] || temperature < T_set[3] || humidity > H_set[4] || temperature > T_set[4]) {
digitalWrite(led_pin[0], LOW);
digitalWrite(led_pin[1], LOW);
digitalWrite(led_pin[2], LOW);
digitalWrite(led_pin[3], LOW);
digitalWrite(led_pin[4], LOW);
digitalWrite(led_pin[0], HIGH);
digitalWrite(led_pin[1], HIGH);
digitalWrite(led_pin[2], HIGH);
digitalWrite(led_pin[3], HIGH);
digitalWrite(led_pin[4], LOW);
status = 4;
}else {
digitalWrite(led_pin[0], LOW);
digitalWrite(led_pin[1], LOW);
digitalWrite(led_pin[2], LOW);
digitalWrite(led_pin[3], LOW);
digitalWrite(led_pin[4], LOW);
digitalWrite(led_pin[0], HIGH);
digitalWrite(led_pin[1], HIGH);
digitalWrite(led_pin[2], HIGH);
digitalWrite(led_pin[3], HIGH);
digitalWrite(led_pin[4], HIGH);
status = 5;
}
}else{
for(int i = 0; i < 3; i++) {
digitalWrite(led_pin[0], HIGH);
digitalWrite(led_pin[1], HIGH);
digitalWrite(led_pin[2], HIGH);
digitalWrite(led_pin[3], HIGH);
digitalWrite(led_pin[4], HIGH);
delay(500);
digitalWrite(led_pin[0], LOW);
digitalWrite(led_pin[1], LOW);
digitalWrite(led_pin[2], LOW);
digitalWrite(led_pin[3], LOW);
digitalWrite(led_pin[4], LOW);
delay(500);
status = 0;
}
}
}
Click to Expand
Depending on the components available, the only two factors considered this time are temperature and humidity. There are more variables related to the growth condition of a plant including soil moisture, concentrations of carbon dioxide, etc. The next step could be taking more factors into consideration to evaluate the growth condition.
A good idea or solution should always go before what function you want to realize.
This project is a good try to combine the entry-level IoT skill with design thinking. However, I still feel constrained by the coding skill and the sensors I familiar with. Hope I could be more comfortable with the components so that I could prioritize the experience and cool concepts - looking forward to my next try.
This project is only listed in this pool. Be considerate and think twice before sharing.
A hands-on introductory course exploring the Internet of Things and connected product experiences.
Do you have experience left your plant somewhere and forget it forever? Never again with this device!
November 6th, 2019