Main Content

Helmut

The safety device for your helmet. It registers when your helmet falls too heavy and warns you that the structure might be damaged.

Helmets are subjected to drops and collisions during various activities, and the resulting internal damage might not be immediately apparent through external inspection alone. This hidden structural impairment poses a serious safety concern, as users may unknowingly rely on helmets that have suffered diminished protective capabilities. The inability to visually identify such damage raises the risk of continued use of compromised helmets, potentially exposing individuals to heightened injury risks. This necessitates the development of a solution that can accurately assess and notify users of any structural damage incurred, ensuring the ongoing effectiveness of helmets in safeguarding against potential impacts.

Idea
The solution to the challenge of undetectable structural damage involves the development of an embedded impact-sensing device. This device can be attached to the helmet and is equipped with sensors capable of precisely measuring the forces experienced during an impact.

Unlike conventional visual inspections, this embedded device will provide real-time data on the structural integrity of the helmet, detecting even subtle damage that may not be immediately visible. Moreover, to enhance user awareness and safety, the device will be designed to send immediate notifications to a dedicated mobile app in the event of a significant impact that could potentially compromise the helmet’s effectiveness. By combining impact-sensing technology with proactive communication, this solution aims to improve helmet safety, ensuring that users are promptly informed of any potential structural issues and encouraging timely inspections or replacements for continued protection.

Architecture
Backend- Embedded Device

For our IoT device we used a Particle Photon to which we connected the accelerometer Adafruit LSM9DS1 on a breadboard.

The used libraries are:

- Adafruit_LSM9DS1 (available at https://github.com/adafruit/Adafruit_LSM9DS1/tree/master - not the version accessible through the Particle Tools)
- Adafruit_Sensor (needed by Adafruit_LSM9DS1)
- HttpClient (to send data to our webserver)

The code for the Particle Photon was initially developed in the Particle Web IDE.

However, due to an error in the official driver version (the one obtainable using Particle tools) for the LSM9DS1 library, we had to use the most current version from the GitHub repository (https://github.com/adafruit/Adafruit_LSM9DS1/tree/master as of 01.01.2024). To include this “unofficial” library in a Particle project, we used the Visual Studio Code extension Particle Workbench, as custom libraries cannot be utilized in the Particle Web IDE.

We started with the accelerometer library’s example file to extract data from the sensor. The code checks all acceleration values (x, y, z) against a maximum value, which is reset every 300 loops/ticks. If the current value exceeds the maximum, it becomes the new maximum value. Every 300 ticks, the maximum values are sent to the server and then reset to 0 for the next measuring cycle. All logic for detecting a crash and storing data beyond 300 ticks is handled in the frontend.

Webserver - Express server

Due to a CORS issue when using the Particle Cloud, we created a simple webserver using Express.js.

Due to a CORS issue with the Particle Cloud, we set up a simple webserver using Express.js. The server receives data through a POST HTTP Request from the Particle Photon. This data is then fed into a server-sent event stream, to which our frontend can subscribe.

Frontend- AngularFor the Angular frontend, we created a service to subscribe to the server-sent events stream from our server. The events occur periodically, approximately every 300 Photon ticks, and include the highest accelerations measured by the Photon in the last period. Each time an event is received, the acceleration values are checked against a crash threshold of 200 m/s^2. If any value exceeds this threshold, the crash boolean is toggled to true; otherwise, it remains false.

The frontend displays two different views based on the state of the crash boolean.”

Link to article