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@1:8e50dcd9884f, 2018-05-02 (annotated)
- 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?
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() { |
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 |