Software to create an Environmental Comfort Measurement station using an mbed LPC1768.

Dependencies:   4DGL-uLCD-SE SCP1000 SHTx mbed

Fork of SHT15_Example by Roy van Dam

Committer:
kylepost3
Date:
Sun Mar 23 22:03:11 2014 +0000
Revision:
1:036d23e0eb5a
Parent:
0:f850dfb07e93
Published Version 1.0 of the Environmental Comfort Measurement project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NegativeBlack 0:f850dfb07e93 1 #include "mbed.h"
NegativeBlack 0:f850dfb07e93 2 #include "SHTx/sht15.hpp"
kylepost3 1:036d23e0eb5a 3 #include "SCP1000.h"
kylepost3 1:036d23e0eb5a 4 #include "uLCD_4DGL.h"
kylepost3 1:036d23e0eb5a 5
kylepost3 1:036d23e0eb5a 6 uLCD_4DGL uLCD(p28,p27,p29); // serial tx, serial rx, reset pin;
kylepost3 1:036d23e0eb5a 7 SCP1000 scp1000(p5,p6,p7,p8);
kylepost3 1:036d23e0eb5a 8 SHTx::SHT15 sensor(p9, p10);
kylepost3 1:036d23e0eb5a 9 DigitalOut busy(LED1);
kylepost3 1:036d23e0eb5a 10 DigitalIn mode(p14);
NegativeBlack 0:f850dfb07e93 11
kylepost3 1:036d23e0eb5a 12
kylepost3 1:036d23e0eb5a 13 // Declare pins for color sensor
kylepost3 1:036d23e0eb5a 14 AnalogIn red_in(p15);
kylepost3 1:036d23e0eb5a 15 AnalogIn green_in(p16);
kylepost3 1:036d23e0eb5a 16 AnalogIn blue_in(p17);
kylepost3 1:036d23e0eb5a 17
kylepost3 1:036d23e0eb5a 18 BusOut red_gain(p26, p25);
kylepost3 1:036d23e0eb5a 19 BusOut green_gain(p24, p23);
kylepost3 1:036d23e0eb5a 20 BusOut blue_gain(p22, p21);
kylepost3 1:036d23e0eb5a 21
kylepost3 1:036d23e0eb5a 22
NegativeBlack 0:f850dfb07e93 23
kylepost3 1:036d23e0eb5a 24 float comfort_calc(float val, int min, int max){
kylepost3 1:036d23e0eb5a 25 float delta;
kylepost3 1:036d23e0eb5a 26
kylepost3 1:036d23e0eb5a 27 if (val < min)
kylepost3 1:036d23e0eb5a 28 delta = val-min;
kylepost3 1:036d23e0eb5a 29 else if (val > max)
kylepost3 1:036d23e0eb5a 30 delta = val - max;
kylepost3 1:036d23e0eb5a 31 else
kylepost3 1:036d23e0eb5a 32 delta = 0;
kylepost3 1:036d23e0eb5a 33
kylepost3 1:036d23e0eb5a 34 delta = delta * 10 / (max-min);
kylepost3 1:036d23e0eb5a 35
kylepost3 1:036d23e0eb5a 36 return delta;
kylepost3 1:036d23e0eb5a 37 }
NegativeBlack 0:f850dfb07e93 38
kylepost3 1:036d23e0eb5a 39 void delta_print(float delta, char* type){
kylepost3 1:036d23e0eb5a 40 if (delta == 0)
kylepost3 1:036d23e0eb5a 41 uLCD.printf("%s: GOOD \r\n", type);
kylepost3 1:036d23e0eb5a 42 else if (delta < 0)
kylepost3 1:036d23e0eb5a 43 uLCD.printf("%s: LOW \r\n", type);
kylepost3 1:036d23e0eb5a 44 else
kylepost3 1:036d23e0eb5a 45 uLCD.printf("%s: HIGH \r\n", type);
kylepost3 1:036d23e0eb5a 46 }
kylepost3 1:036d23e0eb5a 47
kylepost3 1:036d23e0eb5a 48 int main() {
NegativeBlack 0:f850dfb07e93 49 // Speed things up a bit.
NegativeBlack 0:f850dfb07e93 50 sensor.setOTPReload(false);
NegativeBlack 0:f850dfb07e93 51 sensor.setResolution(true);
NegativeBlack 0:f850dfb07e93 52
kylepost3 1:036d23e0eb5a 53 //Declare internal variables
kylepost3 1:036d23e0eb5a 54 float temp, humid, inHg, tempF;
kylepost3 1:036d23e0eb5a 55 int press;
kylepost3 1:036d23e0eb5a 56
kylepost3 1:036d23e0eb5a 57 int red = 0;
kylepost3 1:036d23e0eb5a 58 int green = 0;
kylepost3 1:036d23e0eb5a 59 int blue = 0;
kylepost3 1:036d23e0eb5a 60
kylepost3 1:036d23e0eb5a 61 int prev_mode = 0;
kylepost3 1:036d23e0eb5a 62
kylepost3 1:036d23e0eb5a 63 //declare comfort values
kylepost3 1:036d23e0eb5a 64 float temp_delta = 0;
kylepost3 1:036d23e0eb5a 65 float humid_delta = 0;
kylepost3 1:036d23e0eb5a 66 float press_delta = 0;
kylepost3 1:036d23e0eb5a 67 float color_delta = 0;
kylepost3 1:036d23e0eb5a 68
kylepost3 1:036d23e0eb5a 69 float comfort = 0;
kylepost3 1:036d23e0eb5a 70
kylepost3 1:036d23e0eb5a 71 // Sets the gain of the color sensor
kylepost3 1:036d23e0eb5a 72 red_gain = 3;
kylepost3 1:036d23e0eb5a 73 green_gain = 3;
kylepost3 1:036d23e0eb5a 74 blue_gain = 3;
kylepost3 1:036d23e0eb5a 75
kylepost3 1:036d23e0eb5a 76 sensor.setScale(false); // Sets the sensor temp. setting to Celsius
kylepost3 1:036d23e0eb5a 77
kylepost3 1:036d23e0eb5a 78 uLCD.baudrate(600000);
kylepost3 1:036d23e0eb5a 79 uLCD.cls();
NegativeBlack 0:f850dfb07e93 80 while(1) {
kylepost3 1:036d23e0eb5a 81 //busy = true;
NegativeBlack 0:f850dfb07e93 82 sensor.update();
kylepost3 1:036d23e0eb5a 83
kylepost3 1:036d23e0eb5a 84 temp = (sensor.getTemperature() + scp1000.readTemperature() )/ 2; // Averages the 2 available temperature readings
kylepost3 1:036d23e0eb5a 85 humid = sensor.getHumidity();
kylepost3 1:036d23e0eb5a 86 press = scp1000.readPressure();
kylepost3 1:036d23e0eb5a 87 busy = false;
kylepost3 1:036d23e0eb5a 88
kylepost3 1:036d23e0eb5a 89 tempF = temp * 9.0 / 5.0 + 32.0; // Converts temp from C to F
NegativeBlack 0:f850dfb07e93 90
kylepost3 1:036d23e0eb5a 91 // Scale the RGB sensor values to usuable values
kylepost3 1:036d23e0eb5a 92 red = red_in * 1000;
kylepost3 1:036d23e0eb5a 93 green = green_in * 1000;
kylepost3 1:036d23e0eb5a 94 blue = blue_in * 1700;
kylepost3 1:036d23e0eb5a 95
kylepost3 1:036d23e0eb5a 96 // Convert pressure to mmhg
kylepost3 1:036d23e0eb5a 97 inHg = press / 3376.85;
kylepost3 1:036d23e0eb5a 98
kylepost3 1:036d23e0eb5a 99
kylepost3 1:036d23e0eb5a 100 temp_delta = comfort_calc(tempF, 65, 75);
kylepost3 1:036d23e0eb5a 101 humid_delta = comfort_calc(humid, 30, 70);
kylepost3 1:036d23e0eb5a 102 press_delta = comfort_calc(inHg, 28, 31);
kylepost3 1:036d23e0eb5a 103 color_delta = comfort_calc(red+green+blue, 30, 450);
kylepost3 1:036d23e0eb5a 104
kylepost3 1:036d23e0eb5a 105
NegativeBlack 0:f850dfb07e93 106
kylepost3 1:036d23e0eb5a 107 comfort = abs(temp_delta) + abs(humid_delta) + abs(press_delta)+ abs(color_delta);
kylepost3 1:036d23e0eb5a 108 comfort = 100 - comfort;
kylepost3 1:036d23e0eb5a 109
kylepost3 1:036d23e0eb5a 110 // Beggining of printing modes
kylepost3 1:036d23e0eb5a 111 uLCD.locate(0,0);
NegativeBlack 0:f850dfb07e93 112
kylepost3 1:036d23e0eb5a 113
kylepost3 1:036d23e0eb5a 114 if (mode==0){ // Sensor detail mode
kylepost3 1:036d23e0eb5a 115 if (prev_mode != mode)
kylepost3 1:036d23e0eb5a 116 uLCD.cls();
kylepost3 1:036d23e0eb5a 117
kylepost3 1:036d23e0eb5a 118 // Prints the temperature in celcius
kylepost3 1:036d23e0eb5a 119 uLCD.printf("Temp: %3.2f F\r\n", tempF);
kylepost3 1:036d23e0eb5a 120
kylepost3 1:036d23e0eb5a 121 // Prints the relative Humidity
kylepost3 1:036d23e0eb5a 122 uLCD.printf("Humdity: %3.2f %%\r\n", humid);
kylepost3 1:036d23e0eb5a 123
kylepost3 1:036d23e0eb5a 124 // Prints barometric pressure
kylepost3 1:036d23e0eb5a 125 uLCD.printf("Press: %3.2f inHg\r\n\n", inHg);
kylepost3 1:036d23e0eb5a 126 if (inHg >=28.9)
kylepost3 1:036d23e0eb5a 127 uLCD.printf("High Pressure");
kylepost3 1:036d23e0eb5a 128 else
kylepost3 1:036d23e0eb5a 129 uLCD.printf("Low Pressure");
kylepost3 1:036d23e0eb5a 130
kylepost3 1:036d23e0eb5a 131 //Print color sensor values
kylepost3 1:036d23e0eb5a 132 uLCD.printf("\n\n");
kylepost3 1:036d23e0eb5a 133 uLCD.printf("Red: %i\r\n", red);
kylepost3 1:036d23e0eb5a 134 uLCD.printf("Green: %i\r\n", green);
kylepost3 1:036d23e0eb5a 135 uLCD.printf("Blue: %i\r\n", blue);
kylepost3 1:036d23e0eb5a 136
kylepost3 1:036d23e0eb5a 137 uLCD.printf("\nt:%3.2f h:%3.2f \np:%3.2f l:%3.2f \r\n", temp_delta, humid_delta, press_delta, color_delta);
kylepost3 1:036d23e0eb5a 138
kylepost3 1:036d23e0eb5a 139 prev_mode = 0;
kylepost3 1:036d23e0eb5a 140 }
kylepost3 1:036d23e0eb5a 141 else { // Normal mode
kylepost3 1:036d23e0eb5a 142 if (prev_mode != mode)
kylepost3 1:036d23e0eb5a 143 uLCD.cls();
kylepost3 1:036d23e0eb5a 144
NegativeBlack 0:f850dfb07e93 145
kylepost3 1:036d23e0eb5a 146 delta_print(temp_delta, "Temp");
kylepost3 1:036d23e0eb5a 147 delta_print(humid_delta, "Humid");
kylepost3 1:036d23e0eb5a 148 delta_print(press_delta, "Press");
kylepost3 1:036d23e0eb5a 149 delta_print(color_delta, "Light");
kylepost3 1:036d23e0eb5a 150
kylepost3 1:036d23e0eb5a 151 if (comfort >90)
kylepost3 1:036d23e0eb5a 152 uLCD.printf("\n\nComfortable \r\n");
kylepost3 1:036d23e0eb5a 153 else
kylepost3 1:036d23e0eb5a 154 uLCD.printf("\n\nUncomfortable\r\n");
kylepost3 1:036d23e0eb5a 155
kylepost3 1:036d23e0eb5a 156 uLCD.printf("Rating %3.0f/100\r\n", comfort);
kylepost3 1:036d23e0eb5a 157 prev_mode = 1;
kylepost3 1:036d23e0eb5a 158 }
kylepost3 1:036d23e0eb5a 159 wait(.5);
NegativeBlack 0:f850dfb07e93 160 }
NegativeBlack 0:f850dfb07e93 161 }
kylepost3 1:036d23e0eb5a 162
kylepost3 1:036d23e0eb5a 163