![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
para el ventilador
pressure_sensors.cpp@8:208d965a3bd2, 2020-04-23 (annotated)
- Committer:
- miguelangel_2511
- Date:
- Thu Apr 23 17:05:36 2020 +0000
- Revision:
- 8:208d965a3bd2
- Parent:
- 7:f4e248182d31
- Child:
- 9:95fdcdc0977e
Se agrego la medicion y visualizacion grafica del volumen, el flujo y la presion. Sin embargo, aun no se han aplicado filtros a las seniales medidas.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
miguelangel_2511 | 7:f4e248182d31 | 1 | |
miguelangel_2511 | 7:f4e248182d31 | 2 | #include "mbed.h" |
miguelangel_2511 | 7:f4e248182d31 | 3 | #include "stdint.h" |
miguelangel_2511 | 8:208d965a3bd2 | 4 | #include "math.h" |
miguelangel_2511 | 7:f4e248182d31 | 5 | #include "project_defines.h" |
miguelangel_2511 | 7:f4e248182d31 | 6 | #include "pressure_sensors.h" |
miguelangel_2511 | 7:f4e248182d31 | 7 | |
miguelangel_2511 | 7:f4e248182d31 | 8 | |
miguelangel_2511 | 7:f4e248182d31 | 9 | /* Object definition */ |
miguelangel_2511 | 7:f4e248182d31 | 10 | I2C pressure_sensor_01(PRESSURE_SENSOR_01_SDA_PIN, PRESSURE_SENSOR_01_SCL_PIN); |
miguelangel_2511 | 7:f4e248182d31 | 11 | I2C pressure_sensor_02(PRESSURE_SENSOR_02_SDA_PIN, PRESSURE_SENSOR_02_SCL_PIN); |
miguelangel_2511 | 7:f4e248182d31 | 12 | |
miguelangel_2511 | 7:f4e248182d31 | 13 | /* Global variable definition */ |
miguelangel_2511 | 8:208d965a3bd2 | 14 | int16_t pressure_01_bin, pressure_02_bin; |
miguelangel_2511 | 8:208d965a3bd2 | 15 | float pressure_01_psi, pressure_02_psi; |
miguelangel_2511 | 8:208d965a3bd2 | 16 | float flow_lpm, volume_ml; |
miguelangel_2511 | 8:208d965a3bd2 | 17 | |
miguelangel_2511 | 8:208d965a3bd2 | 18 | //float diff_pressure_psi; |
miguelangel_2511 | 7:f4e248182d31 | 19 | |
miguelangel_2511 | 7:f4e248182d31 | 20 | char sensor_read_data_buffer[2]; |
miguelangel_2511 | 7:f4e248182d31 | 21 | |
miguelangel_2511 | 7:f4e248182d31 | 22 | /* Function definition */ |
miguelangel_2511 | 7:f4e248182d31 | 23 | |
miguelangel_2511 | 7:f4e248182d31 | 24 | void Pressure_Sensors_Initialize(void){ |
miguelangel_2511 | 7:f4e248182d31 | 25 | pressure_sensor_01.frequency(PRESSURE_SENSOR_I2C_CLK_HZ ); |
miguelangel_2511 | 7:f4e248182d31 | 26 | pressure_sensor_02.frequency(PRESSURE_SENSOR_I2C_CLK_HZ ); |
miguelangel_2511 | 7:f4e248182d31 | 27 | } |
miguelangel_2511 | 7:f4e248182d31 | 28 | |
miguelangel_2511 | 7:f4e248182d31 | 29 | |
miguelangel_2511 | 7:f4e248182d31 | 30 | void Pressure_Sensors_Read(void){ |
miguelangel_2511 | 7:f4e248182d31 | 31 | |
miguelangel_2511 | 7:f4e248182d31 | 32 | /* Read binary values */ |
miguelangel_2511 | 7:f4e248182d31 | 33 | pressure_sensor_01.read(PRESSURE_SENSOR_01_SRA, sensor_read_data_buffer, 2); |
miguelangel_2511 | 7:f4e248182d31 | 34 | pressure_01_bin = ((sensor_read_data_buffer[0] << 8) | sensor_read_data_buffer[1]) & 0x3FFF; |
miguelangel_2511 | 7:f4e248182d31 | 35 | pressure_sensor_02.read(PRESSURE_SENSOR_02_SRA, sensor_read_data_buffer, 2); |
miguelangel_2511 | 7:f4e248182d31 | 36 | pressure_02_bin = ((sensor_read_data_buffer[0] << 8) | sensor_read_data_buffer[1]) & 0x3FFF; |
miguelangel_2511 | 7:f4e248182d31 | 37 | |
miguelangel_2511 | 7:f4e248182d31 | 38 | /* Calculate pressure values in PSI */ |
miguelangel_2511 | 7:f4e248182d31 | 39 | pressure_01_psi = (5.0 * pressure_01_bin) / 16383; |
miguelangel_2511 | 7:f4e248182d31 | 40 | pressure_02_psi = (5.0 * pressure_02_bin) / 16383; |
miguelangel_2511 | 8:208d965a3bd2 | 41 | |
miguelangel_2511 | 7:f4e248182d31 | 42 | |
miguelangel_2511 | 7:f4e248182d31 | 43 | } |
miguelangel_2511 | 7:f4e248182d31 | 44 | |
miguelangel_2511 | 8:208d965a3bd2 | 45 | void Calculate_Flow_From_Pressure(void){ |
miguelangel_2511 | 8:208d965a3bd2 | 46 | |
miguelangel_2511 | 8:208d965a3bd2 | 47 | int16_t diff_pressure_bin; |
miguelangel_2511 | 8:208d965a3bd2 | 48 | float diff_pressure_psi; |
miguelangel_2511 | 8:208d965a3bd2 | 49 | |
miguelangel_2511 | 8:208d965a3bd2 | 50 | diff_pressure_bin = pressure_02_bin - pressure_01_bin; |
miguelangel_2511 | 8:208d965a3bd2 | 51 | diff_pressure_psi = (5.0 * diff_pressure_bin) / 16383; |
miguelangel_2511 | 8:208d965a3bd2 | 52 | |
miguelangel_2511 | 8:208d965a3bd2 | 53 | if(diff_pressure_psi < 0){ |
miguelangel_2511 | 8:208d965a3bd2 | 54 | flow_lpm = -SPIROMETER_SENSOR_CONSTANT * sqrt(-diff_pressure_psi); |
miguelangel_2511 | 8:208d965a3bd2 | 55 | }else{ |
miguelangel_2511 | 8:208d965a3bd2 | 56 | flow_lpm = SPIROMETER_SENSOR_CONSTANT * sqrt(diff_pressure_psi); |
miguelangel_2511 | 8:208d965a3bd2 | 57 | } |
miguelangel_2511 | 8:208d965a3bd2 | 58 | } |
miguelangel_2511 | 7:f4e248182d31 | 59 | |
miguelangel_2511 | 8:208d965a3bd2 | 60 | void Calculate_Volume_From_Flow(void){ |
miguelangel_2511 | 8:208d965a3bd2 | 61 | |
miguelangel_2511 | 8:208d965a3bd2 | 62 | static float previous_flow_lpm = 0.0; |
miguelangel_2511 | 8:208d965a3bd2 | 63 | float delta_volume_ml; |
miguelangel_2511 | 8:208d965a3bd2 | 64 | |
miguelangel_2511 | 8:208d965a3bd2 | 65 | delta_volume_ml = (PRESSURE_SENSOR_READ_PERIOD_MS * (flow_lpm + previous_flow_lpm)) / 60.0; |
miguelangel_2511 | 8:208d965a3bd2 | 66 | |
miguelangel_2511 | 8:208d965a3bd2 | 67 | volume_ml = volume_ml + delta_volume_ml; |
miguelangel_2511 | 8:208d965a3bd2 | 68 | |
miguelangel_2511 | 8:208d965a3bd2 | 69 | previous_flow_lpm = flow_lpm; |
miguelangel_2511 | 8:208d965a3bd2 | 70 | |
miguelangel_2511 | 8:208d965a3bd2 | 71 | } |
miguelangel_2511 | 8:208d965a3bd2 | 72 | |
miguelangel_2511 | 8:208d965a3bd2 | 73 | void Pressure_01_LPF(void){ |
miguelangel_2511 | 8:208d965a3bd2 | 74 | |
miguelangel_2511 | 8:208d965a3bd2 | 75 | } |
miguelangel_2511 | 8:208d965a3bd2 | 76 | |
miguelangel_2511 | 8:208d965a3bd2 | 77 | |
miguelangel_2511 | 8:208d965a3bd2 | 78 | void Pressure_02_LPF(void){ |
miguelangel_2511 | 8:208d965a3bd2 | 79 | |
miguelangel_2511 | 8:208d965a3bd2 | 80 | } |