<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bespokerobotsociety.org/index.php?action=history&amp;feed=atom&amp;title=Infrared_Line_Detector</id>
	<title>Infrared Line Detector - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bespokerobotsociety.org/index.php?action=history&amp;feed=atom&amp;title=Infrared_Line_Detector"/>
	<link rel="alternate" type="text/html" href="https://wiki.bespokerobotsociety.org/index.php?title=Infrared_Line_Detector&amp;action=history"/>
	<updated>2026-04-25T08:52:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bespokerobotsociety.org/index.php?title=Infrared_Line_Detector&amp;diff=34&amp;oldid=prev</id>
		<title>John: Claude edited based on my notes, prompt, and SimpleBot code repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.bespokerobotsociety.org/index.php?title=Infrared_Line_Detector&amp;diff=34&amp;oldid=prev"/>
		<updated>2025-10-11T16:18:40Z</updated>

		<summary type="html">&lt;p&gt;Claude edited based on my notes, prompt, and SimpleBot code repository&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Module&lt;br /&gt;
| name = Infrared Line Detector Module&lt;br /&gt;
| function = Line Following Sensor&lt;br /&gt;
| type = Sensor Module&lt;br /&gt;
| voltage = 3.3V – 5V&lt;br /&gt;
| interface = Digital output (active LOW)&lt;br /&gt;
| cost = $0.50 USD (bulk) / $0.75 (single)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Infrared Line Detector Module&amp;#039;&amp;#039;&amp;#039; (also called &amp;quot;Infrared Obstacle Avoidance Sensor&amp;quot; or &amp;quot;IR Reflectance Sensor&amp;quot;) is a simple digital sensor used for line-following robots. It detects the contrast between light and dark surfaces by measuring reflected infrared light.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
This ubiquitous sensor module consists of an infrared LED and an infrared phototransistor positioned side-by-side. The LED emits IR light, which reflects off the surface below. The phototransistor detects the reflected light, and an onboard comparator (typically LM393) converts the analog signal to a digital output.&lt;br /&gt;
&lt;br /&gt;
The module is designed to detect:&lt;br /&gt;
* Black lines on white surfaces (typical for line-following)&lt;br /&gt;
* White lines on black surfaces (inverted mode)&lt;br /&gt;
* Edges and drop-offs (cliff detection)&lt;br /&gt;
* Proximity to obstacles (though range is limited)&lt;br /&gt;
&lt;br /&gt;
== Key Features ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Simple Digital Output&amp;#039;&amp;#039;&amp;#039;: HIGH or LOW based on detected surface&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Adjustable Sensitivity&amp;#039;&amp;#039;&amp;#039;: Onboard potentiometer to set detection threshold&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Active LOW Output&amp;#039;&amp;#039;&amp;#039;: Output goes LOW when dark surface detected&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Low Cost&amp;#039;&amp;#039;&amp;#039;: Often sold in packs of 20 for $10 USD&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Low Power&amp;#039;&amp;#039;&amp;#039;: Typically &amp;lt;20mA at 5V&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Compact Size&amp;#039;&amp;#039;&amp;#039;: ~30mm × 15mm typical module size&lt;br /&gt;
&lt;br /&gt;
== Module Components ==&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;IR LED&amp;#039;&amp;#039;&amp;#039;: Emits infrared light (typically 940nm wavelength)&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;IR Phototransistor&amp;#039;&amp;#039;&amp;#039;: Detects reflected IR light&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;LM393 Comparator&amp;#039;&amp;#039;&amp;#039;: Converts analog signal to digital&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Potentiometer&amp;#039;&amp;#039;&amp;#039;: Adjusts detection threshold&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Power LED&amp;#039;&amp;#039;&amp;#039;: Indicates module is powered&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Detection LED&amp;#039;&amp;#039;&amp;#039;: Lights when dark surface detected&lt;br /&gt;
&lt;br /&gt;
== Pin Configuration ==&lt;br /&gt;
&lt;br /&gt;
Typical 3-pin module:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VCC&amp;#039;&amp;#039;&amp;#039;: 3.3V to 5V power supply&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GND&amp;#039;&amp;#039;&amp;#039;: Ground&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OUT&amp;#039;&amp;#039;&amp;#039; (or &amp;#039;&amp;#039;&amp;#039;DO&amp;#039;&amp;#039;&amp;#039;): Digital output (active LOW)&lt;br /&gt;
&lt;br /&gt;
Some modules also provide:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AO&amp;#039;&amp;#039;&amp;#039;: Analog output (raw sensor voltage, if available)&lt;br /&gt;
&lt;br /&gt;
== How It Works ==&lt;br /&gt;
&lt;br /&gt;
# The IR LED constantly emits infrared light downward&lt;br /&gt;
# Light reflects off the surface below&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Light surfaces&amp;#039;&amp;#039;&amp;#039; (white/reflective) reflect more IR light → phototransistor conducts more → output HIGH&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Dark surfaces&amp;#039;&amp;#039;&amp;#039; (black/absorptive) reflect less IR light → phototransistor conducts less → output LOW&lt;br /&gt;
# The potentiometer adjusts the threshold between &amp;quot;light&amp;quot; and &amp;quot;dark&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Adjustment Procedure ==&lt;br /&gt;
&lt;br /&gt;
# Power the module&lt;br /&gt;
# Place it over a white surface&lt;br /&gt;
# Adjust the potentiometer until the detection LED turns OFF&lt;br /&gt;
# Move it over a black line&lt;br /&gt;
# Verify the detection LED turns ON and output goes LOW&lt;br /&gt;
# Fine-tune potentiometer for consistent detection at desired height&lt;br /&gt;
&lt;br /&gt;
Typical detection height: 3mm to 15mm above the surface.&lt;br /&gt;
&lt;br /&gt;
== Usage in BRS Projects ==&lt;br /&gt;
&lt;br /&gt;
[[SimpleBot]] uses two infrared line detector modules for &amp;#039;&amp;#039;&amp;#039;line following&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mounted on sensor sleds&amp;#039;&amp;#039;&amp;#039;: Adjustable position under the chassis&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Two-sensor configuration&amp;#039;&amp;#039;&amp;#039;: One on each side of the line&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Detection pattern&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
** Both sensors on white → drive straight&lt;br /&gt;
** Left sensor on line → turn right&lt;br /&gt;
** Right sensor on line → turn left&lt;br /&gt;
** Both sensors on line → stop or special behavior&lt;br /&gt;
&lt;br /&gt;
The SimpleBot chassis provides adjustable sensor mounts to fine-tune sensor spacing and height above the ground.&lt;br /&gt;
&lt;br /&gt;
== Wiring Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sensor Module → Microcontroller:&lt;br /&gt;
- VCC → 3.3V or 5V&lt;br /&gt;
- GND → GND&lt;br /&gt;
- OUT → GPIO pin (with internal pull-up enabled)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the output is active LOW, enable the microcontroller&amp;#039;s internal pull-up resistor or add an external 10kΩ pull-up.&lt;br /&gt;
&lt;br /&gt;
== Code Example (MicroPython) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
&lt;br /&gt;
# Configure line sensors (active LOW)&lt;br /&gt;
left_sensor = Pin(10, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
right_sensor = Pin(11, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
&lt;br /&gt;
def read_line_sensors():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Read both line sensors&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    left_on_line = not left_sensor.value()   # Invert because active LOW&lt;br /&gt;
    right_on_line = not right_sensor.value()&lt;br /&gt;
&lt;br /&gt;
    if not left_on_line and not right_on_line:&lt;br /&gt;
        return &amp;quot;STRAIGHT&amp;quot;  # Both on white&lt;br /&gt;
    elif left_on_line and not right_on_line:&lt;br /&gt;
        return &amp;quot;TURN_RIGHT&amp;quot;  # Left sensor on line&lt;br /&gt;
    elif right_on_line and not left_on_line:&lt;br /&gt;
        return &amp;quot;TURN_LEFT&amp;quot;  # Right sensor on line&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;BOTH_ON_LINE&amp;quot;  # Both on line or at intersection&lt;br /&gt;
&lt;br /&gt;
# Main loop&lt;br /&gt;
while True:&lt;br /&gt;
    state = read_line_sensors()&lt;br /&gt;
    print(state)&lt;br /&gt;
    # Add motor control logic here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Detection Range&amp;#039;&amp;#039;&amp;#039;: Only works at close range (3-15mm typically)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ambient Light Sensitivity&amp;#039;&amp;#039;&amp;#039;: May be affected by bright sunlight or other IR sources&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Surface Dependency&amp;#039;&amp;#039;&amp;#039;: Works best on matte surfaces; glossy or textured surfaces can cause issues&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Binary Output&amp;#039;&amp;#039;&amp;#039;: Digital modules don&amp;#039;t provide position information within the line&lt;br /&gt;
&lt;br /&gt;
== Alternatives ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Analog Reflectance Sensors&amp;#039;&amp;#039;&amp;#039;: Provide continuous position data (e.g., Pololu QTR sensor arrays)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Color Sensors&amp;#039;&amp;#039;&amp;#039;: Detect colored lines or surfaces&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Camera-Based Vision&amp;#039;&amp;#039;&amp;#039;: For complex line patterns or multi-colored lines&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Custom Sensor Array&amp;#039;&amp;#039;&amp;#039;: Multiple sensors for better line tracking&lt;br /&gt;
&lt;br /&gt;
== Multi-Sensor Arrays ==&lt;br /&gt;
&lt;br /&gt;
For more sophisticated line following, use multiple sensors (3-8 typical) arranged in a row:&lt;br /&gt;
* Better line tracking through curves&lt;br /&gt;
* Position calculation within the line&lt;br /&gt;
* Intersection and branching detection&lt;br /&gt;
* Lost line recovery&lt;br /&gt;
&lt;br /&gt;
== Common Issues ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No Detection&amp;#039;&amp;#039;&amp;#039;: Sensor too far from surface or potentiometer needs adjustment&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Always Detecting&amp;#039;&amp;#039;&amp;#039;: Sensor too close or potentiometer too sensitive&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Inconsistent Detection&amp;#039;&amp;#039;&amp;#039;: Ambient IR interference or uneven surface&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Slow Response&amp;#039;&amp;#039;&amp;#039;: Normal for these modules; they&amp;#039;re not designed for high-speed line following&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[SimpleBot]] - Uses two IR line detectors for line following&lt;br /&gt;
* [[Line Following]] - Algorithms and techniques for line-following robots&lt;br /&gt;
* [[Optical Odometry]] - Different use of optical sensors for distance measurement&lt;br /&gt;
&lt;br /&gt;
[[Category:Component]]&lt;br /&gt;
[[Category:Sensor]]&lt;br /&gt;
[[Category:Line Following]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
</feed>