49713 Designing for the Internet of Things
· 16 members
A hands-on introductory course exploring the Internet of Things and connected product experiences.
"Ohhhhh......What happened to my plants???" is a general reaction of people when they come back from long vacations.
With Happy Pods I plan to tackle this problem and help people and plants have a Good Time!!
Based on research, it is identified that proper color of lights given for proper amounts of time will help plants grow better inside houses. Happy Pods take this into consideration and give an Integrated solution of sunlight and ambient grow lights in Blue(encourages vegetative leaf growth) and Red(allows plants to flower) colors.
Water being an important light source after light is also taken care with Happy Pods, with the help of a Soil moisture sensor. The USP is that the plant informs about its health to the user using flex sensor in combination with other available sensing elements.
Thus, taking care of itself and its owners, Happy Pods plan to give the thing that plants have been doing from ages -
Giving Happiness to Others!!!
The challenge was to create an integration between sunlight and grow light. There are a lot of solutions that people have given which work in silos of doing just one of the many things that Happy Pods does. Additionally the function of letting the user know about their plant's health is one of the major impacts of Happy Pods.
The problem of taking care of plants when people are of on vacations led to identifying probable areas, brainstorming on ideas and looking up and studying existing solutions in the market.
A lot of sensor related information and hands on session helped me in reaching to the final thought of Happy Pods.
The project started with integrating sunlight and grow lights, for which I chose to use the Photo Sensor. But very soon I realized that the sensors would be ineffective stand alone as there will be light inside the house(there will be a difference in the reading, but relying just on that was risky). So I added the Temperature sensor in tandem with the Photo Sensor to get close to accurate readings.
But the solution seemed incomplete as it did not solve the problem of maintaining plant health when people were on Vacations. This led to the idea of adding water to the plants when the moisture in soil was less than a prescribed limit.
But something felt missing as the plant was doing things on its own and not interacting with the home owner. So I started working on the idea on informing plant health to the user, using flex sensor. The plant health monitor has the flex sensor on the stem of the plant, so that if the plant drools down, the moisture in soil is checked and light is checked. If one or both are less then they are taken care off, else the Pod sends a message to the owner and also starts sending voice signals.
//PhotoCell inputs
int photoCellPin = A1; //input pin for photosensor
int photoCellReading = 0; //analog reading variable for photosensor
// Temperature Sensor inputs
int tempPin = A0; //input pin for tmp36
double temperature = 0.0; //variable for storing temperature value
//RGB inputs
int redPin = D4; //input pin for red color on RGB LED
int greenPin = D6; //input pin for green color on RGB LED
int bluePin = D5; //input pin for blue color on RGB LED
int redValue = 255; // Full brightness for an Cathode RGB LED is 0, and off 255
int greenValue = 255; // Full brightness for an Cathode RGB LED is 0, and off 255
int blueValue = 255; // Full brightness for an Cathode RGB LED is 0, and off 255</td>
//Flex sensor inputs
int flexPin = A2; //input pin for photosensor
int flexReading = 0; //analog reading variable for photosensor
int speakerPin = D8; //input pin for piezo sensor
//Soilmoisture inputs
int moistPin = A4; //input pin for soil moisture sensor
int moistVal = 0; //analog reading variable for soil moisture sensor
int moistLed = D7; //input variable for green LED in soil moisture circuit
int last_published = -1;
void setup() {
// Set up pins for RGB
pinMode( redPin, OUTPUT);
pinMode( greenPin, OUTPUT);
pinMode( bluePin, OUTPUT);
analogWrite( redPin, redValue); // turn off the pin...
analogWrite( greenPin, greenValue); // turn off the pin...
analogWrite( bluePin, blueValue); // turn off the pin...
//Set up pins for temperature sensor
pinMode(tempPin, INPUT);
//set up pin for flex sensor
pinMode(speakerPin, OUTPUT);
//set up pin for soil moisture sensor
pinMode(moistLed, OUTPUT);
// Register a Particle variable here
Particle.variable("temperature", &temperature, DOUBLE); //collect temperature value
//Particle.variable("temperatureF", &temperatureF, DOUBLE);
Particle.variable("light", &photoCellReading, INT); // collect light value
Particle.variable("Stem_bend", &flexReading, INT); //collect stem bending value
Particle.variable("soil_moisture", &moistVal, INT);//collect the soil moisture value
}
void loop() {
int tempReading = analogRead(tempPin); //store analog value in tempReading based on input from tempPin
double voltage = (tempReading * 3.3) / 4095.0; //calculate voltage
temperature = (voltage - 0.5) * 100; // Calculate the temperature and update our static variable
sendSMS();
photoCellReading = analogRead(photoCellPin); // Use analogRead to read the photo cell reading
redValue = map(photoCellReading, 2200, 2900, 0, 255); // Map this value into the PWM range (0-255)
blueValue = map(photoCellReading, 3000, 3500, 255, 0); // Map this value into the PWM range (0-255)
if (photoCellReading > 2500 && photoCellReading < 3000 && temperature < 20.0) //Parallely check photosensor and temperature sensor and only if both are true proceed
{
analogWrite(redPin, redValue); // fade the LED to the desired brightness
}
else if (photoCellReading > 3000 && temperature < 20.0) //Parallely check photosensor and temperature sensor and only if both are true proceed
{
analogWrite(bluePin, blueValue); // fade the LED to the desired brightness
}
else
{
analogWrite(redValue, 255); //turn all the colors off
analogWrite(blueValue, 255); //turn all the colors off
analogWrite(greenValue, 255); //turn all the colors off
}
moistVal = analogRead(moistPin); //store analog value in moistVal based on input from moistPin
flexReading = analogRead(flexPin); //store analog value in flexReading based on input from flexPin
if (flexReading < 100 ) //check if the flex sensor is bent
{
if (moistVal > 2000) //verify if there is enough moisture in soil
{
digitalWrite(moistLed, HIGH); //Turn the LED on
}
else
{
tone(speakerPin, 494, 500); //play the piezp sensor
}
}
}
void sendSMS( ){
// check if 1 minute has elapsed
if( flexReading < 100 ){
Particle.publish( "SendSMS", String( flexReading ) );
last_published = millis();
delay(100000000);
}
}
Click to Expand
Going ahead I would like to do a few things:
1. Calibrate photo and temperature sensors based on the original readings of the house and outside weather to be better able to implement the timing and intensity of light.
2. Integrate outside weather data to understand the sunrise and sunset time to identify the time for keeping the lights off, as darkness also forms a part of plant growth.
3. The soil sensors used currently are DiY, better sensors will result in better outputs. Also adding the EC salt sensor
The project made me realise that a sensor could be used in multiple ways to perform different functions. Being able to create a product out of minimalist sensors goes on to show was a big learning for me. Another thing that I learnt was people on the web have done many projects around similar ideas, a reference of which can help us take our ideas long way.
Skills acquired
I am not comfortable with using different sensors, and surely comfortable working with Particle. I am also better than where I was in writing and understanding codes.
A hands-on introductory course exploring the Internet of Things and connected product experiences.
~
November 7th, 2019