alessio zaino
/
Scientific_RTOS
Complete library for whole scientific
ENVIROMENTAL/ENVIROMENTAL.cpp@1:dda01a024d6c, 2019-06-10 (annotated)
- Committer:
- Alessio_Zaino
- Date:
- Mon Jun 10 13:11:48 2019 +0000
- Revision:
- 1:dda01a024d6c
- Parent:
- 0:f8a9cceb4186
j
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 | 0:f8a9cceb4186 | 7 | ENVIROMENTAL::ENVIROMENTAL (PinName envi_SDA, PinName envi_SCL,PinName mq_analog):climate(envi_SDA,envi_SCL),bmp(envi_SDA,envi_SCL),i2c(envi_SDA,envi_SCL),uv(i2c) |
Alessio_Zaino | 0:f8a9cceb4186 | 8 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 9 | _mq_pin = mq_analog; |
Alessio_Zaino | 0:f8a9cceb4186 | 10 | uv.begin(VEML6070_1_T); |
Alessio_Zaino | 0:f8a9cceb4186 | 11 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 12 | ENVIROMENTAL::~ENVIROMENTAL(){} |
Alessio_Zaino | 0:f8a9cceb4186 | 13 | |
Alessio_Zaino | 0:f8a9cceb4186 | 14 | |
Alessio_Zaino | 0:f8a9cceb4186 | 15 | void ENVIROMENTAL::calibrate_mq() |
Alessio_Zaino | 0:f8a9cceb4186 | 16 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 17 | |
Alessio_Zaino | 0:f8a9cceb4186 | 18 | AnalogIn analog_value(_mq_pin); |
Alessio_Zaino | 0:f8a9cceb4186 | 19 | float MQ7_read; |
Alessio_Zaino | 0:f8a9cceb4186 | 20 | float VRL; |
Alessio_Zaino | 0:f8a9cceb4186 | 21 | float Rs; |
Alessio_Zaino | 0:f8a9cceb4186 | 22 | float Ro; |
Alessio_Zaino | 0:f8a9cceb4186 | 23 | float RL; |
Alessio_Zaino | 0:f8a9cceb4186 | 24 | for(int test_cycle = 1 ; test_cycle <= 500 ; test_cycle++) //Read the analog output of the sensor for 200 times |
Alessio_Zaino | 0:f8a9cceb4186 | 25 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 26 | MQ7_read = MQ7_read + analog_value.read(); //add the values for 500 |
Alessio_Zaino | 0:f8a9cceb4186 | 27 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 28 | MQ7_read = MQ7_read/500.0f; //Take average |
Alessio_Zaino | 0:f8a9cceb4186 | 29 | VRL = MQ7_read*(5.0f); //Convert analog value to voltage |
Alessio_Zaino | 0:f8a9cceb4186 | 30 | Rs = ((5.0f/VRL)-1) * RL; //is the formula obtained from datasheet |
Alessio_Zaino | 0:f8a9cceb4186 | 31 | Ro = Rs/1.7f; //RS/RO is 1.7 as we obtained from graph of datasheet |
Alessio_Zaino | 0:f8a9cceb4186 | 32 | printf("Ro at fresh air = %f\n\r",Ro); |
Alessio_Zaino | 0:f8a9cceb4186 | 33 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 34 | |
Alessio_Zaino | 0:f8a9cceb4186 | 35 | |
Alessio_Zaino | 0:f8a9cceb4186 | 36 | |
Alessio_Zaino | 0:f8a9cceb4186 | 37 | float ENVIROMENTAL::get_CO() |
Alessio_Zaino | 0:f8a9cceb4186 | 38 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 39 | AnalogIn analog_value(_mq_pin); |
Alessio_Zaino | 0:f8a9cceb4186 | 40 | float MQ7_read; |
Alessio_Zaino | 0:f8a9cceb4186 | 41 | float VRL; |
Alessio_Zaino | 0:f8a9cceb4186 | 42 | float Rs; |
Alessio_Zaino | 0:f8a9cceb4186 | 43 | float ratio; |
Alessio_Zaino | 0:f8a9cceb4186 | 44 | float Ro; |
Alessio_Zaino | 0:f8a9cceb4186 | 45 | float ppm; |
Alessio_Zaino | 0:f8a9cceb4186 | 46 | float RL; |
Alessio_Zaino | 0:f8a9cceb4186 | 47 | float m =-0.661; |
Alessio_Zaino | 0:f8a9cceb4186 | 48 | float b =1.332; |
Alessio_Zaino | 0:f8a9cceb4186 | 49 | for(int test_cycle = 1 ; test_cycle <= 500 ; test_cycle++) //Read the analog output of the sensor for 200 times |
Alessio_Zaino | 0:f8a9cceb4186 | 50 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 51 | MQ7_read = MQ7_read + analog_value.read(); //add the values for 500 |
Alessio_Zaino | 0:f8a9cceb4186 | 52 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 53 | MQ7_read = MQ7_read/500.0f; //Take average |
Alessio_Zaino | 0:f8a9cceb4186 | 54 | |
Alessio_Zaino | 0:f8a9cceb4186 | 55 | VRL = MQ7_read*(5.0f); //Convert analog value to voltage |
Alessio_Zaino | 0:f8a9cceb4186 | 56 | Rs = ((5.0f/VRL)-1.0f) * RL; //is the formula obtained from datasheet |
Alessio_Zaino | 0:f8a9cceb4186 | 57 | ratio = Rs/Ro; |
Alessio_Zaino | 0:f8a9cceb4186 | 58 | ppm = pow(10, ((log10(ratio)-b)/m)); //use formula to calculate ppm |
Alessio_Zaino | 0:f8a9cceb4186 | 59 | return ppm; |
Alessio_Zaino | 0:f8a9cceb4186 | 60 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 61 | |
Alessio_Zaino | 0:f8a9cceb4186 | 62 | |
Alessio_Zaino | 0:f8a9cceb4186 | 63 | float ENVIROMENTAL::get_temp() |
Alessio_Zaino | 0:f8a9cceb4186 | 64 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 65 | float temp=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 66 | for(int i=0;i<20;i++) |
Alessio_Zaino | 0:f8a9cceb4186 | 67 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 68 | _tmp = climate.get_temperature(); |
Alessio_Zaino | 0:f8a9cceb4186 | 69 | temp=temp + _tmp; |
Alessio_Zaino | 0:f8a9cceb4186 | 70 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 71 | |
Alessio_Zaino | 0:f8a9cceb4186 | 72 | return temp/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 73 | |
Alessio_Zaino | 0:f8a9cceb4186 | 74 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 75 | |
Alessio_Zaino | 0:f8a9cceb4186 | 76 | |
Alessio_Zaino | 0:f8a9cceb4186 | 77 | uint32_t ENVIROMENTAL::get_humidity(){ |
Alessio_Zaino | 0:f8a9cceb4186 | 78 | _tmp=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 79 | uint32_t hum=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 80 | for(int i=0;i<20;i++) |
Alessio_Zaino | 0:f8a9cceb4186 | 81 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 82 | _tmp=climate.get_humidity(); |
Alessio_Zaino | 0:f8a9cceb4186 | 83 | hum = hum + _tmp; |
Alessio_Zaino | 0:f8a9cceb4186 | 84 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 85 | |
Alessio_Zaino | 0:f8a9cceb4186 | 86 | return hum/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 87 | |
Alessio_Zaino | 0:f8a9cceb4186 | 88 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 89 | |
Alessio_Zaino | 0:f8a9cceb4186 | 90 | int32_t ENVIROMENTAL::get_pressure(){ |
Alessio_Zaino | 0:f8a9cceb4186 | 91 | _tmp=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 92 | int32_t pres=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 93 | for(int i=0;i<20;i++) |
Alessio_Zaino | 0:f8a9cceb4186 | 94 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 95 | _tmp=bmp.getPressure(); |
Alessio_Zaino | 0:f8a9cceb4186 | 96 | pres = pres + _tmp; |
Alessio_Zaino | 0:f8a9cceb4186 | 97 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 98 | |
Alessio_Zaino | 0:f8a9cceb4186 | 99 | return pres/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 100 | |
Alessio_Zaino | 0:f8a9cceb4186 | 101 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 102 | |
Alessio_Zaino | 0:f8a9cceb4186 | 103 | int ENVIROMENTAL::get_uv(){ |
Alessio_Zaino | 0:f8a9cceb4186 | 104 | int uvi=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 105 | _tmp=0; |
Alessio_Zaino | 0:f8a9cceb4186 | 106 | for(int i=0;i<20;i++) |
Alessio_Zaino | 0:f8a9cceb4186 | 107 | { |
Alessio_Zaino | 0:f8a9cceb4186 | 108 | _tmp = uv.readUV(); |
Alessio_Zaino | 0:f8a9cceb4186 | 109 | uvi = uvi + _tmp; |
Alessio_Zaino | 0:f8a9cceb4186 | 110 | } |
Alessio_Zaino | 0:f8a9cceb4186 | 111 | |
Alessio_Zaino | 0:f8a9cceb4186 | 112 | return uvi/20; |
Alessio_Zaino | 0:f8a9cceb4186 | 113 | |
Alessio_Zaino | 0:f8a9cceb4186 | 114 | |
Alessio_Zaino | 0:f8a9cceb4186 | 115 | |
Alessio_Zaino | 0:f8a9cceb4186 | 116 | } |