The idea was to create a set of LED devices that users have to deactivates by proximity sensing. Upon deactivation devices randomly activate each other (one at a time) by lighting up LEDs. It's up to the user to deactivate LEDs as fast as possible not knowing what device will light up next.
In this tutorial I'll be showing how you can make your own set of reaction training dummies - from design process to sourcing parts, soldering and programming. Not only will you improve your reaction training but also your hardware and electronic knowledge!
Stick on and let's move forward!
The wireless, high powered LED lights are used as targets for the user to deactivate. Controlled independently and randomly.
The deactivation of the lights can be achieved through full contact or close proximity–waving, running past, swiping, etc. You may also deactivate the lights with different body parts such as your head, hands, feet, or exercise equipment.
They can be easily mounted to walls, poles, and other training equipment. Or, they can be strategically placed on the ground for specific training.
Now let's get technical!
We will go as noted.
- Device requirements
- PCB - schematics and layout
- Ordering parts
- Burning the bootloader
- Soldering and assembly
- Programming microcontroller
- 3D printing
- Final notes
An overview over what components and tools were used in this build.
For User interface side we have
Reaction lights or simply LED's that have to be bright, easily visible in daylight and from all angles. Quick search shows that RED LED require the lowest voltage while still providing high CD (canddela) values which is great for battery powered devices. Standard 5 mm TH LED's will be great as they are bright, cheap, easy to solder and their optical dome nicely spread the light around the 3D-printed ring. There will be 16 LED's with 4 in pair switched by a transistor and controlled with microcontroller.
We also need a way to detect a object in close proximity, detection has to be fast and reliable. Ultrasonic sensors are bulky and slow, while laser detection or TOF sensors like VL53l0X are small, expensive and hard to protect from dust. My choice is this popular tcrt5000 sensor, really fast, cheap, easy to use... To make sure we catch every movement I placed a pair on each side of PCB/device.
A wireless connection between our devices is a must. For that I picked a nRF24L01+ SMD module, low cost, easy to use. It uses the 2.4 GHz band and it can operate with baud rates from 250 kbps up to 2 Mbps. If used in open space and with lower baud rate its range can reach up to 100 meters.
Here are some useful links that will give you better idea what nRF24l01+ is:
For power requirements, our devices have to be battery powered, which means we have to implement the basics of BMS.
First in the list is battery, I picked a fairly standard 503450 3.7v 1000mAh LiPo cell that should give us 5-6 hours of continuous training.
Integrated charging and protection circuit are from TP4056 module - keeping this project cheap and reliable.
Devices of this kind have to be programmed, so for that reason we are utilizing a common microcontroller ATmega328 in TQFP-32 package.
0603 size resistors
0603 size capacitors
TH (trough-hole) side slide switch for powering the device
SMD LEDs (green, red) for charging info and one blue LED for users to know device is powered.
Micro-B USB for charging
I will be using Autodesk Eagle to create a PCB,
First we start with schematics, importing part libraries, looking trough datasheets and determining the right and logical connections. After the circuit (schematics) I designed the PCB layout and generated the Gerber and Drill files.
Then upload a Zip or RAR file containing all the gerbers and drill files to JLCPCB and have the PCB fabricated for 2$ + shipping cost in any color (at the time of making this tutorial).
Gerber_Athlete.zip contains GERBER files for manufacturer.
iO Athlete_rev1_eagle.zip contains Eagle.sch.brd files for assembly and component placement.
In This spread sheet (Standard BOM document) all electronic parts for 4 devices are listed as well as tools for programming and burning the bootloader to ATmega 328/168/88 microcontroller.
BOM also includes
- Parts info
If you have a new ATmega328 (or ATmega168/88), you'll need to burn the bootloader onto it.
The microcontroller can't interpret Arduino instructions without initial code. It first needs a bootloader, which acts somewhat like the BIOS on your computer.
Bootloader has to be burned before soldering to iO Athlete PCB board!
Follow this tutorial and burn the microcontoller with this options
- Board: ATmega328
- Bootlader: Yes
- Clock: 16 MHz external
- Compiler LTO: Disabled
- Variant: 328P / 328PA
- BOD: 1.8V
Once your ATmega328p has the Arduino bootloader on it, you can upload programs to it using the USB-to-serial convertor (FTDI chip) on an Arduino board.
Once everything arrives, it's time to solder the components - start by looking at the PCB for potential manufacturing errors and check that you received every component!
If it's your first time soldering I definitely recommend checking some tutorials, soldering larger components first (LED's, etc) will prepare you for smaller components.
Open eagle file, locate the component - see what the value is and solder it.
If you're experienced in soldering I recommend starting around power section first in this order
- Protection circuit
- Charging circuit
- Boosting circuit
- Regulating 3.3V
Repeat this process up to 5 times.
When the bootloader is burned to the microcontroller, an FTDI converter can be used to upload the actual Arduino code.
To connect the FTDI, use female headers and connect as shown in the picture above
To upload the code first open the sketch for device one I've attached here. Connect an USB FTDI adapter to the serial programming points. Once again, these connections can either be pressed onto the PCB or connected by soldering the pins or female headers that have to be desoldered later.
I soldered male headers, and before mounting the casing shortened them 2-3 mm.
When uploading make sure you keep the same exact board settings used for burning the bootloader.
Repeat this process depending on your device quantity.
This code works only when every one of the devices is powered, placed maximum 1 m away one from another and in order from 1-2-3-4-5. At the start, device number 1 is available for deactivation.
Code can be significantly upgraded and here are few ideas
- Track time it takes to deactivate the devices,
- Optimize the working distance,
- Optimize the wireless network,
I used the following settings in Cura for my prints:
- 3D Printer - CR10s PRO
- Material: PLA
- Layer Height - 0.2 mm
- Shell Thickness - 0.8 mm (Nozzle: 0.4 - 2 Shells)
- Top and Bottom Thickness - 0.8mm
- Fill Density - 100%
- Filament - 1.75mm
- Support Type - Everywhere
- Platform adhesion Type - Skirt
All STL files and STEP files can be found here.
- First you print the LED ring holder, try and fit it around LEDs - NOTE: LED placement is not simetrical so don't use force. Rotate it, and it should easily slide in. Print it with white or transparent material to increase viewing angle. Transparent or milky white will diffuse the light and create a nice ring like effect.
- Print the bottom part,
- Print the top part,
- Mount bottom, top and LED part,
- Print top1 part, mount and glue to LED part,
- Print top2 part (in accent color - I used red), mount and glue to top1 part,
Pictures on thingieverse demonstrate how I positioned model before 3D printing.
Print the rest of models and clean the support.
At this point, everything should work in order.
If you have any questions or uncertainties, leave it down in the comments below and I will clarify ASAP.
A special thanks to Ino for helping with photography and videography.