Basketball is a major part of our team members' lives. As such, anyone who has ever picked up a ball and played competitively would understand the importance of being able to pass well. Passing drills are usually performed with a partner and at a local basketball court. However, this lockdown has made it barely possible for this form of training to continue. Players need to keep their skills up to speed in order to compete to the best of their ability or achieve ambitions such as playing professionally. Therefore, our team has created an embedded system which acts as a stand-alone passing trainer, named Dime (colloquial terminology for passing).

What it does

Dime solves the simple problem of not being able to train one's passing ability whilst at home or if a partner is not present. It is a simple problem with a simple and elegant solution that is highly feasible. Quite simply, a laser is Dime projects a laser to a random location onto any wall for approximately 1 second, accompanied by an audible beep. During this second, the trainee must do their best to pass the ball directly to the laser projected on the wall. The laser turns off after 1 second accompanied by a distinct lower frequency beep. The servo repositions and the laser turns back on after 3 seconds and repeats the process above. This process can lead to exponential gains with respect to mind-muscle connection, reaction speed, passing accuracy, ball-handling, etc. Hence why Dime is such an elegant and powerful solution to this problem.

How we built it

Dime was built using an Arduino microcontroller, using a buzzer module, servo motor, and laser module, and programmed within the Arduino IDE.

Challenges we ran into

The biggest challenge was setting up the system to the desired position, whereby it was difficult to secure the servo for a horizontal projection. This is because the device is a prototype and there are no resources to construct a secure housing for the device.

Accomplishments that we're proud of

We are very proud that we could work remotely to solve this issue and that it was well planned before we started to build the system. And we are also proud of how effective and enjoyable it was to use.

What we learned

We learnt that working remotely was very difficult when attempting to make an embedded system that inevitably involves physical hardware. We also learnt that sometimes the best solutions to problems can be very simple.


// Code Libraries
#include <Servo.h> 

// Variable Setup
int servoPosition;
int maxAngle = 45;

// Assigning pins
const int servoPin = 7;
const int laserPin = 11;
const int buzzer = 5;

// Create servo object
Servo Servo1;

void setup() {

  Servo1.attach(servoPin); // Attach the servo to the allocated pin
  pinMode(laserPin, OUTPUT); // Set laser pin mode to OUTPUT
  pinMode(buzzer, OUTPUT); // Set buzzer pin mode to OUTPUT


void loop() {

  // Set random servo position and wait 3 seconds
  servoPosition = random(0, maxAngle);

  // Turn on laser for 1 second
  digitalWrite(laserPin, HIGH);
  tone(buzzer, 1000); // Make the buzzer beep at 1000kHz

  // Turn off laser
  digitalWrite(laserPin, LOW);
  tone(buzzer, 500); // Make the buzzer beep at 500kHz

What's next for Dimes

Dimes has yet to determine what comes next as we await how well received our solution will be.

Built With

Share this project: