Introduction: A Planting Hand

A Planting Hand is a motor powered robot generated to help with the planting progress. With an auger and a water dispenser attached, the robot will drill into the ground and dispense water wherever a seed is planted. With this helpful robot planting /watering is not much of a problem. Everyone wants a beautiful garden but tending to it or even starting it can be a big struggle especially if there are disabilities, unsuccessful time management, and or large amounts to be planted involved with the mission. However, with this great new automatic robot who tends to these beautiful plants, it's all easy and fun.

Step 1: Introduction

Introduction

The problem we’re trying to solve is easier planting for disabled people. It serves people's basic needs because most older people like to plant as a hobby or something that relaxes them.

Our brainstorming process was hard because none of the three projects all of us made contained all the requirements the project needed. At first, we decided on making an automatic mop, not realizing that one had already existed. So we decided to change the whole project and make a robot that would help disabled people garden instead of clean their home with an automatic mop.

Our gardening robot moves automatically and it is coded to sense when objects are near and where to go, it also has an auger that helps make holes to put the seeds in and it also consists of a water pump that helps dispense water after the hole is made.

-JDM Tech

Step 2: Materials and Tools Section

Materials and Tools Section

  • Vex Robotics Kit (Which contains Breadboard, Battery, Motors, Screws, Wires)
  • Computer
  • Auger (https://www.homedepot.com/p/Ames-24-in-Planting-Au...

Step 3: Step by Step Instructions (Consist of 5 Steps for Building)

Step by Step Instructions

  1. You’ll need 8 long aluminum brackets(4 chassis rail 16 hole + 4 c-channel). Connect 2 chassis rails and 2 c-channel to make a solid square connected with 8 bolts. Do this twice then take 4 small aluminum brackets then connect the 2 squares to make a cube. This will be your base (for stability extra aluminum brackets can be placed in the middle of the base across.)
  2. For this step, you’ll need 4 long rods, Screws, Shaft collars, 2 short rods, 4 big wheels, 4 big gears (Tooth Gear), and 2 medium gears(Tooth Gear). Take 1 long rod and attach a wheel, a large tooth gear and stick it through the 5th square hole on the bottom row of the cube. Then do the same thing to the other side but before you do get a small rod and put a small tooth gear and a shaft collar on before you place it between the 2 big wheels and put a motor on the end. This will be the wheels to your base. Make sure everything is tight.
  3. For this step, you'll need 2 long rods, 2 long aluminum brackets connected with screws to make a shaft, 2 small brackets, a big gear, a 2 1/2 inch standoff, some screws, some nut keps, and a motor. Connect the shaft to the small rods to make a lever with the screws and gear holding it together in the middle should be the 2 1/2 inch standoff along with screws and keps(or purchase and claw to replace the shaft). Place them back to back and screw tightly. Then put the motor on the end of a rod that should be placed through the claw in which the auger will be placed.
  4. This step will be more of a placement step for the next step. For this step, you'll need a 5x12 plate, Vex breadboard, and sensors(optional). Take your 5x12 and connect it to the front of the robot where the claw is and screw in the vex breadboard and hook in motors at the wheels and the motor at the end of the rod on the claw.
  5. The fifth step is the coding portion. You will need vex board attached to the robot, a computer and , a cord to connect the two. You'll also need access to the program Robotc

Step 4: Coding and Conclusion

For this step, you'll need a cord to hook to your computer and the vex board, your computer, your robot, and access to the program called Robot C. This is the code you'll need to insert to Robot C to get your robot moving.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Code moving forward with range finder: The Ultra Range Finder Sensor detects if an object is close to the robot if it does detect something near it would send a signal to the motors to shut off. This avoids the robot from crashing to walls.

task main()

{

int speed; // Will hold a speed for the motors.

int sonar_value; // Will hold the current reading of the sonar sensor.

int distance = 4; // Specified distance to be at 25 centimeters

}

while(true) sonar_value = SensorValue(sonarSensorFront); // Store the current reading from the Sonar Sensor to 'sonar_value'.

clearLCDLine(0); /* Display the */

displayLCDPos(0,0); /* reading of the */

displayNextLCDString("Sonar: "); /* Sonar Sensor */

displayNextLCDNumber(sonar_value); /* on line 0. */

if(sonar_value < 0) // If the object is out of range: (returns -1)

{ speed = 127; // Set 'speed' to full speed ahead!

}

else

{

speed = (sonar_value - distance)*2; // Move the robot at a speed proportional to how far off its desired distance it currently is }

clearLCDLine(1); /* Display the */

displayLCDPos(1,0); /* current speed */

displayNextLCDString("Speed: "); /* of the motors */

displayNextLCDNumber(speed); /* on line 1. */

motor[leftMotor] = speed; /* Set both the left and right */

motor[rightMotor] = -speed; /* motors to run at 'speed'. */

wait1Msec(100); / Take 10 readings per second.

{

} //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Servo Sweep: This code moves the arm of the robot up an down. The arm moves up by .05 seconds it increments by 10 and stops when it reaches a desired altitude.

task main()

{ while(true)

{

motor[servoMotor] = -127; // Set 'servoMotor' to position -127 (negative end of range)

wait1Msec(500); // Wait for 0.5 seconds (gives time for the servo to move)

for(int i=-117; i<128; i+=10) /* Starting 'i' at -117, and incrementing by 10, */

{ /* continue while 'i' is less than 0. */

motor[servoMotor] = i; // Set 'servoMotor' to position 'i'.

wait1Msec(250); // Wait for 0.25 seconds (gives time for the servo to move) } } } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Moving Reverse Code: This code causes the robot to move backwards

task main()

{ wait1Msec(2000); // Robot waits for 2000 milliseconds before executing program

// Move in reverse at full power for 3 seconds

motor[rightMotor] = -127; // Motor on port2 is run at full (-127) power reverse

motor[leftMotor] = -127; // Motor on port3 is run at full (-127) power reverse

wait1Msec(3000); // Robot runs previous code for 3000 milliseconds before moving on } //

Program ends, and the robot stops //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Swing turn code: This code causes the robot to move to the left or right if encountered with an object. It moves to the sides in a 90 degree angle.

task main()

{ wait1Msec(2000); // Robot waits for 2000 milliseconds before executing program

// Turn Right at full power for 0.75 seconds

motor[rightMotor] = 0; // Motor on port2 is stopped at 0 power

motor[leftMotor] = 127; // Motor on port3 is run at full (127) power forward

wait1Msec(750); // Robot runs previous code for 750 milliseconds before moving on

// Turn Left at full power for 0.75 seconds

motor[rightMotor] = 127; // Motor on port2 is run at full (127) power forward

motor[leftMotor] = 0; // Motor on port3 is stopped at 0 power

wait1Msec(750); // Robot runs previous code for 750 milliseconds before moving on } // Program ends, and the robot stops //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Forward until close proximity: This was originally the code that we wanted to use to avoid the robot from crashing into walls. However we ended up using the first code because we figured out that using if else statements would be more efficient to use.

task main()

{

wait1Msec(2000); // Robot waits for 2000 milliseconds before executing program

while(SensorValue(sonarSensor) > 20 || SensorValue(sonarSensor) == -1) // Loop while robot's Ultrasonic sensor is further than 20 inches away from an object

{

// || (or) it is '-1'. (-1 is the value returned when nothing is in it's visable range)

motor[rightMotor] = 63; // Motor on port2 is run at half (63) power forward

motor[leftMotor] = 63; // Motor on port3 is run at half (63) power forward } } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Although my group and I had trouble creating this project we stayed positive and finished at our best abilities and we think you can too. Some troubles we had were:

  • Figuring out coding
  • Time management

We succeeded in ways that help us complete our project, learn from our project and cooperate with each other. We had the goal of not giving up and learning more about coding and we achieved both in different and giantly impacting ways. One way we would change our project in a way to better it would be focusing more on the aspect of making everything automatic. Other than that I think we did a phenomenal job and learned a lot as young ladies.

-JDM Tech