Complete library for whole scientific

Dependencies:   BOX_1

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?

UserRevisionLine numberNew 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 }