Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Fabrication and Assembly:

...

After all the dimensions were settled on we were finally able to laser cut our links out of acrylic and press our 8 mm bearings into the links. We then cut down our 8 mm shaft into two 1-inch pieces and one 1.5-inch piece, using the machine shop. After we got our desired lengths for the shaft we filed them down and pressed them into our bearings. To ensure there was no play between the linkages, spacers, and the shafts we 3D printed lock collars, shown in Figure 3. When attaching the lock collars we used clamps that were placed around the linkages to help create a tight fit and help minimize any play that would occur before we screwed the lock collars into place around the shafts After the linkages were assembled we attached them to the ground link and screwed in the motor and motor mount. After this process was done we attached our 2-inch 3D printed feet to elevate the court off the ground, which allowed the electronics to be mounted to the bottom. 

...

The software controlling this robot was done using an Arduino to implement the desired controls. The program was relatively straightforward and implemented two button inputs. The first would cycle through various PWM signals to select how far the ball would be shot. The second would turn the motor on at that PWM value for a certain time associated with it and perform approximately one full revolution on the input link. Below are excerpts from the code that were determined to be important to highlight.


Pin Assignments:

#defineENA5    // Enable pin for motor
#defineIN16    // Input 1 pin for motor
#defineIN27    // Input 2 pin for motor
#defineBUTTON_PIN_12 // Pin for the first button
#defineBUTTON_PIN_23 // Pin for the second button


PWM and Timing Arrays:

int pwmValues[] = {210, 230, 243, 255};
int durations[] = {700, 650, 600, 500}; // in milliseconds


Cycling through PWM:

if (buttonState2 == LOW) {
    currentPwmIndex = (currentPwmIndex + 1) % (sizeof(pwmValues) / sizeof(pwmValues[0]));
    Serial.print("PWM value changed to: ");
    Serial.println(pwmValues[currentPwmIndex]);
    delay(500); // Debouncing delay
  }


Bill of Materials:

Electronic Components:

...