Skip to content

Latest commit

 

History

History
221 lines (170 loc) · 5.69 KB

README.md

File metadata and controls

221 lines (170 loc) · 5.69 KB

Intelligent insole based on ESP32

Fusion of nine axis sensors with rich motion information

Features

Extremely advanced 9-axis sensor

The insole uses the ICM-20948 9-axis sensor, which is the world’s lowest power 9-axis MotionTracking device that is ideally suited for Smartphones, Tablets, Wearable Sensors, and IoT applications.

  • 3-axis gyroscope, 3-axis accelerometer, 3-axis compass, and a Digital Motion Processor™ (DMPTM) in a 3 mm x 3 mm x 1 mm (24-pin QFN) package
  • DMP offloads computation of motion processing algorithms from the host processor, improving system power performance
  • Software drivers are fully compliant with Google’s latest Android release
  • EIS FSYNC support

3 capacity-to-digital converters with 12 channels and 16 bit accuracy

AD7147 is a programmable capacitance-to-digital converter (CDC) ,with 12 channels and 16 bit accuracy.

Programmable capacitance-to-digital converter (CDC)
  • Femtofarad resolution
  • 13 capacitance sensor inputs
  • 9 ms update rate, all 13 sensor inputs
  • No external RC components required
  • Automatic conversion sequencer
On-chip automatic calibration logic
  • Automatic compensation for environmental changes
  • Automatic adaptive threshold and sensitivity levels
I2C-compatible serial interface
Low operating current
  • Full power mode: 1 mA
  • Low power mode: 21.5 μA

Very safe multithreaded bus control system

Based on the time slice rotation system freeRTOS, and using the system's own resource mutex api to achieve time-sharing control of the bus, it can maximize the utilization of the I2C bus and have good data stability

A relatively complete function menu that provides debugging functions

The function menu used to debug the sensor parameters in the insole, the following is an example of the function menu:

menu
 list all functions and descriptions

Pressure1_GetData
 return pressure1 sensors' datas

Pressure1_Calibrate
 calibrate pressure1 sensor

Pressure2_GetData
 return pressure2 sensors' datas

Pressure2_Calibrate
 calibrate pressure2 sensor

Pressure3_GetData
 return pressure3 sensors' datas

Pressure3_Calibrate
 calibrate pressure3 sensor

Gyroscope_GetGyroRateDivisor
 return value of gyro rate divisor

Gyroscope_SetGyroRateDivisor
   -gyroratedivisor (1~256)
 set the gyro rate divisor

Gyroscope_GetAccelRateDivisor
 return value of accel rate divisor

Gyroscope_SetAccelRateDivisor
   -accelratedivisor (1~65536)
 set the accel rate divisor

Gyroscope_GetAccelRange
 return the accel range

Gyroscope_SetAccelRange
   -accelrange 2|4|8|16
 return accel range

Gyroscope_GetGyroRange
 return the gyro range

Gyroscope_SetGyroRange
   -gyrorange 250|500|1000|2000
 set the gyro range

Gyroscope_GetMagDataRate
 return the mag data rate

Gyroscope_SetMagDataRate
   -magdatarate SHUTDOWN|SINGLE|10|20|50|100
 set mag data rate

Gyroscope_EnableAccelDLPF
   -enable ENABLE|DISABLE
   -cutoff_freq 437|246|111.4|50.4|23.9|11.5|5.7
 enable the accel DLPF(low pass filter)

Gyroscope_EnableGyrolDLPF
  -enable enable|disable
  -cutoff_freq 361.4|196.6|151.8|119.5|51.2|23.9|11.6|5.7
 enable the gyrol DLPF(low pass filter)

Gyroscope_GetData
 return the gyroscope datas

clear_nvs_namespace
 clear the nvs space

data_json
 return the packet consist of the data from all the sensors

show_task
 stow task that existed

stop_task
 -name (task name)
 stop task that existed

Supports Bluetooth Low Energy (BLE) for data transfer from all sensors

Use ESP's low-power Bluetooth to transmit all sensor data packets, which are packaged in json format through the ArduinoJson api.The packet format is as follows:

{
    "PRESSURE1": {
        "datas": [
            -4,
            -3,
            -4,
            -4,
            -4,
            -3,
            -3,
            -3,
            -3,
            -4,
            -3,
            -7
        ]
    },
    "PRESSURE2": {
        "datas": [
            -2,
            -4,
            -3,
            -3,
            -3,
            -3,
            -3,
            -3,
            -3,
            -2,
            -4,
            -2
        ]
    },
    "PRESSURE3": {
        "datas": [
            -1,
            -3,
            -2,
            -2,
            -3,
            -2,
            -4,
            -2,
            -5,
            -2,
            -2,
            -5
        ]
    },
    "GYROSCOPE": {
        "datas": {
            "accel": {
                "x": 0.263362199,
                "y": 0.474051923,
                "z": 9.911994934
            },
            "gyro": {
                "x": 0.012770702,
                "y": 0.004256901,
                "z": -0.001064225
            },
            "mag": {
                "x": -8.399999619,
                "y": 31.64999962,
                "z": 8.25
            },
            "temp": 24.354599
        }
    }
}

Features still to be implemented

  • In order to use the system resource tracking function of freeRTOS, it is necessary to further improve the dynamic link library of freeRTOS

  • Need to improve the encrypted part of the data packet transmitted through the Bluetooth low energy protocol