Introduction: Arduino Fencing Scoring Apparatus
This is a tutorial on how to build a fencing scoring machine using the Arduino Uno. It supports all 3 fencing disciplines of foil, epee and sabre.
Fencing boxes or scoring machines are normally very expensive and I have, for a long time, been wanting to create an open-source box. Now finally here is it! The hope is that this benefits clubs out there that don't have the money to by scoring boxes for hundreds of dollars and can make this one for around $25.
All the source code, firmware and hardware designs are released under the GPL licence so it is free to use and distribute. It can all be found on the github website here.
Bill of Materials:
- 1 x Arduino Uno or equivalent (You will need 6 ADC pins and at least 7 digital I/O pins)
- 6 x 20kR resistors
- 1 x Green LED Matrix
- 1 x Red LED Matrix
- 2 x White Matrix
- 2 x Yellow LEDs
- 6 x 220R resistors
- 1 x Buzzer
- 7 x Banana Plug Sockets (3 Green, 3 Red, 1 Black)
- Breadboard or Veraboard
Step 1: Configuring Your Arduino
It is assumed that you already know how to upload code to your Ardruino, if not, Google is your friend.
This instructable uses the all_weapon box Arduino code. The file to be found here. Upload the all_weapon_box code to your Arduino and you are ready for the next step
If you haven't used an Arduino board before, it is really easy and there are plenty of tutorials online. Google is your friend.
I used an Arduino Nano, it is pretty much equivilent to the Uno in terms of IO and the Micro Controller Unit. Now that you have the heart of the scoring box and just need to build the rest of the circuit.
Step 2: Hardware: Scoring LEDs
I have used a couple of RGB matrices for the scoring lights. These are pretty cool because you can use on matrix for both on target and off target hits, you can also use them for the short circuit lights. Getting RGB Matrices to make colours other then RGB requires the use of PWM to control the power to each set of LEDs. Basically turning all the colours on at the same current doesn't give a white light as come colours are brighter then others at the same current.
The LEDs need to be controlled using a transistor switch as the arduino IO pins cant supply enough current to drive the LEDs properly. See the image in this step.
[Show how the LED matrix is connected up]
This is the solution that I have used for the LEDs. Feel free to come up with you own solution and please share it in the comments below if you do.
Step 3: Hardware: Weapon Change Button
The weapon mode button switches the scoring box between foil, epee and sabre. This is easy to connect up and debounce is take care of in software. The Arduino has an internal pull up resistor on most digital pins which leaves us with one less resistor to connect! Yah! Just connect a normally open push button between pin 2 and ground.
Note: Internally the code uses a interrupt to manage the button. The Uno and Nano only have external interrupts on pins 2 and 3.
Step 4: Hardware: Buzzer
The buzzer is also a pretty easy one. Just connect the buzzer between ground and pin 3. A simple piezo buzzer is good enough and can be driven directly from the Arduino IO pins.
Step 5: Hardware: Weapon and Lame Interface
The weapons are connected to the box via 4mm banana sockets. They are spaces 15mm and 20mm apart. These sockets are connected directly to the Arduino's analog pins with pull up and pull down resistors, as per the circuit image.
Note: These resistors should be around 1k ohms, much larger and you will create an RC filter with the capacitance between the 2 long wires and the pull up/down resistor which makes the hit signal from the decay slowly instead of a sharp edge. This will only be measurable with an oscilloscope. But blah. Don't worry about this, just use 1k resistors.
Step 6: Hardware: Power Supply
The power supply solution is dependent on the Arduino that you use. I used the Nano so I need to power it over the mini USB connector. The Uno does have a power jack, so just source a compatible power supply. But I prefer to do it over USB. There are a number of options with USB, power banks, wall plug USB adapters or even a computer or laptop.
A power bank doubles is pretty much a battery so you could just build it into your box if it requires a battery.
Step 7: Enclosure
We have come up with the enclosure that you can see in the images. I hope to upload a template for it at a later stage, but I encourage you to 3D print or design your own enclosure. I would love to see your idea and designs.
Step 8: How the Code Works
The Arduino code samples each of the ADC pins on each loop. It compares the read values to what is expected for the currently selected weapons and checks if it has been depressed for enough time to register a hit. Then the lockout timer is started and if the 2nd hits hasn't occurred before the time-out then the single hit is registers and the correct lights turned on.
On the Uno/Nano the loop runs about at over 2000 times per second. This allows us to easily capture the shortest possible hit, which is foil at 2ms.
For a more details about how the code works see the comments in the source files. It is well commented and it explains what each thing is doing. All_weapon_box
Again any feedback is much appreciated.
Step 9: Testing Your Scoring Box
Well the best way to test the box is to use it. Check things like hits on bell guards don't trigger hits, double hits etc.
If you want to test the timing of the box you will need an oscilloscope which can check out the signals and tell how long a tip was depressed for or the difference in time between hits for lockout. This is a very specialise piece of equipment so properly not worth it. Trust me that I have used my oscilloscope to test it properly and the timings are a function of the code and I am happy that they are FIE compliant.
If you do come across any issues or bugs please let me know and Ill update the code.
Well that is it folks. Please leave your feedback and ideas. Ill try and update this inscrutable with more details in the near future.
sbraitbart made it!
We have a be nice policy.
Please be positive and constructive.
One other thing you can do is use a power source other than the 5v off the arduino to power the leds. The VIN on the arduino has a voltage regulator on it, and the boxes I have built use a 12v power supply to power both the leds and the board itself.
In the code for a on target hit in foil:
if (400 < weaponA && weaponA < 600 &&
400 < lameB && lameB < 600)
What do the 400 and 600 signify, the rules say:
"The registering of a valid hit must be guaranteed when there is a break of contact
of 13–15 ms, when the exterior resistance is between 0 and 500 ohms."
So I'm struggling to see the correlation. I'm new to arduino and I was looking to build the scoring box.
The 400 and 600 are analog values of the ADC pins on the arduino, there is no correlation between this and the rules, other than that if allows us to tell if a particular pin is in contact with another pin. We read the voltage of our pins as a value between 0 and 1024, which maps to 0 and 5v. I have pull up and pull down resistors on the pins so I can tell when they are in contact this way. Sorry for the explanation, but you need to have an understanding of ADCs, pull up and down resistors and some arduino knowledge to put this in context.
Good luck building the box, please share pictures with us when you do.
better with a file...
thank you Westley.
This will work, but you dont need the resistor below the transistor. As the current is already limited by the resistor above it transistor.
Technically is you are only driving a small LED then you dont need the transistor, but if you want to drive a light/LED that draws more current, then you would have to have the transistor otherwise you would destroy the Arduino pin.
Sorry. I would like to send this picture.
Is it the good solution?
| | |
Is it possible to see how the LED matrix is connected up. I'm a begginer in arduino and electronic....
Thank you very much for this very good lesson.
So the wiring of the matrix really depends on the type of matrix display you have, The one used here has tristate LEDs, but I have recently changed to using a matrix based on the ws2812b LEDs, which are programmable. They only use one wire which makes it easier to connect up and also to control.
As a start you could even just use large single LEDs.
What kind of transistor did you use?