Introduction: Ultrasonic Motion Tracker

Here's a cool arduino project you can make it can be used for many different projects.

Required materials

• Breadboard

• Ultrasonic Range Sensor x2 (I used the four pin version so if you are using the ping version you'll have to change the code a bit)

• Servo (I used a micro size)

• Arduino UNO or similar microcontroller (I used an Arduino Mega)

• Jumper Cables (female to male and male to male)

• Particle Board

• 9v Battery and connector

• Something to mount the servo on (I used some poster mounting putty)


Required Tools:

• Hot glue gun

• Xacto knife

• Computer with Arduino IDE

Step 1: Building the Sensor Mount

First, we will need to build the sensor mount. For this I built a prototype out of cardboard. In the future I plan to 3d print a perfect mount for the sensor.

Cut a rectangle that is about the same height as one of the sensors and an 1/8th inch (about 3mm) longer than two of them together. Set the rectangle aside and cut out two identical isosceles triangles with the odd angle out being 120 degrees. I cut it at 120 degrees because the range sensors have a 15 degree cone that they measure, this allows for no blind spots while optimizing the area that is sensed. Finally, place the sensors on the mount to determine where to cut the rectangular holes for them to fit in. Make the hole as small as possible because this snug fit makes up for not using any other adhesives or connectors. Now cut another small rectangular hole on the bottom triangle of the mount to allow for jumper cables to be passed through. Once the jumper cables are plugged in, the sensors should stay in place. If they don't, you will need to fasten them with some hot glue or pins. When you are done with the mount, attach it to the servo.

Step 2: Wiring

Now all you need to do is connect everything! I used Fritzing to create a circuit diagram. I have also provided some pictures of the final product.

The code provided uses digital pins 9 through 13. Pin 9 is the data pin for the servo. Pins 10 and 11 are the echo and trig pins, respectively, of the left sensor. Pins 12 and 13 are the echo and trig pins, respectively, of the right sensor. I connected the 5v and gnd pins from the Arduino to the breadboard and then used jumpers to connect the servo and sensors.

Step 3: The Code

The code that I provided allows for the changing of the distance threshold. So in other words, how far the sensors can see. Finally, my friend showed me a cool way of debugging really quick. All you do is use a boolean and some if statements. If the boolean is true, then serial communication will be on and communicating. If the boolean is false, then the program will run much faster but not communicate.

This script allows two ultrasonic range sensors to follow movement while mounted on the top of a servo. The distance threshold can be changed but should not be set too far as the sensors will begin to fail.

Step 4: Conclution

Troubleshooting:

If the sensors keep turning the wrong way, try switching the cables in pins 10 and 11 with the cables in pins 12 and 13.

If the sensors don't move at all, or just a little bit, check the wiring. It is really easy to accidentally move the jumper cables over one spot on the breadboard.If the sensors are moving really slowly, go back to the code and make sure that the debug is false.

The serial communications can really slow down the reaction time of the robot.If you are still having issues, first make sure that the Arduino is on and that all jumper cables are in the correct spots. Switch the debug to true and check to see if the range sensors are working.

You might also want to test the servo to make sure that it is also in working condition.

Comments

author
millerman4487 made it! (author)2017-06-14

I attempted to make this, but the code you uploaded doesn't seem to be complete. here is what showed up when I downloaded it:

#include <Servo.h>

Servo myservo;

int pos = 86; //initial servo position

int left = 0;

int right = 0;

void setup()

{

myservo.attach(9);

myservo.write(pos);

}

void loop()

{

left = analogRead(1);

right = analogRead(0);

if (right < 100 && left > 100)

{

pos = pos - 6;

myservo.write(pos);

}

if (left < 100 && right > 100)

{

pos = pos + 6;

myservo.write(pos);

}

delay(20);

}

author
millerman4487 made it! (author)millerman44872017-06-14

The part about reading the value from the sensors is completely left out.

author
Swansong made it! (author)2017-04-27

Thanks for sharing :)