D6T MEMS Thermal Sensors (Omron)

Committer:
kenjiArai
Date:
Tue Feb 18 01:09:00 2020 +0000
Revision:
0:9f5e063c0c00
1st release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:9f5e063c0c00 1 /*
kenjiArai 0:9f5e063c0c00 2 * mbed library program
kenjiArai 0:9f5e063c0c00 3 * D6T-44L-06: D6T MEMS Thermal Sensors
kenjiArai 0:9f5e063c0c00 4 * --- High Sensitivity Enables Detection of Stationary Human Presence
kenjiArai 0:9f5e063c0c00 5 * https://www.components.omron.com/web/en/product-detail?partNumber=D6T
kenjiArai 0:9f5e063c0c00 6 *
kenjiArai 0:9f5e063c0c00 7 * Copyright (c) 2020 Kenji Arai / JH1PJL
kenjiArai 0:9f5e063c0c00 8 * http://www7b.biglobe.ne.jp/~kenjia/
kenjiArai 0:9f5e063c0c00 9 * https://os.mbed.com/users/kenjiArai/
kenjiArai 0:9f5e063c0c00 10 * Created: February 16th, 2020
kenjiArai 0:9f5e063c0c00 11 * Revised: February 18th, 2020
kenjiArai 0:9f5e063c0c00 12 */
kenjiArai 0:9f5e063c0c00 13
kenjiArai 0:9f5e063c0c00 14 /*
kenjiArai 0:9f5e063c0c00 15 Refrence documentation:
kenjiArai 0:9f5e063c0c00 16 https://omronfs.omron.com/ja_JP/ecb/products/pdf/CDSC-019.pdf
kenjiArai 0:9f5e063c0c00 17
kenjiArai 0:9f5e063c0c00 18 Tested on:
kenjiArai 0:9f5e063c0c00 19 GR-MANGO(beta version) with 2JCIE-EV01 board
kenjiArai 0:9f5e063c0c00 20 */
kenjiArai 0:9f5e063c0c00 21
kenjiArai 0:9f5e063c0c00 22 #ifndef D6T_44L_06_H
kenjiArai 0:9f5e063c0c00 23 #define D6T_44L_06_H
kenjiArai 0:9f5e063c0c00 24
kenjiArai 0:9f5e063c0c00 25 #include "mbed.h"
kenjiArai 0:9f5e063c0c00 26
kenjiArai 0:9f5e063c0c00 27 // D6T_44L_06 Address
kenjiArai 0:9f5e063c0c00 28 // 7bit address = 0x0a
kenjiArai 0:9f5e063c0c00 29 #define D6T_44L_06_ADDR (0x0a << 1)
kenjiArai 0:9f5e063c0c00 30 // D6T_44L_06 Command
kenjiArai 0:9f5e063c0c00 31 #define D6T_44L_06_CMD 0x4c
kenjiArai 0:9f5e063c0c00 32
kenjiArai 0:9f5e063c0c00 33 /** D6T MEMS Thermal Sensors by OMRON
kenjiArai 0:9f5e063c0c00 34 * Chip: D6T_44L_06
kenjiArai 0:9f5e063c0c00 35 *
kenjiArai 0:9f5e063c0c00 36 * @code
kenjiArai 0:9f5e063c0c00 37 * #include "mbed.h"
kenjiArai 0:9f5e063c0c00 38 *
kenjiArai 0:9f5e063c0c00 39 * // I2C Communication
kenjiArai 0:9f5e063c0c00 40 * D6T_44L_06 tmp_16array(D14, D15); // SDA, SCL
kenjiArai 0:9f5e063c0c00 41 *
kenjiArai 0:9f5e063c0c00 42 * int main() {
kenjiArai 0:9f5e063c0c00 43 * float f[16];
kenjiArai 0:9f5e063c0c00 44 * while(true){
kenjiArai 0:9f5e063c0c00 45 * tmp_16array.read_data(f);
kenjiArai 0:9f5e063c0c00 46 * ThisThread::sleep_for(300); // minimum updating cycle
kenjiArai 0:9f5e063c0c00 47 * }
kenjiArai 0:9f5e063c0c00 48 * }
kenjiArai 0:9f5e063c0c00 49 * @endcode
kenjiArai 0:9f5e063c0c00 50 */
kenjiArai 0:9f5e063c0c00 51
kenjiArai 0:9f5e063c0c00 52 class D6T_44L_06
kenjiArai 0:9f5e063c0c00 53 {
kenjiArai 0:9f5e063c0c00 54 public:
kenjiArai 0:9f5e063c0c00 55 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:9f5e063c0c00 56 * @param I2C PinName SDA &SDL
kenjiArai 0:9f5e063c0c00 57 */
kenjiArai 0:9f5e063c0c00 58 D6T_44L_06(PinName p_sda, PinName p_scl);
kenjiArai 0:9f5e063c0c00 59
kenjiArai 0:9f5e063c0c00 60 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:9f5e063c0c00 61 * @param I2C previous definition
kenjiArai 0:9f5e063c0c00 62 */
kenjiArai 0:9f5e063c0c00 63 D6T_44L_06(I2C& p_i2c);
kenjiArai 0:9f5e063c0c00 64
kenjiArai 0:9f5e063c0c00 65 /** Read a float type data from acc
kenjiArai 0:9f5e063c0c00 66 * @param float type of three arry's address, e.g. 16bit data dt_i[16];
kenjiArai 0:9f5e063c0c00 67 * @return CRC check result / true=passed, false=failed
kenjiArai 0:9f5e063c0c00 68 */
kenjiArai 0:9f5e063c0c00 69 bool read_16bit_data(int16_t *dt);
kenjiArai 0:9f5e063c0c00 70
kenjiArai 0:9f5e063c0c00 71 /** Read a float type data from sensor
kenjiArai 0:9f5e063c0c00 72 * @param float type of three arry's address, e.g. float dt_f[16];
kenjiArai 0:9f5e063c0c00 73 * @return CRC check result / true=passed, false=failed
kenjiArai 0:9f5e063c0c00 74 */
kenjiArai 0:9f5e063c0c00 75 bool read_float_data(float *dt);
kenjiArai 0:9f5e063c0c00 76
kenjiArai 0:9f5e063c0c00 77 /** Read sensor chip temperatue
kenjiArai 0:9f5e063c0c00 78 * @param none
kenjiArai 0:9f5e063c0c00 79 * @return temperature
kenjiArai 0:9f5e063c0c00 80 */
kenjiArai 0:9f5e063c0c00 81 float read_chip_temp(void);
kenjiArai 0:9f5e063c0c00 82
kenjiArai 0:9f5e063c0c00 83 protected:
kenjiArai 0:9f5e063c0c00 84 void initialize(void);
kenjiArai 0:9f5e063c0c00 85 bool read_data(void);
kenjiArai 0:9f5e063c0c00 86 uint8_t calc_crc(uint8_t dt);
kenjiArai 0:9f5e063c0c00 87 bool check_crc(void);
kenjiArai 0:9f5e063c0c00 88
kenjiArai 0:9f5e063c0c00 89 I2C *_i2c_p;
kenjiArai 0:9f5e063c0c00 90 I2C &_i2c;
kenjiArai 0:9f5e063c0c00 91
kenjiArai 0:9f5e063c0c00 92 private:
kenjiArai 0:9f5e063c0c00 93 float _chip_temp; // Sensor temperature
kenjiArai 0:9f5e063c0c00 94 char _dt[64]; // I2C buffer
kenjiArai 0:9f5e063c0c00 95 int16_t _arry[16]; // DT6T sensor raw data
kenjiArai 0:9f5e063c0c00 96 uint8_t _addr; // sensor I2C addr
kenjiArai 0:9f5e063c0c00 97
kenjiArai 0:9f5e063c0c00 98 };
kenjiArai 0:9f5e063c0c00 99
kenjiArai 0:9f5e063c0c00 100 #endif // D6T_44L_06_H