What’s Black, White, And Red On 20 Sides?

You won’t need to pack a full set of dice for your next game with this DIY Multifunctional Eink Gadget. [Sasa Karanović] brings us a fun device that combines a few essential aspects of tabletop gaming, D6, D12, and D20 dice rolling and a hero dashboard. While they have grand plans for a BLE networked future application, we admire the restraint to complete a V1 project before allowing scope-creep to run amok. Well played!

For this project, [Sasa] realized it needed to be battery powered and just choosing the right display for a battery powered application can be daunting. Even if you aren’t building this project, the video after the break includes a nice intro to electronic ink and low power microcontrollers for the uninitiated. We even see a graph of the completed board’s power draw from the button wake up, display refresh, and low power sleep. The project has some neat tips for building interaction into case design with the use of the display and a flexible bezel as integrated buttons.

buttons on the SasaKaranović eInkDice circuit board

The BLE capability introduces some exciting possibilities for connected game play in-person and over long distances, and it looks like [SasaKaranović] has some cool applications already in the works. We hope to see where those lead and if a community develops of hackers with similar devices building new applications for the multifunction device, from the dungeon to the smart-home.

11 thoughts on “What’s Black, White, And Red On 20 Sides?

    1. No d8, d10, or d100 either. Not a complete set of dice for D&D. Also, with the lack of d10s, that means White Wolf products are out. And the closest thing to a dice pool I see in the video is 2d6 which isn’t even enough to roll stats for D&D much less make up a decent dice pool for any of the d6 based systems of which there are a lot. In my experience, the Mersenne Twister formula, used in a lot of random number generators last time I dug into it, never seemed to give similar results to actual dice. Antidotally, it tended towards the extremes instead of towards the center of the range as real dice seem to. For this reason, I always preferred real dice over the tons of virtual dice options that have existed in various formats over the years.

      Now, ignoring the limited dice set of the device and looking at the potential for a similar type of device, it could have some possible uses in other situations.

      1. I thought it was obvious from the video that I have no clue what I’m talking about when it comes to board games and different dices that you need. I designed this for a friend that will add their own set of dice and other features later on. :)
        But the code is fairly straight forward that anyone could add as many different types of dices as they please. Also keep in mind that not every board game will require same set of dices. The idea is to allow people to build their own custom “swiss army knife” version of game dice for game(s) that they play and then they can carry them around. Maybe even give it some custom touch by modifying how it looks. :)
        Also the nRF52 has a pretty decent RNG hardware so the random number it produces are going to be orders of magnitude better than your average pseudo-RNG. And on top of that, if you want to take it even further, you can always modify the hardware and add your own RNG. :)

    2. But… it’s open-source and open-hardware! Anyone can add whatever features they need, that was the idea behind the project. :)
      I have no clue which set of die you need for D&D or similar board games. So I created a “framework” where you could easily add as many different type of rolls as you need just by doing copy&paste of few lines of code. :)

  1. Probably an unpopular opinion, but I like software solutions because, well, I’m lazy –

    # You’ll have to fix the indents as hackaday comments break python’s indents

    import random

    import sys

    if __name__ == “__main__”:

    if len(sys.argv) != 2 or “d” not in sys.argv[1]:

    print(“Usage: %s 1d20” % sys.argv[0])


    n = sys.argv[1].split(“d”)

    r = “”

    sum = 0

    for i in range(0, int(n[0])):

    roll = random.randint(1, int(n[1]))

    sum = sum + roll

    r = r + (” d%s=%d” % (n[1], roll))

    print(“sum=%d%s” % (sum, r))

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.