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
support.h@0:7ebf4813882d, 2018-05-01 (annotated)
- Committer:
- jsheu3
- Date:
- Tue May 01 13:59:00 2018 +0000
- Revision:
- 0:7ebf4813882d
- Child:
- 1:8e50dcd9884f
IOT Greenhouse
Who changed what in which revision?
User | Revision | Line number | New 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() { |
jsheu3 | 0:7ebf4813882d | 41 | watering = true; |
jsheu3 | 0:7ebf4813882d | 42 | watermutex.lock(); |
jsheu3 | 0:7ebf4813882d | 43 | for(float p=0; p<1.5; p += 0.05) { |
jsheu3 | 0:7ebf4813882d | 44 | myservo = p; |
jsheu3 | 0:7ebf4813882d | 45 | wait(0.1); |
jsheu3 | 0:7ebf4813882d | 46 | } |
jsheu3 | 0:7ebf4813882d | 47 | wait(1); |
jsheu3 | 0:7ebf4813882d | 48 | for(float p=1.5; p>0.0; p -= 0.05) { |
jsheu3 | 0:7ebf4813882d | 49 | myservo = p; |
jsheu3 | 0:7ebf4813882d | 50 | wait(0.1); |
jsheu3 | 0:7ebf4813882d | 51 | } |
jsheu3 | 0:7ebf4813882d | 52 | watermutex.unlock(); |
jsheu3 | 0:7ebf4813882d | 53 | watering = false; |
jsheu3 | 0:7ebf4813882d | 54 | } |
jsheu3 | 0:7ebf4813882d | 55 | |
jsheu3 | 0:7ebf4813882d | 56 | //function to turn on/off neo-pixels |
jsheu3 | 0:7ebf4813882d | 57 | void switch_lights() { |
jsheu3 | 0:7ebf4813882d | 58 | DigitalIn(DATA_PIN, PullDown); |
jsheu3 | 0:7ebf4813882d | 59 | neopixel::PixelArray array(DATA_PIN); |
jsheu3 | 0:7ebf4813882d | 60 | uint16_t numPixels = 32; |
jsheu3 | 0:7ebf4813882d | 61 | neopixel::Pixel pixels[numPixels]; |
jsheu3 | 0:7ebf4813882d | 62 | if (lights_on){ |
jsheu3 | 0:7ebf4813882d | 63 | for (int i=0; i<numPixels; ++i){ |
jsheu3 | 0:7ebf4813882d | 64 | pixels[i].red = 255; |
jsheu3 | 0:7ebf4813882d | 65 | pixels[i].green = 255; |
jsheu3 | 0:7ebf4813882d | 66 | pixels[i].blue = 255; |
jsheu3 | 0:7ebf4813882d | 67 | } |
jsheu3 | 0:7ebf4813882d | 68 | } else { |
jsheu3 | 0:7ebf4813882d | 69 | for (int i=0; i<numPixels; ++i){ |
jsheu3 | 0:7ebf4813882d | 70 | pixels[i].red = 0; |
jsheu3 | 0:7ebf4813882d | 71 | pixels[i].green = 0; |
jsheu3 | 0:7ebf4813882d | 72 | pixels[i].blue = 0; |
jsheu3 | 0:7ebf4813882d | 73 | } |
jsheu3 | 0:7ebf4813882d | 74 | } |
jsheu3 | 0:7ebf4813882d | 75 | lightmutex.lock(); |
jsheu3 | 0:7ebf4813882d | 76 | array.update(pixels, numPixels); |
jsheu3 | 0:7ebf4813882d | 77 | lightmutex.unlock(); |
jsheu3 | 0:7ebf4813882d | 78 | } |
jsheu3 | 0:7ebf4813882d | 79 | |
jsheu3 | 0:7ebf4813882d | 80 | |
jsheu3 | 0:7ebf4813882d | 81 | void read_temp(){ |
jsheu3 | 0:7ebf4813882d | 82 | int iTemp; |
jsheu3 | 0:7ebf4813882d | 83 | MyTH02.startTempConv(true,true); |
jsheu3 | 0:7ebf4813882d | 84 | MyTH02.waitEndConversion(); |
jsheu3 | 0:7ebf4813882d | 85 | iTemp= MyTH02.getConversionValue(); |
jsheu3 | 0:7ebf4813882d | 86 | temperature = iTemp/10.0; |
jsheu3 | 0:7ebf4813882d | 87 | } |
jsheu3 | 0:7ebf4813882d | 88 | |
jsheu3 | 0:7ebf4813882d | 89 | |
jsheu3 | 0:7ebf4813882d | 90 | void read_humidity() { |
jsheu3 | 0:7ebf4813882d | 91 | int iRH; |
jsheu3 | 0:7ebf4813882d | 92 | MyTH02.startRHConv(true,true); |
jsheu3 | 0:7ebf4813882d | 93 | MyTH02.waitEndConversion(); |
jsheu3 | 0:7ebf4813882d | 94 | iRH= MyTH02.getConversionValue(); |
jsheu3 | 0:7ebf4813882d | 95 | humidity = iRH/10.0; |
jsheu3 | 0:7ebf4813882d | 96 | } |
jsheu3 | 0:7ebf4813882d | 97 | |
jsheu3 | 0:7ebf4813882d | 98 | |
jsheu3 | 0:7ebf4813882d | 99 | |
jsheu3 | 0:7ebf4813882d | 100 | #endif |