Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Conferences
Free Learning
Arrow right icon

Avoiding Obstacles Using Sensors

Save for later
  • 8 min read
  • 14 Aug 2014

article-image

In this article by Richard Grimmett, the author of Arduino Robotic Projects, we'll learn the following topics:

  • How to add sensors to your projects
  • How to add a servo to your sensor

(For more resources related to this topic, see here.)

An overview of the sensors

Before you begin, you'll need to decide which sensors to use. You require basic sensors that will return information about the distance to an object, and there are two choices—sonar and infrared. Let's look at each.

Sonar sensors

The sonar sensor uses ultrasonic sound to calculate the distance to an object. The sensor consists of a transmitter and receiver. The transmitter creates a sound wave that travels out from the sensor, as illustrated in the following diagram:

avoiding-obstacles-using-sensors-img-0

The device sends out a sound wave 10 times a second. If an object is in the path of these waves, the waves reflect off the object. This then returns sound waves to the sensor.

The sensor measures the returning sound waves. It uses the time difference between when the sound wave was sent out and when it returns to measure the distance to the object.

Infrared sensors

Another type of sensor is a sensor that uses infrared (IR) signals to detect distance. An IR sensor also uses both a transmitter and a receiver. The transmitter transmits a narrow beam of light and the sensor receives this beam of light. The difference in transit ends up as an angle measurement at the sensor, as shown in the following diagram:

avoiding-obstacles-using-sensors-img-1

The different angles give you an indication of the distance to the object. Unfortunately, the relationship between the output of the sensor and the distance is not linear, so you'll need to do some calibration to predict the actual distance and its relationship to the output of the sensor.

Connecting a sonar sensor to Arduino

Here is an image of a sonar sensor, HC-SR04, which works well with Arduino:

avoiding-obstacles-using-sensors-img-2

These sonar sensors are available at most places that sell Arduino products, including amazon.com. In order to connect this sonar sensor to your Arduino, you'll need some of those female-to-male jumper cables. You'll notice that there are four pins to connect the sonar sensor. Two of these supply the voltage and current to the sensor. One pin, the Trig pin, triggers the sensor to send out a sound wave. The Echo pin then senses the return from the echo.

To access the sensor with Arduino, make the following connections using the male-to-female jumper wires:

Arduino pin

Sensor pin

5V

Vcc

GND

GND

12

Trig

11

Echo

Accessing the sonar sensor from the Arduino IDE

Now that the HW is connected, you'll want to download a library that supports this sensor. One of the better libraries for this sensor is available at https://code.google.com/p/arduino-new-ping/. Download the NewPing library and then open the Arduino IDE. You can include the library in the IDE by navigating to Sketch | Import Library | Add Library | Downloads and selecting the NewPing ZIP file. Once you have the library installed, you can access the example program by navigating to File | Examples | NewPing | NewPingExample as shown in the following screenshot:

avoiding-obstacles-using-sensors-img-3

You will then see the following code in the IDE:

avoiding-obstacles-using-sensors-img-4

Now, upload the code to Arduino and open a serial terminal by navigating to Tools | Serial Monitor in the IDE. Initially, you will see characters that make no sense; you need to change the serial port baud rate to 115200 baud by selecting this field in the lower-right corner of Serial Monitor, as shown in the following screenshot:

avoiding-obstacles-using-sensors-img-5

Now, you should begin to see results that make sense. If you place your hand in front of the sensor and then move it, you should see the distance results change, as shown in the following screenshot:

avoiding-obstacles-using-sensors-img-6

You can now measure the distance to an object using your sonar sensor.

Connecting an IR sensor to Arduino

One popular choice is the Sharp series of IR sensors. Here is an image of one of the models, Sharp 2Y0A02, which is a unit that provides sensing to a distance of 150 cm:

avoiding-obstacles-using-sensors-img-7

Unlock access to the largest independent learning library in Tech for FREE!
Get unlimited access to 7500+ expert-authored eBooks and video courses covering every tech area you can think of.
Renews at ₹800/month. Cancel anytime

To connect this unit, you'll need to connect the three pins that are available on the bottom of the sensor. Here is the connection list:

Arduino pin

Sensor pin

5V

Vcc

GND

GND

A3

Vo

Unfortunately, there are no labels on the unit, but there is a data sheet that you can download from www.phidgets.com/documentation/Phidgets/3522_0_Datasheet.pdf. The following image shows the pins you'll need to connect:

avoiding-obstacles-using-sensors-img-8

One of the challenges of making this connection is that the female-to-male connection jumpers are too big to connect directly to the sensor. You'll want to order the three-wire cable with connectors with the sensor, and then you can make the connections between this cable and your Arduino device using the male-to-male jumper wires. Once the pins are connected, you are ready to access the sensor via the Arduino IDE.

Accessing the IR sensor from the Arduino IDE

Now, bring up the Arduino IDE. Here is a simple sketch that provides access to the sensor and returns the distance to the object via the serial link:

avoiding-obstacles-using-sensors-img-9

The sketch is quite simple. The three global variables at the top set the input pin to A3 and provide a storage location for the input value and distance. The setup() function simply sets the serial port baud rate to 9600 and prints out a single line to the serial port.

In the loop() function, you first get the value from the A3 input port. The next step is to convert it to a distance based on the voltage. To do this, you need to use the voltage to distance chart for the device; in this case, it is similar to the following diagram:

avoiding-obstacles-using-sensors-img-10

There are two parts to the curve. The first is the distance up to about 15 centimeters and then the distance from 15 centimeters to 150 centimeters. This simple example ignores distances closer than 15 centimeters, and models the distance from 15 centimeters and out as a decaying exponential with the following form:

avoiding-obstacles-using-sensors-img-11

Thanks to teaching.ericforman.com/how-to-make-a-sharp-ir-sensor-linear/, the values that work quite well for a cm conversion in distance are 30431 for the constant and -1.169 as the exponential for this curve.

If you open the Serial Monitor tab and place an object in front of the sensor, you'll see the readings for the distance to the object, as shown in the following screenshot:

avoiding-obstacles-using-sensors-img-12

By the way, when you place the object closer than 15 cm, you should begin to see distances that seem much larger than should be indicated. This is due to the voltage to distance curve at these much shorter distances. If you truly need very short distances, you'll need a much more complex calculation.

Creating a scanning sensor platform

While knowing the distance in front of your robotic project is normally important, you might want to know other distances around the robot as well. One solution is to hook up multiple sensors, which is quite simple. However, there is another solution that may be a bit more cost effective.

To create a scanning sensor of this type, take a sensor of your choice (in this case, I'll use the IR sensor) and mount it on a servo. I like to use a servo L bracket for this, which is mounted on the servo Pas follows:

avoiding-obstacles-using-sensors-img-13

You'll need to connect both the IR sensor as well as the servo to Arduino.

Now, you will need some Arduino code that will move the servo and also take the sensor readings. The following screenshot illustrates the code:

avoiding-obstacles-using-sensors-img-14

The preceding code simply moves the servo to an angle and then prints out the distance value reported by the IR sensor. The specific statements that may be of interest are as follows:

  • servo.attach(servoPin);: This statement attaches the servo control to the pin defined
  • servo.write(angle);: This statement sends the servo to this angle
  • inValue = analogRead(inputPin);: This statement reads the analog input value from this pin
  • distance = 30431 * pow(inValue, -1.169);: This statement translates the reading to distance in centimeters

If you upload the sketch, open Serial Monitor , and enter different angle values, the servo should move and you should see something like the following screenshot:

avoiding-obstacles-using-sensors-img-15

Summary

Now that you know how to use sensors to understand the environment, you can create even more complex programs that will sense these barriers and then change the direction of your robot to avoid them or collide with them. You learned how to find distance using sonar sensors and how to connect them to Arduino. You also learned about IR sensors and how they can be used with Arduino.

Resources for Article:


Further resources on this subject: