How much, potentially harmful, vibration do you receive from power tools? Probably not much unless you dig roads full-time, but it is good to know.

  • Measures the acceleration the operator’s hand experiences when using a power tool
  • Acceleration is weighted correctly using software digital filtering
  • Sensor is clamped between hand and tool
  • Display of current acceleration value and the last 27 readings on bar graph
  • Uses second core on ESP32 for accurate sampling
  • Uses cheap three axis accelerometer, LIS331 on a breakout board, connected by I2C
Hand Arm Vibration
Hand arm vibration syndrome is a serious health issue for operators of powerful hand tools, causing disability by damaging the tissues in the hand and arm after prolonged exposure. There are regulations in most countries governing HAV exposure to protect workers, and EN and ISO standards on HAV measurement.
Principle of Operation
Batches of several thousand readings of acceleration in each of three axes are passed sequentially through three digital filters -high pass, low pass and band pass - to produce correctly weighted acceleration values. The root mean square values for each axis are then combined to give an overall weighted acceleration.
Digital Filtering
The digital filters take the last three input signal values and the last two output predictions, combining these with suitable weights to produce a new output value. The values of the weights depend on the nature of the filter to be implemented and the sampling frequency. The mathematics behind digital filtering is complicated, but the final implementation in code is thankfully straightforward. The spreadsheet shows how to calculate the weighting factors to implement the filters. Note the filter implemented is not precisely the one specified in the ISO 5349-1 due to limitations in the accelerometer used, see graph, but is close enough.
Dual Core ESP32
The ESP32 has two cores. Unless otherwise specified, any code loaded using the Arduino IDE uses Core 1, which also handles the Wi-Fi and other background functions. Core 0 is unused normally so is ideal for accurately timed sampling, essential for good digital filtering. The ESP32 inherently runs freeRTOS and this is used explicitly in the code to access the second core.
The ESP32 also has the memory to store several thousand samples prior to filtering.
The code uses libraries for the accelerometer and display. It was developed and can be uploaded using the Arduino IDE. The code includes a check that the sampling rate is the one used to calculate the filter weights, to flag errors.
The device has four components –
  • LIS331 on breakout board I2C
  • 0.96" 128X64 pixel OLED LCD Display Module I2C
  • 2000 mAh USB battery bank
The wiring is shown in the breadboard diagram.
The mount was carved from wood, but a 3D-printable design could easily be developed. The shape is a simple “H” to allow it to fit between the fingers of a gloved hand and place the sensor against the tool. The ESP32 and OLED display were fixed on top to allow the operator to read the display. A small USB battery pack powers the unit and can be tucked into the operator’s sleeve while in use.
Possible next steps
Produce a 3D printable combined mount and enclosure.
Changing to an accelerometer, which can be sampled faster, would allow the full ISO filter to be implemented. The LIS331 is the fastest of the commonly available accelerometers, which are primarily for use in phones and tablets.
The weighted acceleration readings and durations could be stored and then downloaded over the Wi-Fi using the build-in capabilities of the ESP32.
Using an ESP32 board with built in OLED display may simplify construction even further.