YuvalS's Hand Made Class, 10th Annual BLF/OL contest entry topic

This year I am joining the party relatively late.
As every year I will build a caving headlamp but the innovation this year will be in the user interface.
I plan to create a switchless UI, using voice commands.

The reason I'm toying with the idea of a caving headlamp with voice recognition is that it is very complicated to switch between all the possible lighting modes of a dual optic headlamp: focused, diffused, combined and all different intensities with using only one or two switches.
I've already tried many UIs, including ones I've written myself and none of them was easy to remember and use.
In addition, while caving there are many situations in which it is not possible (or comfortable) to use your hands for controlling the light, such as while crawling through narrow passages or climbing a rope.

As far as I know, although I think it's very convenient, there are no any caving headlamps (nor any other headlamps) with a voice UI available on the market.

At first I wanted to experiment for the first time with 3D printing to build the light but in light of the short time I have left I will postpone this adventure until next year and use only hand tool for building the body and battery box.

Unfortunately, because I've been very busy lately, I didn't plan ahead and didn't order components from China, so I'm limited to using the components and materials I have at home and things I can buy locally.

Luckily, because I've been wanting to build a light with voice control for a long time, I already bought the voice processing module and I also got to play with it a bit.
I have to admit that I have already written parts of the code needed for my FW. In my understanding, this meets the conditions of the BLF/OL challenge because there is no prohibition to use parts of code or existing FW, but I would like to hear the opinion of the organizers on the matter. Apart from that code I still have a lot of coding work to do for this project, including moving all the code to a smaller processor than the Arduino Uno I've been playing with so far.

For those who haven't followed my previous projects, beyond voice control, the features required of a caving headlamp:
1. Resistance to water, dust and mud conditions.
2. Two separate channels for Spot and Flood beams with separate control on each channel.
3. Easy operation using one hand while wearing gloves (less relevant this year)
4. Reliability.
5. Extended lighting time.
6. Easy and convenient to carry on the helmet for a long time
And more....

I really hope that I will be able to complete the challenge this year within the short time I have left, only 42 days to go....

After a lot of effort, I have managed to complete the light on time.

It turned out to be a lot more challenging than I have expected. since I did not have a lot of time this year, I did most of the housing build and assembly in the recent few days.
Unfortunately, the final result is not representing the same mechanical standard as my previous builds, but this project was more electronics and programing challenge than mechanical.

Since for a long time UIs and drivers did not change and did not adopt recent technology improvements, I wanted to build it as a proof of concept that other members (or manufactures) can adopt and improve.
It also has a USB socket for direct FW updates which AFIK is a new feature, not available in other lights.

Apart from the voice control, it is also great "standard" caving light with 2 channels, controlled with a button (not waterproof so only for dry caves).

As always, I have learnt a lot from this build and once again BLF/OL challenge forced me to complete a project I have been putting off for a long time. So, thank you BLF members and everybody who made this challenge running for one more year.


Interesting. And I don’t even like talking to my PC other than to swear at it when something goes awry.

A Short update.
Previously I tested the voice recognition module with an Arduino Uno.
Since the Uno is too big to place inside a Headlamp, one of the goals for this project was to migrate the code to a lot smaller Arduino Nano.
Unfortunately, I was stupid enough to think I will be able to use the Nano Every I had at home.

I did manage to burn the code to the MCU, but it does not work.
Hope to solve this issue ASAP since it is critical before I can proceed to building the light.


We have some holiday in my country so I finally had some time for serious coding and I mange to solve most of the critical issues I had with the FW.

I have a lot more features I want to add to the FW but since not a lot of time left until the end of the challenge, for now I will stick to this basic code and continue to building the light.
In case I finish early and have some time left I will improve the FW.

In order to explain the FW I need to briefly explain on the Elechouse Voice Recognition Module I am using for light.
Unlike Siri/Alexa the Voice recognition in this module is done offline (most caves does not have an internet signal inside) so it does not have a computer server to understand the commands. Instead, it can detect a word out of 7 pre-loaded words.

So in order to recognize a word I need to know which word to expect and load it to the module. It is not a "state of the art" speech recognition but it is enough for controlling a 2 channel LED driver

IMHO it is a lot more easy than series of clicks.
Using the voice commands there are 25 available lightning modes no other UI enables so many modes.

Since I don't expect it to work flawlessly in the cave environment, I also added a push button to control the basic modes in case the voice command does not work.

1. After connecting the batteries the Arduino is initializing the voice recognition module.

2."Main menu" is loaded to the recognizer.

2.1. "Off" - all LEDs are turned off - go to 2
2.2. "Spot" - spot LED is chosen - go to 3
2.3. "Flood" - flood LED is chosen - go to 3
2.4. "Add" - the current led stays on after turn on the 2nd LED - go to 2
2.5. nothing recognized - keep listening - go to 2

3."Levels menu" is loaded to the recognizer.

3.1. "Off" - all LEDs are turned off - go to 2
3.2. "Low" - chosen LED is turn on in low intensity (if not "add" - turn off previous LED) - go to 2
3.3. "Medium" - chosen LED is turn on in medium intensity (if not "add" - turn off previous LED) - go to 2
3.4. "High" - chosen LED is turn on in high intensity (if not "add" - turn off previous LED) - go to 2
3.5. "Turbo" - chosen LED is turn on in highest intensity (if not "add" - turn off previous LED) - go to 2

4. Button is pressed - go to 2
4.1. If a LED was turn on by voice - turn all LEDs off.
4.2. If no LED was turn on by voice - cycle: off -> flood low -> flood medium -> flood high -> spot turbo -> off


Thanks Don, Some members Already completed their amazing lights and others heave to work fast

This sounds great. Nice project!

Fellow caver: “sometimes when I get off work I head to this spot near the flood canal and get high in my turbo wagon. Hey man, knock it off.”

Yep I was thinking on this issue, probably OFF (~of) is the most problematic word since it is common in English.

Luckly, I don't have this issue since I usually speak Hebrew :).
I have tested 2 solutions for this issue:
1. Adding a unique world (OK BLF) to initialize the listening state machine like "Hey Siri".
2. Listening only while the button is pressed.

Both solutions are working but make the UI less intuitive.

A third solution can be to use less common words as commands for example instead of OFF use MyLightOff.

I do plan to add a USB connection to allow easy FW upgrades so I can change this later on after some real-world testing

After having a reasonably functioning FW I started working on the light body.
Some time ago I have found a piece of aluminum profile almost identical in shape to my first handmade lamp it is from an old parking lot gate so I kept it, knowing it can use me for building a light.

I have tried to cut it with a hand saw and a jig saw but all my tries were not pedicular at least in one direction :(
some kind of table saw or miter saw is probably the correct tool for it but since I don't have one, so I had to improvise using my skill saw and a guide, trying to make it safe as possible

I am planning to keep the central partition in order to add strength. It will also allow me to add 2 separate heatsinks: one closer to the front window for the bare LED and one with more space for the optical lens.
I have a new 2 degrees very tight spot lens ant it is pretty big and requires a lot of space.

It looks like that worked! :slight_smile:
I don’t have much luck cutting with without a good guide either.

A mitre saw is best with different blades for different materials. The “hook” angle of the tooth is different for metal or wood, etc. But one must use what they have available.

After using a wood saw for cutting the aluminum I had to do some sanding to smooth the cuts.
Than I used the Dremel for shortening the central partition, making place for the front window.

For the front window I am using a 5mm Perspex sheet so I made a paper pattern in order to cut it to fit tightly inside the aluminum housing.

And cut it to size using a hand saw and a Dremel


I have some of those same clamps.

These are cheep clamps cost about 2 usd for a pack of 4

Cheap enough to have many and not worry too much if one is lost ot damaged.

Good to see progress being made :+1:

I’m so impressed that you got this to work….what a unique project light! I’m going to have to keep an eye out for one of those parking beam things…seems like I still see a lot of wooden ones but scoring a free damaged extrusion like that would be neat.

This looks so awesome. I can hardly imagine writing custom voice activated firmware.

Might be more trouble than it’s worth, but you could give it non-english (or non-native) words to avoid accidental operation.

kind of popular among us, seems like EDSG also got the same clamps

Hope you fine one in good condition usually they are damaged on the connection point to the motor so it cheaper to just shorten it instead of replacing it, but when it gets too short and allow cars to pass around it, they have to throw it away