Measuring air flow, relative humidity & temperature, then showing results at TFT

Dependencies:   FT800_2 HYT mbed

Air flow is measured with FS7 sensor by IST-AG, humidity & temperature are measured by HYT-271 sensor by IST. Graphs displayed it TFT by Riverdi via graphical controller FFT801.

Hardware

For documentation on the FT800 library, please refer to the library pages.

Connection

MCU-board to TFT-module

MCU-board is connected to TFT-module via Break Out Board. You need 6 signals to connect: SCK, MOSI and MISO are connected to a SPI channel, SS is the chip select signal, PD work as powerdown and INT for interrupts from TFT to MCU.

/media/uploads/Ksenia/4_-22-.jpg

You have to connect VDD to BLVDD at Break Out Board if you use the board:

/media/uploads/Ksenia/4_-5-.jpg

MCU-board to HYT sensor

MCU-board is connected to sensor via I2C. Remember to use pull-up resisrors there:

/media/uploads/Ksenia/freshpaint-20-2016.09.16-10.37.03.png

MCU-board to FS7 sensor

MCU-board is connected to sensor via FS flowmodule. FS-flowmodul is a PCB implementing bridge circuit which is necessary for FS7.

https://habrastorage.org/files/b25/056/287/b250562871614b4ca4286af885f1fa24

https://habrastorage.org/files/72d/04c/cac/72d04ccac07b4fcfb436e0ffbac73066

Committer:
Ksenia
Date:
Thu Mar 16 08:58:18 2017 +0000
Revision:
0:3f440c2facb0
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ksenia 0:3f440c2facb0 1 #include "mbed.h"
Ksenia 0:3f440c2facb0 2 #include "FT_Platform.h"
Ksenia 0:3f440c2facb0 3 #include "HYT.h"
Ksenia 0:3f440c2facb0 4 #include "Display.h"
Ksenia 0:3f440c2facb0 5
Ksenia 0:3f440c2facb0 6 HYT SENSOR(PD6, PD7); // sda, scl [efm32hg_stk3400]
Ksenia 0:3f440c2facb0 7 FT800 TFT(PE10, PE11, PE12, PE13, PA1, PB11); // mosi, miso, sck, ss, int, pd [efm32hg_stk3400]
Ksenia 0:3f440c2facb0 8 AnalogIn ADC(PD4); // [efm32hg_stk3400]
Ksenia 0:3f440c2facb0 9
Ksenia 0:3f440c2facb0 10 Display disp(&TFT);
Ksenia 0:3f440c2facb0 11
Ksenia 0:3f440c2facb0 12 uint8_t humidity;
Ksenia 0:3f440c2facb0 13 float flow;
Ksenia 0:3f440c2facb0 14 int8_t temperature;
Ksenia 0:3f440c2facb0 15
Ksenia 0:3f440c2facb0 16 #define HUMIDITY_CORRECTION 15
Ksenia 0:3f440c2facb0 17 #define TEMPERATURE_CORRECTION -1
Ksenia 0:3f440c2facb0 18
Ksenia 0:3f440c2facb0 19 /*************************************************************************************************************************/
Ksenia 0:3f440c2facb0 20 float calculateFlow(uint16_t resultADC)
Ksenia 0:3f440c2facb0 21 {
Ksenia 0:3f440c2facb0 22 uint16_t flowVoltage;
Ksenia 0:3f440c2facb0 23 if ((resultADC / 1000) - 32 >= 0) {
Ksenia 0:3f440c2facb0 24 flowVoltage = (resultADC / 1000) - 32;
Ksenia 0:3f440c2facb0 25 } else {
Ksenia 0:3f440c2facb0 26 flowVoltage = 0;
Ksenia 0:3f440c2facb0 27 }
Ksenia 0:3f440c2facb0 28
Ksenia 0:3f440c2facb0 29 float voltageToSpeed[31] = { 0, 0, 0, 0.1, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3,
Ksenia 0:3f440c2facb0 30 0.4, 0.5, 0.6, 0.7, 0.8, 1.0, 1.2, 1.5, 2.0, 2.3, 2.8, 3.2, 3.9,
Ksenia 0:3f440c2facb0 31 4.5, 5.1, 5.8, 6.5, 7.4, 8.2, 9.1, 10
Ksenia 0:3f440c2facb0 32 };
Ksenia 0:3f440c2facb0 33 float flowSpeed = voltageToSpeed[flowVoltage];
Ksenia 0:3f440c2facb0 34
Ksenia 0:3f440c2facb0 35 return flowSpeed;
Ksenia 0:3f440c2facb0 36 }
Ksenia 0:3f440c2facb0 37
Ksenia 0:3f440c2facb0 38 /*************************************************************************************************************************/
Ksenia 0:3f440c2facb0 39 uint8_t calculateHumidity(uint8_t humidityFromHYT)
Ksenia 0:3f440c2facb0 40 {
Ksenia 0:3f440c2facb0 41 uint8_t humidityFinal;
Ksenia 0:3f440c2facb0 42 if (humidityFromHYT + 15 >= 100) {
Ksenia 0:3f440c2facb0 43 humidityFinal = 100;
Ksenia 0:3f440c2facb0 44 } else {
Ksenia 0:3f440c2facb0 45 humidityFinal = humidityFromHYT + HUMIDITY_CORRECTION;
Ksenia 0:3f440c2facb0 46 }
Ksenia 0:3f440c2facb0 47
Ksenia 0:3f440c2facb0 48 return humidityFinal;
Ksenia 0:3f440c2facb0 49 }
Ksenia 0:3f440c2facb0 50
Ksenia 0:3f440c2facb0 51 /*************************************************************************************************************************/
Ksenia 0:3f440c2facb0 52 int8_t calculateTemperature(int8_t temperatureFromHYT)
Ksenia 0:3f440c2facb0 53 {
Ksenia 0:3f440c2facb0 54 return temperatureFromHYT + TEMPERATURE_CORRECTION;
Ksenia 0:3f440c2facb0 55 }
Ksenia 0:3f440c2facb0 56
Ksenia 0:3f440c2facb0 57 /**************************************************************************************************************************/
Ksenia 0:3f440c2facb0 58 int main()
Ksenia 0:3f440c2facb0 59 {
Ksenia 0:3f440c2facb0 60 disp.Calibration();
Ksenia 0:3f440c2facb0 61
Ksenia 0:3f440c2facb0 62 disp.LoadImagesAndFonts();
Ksenia 0:3f440c2facb0 63 disp.HandleAllBitmaps();
Ksenia 0:3f440c2facb0 64
Ksenia 0:3f440c2facb0 65 disp.showHumidity = 1;
Ksenia 0:3f440c2facb0 66 disp.showFlow = 1;
Ksenia 0:3f440c2facb0 67 disp.showTemperature = 1;
Ksenia 0:3f440c2facb0 68
Ksenia 0:3f440c2facb0 69 // first point
Ksenia 0:3f440c2facb0 70 SENSOR.MRCommand();
Ksenia 0:3f440c2facb0 71 wait_ms(100);
Ksenia 0:3f440c2facb0 72 SENSOR.DFCommand();
Ksenia 0:3f440c2facb0 73
Ksenia 0:3f440c2facb0 74 while (1) {
Ksenia 0:3f440c2facb0 75 SENSOR.MRCommand();
Ksenia 0:3f440c2facb0 76
Ksenia 0:3f440c2facb0 77 humidity = calculateHumidity((uint8_t) SENSOR.humidity);
Ksenia 0:3f440c2facb0 78 flow = calculateFlow(ADC.read_u16());
Ksenia 0:3f440c2facb0 79 temperature = calculateTemperature((int8_t) SENSOR.temperature);
Ksenia 0:3f440c2facb0 80
Ksenia 0:3f440c2facb0 81 disp.UpdateDataToDraw(humidity, temperature, flow);
Ksenia 0:3f440c2facb0 82 disp.MainScreen();
Ksenia 0:3f440c2facb0 83
Ksenia 0:3f440c2facb0 84 disp.GetTouch();
Ksenia 0:3f440c2facb0 85
Ksenia 0:3f440c2facb0 86 SENSOR.DFCommand();
Ksenia 0:3f440c2facb0 87 }
Ksenia 0:3f440c2facb0 88 }