CS 341 – Lab 7
Computer Architecture and Organization
Measuring Distance and Velocity
Equipment: Arduino UNO microcomputer, PC with Arduino IDE installed, and a USB cable.
Parallax PING))) Ultrasonic Distance Sensor
Your assignment is to connect an ultrasonic distance sensor to the Arduino board. Disconnect the Arduino board from the USB port. Connect the appropriate wires to the Arduino UNO via the breadboard. NOTE: When you are adding, changing, or removing wiring on a prototype connected to the Arduino UNO board, always disconnect the power from the USB port and check your wiring carefully before reconnecting it to the USB port. Otherwise, you may damage the Arduino board. If you have any doubts, show your wiring to the TA before reconnecting it to the USB port.
Study the following picture for connecting the PING))) sensor to the Arduino processor.
Open the Arduino.exe program. Write the code for the sketch to send a pulse to the PING sensor and receive a pulse width modulated (analog) value for the duration of the round trip delay. The duration represents the round trip delay to the target in microseconds.
Define global variables for the distance, the old distance, and the velocity.
In the setup function for this sketch, you need to configure the serial port for 9600 bps.
In the loop function for this sketch, you need to update the value of the old distance variable from the distance variable, use a call to the ping function provided below to get a new distance value, calculate the velocity from the difference between the current and old distance values, and print both values in a short line. You need to use a short printout line to avoid affecting the timing of the sampling such as the following simple format:
D: 13 / V: 4
D: 13 / V: 0
D: 14 / V: 2
D: 20 / V: 12
D: 22 / V: 4
D: 21 / V: -2
D: 21 / V: 0
D: 21 / V: 0
D: 25 / V: 8
D: 16 / V: -18
D: 11 / V: -10
D: 11 / V: 0
int ping(int pingPin)
int duration; /* duration of round trip pulse in microseconds */
pinMode(pingPin, OUTPUT); /* set pingPin for output first */
digitalWrite(pingPin, LOW); /* write a LOW value for a short time */
digitalWrite(pingPin, HIGH); /* send a pulse at least 5 microseconds in length */
digitalWrite(pingPin, LOW); /* end the pulse */
pinMode(pingPin, INPUT); /* set the pingPin for input */
duration = pulseIn(pingPin, HIGH); /* and get round trip duration in microseconds */
/* sound velocity is 29 microseconds per centimeter */
/* distance is half of the round trip */
return duration / 29 / 2; /* convert to centimeters */
At the end of the loop function, include a delay call for 1 second (1000 microseconds) to set the sampling rate.
Connect the PC to the Arduino UNO board using the USB cable. Download the sketch and open the Serial Monitor window. Hold a “target” (book, piece of cardboard, etc. at a known distance from the sensor. You should see a series of your printouts with values of the distance to the target and its velocity. Experiment with the distance from the sensor to the target and observe to ensure proper operation and calibration.
Think about and explain in your report how you could add a calculation for the acceleration to the code for the above sketch. If you have time, try it.
As a team, write your lab report to explain what you did, how you did it, and what you learned about interfacing hardware to a microprocessor and its software (the “sketch”). Turn in your report including a copy of your team’s final “sketch” at your next lab session.
___ / 10