From the start, Chris had an idea of what he wanted from the device. “I knew what I wanted to achieve – for my friend to press buttons, for virtual dice to be rolled and the result to be announced,” he says. “From there it was just about figuring out which components to use and how to lay them out efficiently. This needed to be hand-held, so a compact design was a must.”
To that end, Chris modelled the device on a gamepad. “I tried to imagine a controller, like an Xbox controller,” he says. “I sought to work out how it would look, feel and where the thumbs would rest. I wanted to make something that was comfortable and felt familiar and I also needed it to operate without being plugged in so I chose a Raspberry Pi Pico and used an 18650 battery shield to power it along with the other components.”
Roll with it
Selecting the Raspberry Pi Pico meant the dice roller could be compact and use minimal power. “It’s instantly on and it was able to handle the different components I needed, such as a microSD card reader, an audio amp with speaker and a litany of buttons,” Chris says.
Those buttons would be 3D printed with Braille so that his friend would be able to read their various functions and control the device effectively and independently. “Adding Braille wasn’t very difficult,” Chris says. “I designed flat button caps then added the Braille numbers to them in Blender, the free open-source 3D computer graphics software.”
Board games often make use of non-traditional dice – in other words, they’re not always familiar cubes with six marked faces. The standard polyhedral dice set also includes those with four, eight, ten, 12 and 20 sides (the entire set being referred to as d4, d6, d8, d10, d12 and d20). “I needed to have a button for each one,” Chris says. He also added two extras: Reset and Roll.
Writing the project in CircuitPython, he created a device that would allow his friend to press one of the numbered buttons to add it to the die pool. When the dice are ready to be rolled, it’d be a case of pressing Roll and listening to the result when it’s announced. “In addition, there are some long press modes,” Chris adds. “If you hold the d4 button for a few seconds, you will enter quiet mode which plays chimes rather than speaking out every die entered and describing what it’s doing. It still announces the results of the roll, but it can cut down on time and I added it in case the normal mode was too distracting to other players at the table.”
Holding down d6 saves the current die pool. “This is useful if you’re playing something like Dungeons & Dragons and constantly need to roll that big 8d6 fireball [that’s eight d6 dice being rolled at once],” Chris continues. “Long-pressing d8 will load the saved die pool from the microSD card, and that means the saved pool will persist across uses.” Long-pressing the d10 enters percentage mode which, rather than rolling dice, will simply give a percentage between one and 100.
Play the game
Coding all of this was a challenge. “Interfacing with the audio amp was tricky and I wish the device was a bit easier to understand in terms of audio quality, but this may have been due to everything being built on a prototype board,” Chris laments. He also found it difficult to perfect the controller shape. “The housing was 3D printed in a single colour and the top was painted red. I had a good friend of mine help with the ergonomics of it. There was also a lot of soldering,” he adds.
Even so, it’s been worth the time and effort. Chris’ friend loves using the device and he finds it allows him to fully participate in games. It’s also comfortable to hold, easy to use and very effective. What’s more, you can replicate it because Chris has made the code open source and he has also shared the 3D files on Printables. In that sense, it’s capable of helping many other people with a visual impairment.
Chris is certainly happy overall even though he would have done some things differently. “If there is one part of this project I wish I had done, it would have been to design a custom PCB using something like KiCad – if only I’d had issue 138 of The MagPi when I started! It probably would have helped a lot with audio issues and made for a cleaner build overall. It’s definitely on my list of things to learn for future projects.”