Internet of Greens. Mini automated greenhouse, with an internet of sensors.

Dependencies:   HC_SR04_Ultrasonic_Library PixelArrayBuffer Servo TSL2561 mbed-rtos mbed

Fork of Final_project by Jackson Sheu

Committer:
tamechi3
Date:
Wed May 02 16:50:40 2018 +0000
Revision:
1:8e50dcd9884f
Parent:
0:7ebf4813882d
mini automated greenhouse

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jsheu3 0:7ebf4813882d 1 #ifndef SUPPORT_H
jsheu3 0:7ebf4813882d 2 #define SUPPORT_H
jsheu3 0:7ebf4813882d 3 #include <string>11
jsheu3 0:7ebf4813882d 4 #include <sstream>
jsheu3 0:7ebf4813882d 5
jsheu3 0:7ebf4813882d 6
jsheu3 0:7ebf4813882d 7 #define DATA_PIN p5
jsheu3 0:7ebf4813882d 8
jsheu3 0:7ebf4813882d 9 Mutex lightmutex;
jsheu3 0:7ebf4813882d 10 Mutex watermutex;
jsheu3 0:7ebf4813882d 11
jsheu3 0:7ebf4813882d 12 DigitalOut myled(LED1);
jsheu3 0:7ebf4813882d 13 AnalogIn moisture(A0);
jsheu3 0:7ebf4813882d 14 RawSerial pi(USBTX, USBRX);
jsheu3 0:7ebf4813882d 15 Servo myservo(p24);
jsheu3 0:7ebf4813882d 16 TH02 MyTH02 (p9,p10,TH02_I2C_ADDR<<1);
jsheu3 0:7ebf4813882d 17 TSL2561 sensor(p28, p27);
jsheu3 0:7ebf4813882d 18
jsheu3 0:7ebf4813882d 19 bool lights_on = false;
jsheu3 0:7ebf4813882d 20 bool watering = false;
jsheu3 0:7ebf4813882d 21 //float prev_height = 0.0f;
jsheu3 0:7ebf4813882d 22 float plant_height = 0.0f;
jsheu3 0:7ebf4813882d 23 float temperature = 0.0f;
jsheu3 0:7ebf4813882d 24 float humidity = 0.0f;
jsheu3 0:7ebf4813882d 25 float moisture_level = 0.0f;
jsheu3 0:7ebf4813882d 26 float lux = 0.0f;
jsheu3 0:7ebf4813882d 27
jsheu3 0:7ebf4813882d 28 //patch::to_string()
jsheu3 0:7ebf4813882d 29 namespace patch
jsheu3 0:7ebf4813882d 30 {
jsheu3 0:7ebf4813882d 31 template < typename T > std::string to_string( const T& n )
jsheu3 0:7ebf4813882d 32 {
jsheu3 0:7ebf4813882d 33 std::ostringstream stm ;
jsheu3 0:7ebf4813882d 34 stm << n ;
jsheu3 0:7ebf4813882d 35 return stm.str() ;
jsheu3 0:7ebf4813882d 36 }
jsheu3 0:7ebf4813882d 37 }
jsheu3 0:7ebf4813882d 38
jsheu3 0:7ebf4813882d 39 //function to water the plant
jsheu3 0:7ebf4813882d 40 void water_plant() {
tamechi3 1:8e50dcd9884f 41 if (!watering){
tamechi3 1:8e50dcd9884f 42 watering = true;
tamechi3 1:8e50dcd9884f 43 watermutex.lock();
tamechi3 1:8e50dcd9884f 44 for(float p=0; p<1.5; p += 0.05) {
tamechi3 1:8e50dcd9884f 45 myservo = p;
tamechi3 1:8e50dcd9884f 46 wait(0.1);
tamechi3 1:8e50dcd9884f 47 }
tamechi3 1:8e50dcd9884f 48 wait(1);
tamechi3 1:8e50dcd9884f 49 for(float p=1.5; p>0.0; p -= 0.05) {
tamechi3 1:8e50dcd9884f 50 myservo = p;
tamechi3 1:8e50dcd9884f 51 wait(0.1);
tamechi3 1:8e50dcd9884f 52 }
tamechi3 1:8e50dcd9884f 53 watermutex.unlock();
tamechi3 1:8e50dcd9884f 54 watering = false;
jsheu3 0:7ebf4813882d 55 }
jsheu3 0:7ebf4813882d 56 }
jsheu3 0:7ebf4813882d 57
jsheu3 0:7ebf4813882d 58 //function to turn on/off neo-pixels
jsheu3 0:7ebf4813882d 59 void switch_lights() {
jsheu3 0:7ebf4813882d 60 DigitalIn(DATA_PIN, PullDown);
jsheu3 0:7ebf4813882d 61 neopixel::PixelArray array(DATA_PIN);
jsheu3 0:7ebf4813882d 62 uint16_t numPixels = 32;
jsheu3 0:7ebf4813882d 63 neopixel::Pixel pixels[numPixels];
jsheu3 0:7ebf4813882d 64 if (lights_on){
jsheu3 0:7ebf4813882d 65 for (int i=0; i<numPixels; ++i){
jsheu3 0:7ebf4813882d 66 pixels[i].red = 255;
jsheu3 0:7ebf4813882d 67 pixels[i].green = 255;
jsheu3 0:7ebf4813882d 68 pixels[i].blue = 255;
jsheu3 0:7ebf4813882d 69 }
jsheu3 0:7ebf4813882d 70 } else {
jsheu3 0:7ebf4813882d 71 for (int i=0; i<numPixels; ++i){
jsheu3 0:7ebf4813882d 72 pixels[i].red = 0;
jsheu3 0:7ebf4813882d 73 pixels[i].green = 0;
jsheu3 0:7ebf4813882d 74 pixels[i].blue = 0;
jsheu3 0:7ebf4813882d 75 }
jsheu3 0:7ebf4813882d 76 }
jsheu3 0:7ebf4813882d 77 lightmutex.lock();
jsheu3 0:7ebf4813882d 78 array.update(pixels, numPixels);
jsheu3 0:7ebf4813882d 79 lightmutex.unlock();
jsheu3 0:7ebf4813882d 80 }
jsheu3 0:7ebf4813882d 81
jsheu3 0:7ebf4813882d 82
jsheu3 0:7ebf4813882d 83 void read_temp(){
jsheu3 0:7ebf4813882d 84 int iTemp;
jsheu3 0:7ebf4813882d 85 MyTH02.startTempConv(true,true);
jsheu3 0:7ebf4813882d 86 MyTH02.waitEndConversion();
jsheu3 0:7ebf4813882d 87 iTemp= MyTH02.getConversionValue();
jsheu3 0:7ebf4813882d 88 temperature = iTemp/10.0;
jsheu3 0:7ebf4813882d 89 }
jsheu3 0:7ebf4813882d 90
jsheu3 0:7ebf4813882d 91
jsheu3 0:7ebf4813882d 92 void read_humidity() {
jsheu3 0:7ebf4813882d 93 int iRH;
jsheu3 0:7ebf4813882d 94 MyTH02.startRHConv(true,true);
jsheu3 0:7ebf4813882d 95 MyTH02.waitEndConversion();
jsheu3 0:7ebf4813882d 96 iRH= MyTH02.getConversionValue();
jsheu3 0:7ebf4813882d 97 humidity = iRH/10.0;
jsheu3 0:7ebf4813882d 98 }
jsheu3 0:7ebf4813882d 99
jsheu3 0:7ebf4813882d 100
jsheu3 0:7ebf4813882d 101
jsheu3 0:7ebf4813882d 102 #endif