Complete library for whole scientific pre-final
Dependencies: BOX_1
ENVIROMENTAL/ENVIROMENTAL.cpp@5:b0fa65791218, 2019-09-05 (annotated)
- Committer:
- Alessio_Zaino
- Date:
- Thu Sep 05 20:56:11 2019 +0000
- Revision:
- 5:b0fa65791218
- Parent:
- 4:f693e434d21c
final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Alessio_Zaino | 0:f8a9cceb4186 | 1 | #include "ENVIROMENTAL.h" |
Alessio_Zaino | 0:f8a9cceb4186 | 2 | |
Alessio_Zaino | 0:f8a9cceb4186 | 3 | |
Alessio_Zaino | 0:f8a9cceb4186 | 4 | //#define Ro 28 //Change this value with the value from Calibrate and uncomment |
Alessio_Zaino | 0:f8a9cceb4186 | 5 | |
Alessio_Zaino | 0:f8a9cceb4186 | 6 | |
Alessio_Zaino | 4:f693e434d21c | 7 | ENVIROMENTAL::ENVIROMENTAL (PinName envi_SDA, PinName envi_SCL,PinName mq_analog,I2C &i2c):climate(envi_SDA,envi_SCL),bmp(envi_SDA,envi_SCL),uv(i2c),lux(envi_SDA,envi_SCL) |
Alessio_Zaino | 0:f8a9cceb4186 | 8 | { |
stebonicelli | 3:7c5d4da549ce | 9 | |
Alessio_Zaino | 0:f8a9cceb4186 | 10 | _mq_pin = mq_analog; |
Alessio_Zaino | 0:f8a9cceb4186 | 11 | uv.begin(VEML6070_1_T); |
Alessio_Zaino | 0:f8a9cceb4186 | 12 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 13 | ENVIROMENTAL::~ENVIROMENTAL(){} |
Alessio_Zaino | 0:f8a9cceb4186 | 14 | |
Alessio_Zaino | 0:f8a9cceb4186 | 15 | |
Alessio_Zaino | 0:f8a9cceb4186 | 16 | void ENVIROMENTAL::calibrate_mq() |
Alessio_Zaino | 0:f8a9cceb4186 | 17 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 18 | |
Alessio_Zaino | 0:f8a9cceb4186 | 19 | AnalogIn analog_value(_mq_pin); |
Alessio_Zaino | 0:f8a9cceb4186 | 20 | float MQ7_read; |
Alessio_Zaino | 0:f8a9cceb4186 | 21 | float VRL; |
Alessio_Zaino | 0:f8a9cceb4186 | 22 | float Rs; |
Alessio_Zaino | 0:f8a9cceb4186 | 23 | float Ro; |
Alessio_Zaino | 0:f8a9cceb4186 | 24 | float RL; |
Alessio_Zaino | 0:f8a9cceb4186 | 25 | for(int test_cycle = 1 ; test_cycle <= 500 ; test_cycle++) //Read the analog output of the sensor for 200 times |
Alessio_Zaino | 0:f8a9cceb4186 | 26 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 27 | MQ7_read = MQ7_read + analog_value.read(); //add the values for 500 |
Alessio_Zaino | 0:f8a9cceb4186 | 28 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 29 | MQ7_read = MQ7_read/500.0f; //Take average |
Alessio_Zaino | 0:f8a9cceb4186 | 30 | VRL = MQ7_read*(5.0f); //Convert analog value to voltage |
Alessio_Zaino | 0:f8a9cceb4186 | 31 | Rs = ((5.0f/VRL)-1) * RL; //is the formula obtained from datasheet |
Alessio_Zaino | 0:f8a9cceb4186 | 32 | Ro = Rs/1.7f; //RS/RO is 1.7 as we obtained from graph of datasheet |
Alessio_Zaino | 0:f8a9cceb4186 | 33 | printf("Ro at fresh air = %f\n\r",Ro); |
Alessio_Zaino | 0:f8a9cceb4186 | 34 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 35 | |
Alessio_Zaino | 0:f8a9cceb4186 | 36 | |
Alessio_Zaino | 0:f8a9cceb4186 | 37 | |
Alessio_Zaino | 0:f8a9cceb4186 | 38 | float ENVIROMENTAL::get_CO() |
Alessio_Zaino | 0:f8a9cceb4186 | 39 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 40 | AnalogIn analog_value(_mq_pin); |
Alessio_Zaino | 0:f8a9cceb4186 | 41 | float MQ7_read; |
Alessio_Zaino | 0:f8a9cceb4186 | 42 | float VRL; |
Alessio_Zaino | 0:f8a9cceb4186 | 43 | float Rs; |
Alessio_Zaino | 0:f8a9cceb4186 | 44 | float ratio; |
Alessio_Zaino | 5:b0fa65791218 | 45 | float Ro=28; |
Alessio_Zaino | 0:f8a9cceb4186 | 46 | float ppm; |
Alessio_Zaino | 5:b0fa65791218 | 47 | float RL=10; |
Alessio_Zaino | 0:f8a9cceb4186 | 48 | float m =-0.661; |
Alessio_Zaino | 0:f8a9cceb4186 | 49 | float b =1.332; |
Alessio_Zaino | 0:f8a9cceb4186 | 50 | for(int test_cycle = 1 ; test_cycle <= 500 ; test_cycle++) //Read the analog output of the sensor for 200 times |
Alessio_Zaino | 0:f8a9cceb4186 | 51 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 52 | MQ7_read = MQ7_read + analog_value.read(); //add the values for 500 |
Alessio_Zaino | 0:f8a9cceb4186 | 53 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 54 | MQ7_read = MQ7_read/500.0f; //Take average |
Alessio_Zaino | 0:f8a9cceb4186 | 55 | |
Alessio_Zaino | 0:f8a9cceb4186 | 56 | VRL = MQ7_read*(5.0f); //Convert analog value to voltage |
Alessio_Zaino | 0:f8a9cceb4186 | 57 | Rs = ((5.0f/VRL)-1.0f) * RL; //is the formula obtained from datasheet |
Alessio_Zaino | 0:f8a9cceb4186 | 58 | ratio = Rs/Ro; |
Alessio_Zaino | 0:f8a9cceb4186 | 59 | ppm = pow(10, ((log10(ratio)-b)/m)); //use formula to calculate ppm |
Alessio_Zaino | 0:f8a9cceb4186 | 60 | return ppm; |
Alessio_Zaino | 0:f8a9cceb4186 | 61 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 62 | |
Alessio_Zaino | 0:f8a9cceb4186 | 63 | |
Alessio_Zaino | 0:f8a9cceb4186 | 64 | float ENVIROMENTAL::get_temp() |
Alessio_Zaino | 0:f8a9cceb4186 | 65 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 66 | float temp=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 67 | for(int i=0;i<20;i++) |
Alessio_Zaino | 0:f8a9cceb4186 | 68 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 69 | _tmp = climate.get_temperature(); |
Alessio_Zaino | 0:f8a9cceb4186 | 70 | temp=temp + _tmp; |
Alessio_Zaino | 0:f8a9cceb4186 | 71 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 72 | |
Alessio_Zaino | 0:f8a9cceb4186 | 73 | return temp/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 74 | |
Alessio_Zaino | 0:f8a9cceb4186 | 75 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 76 | |
Alessio_Zaino | 0:f8a9cceb4186 | 77 | |
Alessio_Zaino | 0:f8a9cceb4186 | 78 | uint32_t ENVIROMENTAL::get_humidity(){ |
Alessio_Zaino | 0:f8a9cceb4186 | 79 | _tmp=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 80 | uint32_t hum=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 81 | for(int i=0;i<20;i++) |
Alessio_Zaino | 0:f8a9cceb4186 | 82 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 83 | _tmp=climate.get_humidity(); |
Alessio_Zaino | 0:f8a9cceb4186 | 84 | hum = hum + _tmp; |
Alessio_Zaino | 0:f8a9cceb4186 | 85 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 86 | |
Alessio_Zaino | 0:f8a9cceb4186 | 87 | return hum/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 88 | |
Alessio_Zaino | 0:f8a9cceb4186 | 89 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 90 | |
Alessio_Zaino | 0:f8a9cceb4186 | 91 | int32_t ENVIROMENTAL::get_pressure(){ |
Alessio_Zaino | 0:f8a9cceb4186 | 92 | _tmp=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 93 | int32_t pres=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 94 | for(int i=0;i<20;i++) |
Alessio_Zaino | 0:f8a9cceb4186 | 95 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 96 | _tmp=bmp.getPressure(); |
Alessio_Zaino | 0:f8a9cceb4186 | 97 | pres = pres + _tmp; |
Alessio_Zaino | 0:f8a9cceb4186 | 98 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 99 | |
Alessio_Zaino | 0:f8a9cceb4186 | 100 | return pres/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 101 | |
Alessio_Zaino | 0:f8a9cceb4186 | 102 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 103 | |
Alessio_Zaino | 0:f8a9cceb4186 | 104 | int ENVIROMENTAL::get_uv(){ |
Alessio_Zaino | 0:f8a9cceb4186 | 105 | int uvi=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 106 | _tmp=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 107 | for(int i=0;i<20;i++) |
Alessio_Zaino | 0:f8a9cceb4186 | 108 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 109 | _tmp = uv.readUV(); |
Alessio_Zaino | 2:cab3c97ca754 | 110 | uvi = uvi +_tmp; |
Alessio_Zaino | 0:f8a9cceb4186 | 111 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 112 | |
Alessio_Zaino | 0:f8a9cceb4186 | 113 | return uvi/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 114 | |
Alessio_Zaino | 0:f8a9cceb4186 | 115 | |
Alessio_Zaino | 0:f8a9cceb4186 | 116 | |
Alessio_Zaino | 4:f693e434d21c | 117 | } |
Alessio_Zaino | 4:f693e434d21c | 118 | |
Alessio_Zaino | 4:f693e434d21c | 119 | |
Alessio_Zaino | 4:f693e434d21c | 120 | int ENVIROMENTAL::get_lumen(){ |
Alessio_Zaino | 4:f693e434d21c | 121 | int lumen=0; |
Alessio_Zaino | 4:f693e434d21c | 122 | _tmp=0; |
Alessio_Zaino | 4:f693e434d21c | 123 | for(int i=0;i<20;i++) |
Alessio_Zaino | 4:f693e434d21c | 124 | { |
Alessio_Zaino | 4:f693e434d21c | 125 | _tmp = lux.getLuminosity(2); |
Alessio_Zaino | 4:f693e434d21c | 126 | lumen = lumen + _tmp; |
Alessio_Zaino | 4:f693e434d21c | 127 | } |
Alessio_Zaino | 4:f693e434d21c | 128 | |
Alessio_Zaino | 4:f693e434d21c | 129 | return lumen/20; |
Alessio_Zaino | 4:f693e434d21c | 130 | } |
Alessio_Zaino | 4:f693e434d21c | 131 | |
Alessio_Zaino | 4:f693e434d21c | 132 | int ENVIROMENTAL::get_infrared(){ |
Alessio_Zaino | 4:f693e434d21c | 133 | int lumen=0; |
Alessio_Zaino | 4:f693e434d21c | 134 | _tmp=0; |
Alessio_Zaino | 4:f693e434d21c | 135 | for(int i=0;i<20;i++) |
Alessio_Zaino | 4:f693e434d21c | 136 | { |
Alessio_Zaino | 4:f693e434d21c | 137 | _tmp = lux.getLuminosity(1); |
Alessio_Zaino | 4:f693e434d21c | 138 | lumen = lumen + _tmp; |
Alessio_Zaino | 4:f693e434d21c | 139 | } |
Alessio_Zaino | 4:f693e434d21c | 140 | |
Alessio_Zaino | 4:f693e434d21c | 141 | return lumen/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 142 | } |