Created by: Md Khairul Islam
Hobart and William Smith Colleges
Double major in Robotics and Computer Science
- Overview
- System Architecture
- Hardware Setup
- Installation
- Basic Usage
- Advanced Features
- Measurement Modes
- Signal Processing
- Troubleshooting
The SR04Advanced library transforms the basic HC-SR04 ultrasonic sensor into a highly accurate and reliable distance measurement system. By implementing sophisticated filtering algorithms and intelligent processing techniques, this library significantly improves measurement accuracy and stability compared to standard implementations.
Traditional HC-SR04 readings often suffer from:
- Noisy measurements
- Inconsistent readings
- Temperature-related inaccuracies
- Limited functionality
- Spike errors
- Poor performance in challenging environments
SR04Advanced solves these issues through:
- Advanced filtering techniques
- Temperature compensation
- Multiple measurement modes
- Real-time quality assessment
- Intelligent error detection
- Adaptive processing
Our multi-layer filtering approach combines three powerful techniques:
- Spike Removal: Eliminates sudden, unrealistic changes in readings
- Noise Reduction: Smooths out measurement variations
- Smart Tracking: Predicts and validates measurements for optimal accuracy
The library automatically adjusts its behavior based on:
- Environmental conditions
- Required accuracy
- Speed requirements
- Signal quality
Built-in temperature compensation ensures accurate measurements across different conditions:
- Automatically adjusts calculations based on temperature
- Compensates for speed of sound variations
- Provides consistent readings in varying environments
Real-time quality assessment helps you understand your data:
- Signal quality percentage
- Confidence levels
- Noise measurements
- Statistical analysis
This library is ideal for:
- Robotics: Accurate obstacle detection and navigation
- Automation: Precise distance measurements for control systems
- Monitoring: Reliable level sensing and object detection
- Educational Projects: Advanced sensor processing demonstrations
- Industrial Applications: Robust distance measurement in varying conditions
Compared to basic HC-SR04 implementations, SR04Advanced offers:
- Up to 95% reduction in measurement noise
- 10x more stable readings
- Temperature-compensated accuracy
- Automatic error detection and correction
- Intelligent measurement optimization
The library operates with:
- Measurement range: 2cm to 400cm
- Resolution: Up to 0.3cm
- Update rate: Up to 20Hz
- Temperature compensation: -20°C to 50°C
- Multiple operation modes for different needs
- Real-time data visualization options
Despite its advanced features, SR04Advanced remains easy to use:
- Simple initialization
- Automatic calibration
- Flexible configuration options
- Comprehensive debugging tools
- Clear error reporting
- Intuitive API
sequenceDiagram
participant S as Sensor
participant O as Object
Note over S: Send 40kHz pulse
S ->> O: Ultrasonic waves
O -->> S: Echo returns
Note over S: Calculate distance
rect rgb(240, 248, 255)
Note right of S: Distance = (Time × Speed of Sound) / 2
end
- Range: 2cm to 400cm
- Resolution: 0.3cm
- Beam Angle: 15 degrees
- Update Rate: Up to 20Hz (MODE_FAST)
graph TB
subgraph "Complete Measurement Process"
Start[Start Measurement] -->|Initialize| Config
subgraph "Configuration & Setup"
Config[Configure Sensor] -->|Set Pins| Pins[Pin Setup]
Config -->|Set Mode| Mode[Mode Selection]
Config -->|Set Temp| Temp[Temperature Setup]
end
subgraph "Measurement Cycle"
Trigger[Send Trigger Pulse]
Wait[Wait for Echo]
Receive[Receive Echo]
Calculate[Calculate Distance]
Trigger --> Wait
Wait --> Receive
Receive --> Calculate
end
subgraph "Processing Pipeline"
Raw[Raw Data] -->|Filter| Filtered[Filtered Data]
Filtered -->|Validate| Valid[Validation]
Valid -->|Quality Check| Quality[Quality Assessment]
end
Config --> Trigger
Calculate --> Raw
Quality -->|Good| Output[Final Output]
Quality -->|Bad| Retry[Retry Measurement]
Retry --> Trigger
end
graph LR
subgraph Arduino ["Arduino Board"]
A1[5V]
A2[GND]
A3[Pin 9 - TRIG]
A4[Pin 10 - ECHO]
end
subgraph HC-SR04 ["Ultrasonic Sensor"]
S1[VCC]
S2[GND]
S3[TRIG]
S4[ECHO]
end
A1 === S1
A2 === S2
A3 === S3
A4 === S4
style Arduino fill:#4CAF50,stroke:#fff
style HC-SR04 fill:#2196F3,stroke:#fff
flowchart TB
subgraph "Smart Filtering System"
direction TB
Input[Raw Sensor Data] --> PreProcess
subgraph "Pre-Processing"
PreProcess[Initial Processing]
Validate[Range Validation]
TimeCheck[Timing Check]
PreProcess --> Validate
Validate --> TimeCheck
end
subgraph "Filtering Layers"
direction LR
L1[Layer 1: Spike Removal]
L2[Layer 2: Noise Reduction]
L3[Layer 3: Tracking]
TimeCheck --> L1
L1 --> L2
L2 --> L3
end
subgraph "Post-Processing"
Quality[Quality Analysis]
Confidence[Confidence Score]
History[Historical Analysis]
L3 --> Quality
Quality --> Confidence
Confidence --> History
end
History --> Output[Final Output]
end
stateDiagram-v2
[*] --> Normal
state "Normal Mode" as Normal {
[*] --> Single
Single --> Filter
Filter --> Output
}
state "Precise Mode" as Precise {
[*] --> Multiple
Multiple --> Average
Average --> Statistics
Statistics --> QualityCheck
}
state "Fast Mode" as Fast {
[*] --> Quick
Quick --> BasicFilter
BasicFilter --> RapidOutput
}
state "Adaptive Mode" as Adaptive {
[*] --> Analysis
Analysis --> DynamicSampling
DynamicSampling --> SmartFilter
}
Normal --> Precise : Higher accuracy needed
Precise --> Fast : Speed priority
Fast --> Adaptive : Varying conditions
Adaptive --> Normal : Stable conditions
graph TB
subgraph "Temperature Compensation System"
T[Temperature Input] --> Calc[Speed Calculator]
Calc --> Adjust[Distance Adjustment]
subgraph "Speed of Sound Calculation"
Formula["v = 331.3 + (0.606 × T°C)"]
Factors["Affecting Factors:<br/>- Temperature<br/>- Humidity<br/>- Atmospheric Pressure"]
Formula --> Factors
end
subgraph "Compensation Effects"
E1["At 20°C:<br/>343.4 m/s"]
E2["At 30°C:<br/>349.0 m/s"]
E3["Difference:<br/>1.6% per 10°C"]
end
end
graph TB
subgraph "Filter Effects Visualization"
Raw[Raw Signal] --> Effects
subgraph "Effects"
E1[Spikes Removed]
E2[Noise Reduced]
E3[Smooth Tracking]
E4[Adaptive Response]
Effects --> E1 & E2 & E3 & E4
end
subgraph "Results"
R1[Stable Readings]
R2[Accurate Distance]
R3[Reliable Data]
E1 & E2 & E3 & E4 --> R1
R1 --> R2
R2 --> R3
end
end
graph TD
Start[Issue Detected] --> Type{Issue Type}
Type -->|Inaccurate Readings| Power[Check Power Supply]
Type -->|Inconsistent Data| Signal[Check Signal Quality]
Type -->|Slow Response| Mode[Check Mode Settings]
Type -->|High Noise| Environment[Check Environment]
Power --> Wiring[Verify Wiring]
Signal --> Filtering[Adjust Filtering]
Mode --> Settings[Optimize Settings]
Environment --> Interference[Reduce Interference]
Wiring --> Solution[Problem Solved]
Filtering --> Solution
Settings --> Solution
Interference --> Solution
#include <SR04Advanced.h>
const int TRIGGER_PIN = 9;
const int ECHO_PIN = 10;
SR04Advanced sonar(TRIGGER_PIN, ECHO_PIN);
void setup() {
Serial.begin(9600);
sonar.begin(); // Initializes with auto-calibration
}
void loop() {
float distance = sonar.getSmartDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(100);
}
#include <SR04Advanced.h>
SR04Advanced sonar(9, 10);
void setup() {
Serial.begin(9600);
// Advanced configuration
sonar.setDebugLevel(DEBUG_ADVANCED);
sonar.setMeasurementMode(SR04Advanced::MODE_PRECISE);
sonar.setFilterParams(0.1, 5); // Alpha, window size
sonar.setTemperature(25.0); // Ambient temperature in Celsius
sonar.begin(true); // true = perform auto-calibration
sonar.enablePlotter(true); // Enable data visualization
}
void loop() {
float distance = sonar.getSmartDistance();
uint8_t quality = sonar.getSignalQuality();
uint8_t confidence = sonar.getConfidence();
Serial.print("Distance: ");
Serial.print(distance);
Serial.print(" cm | Quality: ");
Serial.print(quality);
Serial.print("% | Confidence: ");
Serial.print(confidence);
Serial.println("%");
delay(100);
}
This project is licensed under the MIT License. See the LICENSE file for details.
For issues, questions, or contributions:
- Open an issue on GitHub
- Contact: [email protected]
Made with 💡 by Md Khairul Islam