Complete library for whole scientific pre-final

Dependencies:   BOX_1

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?

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