Introduction: Helmet Display for Electric Unicycle and EUC World App (v2 With Battery)

This is an improved version of LED helmet display for EUC World app (original version can be found here: Helmet Display for Electric Unicycle and EUC World App : 8 Steps (with Pictures) - Instructables).

It displays beasic parameters of your electric unicycle: batery, speed, temperature.The device connects to EUC World app for Android using wifi (access point enabled on mobile phone), and EUC World's data feed api.

Hardware improvements:

  • added internal battery (no external power source needed)
  • changed LED display model (previous one was no longer available)
  • added sun shields on both sides of LED display - previously, direct sunlight made it sometimes hard to read
  • added flexible button and USB covers

Software improvements:

  • introduced deep sleep mode: physical power switch is not needed (although still available) as device automatically goes into deep sleep with minimal power consumption when not in use
  • added custom alerts based on one or multiple parameters (e.g. speed + battery, temperature)
  • LED brightness/light sensor is now callbrated using 3 points instead of 2

Supplies

Parts:

  1. Seeed Studio Xiao ESP32 C3 module
  2. Li-Po battery (40x30x6mm) Akyga 650mAh 3,7V
  3. 2 digit 7-segment LED display - 0.28 inch, tht, common anode (2281AY-BY is used here: 10pcs 0.28 Inch 10Pins 2281AY 2281BY 2 Digits Bits 7 Segment Yellow LED Digital Display Digitron Common Anode Cathode C-C C-A - AliExpress)
  4. Resistors (tht):
  5. 7x 470 ohm
  6. 1x 20k ohm
  7. 1x 1k ohm
  8. 1x 220k ohm
  9. 1x photoresistor (10-20k ohm)
  10. 1x capacitor (tht, 1uF)
  11. 1x tact switch
  12. 1x slide switch, angled (ESP2010)
  13. 1x universal circuit board (double sided) - need to cut it to exact dimensions
  14. 4x screws for plastic with round head (I'm using 2,5x10mm TX screws here)
  15. thin wires
  16. insulation tape
  17. adhesive tape

Tools:

  1. 3D printer with:
  2. black filament (for example PETG)
  3. transprent filament (for example PETG)
  4. elastic filament (for example TPU)
  5. Soldering iron
  6. Computer with Arduino IDE installed

Step 1: Print Main and Top Section

Print top section upside down.

Step 2: Load Program

Important! Load the program BEFORE soldering wires to the module!

Notes on the program:

  1. Program requires:
  2. WIFI access point enabled on your mobile device
  3. EUC World app running with "Web Server" feature enabled
  4. Wheel connected to the EUC world app
  5. replace YOUR_WIFI_ACCESS_POINT_NAME and YOUR_WIFI_PASSWORD with your access point name and password
  6. There are custom alerts embedded in the code. Adjust the default values if needed before uploading code:
  7. SPEED_ALERT
  8. BATTERY_ALERT
  9. TEMPERATURE_ALERT
  10. BATTERY_SPEED_ALERT_1_BATTERY, BATTERY_SPEED_ALERT_1_SPEED
  11. BATTERY_SPEED_ALERT_2_BATTERY, BATTERY_SPEED_ALERT_2_SPEED
  12. BATTERY_SPEED_ALERT_3_BATTERY, BATTERY_SPEED_ALERT_3_SPEED
  13. SAFETY_MARIGN_ALERT
  14. When the alert is triggered, the display starts blinking (fast)
  15. When the connection is lost (either connection with phone or connection between phone and wheel), the display will blink slowly, showing the last available battery/speed/temperature value
  16. The sensitivity of light sensor can be adjusted using 3 callibration points. Then, a simple linear interpolation is used to convert it to LED intensity values. Note that the lowest analog value represents the highest ambient light intensity:
  17. BRIGHTNESS_MIN_ANALOG,
  18. BRIGHTNESS_MID_ANALOG,
  19. BRIGHTNESS_MAX_ANALOG

Warning: please keep in mind that the alerts in the helmet display should never replace alerts in your wheel and/or EUC World app. There is a significant delay between when the data is read from the wheel and displayed on the helmet display.


V2.07 notes:

  • added 4th value to be displayed: safety margin ("SA") together with safety margin alert
  • use WiFi.gatewayIP() to dynamically get access point ip instead of hardcoded 192.168.43.1

V2.08 notes:

  • alerts fixed
  • IP address check fixed

V2.09 notes:

  • IP address checked modified - done only initially

Step 3: Prepare Circuit Board

Notes:

  • Cut the universal circuit board so that it fits into 3d printed main section (Body.stl)
  • Bat (-) terminal is not used as it's permanently connected to GND so battery (-) can be connected to GND instead
  • The 1 uF capacitor is there to prevent ESP32 from waking up immediately after going into deep sleep.

Step 4: Connect Battery+ and Switch

Physical switch allows to disconnect battery circuit (+ terminal).

Step 5: Assemble Circuit Board

Step 6: Print Button and USB Covers

Notes:

  • Use transparent material (for example PETG) for sensor cover
  • Use flexible material (for example TPU) for button and USB port cover

Step 7: Test and Assemble the Device

Secure the battery from being damaged by sharp edges of the ESP32 module or other parts by using insulation tape, rubber sheet or other soft materials.

Step 8: Final Notes

There is no indication of internal battery voltage due to lack of free pins in ESP32 C3 module used here. Tests showed that the battery lasts for couple of hours of continous operation (power consumption is around 90 mA).

The charging process is fast due to high charging current of the module used here (370mA).

Device can go to deep sleep mode:

  • if button is pressed for at least 3 seconds (and released)
  • if wheel connection is lost for more than 10 minutes

To wake up from sleep mode simply press the button.

Power consumption in sleep mode in minimal (around 0.05 mA) but it's not 0. Disconnect the battery circuit using physical switch whenever the device is not in use for a long time. Alternatively, remember to recharge it every couple of months to avoid draining battery below safe limit.