09.5 - Implementation
Fabrication and Assembly
The two components of the fishing rod were the casting mechanism and the box for the electronics housing. The casting mechanism is made up of 1/4" acrylic links connected with 6 mm bearings at the joints. Before the final laser cuts of the acrylic links were made, the prototype was cut out of 1/4" wood. The electronics housing is a jigsaw box of 1/4" wood with 3 of the 4 walls glued to each other to minimize the collapsibility, yet retain the ability to open the box and view the circuit. At the bottom of the electronics housing is a 3D printed attachment out of black PLA with an opening that allows for a weight to be inserted at the front. This piece is screwed into the electronics housing. As a finishing touch, the wood of the electronics housing was painted black to match the color aesthetic of the 3D printed parts. Additionally, two other parts of the assembly were 3D printed. The connector cylinder and the line holder were printed out of black PLA. The line connector was super glued to the output link with the fishing line then ran through the connector and attached to the multiple joint of the output link.
In order to attach the casting mechanism to the electronics and motor, we laser cut small holes in the base of the casting mechanism that would allow us to screw it into the servo. The servo was mounted underneath the lid of the box housing electronics using M3 hex screws 1/2" long, and a hole was cut in this box so that the top of the servo would be flush with the box when mounted. The arm driving the horizontal sliding motion of the casting mechanism was mounted to the box through a bearing that was press-fit to a laser cut hole. We found that these points of contact with the box were sufficiently sturdy to withstand the motion of the whole assembly without coming apart.
Figure 34. CAD Model: Base with Slot for Weight Figure 35. CAD Model: Electronics Housing Figure 36. CAD Model: Connector Cylinder
Figure 37. Line Holder Figure 38. Connector Cylinder
Figure 39. Final Prototype: Casting Mechanism Figure 40. Final Product: Electronics Housing
Video 2. Final Prototype: First Demo
Electronics and Circuitry
Concerning the circuitry used in our final design, we made an effort to keep things as simple and compact as possible. Using a small breadboard and pieces from electronics kits already in our possession as well as a button set purchased online, we constructed a circuit in which three different buttons would send independent signals to three separate digital inputs on our Arduino Uno board. We powered our servo and these buttons through the 5V pin on the Arduino and used an analog pin to send the servo a signal that would tell it where to go. The Arduino Uno itself was powered by a 9V battery.
The total list of circuit components used for this project is as follows:
- 1 Arduino Uno Board
- 1 9V Battery
- 1 270-degree Servo Motor
- 1 Breadboard with at least 2 power buses and 20 terminal rows
- 3 Push Buttons
- 3 220 Ohm Resistors (Each wired in series with one of the buttons)
- Miscellaneous wires to connect components to the breadboard
Software Development
Below is our code used by the Arduino to control the position of the servo. We ended up only using two of the three buttons since we ran out of time to fully develop the reel mechanism. The code below controls the position of the rod with two buttons.
Middle button - Sets the casting mechanism back to home.
Right button - Casts the casting mechanism.
#include <Servo.h> // Define Button Pins #define BUTTON1_PIN 2 #define BUTTON2_PIN 4 #define BUTTON3_PIN 7 // Servo Servo servo1; int servoPos = 0; const int maxServoPos = 180; bool windingUp = false; void setup() { // initialize serial communications at 19200 bps: Serial.begin(19200); // Servo setup servo1.attach(9); // Attaching the servo to pin 9 servo1.write(0); // Move servo to home position // Button inputs pinMode(BUTTON1_PIN, INPUT); pinMode(BUTTON2_PIN, INPUT); pinMode(BUTTON3_PIN, INPUT); } void loop() { // Read button states bool button1State = digitalRead(BUTTON1_PIN); bool button2State = digitalRead(BUTTON2_PIN); bool button3State = digitalRead(BUTTON3_PIN); if (windingUp) { // Check if the winding up condition should be terminated if (!(button1State == HIGH && button2State == HIGH)) { windingUp = false; servoPos = 0; servo1.write(servoPos); // Move servo to position 0 degrees when released } else if (servoPos < maxServoPos) { servoPos++; servo1.write(servoPos); delay(15); // Control the winding speed } } else { // Condition for both buttons pressed simultaneously if (button1State == HIGH && button2State == HIGH) { windingUp = true; } else if (button1State == HIGH) { servo1.write(0); // Move servo to position 0 degrees } else if (button2State == HIGH) { servo1.write(66); // Move servo to position 66 degrees } else if (button3State == HIGH) { servo1.write(132); // Move servo to position 132 degrees } } }
Welcome to the University Wiki Service! Please use your IID (yourEID@eid.utexas.edu) when prompted for your email address during login or click here to enter your EID. If you are experiencing any issues loading content on pages, please try these steps to clear your browser cache.