Project tutorial
OpenDarts - Homemade Dartboard Machine

OpenDarts - Homemade Dartboard Machine

OpenDarts is a software for PC that can connect thorugh an eletronic dartboard via Arduino, Raspberry Pi 2, etc.

  • 3,974 views
  • 16 comments
  • 6 respects

Components and supplies

Necessary tools and machines

09507 01
Soldering iron (generic)

Apps and online services

About this project

OpenDarts is a software available for Windows 10 devices that can be found on the Windows Store. This software lets your PC act just as a dart machine you can find at a bar: You can play on a physical dartboard and see automatic response on the PC app or you can mark the position by hand.

In this tutorial, you will learn in easy steps how to turn a 15-dollar electronic dartboard into a dart machine using an Arduino and connect to your PC in order to communicate with OpenDarts software. Buying such device can normally cost up to a thousand dollars. The cost of this machine will be around 25 dollars.

For this tutorial, you will need:

Building Material:

  • An Electronic Dartboard: Any dartboard can be turned into a dart machine. In the next steps I'm using the cheapest one I found (15 dollars).
  • An Arduino Uno or Mega: Although you can use any micro-controller or even a Raspberry Pi, I'm using an Arduino Uno because it's cheap and well supported on the internet. The code will be provided.

Tools:

  • Soldering Iron
  • Solder
  • Screwdrivers

Knowledge and Skills:

  • Soldering (Level Basic)
  • Arduino/Programming (Level Basic)

This is all that is needed. Optionally, OpenDarts software supports other options, but they will not be covered in this tutorial:

  • Vibration sensors: To detect when a dart misses the dartboard. You can use the computer keyboard for this.
  • Skip Button: To end a player turn. You can use the computer keyboard for this.
  • Back Button: To undo a move made by mistake. You can use the computer keyboard for this.

Estimated Time

The estimated time for a person with no skills is 1 hour. If you are already familiar with some of these processes, it can take you less than half an hour.

Step 1: Open the Dartboard and Remove Electronics

The first step is to remove all the electronics. First, let's start by opening the dartboard:

After opening you should see something like this:

Dartboards are divided in two parts: The electronics PCB (the brownish board) and the dartboard matrix (shown inside a red rectangle on the image above, connecting to the PCB). The dartboard matrix is the only part we are interested in. Please keep in mind that there are several types of dartboards matrix, but the one in the image is an 8 x 8 matrix. This can be seen by counting the lines of each of those two strips. For now, let's not bother with it.

After opening, let's remove the PCB. We will need our soldering iron for that. You can remove and cut all wires and LCD displays from the PCB:

Then you can unsolder the matrix dartboard from the PCB:

Step 2: Connect to Arduino

We will now connect those dartboard matrix pins onto the Arduino GPIO. Depending on the dartboard you bought, they can be easily attached or not to the Arduino. In my case, they did not fit very well, so I soldered a few male-male cables onto them:

Now let's connect those cables in the Arduino. You can connect them into any GPIOs you want except GPIO 0 and GPIO 1, since we will use those to communicate via Serial Port to the PC:

The next step is to upload the code to the Arduino. For this step we need to take into account the type of our Dartboard matrix.

As I stated on the previous step, my matrix is an 8 x 8 matrix, and we could tell that by counting the lines in each of the stripes of the dartboard matrix. I opened several types of matrix on the past and I found 16x4, 10x7, 8x8, but there could be more.

Let's identify our type of matrix: let's call the stripe of the matrix with the highest number of lines the Master Layer, and the stripe with the lowest number the Slave Layer. So if you have:

16x4:

  • The Strip with 16 lines would be the Master Layer.
  • The Strip with 4 lines would be the Slave Layer.

10x7:

  • The Strip with 10 lines would be the Master Layer.
  • The Strip with 7 lines would be the Slave Layer.

8x8:

In this case, you could choose any of the strips to be the Master Layer, and the other one the Slave Layer.

In any other case:

  • The Master Layer should have the highest number of lines in its stripe.
  • The Slave Layer should have the lowest number of lines in its stripe.

The Arduino code is as follows. Please fix the comment lines by putting the pins you connected your dartboard and put the number of lines of both your Master Layer and Slave Layer:

int masterLines = 8; //Change here to the number of lines of your Master Layer
int slaveLines = 8; //Change here to the number of lines of your Slave Layer
int matrixMaster[] = {13, 12, 11, 10, 9, 8, 7, 6}; //Put here the pins you connected the lines of your Master Layer 
int matrixSlave[] = {5, 4, 3, 2, A5, A4, A3, A2}; //Put here the pins you connected the lines of your Slave Layer
void setup() {     
    Serial.begin(9600);     
    Serial.println("OpenDarts"); //This line is not necessary, is just here for debug purposes
    for(int i = 0; i < slaveLines; i++){         
        pinMode(matrixSlave[i], INPUT_PULLUP);     
    }
   for(int i = 0; i < masterLines; i++){         
       pinMode(matrixMaster[i], OUTPUT);         
       digitalWrite(matrixMaster[i], HIGH);     
   } 
}
void loop() {     
    for(int i = 0; i < masterLines; i++){         
        digitalWrite(matrixMaster[i], LOW);         
        for(int j = 0; j < slaveLines; j++){             
            if(digitalRead(matrixSlave[j]) == LOW){                 
                Serial.print(j);                 
                Serial.print(",");                 
                Serial.println(i);                 
                delay(500);                 
                break;             
            }         
        }         
        digitalWrite(matrixMaster[i], HIGH);     
    } 
}

After uploading and closing your dartboard, you can hit the positions and check if you are receiving data on the Arduino serial monitor:

I also bought an Arduino case and super glued it to the dartboard, getting this as a final result:

We are now communicating between the dartboard and the computer. Next step is downloading and configuring OpenDarts.

Step 3: Downloading and Configure OpenDarts

The OpenDarts software is only available on Windows Store, and can be downloaded only on Windows 10 Devices. Open the following link and download OpenDarts from Microsoft Store: https://www.microsoft.com/store/apps/9NBLGGH42L8N

The software is priced (4 dollars, but can be usually be found cheaper at around 2 dollars), but you can have a free trial. After installing, open it and follow these instructions:

Enjoy your new dartboard machine. Choose any game and play!

Code

Arduino FirmwareC/C++
Code for connecting Dartboard to PC.
int masterLines = 8; //Change here to the number of lines of your Master Layer
int slaveLines = 8; //Change here to the number of lines of your Slave Layer

int matrixMaster[] = {13, 12, 11, 10, 9, 8, 7, 6}; //Put here the pins you connected the lines of your Master Layer
int matrixSlave[] = {5, 4, 3, 2, A5, A4, A3, A2}; //Put here the pins you connected the lines of your Slave Layer

void setup() {
    Serial.begin(9600);
    Serial.println("OpenDarts"); //This line is not necessary, is just here for debug purposes

    for(int i = 0; i < slaveLines; i++){
        pinMode(matrixSlave[i], INPUT_PULLUP);
    }

    for(int i = 0; i < masterLines; i++){
        pinMode(matrixMaster[i], OUTPUT);
        digitalWrite(matrixMaster[i], HIGH);
    }
}

void loop() {
    for(int i = 0; i < masterLines; i++){
        digitalWrite(matrixMaster[i], LOW);
        for(int j = 0; j < slaveLines; j++){
            if(digitalRead(matrixSlave[j]) == LOW){
                Serial.print(j);
                Serial.print(",");
                Serial.println(i);
                delay(500);
                break;
            }
        }
        digitalWrite(matrixMaster[i], HIGH);
    }
}

Comments

Similar projects you might like

Homemade Claw Machine

Project tutorial by -MMM-

  • 8,340 views
  • 12 comments
  • 45 respects

Homemade Arduino Pinball Machine

Project showcase by Frogger1108

  • 11,606 views
  • 15 comments
  • 52 respects

Automatic Coffee Machine

Project tutorial by Thomas sxt

  • 18,616 views
  • 7 comments
  • 18 respects

DIY Universal CNC Machine

Project tutorial by Arduino “having11” Guy

  • 15,990 views
  • 5 comments
  • 69 respects

CNC Part Picking Machine

Project tutorial by Arduino “having11” Guy

  • 5,279 views
  • 1 comment
  • 10 respects

Arduino Remote/Wireless Programming and Homemade Power Bank

Project tutorial by xreef

  • 623 views
  • 0 comments
  • 3 respects
Add projectSign up / Login