Bird
Raised Fist0
Arduinoprogramming~5 mins

IR sensor for obstacle detection in Arduino

Choose your learning style10 modes available
Introduction

An IR sensor helps a robot or device know if something is close by. It tells the device to stop or turn to avoid hitting things.

When building a robot that should not bump into walls.
To detect if a hand or object is near a device for touchless control.
In automatic doors to know when someone is approaching.
To count objects passing on a conveyor belt.
For simple security alarms that detect movement nearby.
Syntax
Arduino
const int irSensorPin = A0;  // IR sensor connected to analog pin A0
int sensorValue = 0;          // Variable to store sensor reading
int threshold = 300;          // Threshold for obstacle detection

void setup() {
  Serial.begin(9600);        // Start serial communication
  pinMode(irSensorPin, INPUT); // Set sensor pin as input
}

void loop() {
  sensorValue = analogRead(irSensorPin);  // Read sensor value
  if(sensorValue < threshold) {            // Check if obstacle is close
    Serial.println("Obstacle detected!");
  } else {
    Serial.println("No obstacle.");
  }
  delay(500);  // Wait half a second before next reading
}

The IR sensor usually outputs an analog voltage that changes with distance.

You set a threshold value to decide when an obstacle is close enough.

Examples
Basic example: detects obstacle if sensor value is less than 300.
Arduino
const int irSensorPin = A0;
int sensorValue = 0;
int threshold = 300;

void setup() {
  Serial.begin(9600);
  pinMode(irSensorPin, INPUT);
}

void loop() {
  sensorValue = analogRead(irSensorPin);
  if(sensorValue < threshold) {
    Serial.println("Obstacle detected!");
  } else {
    Serial.println("No obstacle.");
  }
  delay(500);
}
Lower threshold means sensor only detects very close obstacles.
Arduino
const int irSensorPin = A0;
int sensorValue = 0;
int threshold = 100;

void setup() {
  Serial.begin(9600);
  pinMode(irSensorPin, INPUT);
}

void loop() {
  sensorValue = analogRead(irSensorPin);
  if(sensorValue < threshold) {
    Serial.println("Very close obstacle detected!");
  } else {
    Serial.println("No close obstacle.");
  }
  delay(500);
}
Higher threshold detects obstacles farther away, with slower checking every 1 second.
Arduino
const int irSensorPin = A0;
int sensorValue = 0;
int threshold = 400;

void setup() {
  Serial.begin(9600);
  pinMode(irSensorPin, INPUT);
}

void loop() {
  sensorValue = analogRead(irSensorPin);
  if(sensorValue < threshold) {
    Serial.println("Obstacle detected!");
  } else {
    Serial.println("No obstacle.");
  }
  delay(1000);
}
Sample Program

This program reads the IR sensor value every half second. It prints the sensor value and tells if an obstacle is detected based on the threshold.

Arduino
const int irSensorPin = A0;  // IR sensor connected to analog pin A0
int sensorValue = 0;          // Variable to store sensor reading
int threshold = 300;          // Threshold for obstacle detection

void setup() {
  Serial.begin(9600);        // Start serial communication
  pinMode(irSensorPin, INPUT); // Set sensor pin as input
  Serial.println("Starting IR sensor obstacle detection...");
}

void loop() {
  sensorValue = analogRead(irSensorPin);  // Read sensor value
  Serial.print("Sensor value: ");
  Serial.println(sensorValue);

  if(sensorValue < threshold) {            // Check if obstacle is close
    Serial.println("Obstacle detected!");
  } else {
    Serial.println("No obstacle.");
  }
  delay(500);  // Wait half a second before next reading
}
OutputSuccess
Important Notes

Time complexity: Reading sensor and checking is very fast, almost constant time.

Space complexity: Uses only a few variables, very low memory.

Common mistake: Not setting the correct threshold can cause false detection or no detection.

Use this operation when you want simple obstacle detection. For more accuracy, combine with other sensors.

Summary

IR sensors detect obstacles by measuring reflected infrared light.

Set a threshold value to decide when an obstacle is close.

Use serial print to see sensor values and debug your detection.

Practice

(1/5)
1. What does an IR sensor detect in an obstacle detection system?
easy
A. Visible light intensity
B. Magnetic fields around objects
C. Sound waves bouncing off objects
D. Reflected infrared light from nearby objects

Solution

  1. Step 1: Understand IR sensor function

    IR sensors emit infrared light and detect the light reflected back from objects.
  2. Step 2: Identify what is detected

    The sensor measures reflected infrared light, not visible light, sound, or magnetic fields.
  3. Final Answer:

    Reflected infrared light from nearby objects -> Option D
  4. Quick Check:

    IR sensor = reflected infrared light [OK]
Hint: IR sensors detect reflected infrared light, not visible or sound [OK]
Common Mistakes:
  • Confusing IR sensor with light or sound sensors
  • Thinking it detects visible light
  • Assuming it detects magnetic fields
2. Which Arduino code snippet correctly reads an analog IR sensor value from pin A0?
easy
A. int sensorValue = analogRead(A0);
B. int sensorValue = digitalRead(A0);
C. int sensorValue = analogWrite(A0);
D. int sensorValue = digitalWrite(A0);

Solution

  1. Step 1: Identify correct function for analog reading

    analogRead(pin) reads analog sensor values from specified pin.
  2. Step 2: Check pin and function usage

    Pin A0 is analog input; analogRead(A0) is correct syntax.
  3. Final Answer:

    int sensorValue = analogRead(A0); -> Option A
  4. Quick Check:

    Use analogRead for analog sensors [OK]
Hint: Use analogRead() for analog sensor pins like A0 [OK]
Common Mistakes:
  • Using digitalRead() for analog sensors
  • Using analogWrite() which is for output
  • Using digitalWrite() which is for digital output
3. What will be printed if the IR sensor value is 350 and the threshold is 300 in this code?
int sensorValue = 350;
int threshold = 300;
if(sensorValue > threshold) {
  Serial.println("No obstacle");
} else {
  Serial.println("Obstacle detected");
}
medium
A. Error
B. No obstacle
C. 350
D. Obstacle detected

Solution

  1. Step 1: Compare sensorValue with threshold

    350 is greater than 300, so condition sensorValue > threshold is true.
  2. Step 2: Determine printed output

    Since condition is true, code prints "No obstacle".
  3. Final Answer:

    No obstacle -> Option B
  4. Quick Check:

    350 > 300 = true, prints "No obstacle" [OK]
Hint: Check if sensor value is above threshold for output [OK]
Common Mistakes:
  • Confusing greater than with less than
  • Expecting sensor value to print
  • Thinking else block runs when condition is true
4. Identify the error in this Arduino code for obstacle detection:
int sensorPin = A0;
int threshold = 400;
void setup() {
  Serial.begin(9600);
}
void loop() {
  int sensorValue = digitalRead(sensorPin);
  if(sensorValue < threshold) {
    Serial.println("Obstacle detected");
  }
  delay(100);
}
medium
A. Using digitalRead instead of analogRead for analog sensor
B. Missing Serial.begin in setup()
C. Incorrect delay value
D. Threshold comparison operator is wrong

Solution

  1. Step 1: Check sensor reading function

    IR sensor outputs analog values, so analogRead() must be used, not digitalRead().
  2. Step 2: Verify other code parts

    Serial.begin is present, delay is reasonable, comparison operator is correct.
  3. Final Answer:

    Using digitalRead instead of analogRead for analog sensor -> Option A
  4. Quick Check:

    Analog sensor needs analogRead() [OK]
Hint: Use analogRead() for analog sensors, not digitalRead() [OK]
Common Mistakes:
  • Using digitalRead for analog sensor pins
  • Forgetting Serial.begin() (not the case here)
  • Misusing delay() values
5. You want to detect obstacles only when the IR sensor value is between 200 and 400. Which code snippet correctly implements this?
hard
A. if(sensorValue < 200 && sensorValue > 400) { Serial.println("Obstacle detected"); }
B. if(sensorValue >= 200 || sensorValue <= 400) { Serial.println("Obstacle detected"); }
C. if(sensorValue > 200 && sensorValue < 400) { Serial.println("Obstacle detected"); }
D. if(sensorValue == 200 && sensorValue == 400) { Serial.println("Obstacle detected"); }

Solution

  1. Step 1: Understand range condition

    To detect values between 200 and 400, sensorValue must be greater than 200 AND less than 400.
  2. Step 2: Analyze each option

    if(sensorValue < 200 && sensorValue > 400) { Serial.println("Obstacle detected"); }: impossible condition (< 200 && > 400); if(sensorValue >= 200 || sensorValue <= 400) { Serial.println("Obstacle detected"); } uses || which allows all values; if(sensorValue > 200 && sensorValue < 400) { Serial.println("Obstacle detected"); }: > 200 && < 400 correct; if(sensorValue == 200 && sensorValue == 400) { Serial.println("Obstacle detected"); } checks equality to both values simultaneously, impossible.
  3. Final Answer:

    if(sensorValue > 200 && sensorValue < 400) { Serial.println("Obstacle detected"); } -> Option C
  4. Quick Check:

    Use AND (&&) for range checks [OK]
Hint: Use && to check sensor value within a range [OK]
Common Mistakes:
  • Using || instead of && for range
  • Checking impossible conditions
  • Using equality instead of range
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard